xref: /potrace-1.14/ltmain.sh (revision b3fce824)
1*b3fce824SCristian Pallarés#! /bin/sh
2*b3fce824SCristian Pallarés## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
3*b3fce824SCristian Pallarés##               by inline-source v2014-01-03.01
4189777a2SCristian Pallares
5*b3fce824SCristian Pallarés# libtool (GNU libtool) 2.4.6
6*b3fce824SCristian Pallarés# Provide generalized library-building support services.
7189777a2SCristian Pallares# Written by Gordon Matzigkeit <[email protected]>, 1996
8189777a2SCristian Pallares
9*b3fce824SCristian Pallarés# Copyright (C) 1996-2015 Free Software Foundation, Inc.
10189777a2SCristian Pallares# This is free software; see the source for copying conditions.  There is NO
11189777a2SCristian Pallares# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12189777a2SCristian Pallares
13189777a2SCristian Pallares# GNU Libtool is free software; you can redistribute it and/or modify
14189777a2SCristian Pallares# it under the terms of the GNU General Public License as published by
15189777a2SCristian Pallares# the Free Software Foundation; either version 2 of the License, or
16189777a2SCristian Pallares# (at your option) any later version.
17189777a2SCristian Pallares#
18189777a2SCristian Pallares# As a special exception to the GNU General Public License,
19189777a2SCristian Pallares# if you distribute this file as part of a program or library that
20189777a2SCristian Pallares# is built using GNU Libtool, you may include this file under the
21189777a2SCristian Pallares# same distribution terms that you use for the rest of that program.
22189777a2SCristian Pallares#
23189777a2SCristian Pallares# GNU Libtool is distributed in the hope that it will be useful, but
24189777a2SCristian Pallares# WITHOUT ANY WARRANTY; without even the implied warranty of
25189777a2SCristian Pallares# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26189777a2SCristian Pallares# General Public License for more details.
27189777a2SCristian Pallares#
28189777a2SCristian Pallares# You should have received a copy of the GNU General Public License
29*b3fce824SCristian Pallarés# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30189777a2SCristian Pallares
31189777a2SCristian Pallares
32189777a2SCristian PallaresPROGRAM=libtool
33189777a2SCristian PallaresPACKAGE=libtool
34*b3fce824SCristian PallarésVERSION="2.4.6 Debian-2.4.6-1"
35*b3fce824SCristian Pallaréspackage_revision=2.4.6
36189777a2SCristian Pallares
37*b3fce824SCristian Pallarés
38*b3fce824SCristian Pallarés## ------ ##
39*b3fce824SCristian Pallarés## Usage. ##
40*b3fce824SCristian Pallarés## ------ ##
41*b3fce824SCristian Pallarés
42*b3fce824SCristian Pallarés# Run './libtool --help' for help with using this script from the
43*b3fce824SCristian Pallarés# command line.
44*b3fce824SCristian Pallarés
45*b3fce824SCristian Pallarés
46*b3fce824SCristian Pallarés## ------------------------------- ##
47*b3fce824SCristian Pallarés## User overridable command paths. ##
48*b3fce824SCristian Pallarés## ------------------------------- ##
49*b3fce824SCristian Pallarés
50*b3fce824SCristian Pallarés# After configure completes, it has a better idea of some of the
51*b3fce824SCristian Pallarés# shell tools we need than the defaults used by the functions shared
52*b3fce824SCristian Pallarés# with bootstrap, so set those here where they can still be over-
53*b3fce824SCristian Pallarés# ridden by the user, but otherwise take precedence.
54*b3fce824SCristian Pallarés
55*b3fce824SCristian Pallarés: ${AUTOCONF="autoconf"}
56*b3fce824SCristian Pallarés: ${AUTOMAKE="automake"}
57*b3fce824SCristian Pallarés
58*b3fce824SCristian Pallarés
59*b3fce824SCristian Pallarés## -------------------------- ##
60*b3fce824SCristian Pallarés## Source external libraries. ##
61*b3fce824SCristian Pallarés## -------------------------- ##
62*b3fce824SCristian Pallarés
63*b3fce824SCristian Pallarés# Much of our low-level functionality needs to be sourced from external
64*b3fce824SCristian Pallarés# libraries, which are installed to $pkgauxdir.
65*b3fce824SCristian Pallarés
66*b3fce824SCristian Pallarés# Set a version string for this script.
67*b3fce824SCristian Pallarésscriptversion=2015-01-20.17; # UTC
68*b3fce824SCristian Pallarés
69*b3fce824SCristian Pallarés# General shell script boiler plate, and helper functions.
70*b3fce824SCristian Pallarés# Written by Gary V. Vaughan, 2004
71*b3fce824SCristian Pallarés
72*b3fce824SCristian Pallarés# Copyright (C) 2004-2015 Free Software Foundation, Inc.
73*b3fce824SCristian Pallarés# This is free software; see the source for copying conditions.  There is NO
74*b3fce824SCristian Pallarés# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
75*b3fce824SCristian Pallarés
76*b3fce824SCristian Pallarés# This program is free software; you can redistribute it and/or modify
77*b3fce824SCristian Pallarés# it under the terms of the GNU General Public License as published by
78*b3fce824SCristian Pallarés# the Free Software Foundation; either version 3 of the License, or
79*b3fce824SCristian Pallarés# (at your option) any later version.
80*b3fce824SCristian Pallarés
81*b3fce824SCristian Pallarés# As a special exception to the GNU General Public License, if you distribute
82*b3fce824SCristian Pallarés# this file as part of a program or library that is built using GNU Libtool,
83*b3fce824SCristian Pallarés# you may include this file under the same distribution terms that you use
84*b3fce824SCristian Pallarés# for the rest of that program.
85*b3fce824SCristian Pallarés
86*b3fce824SCristian Pallarés# This program is distributed in the hope that it will be useful,
87*b3fce824SCristian Pallarés# but WITHOUT ANY WARRANTY; without even the implied warranty of
88*b3fce824SCristian Pallarés# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
89*b3fce824SCristian Pallarés# General Public License for more details.
90*b3fce824SCristian Pallarés
91*b3fce824SCristian Pallarés# You should have received a copy of the GNU General Public License
92*b3fce824SCristian Pallarés# along with this program. If not, see <http://www.gnu.org/licenses/>.
93*b3fce824SCristian Pallarés
94*b3fce824SCristian Pallarés# Please report bugs or propose patches to [email protected].
95*b3fce824SCristian Pallarés
96*b3fce824SCristian Pallarés
97*b3fce824SCristian Pallarés## ------ ##
98*b3fce824SCristian Pallarés## Usage. ##
99*b3fce824SCristian Pallarés## ------ ##
100*b3fce824SCristian Pallarés
101*b3fce824SCristian Pallarés# Evaluate this file near the top of your script to gain access to
102*b3fce824SCristian Pallarés# the functions and variables defined here:
103*b3fce824SCristian Pallarés#
104*b3fce824SCristian Pallarés#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
105*b3fce824SCristian Pallarés#
106*b3fce824SCristian Pallarés# If you need to override any of the default environment variable
107*b3fce824SCristian Pallarés# settings, do that before evaluating this file.
108*b3fce824SCristian Pallarés
109*b3fce824SCristian Pallarés
110*b3fce824SCristian Pallarés## -------------------- ##
111*b3fce824SCristian Pallarés## Shell normalisation. ##
112*b3fce824SCristian Pallarés## -------------------- ##
113*b3fce824SCristian Pallarés
114*b3fce824SCristian Pallarés# Some shells need a little help to be as Bourne compatible as possible.
115*b3fce824SCristian Pallarés# Before doing anything else, make sure all that help has been provided!
116*b3fce824SCristian Pallarés
117*b3fce824SCristian PallarésDUALCASE=1; export DUALCASE # for MKS sh
118*b3fce824SCristian Pallarésif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
119189777a2SCristian Pallares  emulate sh
120189777a2SCristian Pallares  NULLCMD=:
121*b3fce824SCristian Pallarés  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
122189777a2SCristian Pallares  # is contrary to our usage.  Disable this feature.
123189777a2SCristian Pallares  alias -g '${1+"$@"}'='"$@"'
124189777a2SCristian Pallares  setopt NO_GLOB_SUBST
125189777a2SCristian Pallareselse
126189777a2SCristian Pallares  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
127189777a2SCristian Pallaresfi
128189777a2SCristian Pallares
129*b3fce824SCristian Pallarés# NLS nuisances: We save the old values in case they are required later.
130*b3fce824SCristian Pallarés_G_user_locale=
131*b3fce824SCristian Pallarés_G_safe_locale=
132*b3fce824SCristian Pallarésfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
133189777a2SCristian Pallaresdo
134*b3fce824SCristian Pallarés  eval "if test set = \"\${$_G_var+set}\"; then
135*b3fce824SCristian Pallarés          save_$_G_var=\$$_G_var
136*b3fce824SCristian Pallarés          $_G_var=C
137*b3fce824SCristian Pallarés	  export $_G_var
138*b3fce824SCristian Pallarés	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
139*b3fce824SCristian Pallarés	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
140189777a2SCristian Pallares	fi"
141189777a2SCristian Pallaresdone
142189777a2SCristian Pallares
143*b3fce824SCristian Pallarés# CDPATH.
144*b3fce824SCristian Pallarés(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
145189777a2SCristian Pallares
146*b3fce824SCristian Pallarés# Make sure IFS has a sensible default
147*b3fce824SCristian Pallaréssp=' '
148*b3fce824SCristian Pallarésnl='
149*b3fce824SCristian Pallarés'
150*b3fce824SCristian PallarésIFS="$sp	$nl"
151*b3fce824SCristian Pallarés
152*b3fce824SCristian Pallarés# There are apparently some retarded systems that use ';' as a PATH separator!
153*b3fce824SCristian Pallarésif test "${PATH_SEPARATOR+set}" != set; then
154*b3fce824SCristian Pallarés  PATH_SEPARATOR=:
155*b3fce824SCristian Pallarés  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
156*b3fce824SCristian Pallarés    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
157*b3fce824SCristian Pallarés      PATH_SEPARATOR=';'
158*b3fce824SCristian Pallarés  }
159*b3fce824SCristian Pallarésfi
160*b3fce824SCristian Pallarés
161*b3fce824SCristian Pallarés
162*b3fce824SCristian Pallarés
163*b3fce824SCristian Pallarés## ------------------------- ##
164*b3fce824SCristian Pallarés## Locate command utilities. ##
165*b3fce824SCristian Pallarés## ------------------------- ##
166*b3fce824SCristian Pallarés
167*b3fce824SCristian Pallarés
168*b3fce824SCristian Pallarés# func_executable_p FILE
169*b3fce824SCristian Pallarés# ----------------------
170*b3fce824SCristian Pallarés# Check that FILE is an executable regular file.
171*b3fce824SCristian Pallarésfunc_executable_p ()
172*b3fce824SCristian Pallarés{
173*b3fce824SCristian Pallarés    test -f "$1" && test -x "$1"
174*b3fce824SCristian Pallarés}
175*b3fce824SCristian Pallarés
176*b3fce824SCristian Pallarés
177*b3fce824SCristian Pallarés# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
178*b3fce824SCristian Pallarés# --------------------------------------------
179*b3fce824SCristian Pallarés# Search for either a program that responds to --version with output
180*b3fce824SCristian Pallarés# containing "GNU", or else returned by CHECK_FUNC otherwise, by
181*b3fce824SCristian Pallarés# trying all the directories in PATH with each of the elements of
182*b3fce824SCristian Pallarés# PROGS_LIST.
183*b3fce824SCristian Pallarés#
184*b3fce824SCristian Pallarés# CHECK_FUNC should accept the path to a candidate program, and
185*b3fce824SCristian Pallarés# set $func_check_prog_result if it truncates its output less than
186*b3fce824SCristian Pallarés# $_G_path_prog_max characters.
187*b3fce824SCristian Pallarésfunc_path_progs ()
188*b3fce824SCristian Pallarés{
189*b3fce824SCristian Pallarés    _G_progs_list=$1
190*b3fce824SCristian Pallarés    _G_check_func=$2
191*b3fce824SCristian Pallarés    _G_PATH=${3-"$PATH"}
192*b3fce824SCristian Pallarés
193*b3fce824SCristian Pallarés    _G_path_prog_max=0
194*b3fce824SCristian Pallarés    _G_path_prog_found=false
195*b3fce824SCristian Pallarés    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
196*b3fce824SCristian Pallarés    for _G_dir in $_G_PATH; do
197*b3fce824SCristian Pallarés      IFS=$_G_save_IFS
198*b3fce824SCristian Pallarés      test -z "$_G_dir" && _G_dir=.
199*b3fce824SCristian Pallarés      for _G_prog_name in $_G_progs_list; do
200*b3fce824SCristian Pallarés        for _exeext in '' .EXE; do
201*b3fce824SCristian Pallarés          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
202*b3fce824SCristian Pallarés          func_executable_p "$_G_path_prog" || continue
203*b3fce824SCristian Pallarés          case `"$_G_path_prog" --version 2>&1` in
204*b3fce824SCristian Pallarés            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
205*b3fce824SCristian Pallarés            *)     $_G_check_func $_G_path_prog
206*b3fce824SCristian Pallarés		   func_path_progs_result=$func_check_prog_result
207*b3fce824SCristian Pallarés		   ;;
208*b3fce824SCristian Pallarés          esac
209*b3fce824SCristian Pallarés          $_G_path_prog_found && break 3
210*b3fce824SCristian Pallarés        done
211*b3fce824SCristian Pallarés      done
212*b3fce824SCristian Pallarés    done
213*b3fce824SCristian Pallarés    IFS=$_G_save_IFS
214*b3fce824SCristian Pallarés    test -z "$func_path_progs_result" && {
215*b3fce824SCristian Pallarés      echo "no acceptable sed could be found in \$PATH" >&2
216*b3fce824SCristian Pallarés      exit 1
217*b3fce824SCristian Pallarés    }
218*b3fce824SCristian Pallarés}
219*b3fce824SCristian Pallarés
220*b3fce824SCristian Pallarés
221*b3fce824SCristian Pallarés# We want to be able to use the functions in this file before configure
222*b3fce824SCristian Pallarés# has figured out where the best binaries are kept, which means we have
223*b3fce824SCristian Pallarés# to search for them ourselves - except when the results are already set
224*b3fce824SCristian Pallarés# where we skip the searches.
225*b3fce824SCristian Pallarés
226*b3fce824SCristian Pallarés# Unless the user overrides by setting SED, search the path for either GNU
227*b3fce824SCristian Pallarés# sed, or the sed that truncates its output the least.
228*b3fce824SCristian Pallaréstest -z "$SED" && {
229*b3fce824SCristian Pallarés  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
230*b3fce824SCristian Pallarés  for _G_i in 1 2 3 4 5 6 7; do
231*b3fce824SCristian Pallarés    _G_sed_script=$_G_sed_script$nl$_G_sed_script
232*b3fce824SCristian Pallarés  done
233*b3fce824SCristian Pallarés  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
234*b3fce824SCristian Pallarés  _G_sed_script=
235*b3fce824SCristian Pallarés
236*b3fce824SCristian Pallarés  func_check_prog_sed ()
237*b3fce824SCristian Pallarés  {
238*b3fce824SCristian Pallarés    _G_path_prog=$1
239*b3fce824SCristian Pallarés
240*b3fce824SCristian Pallarés    _G_count=0
241*b3fce824SCristian Pallarés    printf 0123456789 >conftest.in
242*b3fce824SCristian Pallarés    while :
243*b3fce824SCristian Pallarés    do
244*b3fce824SCristian Pallarés      cat conftest.in conftest.in >conftest.tmp
245*b3fce824SCristian Pallarés      mv conftest.tmp conftest.in
246*b3fce824SCristian Pallarés      cp conftest.in conftest.nl
247*b3fce824SCristian Pallarés      echo '' >> conftest.nl
248*b3fce824SCristian Pallarés      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
249*b3fce824SCristian Pallarés      diff conftest.out conftest.nl >/dev/null 2>&1 || break
250*b3fce824SCristian Pallarés      _G_count=`expr $_G_count + 1`
251*b3fce824SCristian Pallarés      if test "$_G_count" -gt "$_G_path_prog_max"; then
252*b3fce824SCristian Pallarés        # Best one so far, save it but keep looking for a better one
253*b3fce824SCristian Pallarés        func_check_prog_result=$_G_path_prog
254*b3fce824SCristian Pallarés        _G_path_prog_max=$_G_count
255*b3fce824SCristian Pallarés      fi
256*b3fce824SCristian Pallarés      # 10*(2^10) chars as input seems more than enough
257*b3fce824SCristian Pallarés      test 10 -lt "$_G_count" && break
258*b3fce824SCristian Pallarés    done
259*b3fce824SCristian Pallarés    rm -f conftest.in conftest.tmp conftest.nl conftest.out
260*b3fce824SCristian Pallarés  }
261*b3fce824SCristian Pallarés
262*b3fce824SCristian Pallarés  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
263*b3fce824SCristian Pallarés  rm -f conftest.sed
264*b3fce824SCristian Pallarés  SED=$func_path_progs_result
265*b3fce824SCristian Pallarés}
266*b3fce824SCristian Pallarés
267*b3fce824SCristian Pallarés
268*b3fce824SCristian Pallarés# Unless the user overrides by setting GREP, search the path for either GNU
269*b3fce824SCristian Pallarés# grep, or the grep that truncates its output the least.
270*b3fce824SCristian Pallaréstest -z "$GREP" && {
271*b3fce824SCristian Pallarés  func_check_prog_grep ()
272*b3fce824SCristian Pallarés  {
273*b3fce824SCristian Pallarés    _G_path_prog=$1
274*b3fce824SCristian Pallarés
275*b3fce824SCristian Pallarés    _G_count=0
276*b3fce824SCristian Pallarés    _G_path_prog_max=0
277*b3fce824SCristian Pallarés    printf 0123456789 >conftest.in
278*b3fce824SCristian Pallarés    while :
279*b3fce824SCristian Pallarés    do
280*b3fce824SCristian Pallarés      cat conftest.in conftest.in >conftest.tmp
281*b3fce824SCristian Pallarés      mv conftest.tmp conftest.in
282*b3fce824SCristian Pallarés      cp conftest.in conftest.nl
283*b3fce824SCristian Pallarés      echo 'GREP' >> conftest.nl
284*b3fce824SCristian Pallarés      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
285*b3fce824SCristian Pallarés      diff conftest.out conftest.nl >/dev/null 2>&1 || break
286*b3fce824SCristian Pallarés      _G_count=`expr $_G_count + 1`
287*b3fce824SCristian Pallarés      if test "$_G_count" -gt "$_G_path_prog_max"; then
288*b3fce824SCristian Pallarés        # Best one so far, save it but keep looking for a better one
289*b3fce824SCristian Pallarés        func_check_prog_result=$_G_path_prog
290*b3fce824SCristian Pallarés        _G_path_prog_max=$_G_count
291*b3fce824SCristian Pallarés      fi
292*b3fce824SCristian Pallarés      # 10*(2^10) chars as input seems more than enough
293*b3fce824SCristian Pallarés      test 10 -lt "$_G_count" && break
294*b3fce824SCristian Pallarés    done
295*b3fce824SCristian Pallarés    rm -f conftest.in conftest.tmp conftest.nl conftest.out
296*b3fce824SCristian Pallarés  }
297*b3fce824SCristian Pallarés
298*b3fce824SCristian Pallarés  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
299*b3fce824SCristian Pallarés  GREP=$func_path_progs_result
300*b3fce824SCristian Pallarés}
301*b3fce824SCristian Pallarés
302*b3fce824SCristian Pallarés
303*b3fce824SCristian Pallarés## ------------------------------- ##
304*b3fce824SCristian Pallarés## User overridable command paths. ##
305*b3fce824SCristian Pallarés## ------------------------------- ##
306*b3fce824SCristian Pallarés
307*b3fce824SCristian Pallarés# All uppercase variable names are used for environment variables.  These
308*b3fce824SCristian Pallarés# variables can be overridden by the user before calling a script that
309*b3fce824SCristian Pallarés# uses them if a suitable command of that name is not already available
310*b3fce824SCristian Pallarés# in the command search PATH.
311*b3fce824SCristian Pallarés
312*b3fce824SCristian Pallarés: ${CP="cp -f"}
313*b3fce824SCristian Pallarés: ${ECHO="printf %s\n"}
314*b3fce824SCristian Pallarés: ${EGREP="$GREP -E"}
315*b3fce824SCristian Pallarés: ${FGREP="$GREP -F"}
316*b3fce824SCristian Pallarés: ${LN_S="ln -s"}
317*b3fce824SCristian Pallarés: ${MAKE="make"}
318*b3fce824SCristian Pallarés: ${MKDIR="mkdir"}
319*b3fce824SCristian Pallarés: ${MV="mv -f"}
320*b3fce824SCristian Pallarés: ${RM="rm -f"}
321*b3fce824SCristian Pallarés: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322*b3fce824SCristian Pallarés
323*b3fce824SCristian Pallarés
324*b3fce824SCristian Pallarés## -------------------- ##
325*b3fce824SCristian Pallarés## Useful sed snippets. ##
326*b3fce824SCristian Pallarés## -------------------- ##
327*b3fce824SCristian Pallarés
328*b3fce824SCristian Pallaréssed_dirname='s|/[^/]*$||'
329*b3fce824SCristian Pallaréssed_basename='s|^.*/||'
330*b3fce824SCristian Pallarés
331*b3fce824SCristian Pallarés# Sed substitution that helps us do robust quoting.  It backslashifies
332*b3fce824SCristian Pallarés# metacharacters that are still active within double-quoted strings.
333*b3fce824SCristian Pallaréssed_quote_subst='s|\([`"$\\]\)|\\\1|g'
334*b3fce824SCristian Pallarés
335*b3fce824SCristian Pallarés# Same as above, but do not quote variable references.
336*b3fce824SCristian Pallaréssed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
337*b3fce824SCristian Pallarés
338*b3fce824SCristian Pallarés# Sed substitution that turns a string into a regex matching for the
339*b3fce824SCristian Pallarés# string literally.
340*b3fce824SCristian Pallaréssed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
341*b3fce824SCristian Pallarés
342*b3fce824SCristian Pallarés# Sed substitution that converts a w32 file name or path
343*b3fce824SCristian Pallarés# that contains forward slashes, into one that contains
344*b3fce824SCristian Pallarés# (escaped) backslashes.  A very naive implementation.
345*b3fce824SCristian Pallaréssed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
346*b3fce824SCristian Pallarés
347*b3fce824SCristian Pallarés# Re-'\' parameter expansions in output of sed_double_quote_subst that
348*b3fce824SCristian Pallarés# were '\'-ed in input to the same.  If an odd number of '\' preceded a
349*b3fce824SCristian Pallarés# '$' in input to sed_double_quote_subst, that '$' was protected from
350*b3fce824SCristian Pallarés# expansion.  Since each input '\' is now two '\'s, look for any number
351*b3fce824SCristian Pallarés# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
352*b3fce824SCristian Pallarés_G_bs='\\'
353*b3fce824SCristian Pallarés_G_bs2='\\\\'
354*b3fce824SCristian Pallarés_G_bs4='\\\\\\\\'
355*b3fce824SCristian Pallarés_G_dollar='\$'
356*b3fce824SCristian Pallaréssed_double_backslash="\
357*b3fce824SCristian Pallarés  s/$_G_bs4/&\\
358*b3fce824SCristian Pallarés/g
359*b3fce824SCristian Pallarés  s/^$_G_bs2$_G_dollar/$_G_bs&/
360*b3fce824SCristian Pallarés  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
361*b3fce824SCristian Pallarés  s/\n//g"
362*b3fce824SCristian Pallarés
363*b3fce824SCristian Pallarés
364*b3fce824SCristian Pallarés## ----------------- ##
365*b3fce824SCristian Pallarés## Global variables. ##
366*b3fce824SCristian Pallarés## ----------------- ##
367*b3fce824SCristian Pallarés
368*b3fce824SCristian Pallarés# Except for the global variables explicitly listed below, the following
369*b3fce824SCristian Pallarés# functions in the '^func_' namespace, and the '^require_' namespace
370*b3fce824SCristian Pallarés# variables initialised in the 'Resource management' section, sourcing
371*b3fce824SCristian Pallarés# this file will not pollute your global namespace with anything
372*b3fce824SCristian Pallarés# else. There's no portable way to scope variables in Bourne shell
373*b3fce824SCristian Pallarés# though, so actually running these functions will sometimes place
374*b3fce824SCristian Pallarés# results into a variable named after the function, and often use
375*b3fce824SCristian Pallarés# temporary variables in the '^_G_' namespace. If you are careful to
376*b3fce824SCristian Pallarés# avoid using those namespaces casually in your sourcing script, things
377*b3fce824SCristian Pallarés# should continue to work as you expect. And, of course, you can freely
378*b3fce824SCristian Pallarés# overwrite any of the functions or variables defined here before
379*b3fce824SCristian Pallarés# calling anything to customize them.
380*b3fce824SCristian Pallarés
381*b3fce824SCristian PallarésEXIT_SUCCESS=0
382*b3fce824SCristian PallarésEXIT_FAILURE=1
383*b3fce824SCristian PallarésEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
384*b3fce824SCristian PallarésEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
385*b3fce824SCristian Pallarés
386*b3fce824SCristian Pallarés# Allow overriding, eg assuming that you follow the convention of
387*b3fce824SCristian Pallarés# putting '$debug_cmd' at the start of all your functions, you can get
388*b3fce824SCristian Pallarés# bash to show function call trace with:
389*b3fce824SCristian Pallarés#
390*b3fce824SCristian Pallarés#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
391*b3fce824SCristian Pallarésdebug_cmd=${debug_cmd-":"}
392*b3fce824SCristian Pallarésexit_cmd=:
393*b3fce824SCristian Pallarés
394*b3fce824SCristian Pallarés# By convention, finish your script with:
395*b3fce824SCristian Pallarés#
396*b3fce824SCristian Pallarés#    exit $exit_status
397*b3fce824SCristian Pallarés#
398*b3fce824SCristian Pallarés# so that you can set exit_status to non-zero if you want to indicate
399*b3fce824SCristian Pallarés# something went wrong during execution without actually bailing out at
400*b3fce824SCristian Pallarés# the point of failure.
401*b3fce824SCristian Pallarésexit_status=$EXIT_SUCCESS
402189777a2SCristian Pallares
403189777a2SCristian Pallares# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
404189777a2SCristian Pallares# is ksh but when the shell is invoked as "sh" and the current value of
405189777a2SCristian Pallares# the _XPG environment variable is not equal to 1 (one), the special
406189777a2SCristian Pallares# positional parameter $0, within a function call, is the name of the
407189777a2SCristian Pallares# function.
408*b3fce824SCristian Pallarésprogpath=$0
409*b3fce824SCristian Pallarés
410*b3fce824SCristian Pallarés# The name of this program.
411*b3fce824SCristian Pallarésprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
412*b3fce824SCristian Pallarés
413*b3fce824SCristian Pallarés# Make sure we have an absolute progpath for reexecution:
414*b3fce824SCristian Pallaréscase $progpath in
415*b3fce824SCristian Pallarés  [\\/]*|[A-Za-z]:\\*) ;;
416*b3fce824SCristian Pallarés  *[\\/]*)
417*b3fce824SCristian Pallarés     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
418*b3fce824SCristian Pallarés     progdir=`cd "$progdir" && pwd`
419*b3fce824SCristian Pallarés     progpath=$progdir/$progname
420*b3fce824SCristian Pallarés     ;;
421*b3fce824SCristian Pallarés  *)
422*b3fce824SCristian Pallarés     _G_IFS=$IFS
423*b3fce824SCristian Pallarés     IFS=${PATH_SEPARATOR-:}
424*b3fce824SCristian Pallarés     for progdir in $PATH; do
425*b3fce824SCristian Pallarés       IFS=$_G_IFS
426*b3fce824SCristian Pallarés       test -x "$progdir/$progname" && break
427*b3fce824SCristian Pallarés     done
428*b3fce824SCristian Pallarés     IFS=$_G_IFS
429*b3fce824SCristian Pallarés     test -n "$progdir" || progdir=`pwd`
430*b3fce824SCristian Pallarés     progpath=$progdir/$progname
431*b3fce824SCristian Pallarés     ;;
432*b3fce824SCristian Pallarésesac
433189777a2SCristian Pallares
434189777a2SCristian Pallares
435*b3fce824SCristian Pallarés## ----------------- ##
436*b3fce824SCristian Pallarés## Standard options. ##
437*b3fce824SCristian Pallarés## ----------------- ##
438189777a2SCristian Pallares
439*b3fce824SCristian Pallarés# The following options affect the operation of the functions defined
440*b3fce824SCristian Pallarés# below, and should be set appropriately depending on run-time para-
441*b3fce824SCristian Pallarés# meters passed on the command line.
442189777a2SCristian Pallares
443*b3fce824SCristian Pallarésopt_dry_run=false
444*b3fce824SCristian Pallarésopt_quiet=false
445*b3fce824SCristian Pallarésopt_verbose=false
446189777a2SCristian Pallares
447*b3fce824SCristian Pallarés# Categories 'all' and 'none' are always available.  Append any others
448*b3fce824SCristian Pallarés# you will pass as the first argument to func_warning from your own
449*b3fce824SCristian Pallarés# code.
450*b3fce824SCristian Pallaréswarning_categories=
451189777a2SCristian Pallares
452*b3fce824SCristian Pallarés# By default, display warnings according to 'opt_warning_types'.  Set
453*b3fce824SCristian Pallarés# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
454*b3fce824SCristian Pallarés# treat the next displayed warning as a fatal error.
455*b3fce824SCristian Pallaréswarning_func=func_warn_and_continue
456189777a2SCristian Pallares
457*b3fce824SCristian Pallarés# Set to 'all' to display all warnings, 'none' to suppress all
458*b3fce824SCristian Pallarés# warnings, or a space delimited list of some subset of
459*b3fce824SCristian Pallarés# 'warning_categories' to display only the listed warnings.
460*b3fce824SCristian Pallarésopt_warning_types=all
461189777a2SCristian Pallares
462*b3fce824SCristian Pallarés
463*b3fce824SCristian Pallarés## -------------------- ##
464*b3fce824SCristian Pallarés## Resource management. ##
465*b3fce824SCristian Pallarés## -------------------- ##
466*b3fce824SCristian Pallarés
467*b3fce824SCristian Pallarés# This section contains definitions for functions that each ensure a
468*b3fce824SCristian Pallarés# particular resource (a file, or a non-empty configuration variable for
469*b3fce824SCristian Pallarés# example) is available, and if appropriate to extract default values
470*b3fce824SCristian Pallarés# from pertinent package files. Call them using their associated
471*b3fce824SCristian Pallarés# 'require_*' variable to ensure that they are executed, at most, once.
472*b3fce824SCristian Pallarés#
473*b3fce824SCristian Pallarés# It's entirely deliberate that calling these functions can set
474*b3fce824SCristian Pallarés# variables that don't obey the namespace limitations obeyed by the rest
475*b3fce824SCristian Pallarés# of this file, in order that that they be as useful as possible to
476*b3fce824SCristian Pallarés# callers.
477*b3fce824SCristian Pallarés
478*b3fce824SCristian Pallarés
479*b3fce824SCristian Pallarés# require_term_colors
480*b3fce824SCristian Pallarés# -------------------
481*b3fce824SCristian Pallarés# Allow display of bold text on terminals that support it.
482*b3fce824SCristian Pallarésrequire_term_colors=func_require_term_colors
483*b3fce824SCristian Pallarésfunc_require_term_colors ()
484*b3fce824SCristian Pallarés{
485*b3fce824SCristian Pallarés    $debug_cmd
486*b3fce824SCristian Pallarés
487*b3fce824SCristian Pallarés    test -t 1 && {
488*b3fce824SCristian Pallarés      # COLORTERM and USE_ANSI_COLORS environment variables take
489*b3fce824SCristian Pallarés      # precedence, because most terminfo databases neglect to describe
490*b3fce824SCristian Pallarés      # whether color sequences are supported.
491*b3fce824SCristian Pallarés      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
492*b3fce824SCristian Pallarés
493*b3fce824SCristian Pallarés      if test 1 = "$USE_ANSI_COLORS"; then
494*b3fce824SCristian Pallarés        # Standard ANSI escape sequences
495*b3fce824SCristian Pallarés        tc_reset=''
496*b3fce824SCristian Pallarés        tc_bold='';   tc_standout=''
497*b3fce824SCristian Pallarés        tc_red='';   tc_green=''
498*b3fce824SCristian Pallarés        tc_blue='';  tc_cyan=''
499*b3fce824SCristian Pallarés      else
500*b3fce824SCristian Pallarés        # Otherwise trust the terminfo database after all.
501*b3fce824SCristian Pallarés        test -n "`tput sgr0 2>/dev/null`" && {
502*b3fce824SCristian Pallarés          tc_reset=`tput sgr0`
503*b3fce824SCristian Pallarés          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
504*b3fce824SCristian Pallarés          tc_standout=$tc_bold
505*b3fce824SCristian Pallarés          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
506*b3fce824SCristian Pallarés          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
507*b3fce824SCristian Pallarés          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
508*b3fce824SCristian Pallarés          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
509*b3fce824SCristian Pallarés          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
510*b3fce824SCristian Pallarés        }
511*b3fce824SCristian Pallarés      fi
512*b3fce824SCristian Pallarés    }
513*b3fce824SCristian Pallarés
514*b3fce824SCristian Pallarés    require_term_colors=:
515*b3fce824SCristian Pallarés}
516*b3fce824SCristian Pallarés
517*b3fce824SCristian Pallarés
518*b3fce824SCristian Pallarés## ----------------- ##
519*b3fce824SCristian Pallarés## Function library. ##
520*b3fce824SCristian Pallarés## ----------------- ##
521*b3fce824SCristian Pallarés
522*b3fce824SCristian Pallarés# This section contains a variety of useful functions to call in your
523*b3fce824SCristian Pallarés# scripts. Take note of the portable wrappers for features provided by
524*b3fce824SCristian Pallarés# some modern shells, which will fall back to slower equivalents on
525*b3fce824SCristian Pallarés# less featureful shells.
526*b3fce824SCristian Pallarés
527*b3fce824SCristian Pallarés
528*b3fce824SCristian Pallarés# func_append VAR VALUE
529*b3fce824SCristian Pallarés# ---------------------
530*b3fce824SCristian Pallarés# Append VALUE onto the existing contents of VAR.
531*b3fce824SCristian Pallarés
532*b3fce824SCristian Pallarés  # We should try to minimise forks, especially on Windows where they are
533*b3fce824SCristian Pallarés  # unreasonably slow, so skip the feature probes when bash or zsh are
534*b3fce824SCristian Pallarés  # being used:
535*b3fce824SCristian Pallarés  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
536*b3fce824SCristian Pallarés    : ${_G_HAVE_ARITH_OP="yes"}
537*b3fce824SCristian Pallarés    : ${_G_HAVE_XSI_OPS="yes"}
538*b3fce824SCristian Pallarés    # The += operator was introduced in bash 3.1
539*b3fce824SCristian Pallarés    case $BASH_VERSION in
540*b3fce824SCristian Pallarés      [12].* | 3.0 | 3.0*) ;;
541*b3fce824SCristian Pallarés      *)
542*b3fce824SCristian Pallarés        : ${_G_HAVE_PLUSEQ_OP="yes"}
543*b3fce824SCristian Pallarés        ;;
544*b3fce824SCristian Pallarés    esac
545*b3fce824SCristian Pallarés  fi
546*b3fce824SCristian Pallarés
547*b3fce824SCristian Pallarés  # _G_HAVE_PLUSEQ_OP
548*b3fce824SCristian Pallarés  # Can be empty, in which case the shell is probed, "yes" if += is
549*b3fce824SCristian Pallarés  # useable or anything else if it does not work.
550*b3fce824SCristian Pallarés  test -z "$_G_HAVE_PLUSEQ_OP" \
551*b3fce824SCristian Pallarés    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
552*b3fce824SCristian Pallarés    && _G_HAVE_PLUSEQ_OP=yes
553*b3fce824SCristian Pallarés
554*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_PLUSEQ_OP"
555*b3fce824SCristian Pallarésthen
556*b3fce824SCristian Pallarés  # This is an XSI compatible shell, allowing a faster implementation...
557*b3fce824SCristian Pallarés  eval 'func_append ()
558*b3fce824SCristian Pallarés  {
559*b3fce824SCristian Pallarés    $debug_cmd
560*b3fce824SCristian Pallarés
561*b3fce824SCristian Pallarés    eval "$1+=\$2"
562*b3fce824SCristian Pallarés  }'
563*b3fce824SCristian Pallaréselse
564*b3fce824SCristian Pallarés  # ...otherwise fall back to using expr, which is often a shell builtin.
565*b3fce824SCristian Pallarés  func_append ()
566*b3fce824SCristian Pallarés  {
567*b3fce824SCristian Pallarés    $debug_cmd
568*b3fce824SCristian Pallarés
569*b3fce824SCristian Pallarés    eval "$1=\$$1\$2"
570*b3fce824SCristian Pallarés  }
571*b3fce824SCristian Pallarésfi
572*b3fce824SCristian Pallarés
573*b3fce824SCristian Pallarés
574*b3fce824SCristian Pallarés# func_append_quoted VAR VALUE
575*b3fce824SCristian Pallarés# ----------------------------
576*b3fce824SCristian Pallarés# Quote VALUE and append to the end of shell variable VAR, separated
577*b3fce824SCristian Pallarés# by a space.
578*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_PLUSEQ_OP"; then
579*b3fce824SCristian Pallarés  eval 'func_append_quoted ()
580*b3fce824SCristian Pallarés  {
581*b3fce824SCristian Pallarés    $debug_cmd
582*b3fce824SCristian Pallarés
583*b3fce824SCristian Pallarés    func_quote_for_eval "$2"
584*b3fce824SCristian Pallarés    eval "$1+=\\ \$func_quote_for_eval_result"
585*b3fce824SCristian Pallarés  }'
586*b3fce824SCristian Pallaréselse
587*b3fce824SCristian Pallarés  func_append_quoted ()
588*b3fce824SCristian Pallarés  {
589*b3fce824SCristian Pallarés    $debug_cmd
590*b3fce824SCristian Pallarés
591*b3fce824SCristian Pallarés    func_quote_for_eval "$2"
592*b3fce824SCristian Pallarés    eval "$1=\$$1\\ \$func_quote_for_eval_result"
593*b3fce824SCristian Pallarés  }
594*b3fce824SCristian Pallarésfi
595*b3fce824SCristian Pallarés
596*b3fce824SCristian Pallarés
597*b3fce824SCristian Pallarés# func_append_uniq VAR VALUE
598*b3fce824SCristian Pallarés# --------------------------
599*b3fce824SCristian Pallarés# Append unique VALUE onto the existing contents of VAR, assuming
600*b3fce824SCristian Pallarés# entries are delimited by the first character of VALUE.  For example:
601*b3fce824SCristian Pallarés#
602*b3fce824SCristian Pallarés#   func_append_uniq options " --another-option option-argument"
603*b3fce824SCristian Pallarés#
604*b3fce824SCristian Pallarés# will only append to $options if " --another-option option-argument "
605*b3fce824SCristian Pallarés# is not already present somewhere in $options already (note spaces at
606*b3fce824SCristian Pallarés# each end implied by leading space in second argument).
607*b3fce824SCristian Pallarésfunc_append_uniq ()
608*b3fce824SCristian Pallarés{
609*b3fce824SCristian Pallarés    $debug_cmd
610*b3fce824SCristian Pallarés
611*b3fce824SCristian Pallarés    eval _G_current_value='`$ECHO $'$1'`'
612*b3fce824SCristian Pallarés    _G_delim=`expr "$2" : '\(.\)'`
613*b3fce824SCristian Pallarés
614*b3fce824SCristian Pallarés    case $_G_delim$_G_current_value$_G_delim in
615*b3fce824SCristian Pallarés      *"$2$_G_delim"*) ;;
616*b3fce824SCristian Pallarés      *) func_append "$@" ;;
617*b3fce824SCristian Pallarés    esac
618*b3fce824SCristian Pallarés}
619*b3fce824SCristian Pallarés
620*b3fce824SCristian Pallarés
621*b3fce824SCristian Pallarés# func_arith TERM...
622*b3fce824SCristian Pallarés# ------------------
623*b3fce824SCristian Pallarés# Set func_arith_result to the result of evaluating TERMs.
624*b3fce824SCristian Pallarés  test -z "$_G_HAVE_ARITH_OP" \
625*b3fce824SCristian Pallarés    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
626*b3fce824SCristian Pallarés    && _G_HAVE_ARITH_OP=yes
627*b3fce824SCristian Pallarés
628*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_ARITH_OP"; then
629*b3fce824SCristian Pallarés  eval 'func_arith ()
630*b3fce824SCristian Pallarés  {
631*b3fce824SCristian Pallarés    $debug_cmd
632*b3fce824SCristian Pallarés
633*b3fce824SCristian Pallarés    func_arith_result=$(( $* ))
634*b3fce824SCristian Pallarés  }'
635*b3fce824SCristian Pallaréselse
636*b3fce824SCristian Pallarés  func_arith ()
637*b3fce824SCristian Pallarés  {
638*b3fce824SCristian Pallarés    $debug_cmd
639*b3fce824SCristian Pallarés
640*b3fce824SCristian Pallarés    func_arith_result=`expr "$@"`
641*b3fce824SCristian Pallarés  }
642*b3fce824SCristian Pallarésfi
643*b3fce824SCristian Pallarés
644*b3fce824SCristian Pallarés
645*b3fce824SCristian Pallarés# func_basename FILE
646*b3fce824SCristian Pallarés# ------------------
647*b3fce824SCristian Pallarés# Set func_basename_result to FILE with everything up to and including
648*b3fce824SCristian Pallarés# the last / stripped.
649*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then
650*b3fce824SCristian Pallarés  # If this shell supports suffix pattern removal, then use it to avoid
651*b3fce824SCristian Pallarés  # forking. Hide the definitions single quotes in case the shell chokes
652*b3fce824SCristian Pallarés  # on unsupported syntax...
653*b3fce824SCristian Pallarés  _b='func_basename_result=${1##*/}'
654*b3fce824SCristian Pallarés  _d='case $1 in
655*b3fce824SCristian Pallarés        */*) func_dirname_result=${1%/*}$2 ;;
656*b3fce824SCristian Pallarés        *  ) func_dirname_result=$3        ;;
657*b3fce824SCristian Pallarés      esac'
658*b3fce824SCristian Pallarés
659*b3fce824SCristian Pallaréselse
660*b3fce824SCristian Pallarés  # ...otherwise fall back to using sed.
661*b3fce824SCristian Pallarés  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
662*b3fce824SCristian Pallarés  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
663*b3fce824SCristian Pallarés      if test "X$func_dirname_result" = "X$1"; then
664*b3fce824SCristian Pallarés        func_dirname_result=$3
665*b3fce824SCristian Pallarés      else
666*b3fce824SCristian Pallarés        func_append func_dirname_result "$2"
667*b3fce824SCristian Pallarés      fi'
668*b3fce824SCristian Pallarésfi
669*b3fce824SCristian Pallarés
670*b3fce824SCristian Pallaréseval 'func_basename ()
671*b3fce824SCristian Pallarés{
672*b3fce824SCristian Pallarés    $debug_cmd
673*b3fce824SCristian Pallarés
674*b3fce824SCristian Pallarés    '"$_b"'
675*b3fce824SCristian Pallarés}'
676*b3fce824SCristian Pallarés
677*b3fce824SCristian Pallarés
678*b3fce824SCristian Pallarés# func_dirname FILE APPEND NONDIR_REPLACEMENT
679*b3fce824SCristian Pallarés# -------------------------------------------
680189777a2SCristian Pallares# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
681189777a2SCristian Pallares# otherwise set result to NONDIR_REPLACEMENT.
682*b3fce824SCristian Pallaréseval 'func_dirname ()
683189777a2SCristian Pallares{
684*b3fce824SCristian Pallarés    $debug_cmd
685*b3fce824SCristian Pallarés
686*b3fce824SCristian Pallarés    '"$_d"'
687*b3fce824SCristian Pallarés}'
688189777a2SCristian Pallares
689189777a2SCristian Pallares
690*b3fce824SCristian Pallarés# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
691*b3fce824SCristian Pallarés# --------------------------------------------------------
692*b3fce824SCristian Pallarés# Perform func_basename and func_dirname in a single function
693189777a2SCristian Pallares# call:
694189777a2SCristian Pallares#   dirname:  Compute the dirname of FILE.  If nonempty,
695189777a2SCristian Pallares#             add APPEND to the result, otherwise set result
696189777a2SCristian Pallares#             to NONDIR_REPLACEMENT.
697189777a2SCristian Pallares#             value returned in "$func_dirname_result"
698189777a2SCristian Pallares#   basename: Compute filename of FILE.
699189777a2SCristian Pallares#             value retuned in "$func_basename_result"
700*b3fce824SCristian Pallarés# For efficiency, we do not delegate to the functions above but instead
701*b3fce824SCristian Pallarés# duplicate the functionality here.
702*b3fce824SCristian Pallaréseval 'func_dirname_and_basename ()
703189777a2SCristian Pallares{
704*b3fce824SCristian Pallarés    $debug_cmd
705*b3fce824SCristian Pallarés
706*b3fce824SCristian Pallarés    '"$_b"'
707*b3fce824SCristian Pallarés    '"$_d"'
708*b3fce824SCristian Pallarés}'
709*b3fce824SCristian Pallarés
710*b3fce824SCristian Pallarés
711*b3fce824SCristian Pallarés# func_echo ARG...
712*b3fce824SCristian Pallarés# ----------------
713*b3fce824SCristian Pallarés# Echo program name prefixed message.
714*b3fce824SCristian Pallarésfunc_echo ()
715*b3fce824SCristian Pallarés{
716*b3fce824SCristian Pallarés    $debug_cmd
717*b3fce824SCristian Pallarés
718*b3fce824SCristian Pallarés    _G_message=$*
719*b3fce824SCristian Pallarés
720*b3fce824SCristian Pallarés    func_echo_IFS=$IFS
721*b3fce824SCristian Pallarés    IFS=$nl
722*b3fce824SCristian Pallarés    for _G_line in $_G_message; do
723*b3fce824SCristian Pallarés      IFS=$func_echo_IFS
724*b3fce824SCristian Pallarés      $ECHO "$progname: $_G_line"
725*b3fce824SCristian Pallarés    done
726*b3fce824SCristian Pallarés    IFS=$func_echo_IFS
727*b3fce824SCristian Pallarés}
728*b3fce824SCristian Pallarés
729*b3fce824SCristian Pallarés
730*b3fce824SCristian Pallarés# func_echo_all ARG...
731*b3fce824SCristian Pallarés# --------------------
732*b3fce824SCristian Pallarés# Invoke $ECHO with all args, space-separated.
733*b3fce824SCristian Pallarésfunc_echo_all ()
734*b3fce824SCristian Pallarés{
735*b3fce824SCristian Pallarés    $ECHO "$*"
736*b3fce824SCristian Pallarés}
737*b3fce824SCristian Pallarés
738*b3fce824SCristian Pallarés
739*b3fce824SCristian Pallarés# func_echo_infix_1 INFIX ARG...
740*b3fce824SCristian Pallarés# ------------------------------
741*b3fce824SCristian Pallarés# Echo program name, followed by INFIX on the first line, with any
742*b3fce824SCristian Pallarés# additional lines not showing INFIX.
743*b3fce824SCristian Pallarésfunc_echo_infix_1 ()
744*b3fce824SCristian Pallarés{
745*b3fce824SCristian Pallarés    $debug_cmd
746*b3fce824SCristian Pallarés
747*b3fce824SCristian Pallarés    $require_term_colors
748*b3fce824SCristian Pallarés
749*b3fce824SCristian Pallarés    _G_infix=$1; shift
750*b3fce824SCristian Pallarés    _G_indent=$_G_infix
751*b3fce824SCristian Pallarés    _G_prefix="$progname: $_G_infix: "
752*b3fce824SCristian Pallarés    _G_message=$*
753*b3fce824SCristian Pallarés
754*b3fce824SCristian Pallarés    # Strip color escape sequences before counting printable length
755*b3fce824SCristian Pallarés    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
756*b3fce824SCristian Pallarés    do
757*b3fce824SCristian Pallarés      test -n "$_G_tc" && {
758*b3fce824SCristian Pallarés        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
759*b3fce824SCristian Pallarés        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
760*b3fce824SCristian Pallarés      }
761*b3fce824SCristian Pallarés    done
762*b3fce824SCristian Pallarés    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
763*b3fce824SCristian Pallarés
764*b3fce824SCristian Pallarés    func_echo_infix_1_IFS=$IFS
765*b3fce824SCristian Pallarés    IFS=$nl
766*b3fce824SCristian Pallarés    for _G_line in $_G_message; do
767*b3fce824SCristian Pallarés      IFS=$func_echo_infix_1_IFS
768*b3fce824SCristian Pallarés      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
769*b3fce824SCristian Pallarés      _G_prefix=$_G_indent
770*b3fce824SCristian Pallarés    done
771*b3fce824SCristian Pallarés    IFS=$func_echo_infix_1_IFS
772*b3fce824SCristian Pallarés}
773*b3fce824SCristian Pallarés
774*b3fce824SCristian Pallarés
775*b3fce824SCristian Pallarés# func_error ARG...
776*b3fce824SCristian Pallarés# -----------------
777*b3fce824SCristian Pallarés# Echo program name prefixed message to standard error.
778*b3fce824SCristian Pallarésfunc_error ()
779*b3fce824SCristian Pallarés{
780*b3fce824SCristian Pallarés    $debug_cmd
781*b3fce824SCristian Pallarés
782*b3fce824SCristian Pallarés    $require_term_colors
783*b3fce824SCristian Pallarés
784*b3fce824SCristian Pallarés    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
785*b3fce824SCristian Pallarés}
786*b3fce824SCristian Pallarés
787*b3fce824SCristian Pallarés
788*b3fce824SCristian Pallarés# func_fatal_error ARG...
789*b3fce824SCristian Pallarés# -----------------------
790*b3fce824SCristian Pallarés# Echo program name prefixed message to standard error, and exit.
791*b3fce824SCristian Pallarésfunc_fatal_error ()
792*b3fce824SCristian Pallarés{
793*b3fce824SCristian Pallarés    $debug_cmd
794*b3fce824SCristian Pallarés
795*b3fce824SCristian Pallarés    func_error "$*"
796*b3fce824SCristian Pallarés    exit $EXIT_FAILURE
797*b3fce824SCristian Pallarés}
798*b3fce824SCristian Pallarés
799*b3fce824SCristian Pallarés
800*b3fce824SCristian Pallarés# func_grep EXPRESSION FILENAME
801*b3fce824SCristian Pallarés# -----------------------------
802*b3fce824SCristian Pallarés# Check whether EXPRESSION matches any line of FILENAME, without output.
803*b3fce824SCristian Pallarésfunc_grep ()
804*b3fce824SCristian Pallarés{
805*b3fce824SCristian Pallarés    $debug_cmd
806*b3fce824SCristian Pallarés
807*b3fce824SCristian Pallarés    $GREP "$1" "$2" >/dev/null 2>&1
808*b3fce824SCristian Pallarés}
809*b3fce824SCristian Pallarés
810*b3fce824SCristian Pallarés
811*b3fce824SCristian Pallarés# func_len STRING
812*b3fce824SCristian Pallarés# ---------------
813*b3fce824SCristian Pallarés# Set func_len_result to the length of STRING. STRING may not
814*b3fce824SCristian Pallarés# start with a hyphen.
815*b3fce824SCristian Pallarés  test -z "$_G_HAVE_XSI_OPS" \
816*b3fce824SCristian Pallarés    && (eval 'x=a/b/c;
817*b3fce824SCristian Pallarés      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
818*b3fce824SCristian Pallarés    && _G_HAVE_XSI_OPS=yes
819*b3fce824SCristian Pallarés
820*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then
821*b3fce824SCristian Pallarés  eval 'func_len ()
822*b3fce824SCristian Pallarés  {
823*b3fce824SCristian Pallarés    $debug_cmd
824*b3fce824SCristian Pallarés
825*b3fce824SCristian Pallarés    func_len_result=${#1}
826*b3fce824SCristian Pallarés  }'
827189777a2SCristian Pallareselse
828*b3fce824SCristian Pallarés  func_len ()
829189777a2SCristian Pallares  {
830*b3fce824SCristian Pallarés    $debug_cmd
831*b3fce824SCristian Pallarés
832*b3fce824SCristian Pallarés    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
833*b3fce824SCristian Pallarés  }
834*b3fce824SCristian Pallarésfi
835*b3fce824SCristian Pallarés
836*b3fce824SCristian Pallarés
837*b3fce824SCristian Pallarés# func_mkdir_p DIRECTORY-PATH
838*b3fce824SCristian Pallarés# ---------------------------
839*b3fce824SCristian Pallarés# Make sure the entire path to DIRECTORY-PATH is available.
840*b3fce824SCristian Pallarésfunc_mkdir_p ()
841*b3fce824SCristian Pallarés{
842*b3fce824SCristian Pallarés    $debug_cmd
843*b3fce824SCristian Pallarés
844*b3fce824SCristian Pallarés    _G_directory_path=$1
845*b3fce824SCristian Pallarés    _G_dir_list=
846*b3fce824SCristian Pallarés
847*b3fce824SCristian Pallarés    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
848*b3fce824SCristian Pallarés
849*b3fce824SCristian Pallarés      # Protect directory names starting with '-'
850*b3fce824SCristian Pallarés      case $_G_directory_path in
851*b3fce824SCristian Pallarés        -*) _G_directory_path=./$_G_directory_path ;;
852189777a2SCristian Pallares      esac
853*b3fce824SCristian Pallarés
854*b3fce824SCristian Pallarés      # While some portion of DIR does not yet exist...
855*b3fce824SCristian Pallarés      while test ! -d "$_G_directory_path"; do
856*b3fce824SCristian Pallarés        # ...make a list in topmost first order.  Use a colon delimited
857*b3fce824SCristian Pallarés	# list incase some portion of path contains whitespace.
858*b3fce824SCristian Pallarés        _G_dir_list=$_G_directory_path:$_G_dir_list
859*b3fce824SCristian Pallarés
860*b3fce824SCristian Pallarés        # If the last portion added has no slash in it, the list is done
861*b3fce824SCristian Pallarés        case $_G_directory_path in */*) ;; *) break ;; esac
862*b3fce824SCristian Pallarés
863*b3fce824SCristian Pallarés        # ...otherwise throw away the child directory and loop
864*b3fce824SCristian Pallarés        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
865*b3fce824SCristian Pallarés      done
866*b3fce824SCristian Pallarés      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
867*b3fce824SCristian Pallarés
868*b3fce824SCristian Pallarés      func_mkdir_p_IFS=$IFS; IFS=:
869*b3fce824SCristian Pallarés      for _G_dir in $_G_dir_list; do
870*b3fce824SCristian Pallarés	IFS=$func_mkdir_p_IFS
871*b3fce824SCristian Pallarés        # mkdir can fail with a 'File exist' error if two processes
872*b3fce824SCristian Pallarés        # try to create one of the directories concurrently.  Don't
873*b3fce824SCristian Pallarés        # stop in that case!
874*b3fce824SCristian Pallarés        $MKDIR "$_G_dir" 2>/dev/null || :
875*b3fce824SCristian Pallarés      done
876*b3fce824SCristian Pallarés      IFS=$func_mkdir_p_IFS
877*b3fce824SCristian Pallarés
878*b3fce824SCristian Pallarés      # Bail out if we (or some other process) failed to create a directory.
879*b3fce824SCristian Pallarés      test -d "$_G_directory_path" || \
880*b3fce824SCristian Pallarés        func_fatal_error "Failed to create '$1'"
881*b3fce824SCristian Pallarés    fi
882*b3fce824SCristian Pallarés}
883189777a2SCristian Pallares
884189777a2SCristian Pallares
885*b3fce824SCristian Pallarés# func_mktempdir [BASENAME]
886*b3fce824SCristian Pallarés# -------------------------
887*b3fce824SCristian Pallarés# Make a temporary directory that won't clash with other running
888*b3fce824SCristian Pallarés# libtool processes, and avoids race conditions if possible.  If
889*b3fce824SCristian Pallarés# given, BASENAME is the basename for that directory.
890*b3fce824SCristian Pallarésfunc_mktempdir ()
891*b3fce824SCristian Pallarés{
892*b3fce824SCristian Pallarés    $debug_cmd
893*b3fce824SCristian Pallarés
894*b3fce824SCristian Pallarés    _G_template=${TMPDIR-/tmp}/${1-$progname}
895*b3fce824SCristian Pallarés
896*b3fce824SCristian Pallarés    if test : = "$opt_dry_run"; then
897*b3fce824SCristian Pallarés      # Return a directory name, but don't create it in dry-run mode
898*b3fce824SCristian Pallarés      _G_tmpdir=$_G_template-$$
899*b3fce824SCristian Pallarés    else
900*b3fce824SCristian Pallarés
901*b3fce824SCristian Pallarés      # If mktemp works, use that first and foremost
902*b3fce824SCristian Pallarés      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
903*b3fce824SCristian Pallarés
904*b3fce824SCristian Pallarés      if test ! -d "$_G_tmpdir"; then
905*b3fce824SCristian Pallarés        # Failing that, at least try and use $RANDOM to avoid a race
906*b3fce824SCristian Pallarés        _G_tmpdir=$_G_template-${RANDOM-0}$$
907*b3fce824SCristian Pallarés
908*b3fce824SCristian Pallarés        func_mktempdir_umask=`umask`
909*b3fce824SCristian Pallarés        umask 0077
910*b3fce824SCristian Pallarés        $MKDIR "$_G_tmpdir"
911*b3fce824SCristian Pallarés        umask $func_mktempdir_umask
912*b3fce824SCristian Pallarés      fi
913*b3fce824SCristian Pallarés
914*b3fce824SCristian Pallarés      # If we're not in dry-run mode, bomb out on failure
915*b3fce824SCristian Pallarés      test -d "$_G_tmpdir" || \
916*b3fce824SCristian Pallarés        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
917*b3fce824SCristian Pallarés    fi
918*b3fce824SCristian Pallarés
919*b3fce824SCristian Pallarés    $ECHO "$_G_tmpdir"
920*b3fce824SCristian Pallarés}
921*b3fce824SCristian Pallarés
922189777a2SCristian Pallares
923189777a2SCristian Pallares# func_normal_abspath PATH
924*b3fce824SCristian Pallarés# ------------------------
925189777a2SCristian Pallares# Remove doubled-up and trailing slashes, "." path components,
926189777a2SCristian Pallares# and cancel out any ".." path components in PATH after making
927189777a2SCristian Pallares# it an absolute path.
928189777a2SCristian Pallaresfunc_normal_abspath ()
929189777a2SCristian Pallares{
930*b3fce824SCristian Pallarés    $debug_cmd
931*b3fce824SCristian Pallarés
932*b3fce824SCristian Pallarés    # These SED scripts presuppose an absolute path with a trailing slash.
933*b3fce824SCristian Pallarés    _G_pathcar='s|^/\([^/]*\).*$|\1|'
934*b3fce824SCristian Pallarés    _G_pathcdr='s|^/[^/]*||'
935*b3fce824SCristian Pallarés    _G_removedotparts=':dotsl
936*b3fce824SCristian Pallarés		s|/\./|/|g
937*b3fce824SCristian Pallarés		t dotsl
938*b3fce824SCristian Pallarés		s|/\.$|/|'
939*b3fce824SCristian Pallarés    _G_collapseslashes='s|/\{1,\}|/|g'
940*b3fce824SCristian Pallarés    _G_finalslash='s|/*$|/|'
941*b3fce824SCristian Pallarés
942189777a2SCristian Pallares    # Start from root dir and reassemble the path.
943189777a2SCristian Pallares    func_normal_abspath_result=
944189777a2SCristian Pallares    func_normal_abspath_tpath=$1
945189777a2SCristian Pallares    func_normal_abspath_altnamespace=
946189777a2SCristian Pallares    case $func_normal_abspath_tpath in
947189777a2SCristian Pallares      "")
948189777a2SCristian Pallares        # Empty path, that just means $cwd.
949189777a2SCristian Pallares        func_stripname '' '/' "`pwd`"
950189777a2SCristian Pallares        func_normal_abspath_result=$func_stripname_result
951189777a2SCristian Pallares        return
952189777a2SCristian Pallares        ;;
953189777a2SCristian Pallares      # The next three entries are used to spot a run of precisely
954189777a2SCristian Pallares      # two leading slashes without using negated character classes;
955189777a2SCristian Pallares      # we take advantage of case's first-match behaviour.
956189777a2SCristian Pallares      ///*)
957189777a2SCristian Pallares        # Unusual form of absolute path, do nothing.
958189777a2SCristian Pallares        ;;
959189777a2SCristian Pallares      //*)
960189777a2SCristian Pallares        # Not necessarily an ordinary path; POSIX reserves leading '//'
961189777a2SCristian Pallares        # and for example Cygwin uses it to access remote file shares
962189777a2SCristian Pallares        # over CIFS/SMB, so we conserve a leading double slash if found.
963189777a2SCristian Pallares        func_normal_abspath_altnamespace=/
964189777a2SCristian Pallares        ;;
965189777a2SCristian Pallares      /*)
966189777a2SCristian Pallares        # Absolute path, do nothing.
967189777a2SCristian Pallares        ;;
968189777a2SCristian Pallares      *)
969189777a2SCristian Pallares        # Relative path, prepend $cwd.
970189777a2SCristian Pallares        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
971189777a2SCristian Pallares        ;;
972189777a2SCristian Pallares    esac
973*b3fce824SCristian Pallarés
974189777a2SCristian Pallares    # Cancel out all the simple stuff to save iterations.  We also want
975189777a2SCristian Pallares    # the path to end with a slash for ease of parsing, so make sure
976189777a2SCristian Pallares    # there is one (and only one) here.
977189777a2SCristian Pallares    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
978*b3fce824SCristian Pallarés          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
979189777a2SCristian Pallares    while :; do
980189777a2SCristian Pallares      # Processed it all yet?
981*b3fce824SCristian Pallarés      if test / = "$func_normal_abspath_tpath"; then
982189777a2SCristian Pallares        # If we ascended to the root using ".." the result may be empty now.
983189777a2SCristian Pallares        if test -z "$func_normal_abspath_result"; then
984189777a2SCristian Pallares          func_normal_abspath_result=/
985189777a2SCristian Pallares        fi
986189777a2SCristian Pallares        break
987189777a2SCristian Pallares      fi
988189777a2SCristian Pallares      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
989*b3fce824SCristian Pallarés          -e "$_G_pathcar"`
990189777a2SCristian Pallares      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
991*b3fce824SCristian Pallarés          -e "$_G_pathcdr"`
992189777a2SCristian Pallares      # Figure out what to do with it
993189777a2SCristian Pallares      case $func_normal_abspath_tcomponent in
994189777a2SCristian Pallares        "")
995189777a2SCristian Pallares          # Trailing empty path component, ignore it.
996189777a2SCristian Pallares          ;;
997189777a2SCristian Pallares        ..)
998189777a2SCristian Pallares          # Parent dir; strip last assembled component from result.
999189777a2SCristian Pallares          func_dirname "$func_normal_abspath_result"
1000189777a2SCristian Pallares          func_normal_abspath_result=$func_dirname_result
1001189777a2SCristian Pallares          ;;
1002189777a2SCristian Pallares        *)
1003189777a2SCristian Pallares          # Actual path component, append it.
1004*b3fce824SCristian Pallarés          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1005189777a2SCristian Pallares          ;;
1006189777a2SCristian Pallares      esac
1007189777a2SCristian Pallares    done
1008189777a2SCristian Pallares    # Restore leading double-slash if one was found on entry.
1009189777a2SCristian Pallares    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1010189777a2SCristian Pallares}
1011189777a2SCristian Pallares
1012*b3fce824SCristian Pallarés
1013*b3fce824SCristian Pallarés# func_notquiet ARG...
1014*b3fce824SCristian Pallarés# --------------------
1015*b3fce824SCristian Pallarés# Echo program name prefixed message only when not in quiet mode.
1016*b3fce824SCristian Pallarésfunc_notquiet ()
1017*b3fce824SCristian Pallarés{
1018*b3fce824SCristian Pallarés    $debug_cmd
1019*b3fce824SCristian Pallarés
1020*b3fce824SCristian Pallarés    $opt_quiet || func_echo ${1+"$@"}
1021*b3fce824SCristian Pallarés
1022*b3fce824SCristian Pallarés    # A bug in bash halts the script if the last line of a function
1023*b3fce824SCristian Pallarés    # fails when set -e is in force, so we need another command to
1024*b3fce824SCristian Pallarés    # work around that:
1025*b3fce824SCristian Pallarés    :
1026*b3fce824SCristian Pallarés}
1027*b3fce824SCristian Pallarés
1028*b3fce824SCristian Pallarés
1029189777a2SCristian Pallares# func_relative_path SRCDIR DSTDIR
1030*b3fce824SCristian Pallarés# --------------------------------
1031*b3fce824SCristian Pallarés# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1032189777a2SCristian Pallaresfunc_relative_path ()
1033189777a2SCristian Pallares{
1034*b3fce824SCristian Pallarés    $debug_cmd
1035*b3fce824SCristian Pallarés
1036189777a2SCristian Pallares    func_relative_path_result=
1037189777a2SCristian Pallares    func_normal_abspath "$1"
1038189777a2SCristian Pallares    func_relative_path_tlibdir=$func_normal_abspath_result
1039189777a2SCristian Pallares    func_normal_abspath "$2"
1040189777a2SCristian Pallares    func_relative_path_tbindir=$func_normal_abspath_result
1041189777a2SCristian Pallares
1042189777a2SCristian Pallares    # Ascend the tree starting from libdir
1043189777a2SCristian Pallares    while :; do
1044189777a2SCristian Pallares      # check if we have found a prefix of bindir
1045189777a2SCristian Pallares      case $func_relative_path_tbindir in
1046189777a2SCristian Pallares        $func_relative_path_tlibdir)
1047189777a2SCristian Pallares          # found an exact match
1048189777a2SCristian Pallares          func_relative_path_tcancelled=
1049189777a2SCristian Pallares          break
1050189777a2SCristian Pallares          ;;
1051189777a2SCristian Pallares        $func_relative_path_tlibdir*)
1052189777a2SCristian Pallares          # found a matching prefix
1053189777a2SCristian Pallares          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1054189777a2SCristian Pallares          func_relative_path_tcancelled=$func_stripname_result
1055189777a2SCristian Pallares          if test -z "$func_relative_path_result"; then
1056189777a2SCristian Pallares            func_relative_path_result=.
1057189777a2SCristian Pallares          fi
1058189777a2SCristian Pallares          break
1059189777a2SCristian Pallares          ;;
1060189777a2SCristian Pallares        *)
1061189777a2SCristian Pallares          func_dirname $func_relative_path_tlibdir
1062*b3fce824SCristian Pallarés          func_relative_path_tlibdir=$func_dirname_result
1063*b3fce824SCristian Pallarés          if test -z "$func_relative_path_tlibdir"; then
1064189777a2SCristian Pallares            # Have to descend all the way to the root!
1065189777a2SCristian Pallares            func_relative_path_result=../$func_relative_path_result
1066189777a2SCristian Pallares            func_relative_path_tcancelled=$func_relative_path_tbindir
1067189777a2SCristian Pallares            break
1068189777a2SCristian Pallares          fi
1069189777a2SCristian Pallares          func_relative_path_result=../$func_relative_path_result
1070189777a2SCristian Pallares          ;;
1071189777a2SCristian Pallares      esac
1072189777a2SCristian Pallares    done
1073189777a2SCristian Pallares
1074189777a2SCristian Pallares    # Now calculate path; take care to avoid doubling-up slashes.
1075189777a2SCristian Pallares    func_stripname '' '/' "$func_relative_path_result"
1076189777a2SCristian Pallares    func_relative_path_result=$func_stripname_result
1077189777a2SCristian Pallares    func_stripname '/' '/' "$func_relative_path_tcancelled"
1078*b3fce824SCristian Pallarés    if test -n "$func_stripname_result"; then
1079*b3fce824SCristian Pallarés      func_append func_relative_path_result "/$func_stripname_result"
1080189777a2SCristian Pallares    fi
1081189777a2SCristian Pallares
1082*b3fce824SCristian Pallarés    # Normalisation. If bindir is libdir, return '.' else relative path.
1083*b3fce824SCristian Pallarés    if test -n "$func_relative_path_result"; then
1084*b3fce824SCristian Pallarés      func_stripname './' '' "$func_relative_path_result"
1085189777a2SCristian Pallares      func_relative_path_result=$func_stripname_result
1086189777a2SCristian Pallares    fi
1087189777a2SCristian Pallares
1088*b3fce824SCristian Pallarés    test -n "$func_relative_path_result" || func_relative_path_result=.
1089189777a2SCristian Pallares
1090189777a2SCristian Pallares    :
1091189777a2SCristian Pallares}
1092189777a2SCristian Pallares
1093189777a2SCristian Pallares
1094*b3fce824SCristian Pallarés# func_quote_for_eval ARG...
1095*b3fce824SCristian Pallarés# --------------------------
1096*b3fce824SCristian Pallarés# Aesthetically quote ARGs to be evaled later.
1097*b3fce824SCristian Pallarés# This function returns two values:
1098*b3fce824SCristian Pallarés#   i) func_quote_for_eval_result
1099*b3fce824SCristian Pallarés#      double-quoted, suitable for a subsequent eval
1100*b3fce824SCristian Pallarés#  ii) func_quote_for_eval_unquoted_result
1101*b3fce824SCristian Pallarés#      has all characters that are still active within double
1102*b3fce824SCristian Pallarés#      quotes backslashified.
1103189777a2SCristian Pallaresfunc_quote_for_eval ()
1104189777a2SCristian Pallares{
1105*b3fce824SCristian Pallarés    $debug_cmd
1106*b3fce824SCristian Pallarés
1107*b3fce824SCristian Pallarés    func_quote_for_eval_unquoted_result=
1108*b3fce824SCristian Pallarés    func_quote_for_eval_result=
1109*b3fce824SCristian Pallarés    while test 0 -lt $#; do
1110189777a2SCristian Pallares      case $1 in
1111189777a2SCristian Pallares        *[\\\`\"\$]*)
1112*b3fce824SCristian Pallarés	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
1113189777a2SCristian Pallares        *)
1114*b3fce824SCristian Pallarés          _G_unquoted_arg=$1 ;;
1115189777a2SCristian Pallares      esac
1116*b3fce824SCristian Pallarés      if test -n "$func_quote_for_eval_unquoted_result"; then
1117*b3fce824SCristian Pallarés	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
1118*b3fce824SCristian Pallarés      else
1119*b3fce824SCristian Pallarés        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
1120*b3fce824SCristian Pallarés      fi
1121189777a2SCristian Pallares
1122*b3fce824SCristian Pallarés      case $_G_unquoted_arg in
1123189777a2SCristian Pallares        # Double-quote args containing shell metacharacters to delay
1124*b3fce824SCristian Pallarés        # word splitting, command substitution and variable expansion
1125*b3fce824SCristian Pallarés        # for a subsequent eval.
1126189777a2SCristian Pallares        # Many Bourne shells cannot handle close brackets correctly
1127189777a2SCristian Pallares        # in scan sets, so we specify it separately.
1128189777a2SCristian Pallares        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1129*b3fce824SCristian Pallarés          _G_quoted_arg=\"$_G_unquoted_arg\"
1130189777a2SCristian Pallares          ;;
1131189777a2SCristian Pallares        *)
1132*b3fce824SCristian Pallarés          _G_quoted_arg=$_G_unquoted_arg
1133*b3fce824SCristian Pallarés	  ;;
1134189777a2SCristian Pallares      esac
1135*b3fce824SCristian Pallarés
1136*b3fce824SCristian Pallarés      if test -n "$func_quote_for_eval_result"; then
1137*b3fce824SCristian Pallarés	func_append func_quote_for_eval_result " $_G_quoted_arg"
1138*b3fce824SCristian Pallarés      else
1139*b3fce824SCristian Pallarés        func_append func_quote_for_eval_result "$_G_quoted_arg"
1140*b3fce824SCristian Pallarés      fi
1141*b3fce824SCristian Pallarés      shift
1142*b3fce824SCristian Pallarés    done
1143189777a2SCristian Pallares}
1144189777a2SCristian Pallares
1145189777a2SCristian Pallares
1146*b3fce824SCristian Pallarés# func_quote_for_expand ARG
1147*b3fce824SCristian Pallarés# -------------------------
1148189777a2SCristian Pallares# Aesthetically quote ARG to be evaled later; same as above,
1149189777a2SCristian Pallares# but do not quote variable references.
1150189777a2SCristian Pallaresfunc_quote_for_expand ()
1151189777a2SCristian Pallares{
1152*b3fce824SCristian Pallarés    $debug_cmd
1153*b3fce824SCristian Pallarés
1154189777a2SCristian Pallares    case $1 in
1155189777a2SCristian Pallares      *[\\\`\"]*)
1156*b3fce824SCristian Pallarés	_G_arg=`$ECHO "$1" | $SED \
1157*b3fce824SCristian Pallarés	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
1158189777a2SCristian Pallares      *)
1159*b3fce824SCristian Pallarés        _G_arg=$1 ;;
1160189777a2SCristian Pallares    esac
1161189777a2SCristian Pallares
1162*b3fce824SCristian Pallarés    case $_G_arg in
1163189777a2SCristian Pallares      # Double-quote args containing shell metacharacters to delay
1164189777a2SCristian Pallares      # word splitting and command substitution for a subsequent eval.
1165189777a2SCristian Pallares      # Many Bourne shells cannot handle close brackets correctly
1166189777a2SCristian Pallares      # in scan sets, so we specify it separately.
1167189777a2SCristian Pallares      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1168*b3fce824SCristian Pallarés        _G_arg=\"$_G_arg\"
1169189777a2SCristian Pallares        ;;
1170189777a2SCristian Pallares    esac
1171189777a2SCristian Pallares
1172*b3fce824SCristian Pallarés    func_quote_for_expand_result=$_G_arg
1173189777a2SCristian Pallares}
1174189777a2SCristian Pallares
1175189777a2SCristian Pallares
1176*b3fce824SCristian Pallarés# func_stripname PREFIX SUFFIX NAME
1177*b3fce824SCristian Pallarés# ---------------------------------
1178*b3fce824SCristian Pallarés# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1179*b3fce824SCristian Pallarés# PREFIX and SUFFIX must not contain globbing or regex special
1180*b3fce824SCristian Pallarés# characters, hashes, percent signs, but SUFFIX may contain a leading
1181*b3fce824SCristian Pallarés# dot (in which case that matches only a dot).
1182*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then
1183*b3fce824SCristian Pallarés  eval 'func_stripname ()
1184*b3fce824SCristian Pallarés  {
1185*b3fce824SCristian Pallarés    $debug_cmd
1186*b3fce824SCristian Pallarés
1187*b3fce824SCristian Pallarés    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1188*b3fce824SCristian Pallarés    # positional parameters, so assign one to ordinary variable first.
1189*b3fce824SCristian Pallarés    func_stripname_result=$3
1190*b3fce824SCristian Pallarés    func_stripname_result=${func_stripname_result#"$1"}
1191*b3fce824SCristian Pallarés    func_stripname_result=${func_stripname_result%"$2"}
1192*b3fce824SCristian Pallarés  }'
1193*b3fce824SCristian Pallaréselse
1194*b3fce824SCristian Pallarés  func_stripname ()
1195*b3fce824SCristian Pallarés  {
1196*b3fce824SCristian Pallarés    $debug_cmd
1197*b3fce824SCristian Pallarés
1198*b3fce824SCristian Pallarés    case $2 in
1199*b3fce824SCristian Pallarés      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1200*b3fce824SCristian Pallarés      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1201*b3fce824SCristian Pallarés    esac
1202*b3fce824SCristian Pallarés  }
1203*b3fce824SCristian Pallarésfi
1204*b3fce824SCristian Pallarés
1205*b3fce824SCristian Pallarés
1206*b3fce824SCristian Pallarés# func_show_eval CMD [FAIL_EXP]
1207*b3fce824SCristian Pallarés# -----------------------------
1208*b3fce824SCristian Pallarés# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1209189777a2SCristian Pallares# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1210189777a2SCristian Pallares# is given, then evaluate it.
1211189777a2SCristian Pallaresfunc_show_eval ()
1212189777a2SCristian Pallares{
1213*b3fce824SCristian Pallarés    $debug_cmd
1214189777a2SCristian Pallares
1215*b3fce824SCristian Pallarés    _G_cmd=$1
1216*b3fce824SCristian Pallarés    _G_fail_exp=${2-':'}
1217*b3fce824SCristian Pallarés
1218*b3fce824SCristian Pallarés    func_quote_for_expand "$_G_cmd"
1219*b3fce824SCristian Pallarés    eval "func_notquiet $func_quote_for_expand_result"
1220*b3fce824SCristian Pallarés
1221*b3fce824SCristian Pallarés    $opt_dry_run || {
1222*b3fce824SCristian Pallarés      eval "$_G_cmd"
1223*b3fce824SCristian Pallarés      _G_status=$?
1224*b3fce824SCristian Pallarés      if test 0 -ne "$_G_status"; then
1225*b3fce824SCristian Pallarés	eval "(exit $_G_status); $_G_fail_exp"
1226*b3fce824SCristian Pallarés      fi
1227189777a2SCristian Pallares    }
1228189777a2SCristian Pallares}
1229189777a2SCristian Pallares
1230189777a2SCristian Pallares
1231*b3fce824SCristian Pallarés# func_show_eval_locale CMD [FAIL_EXP]
1232*b3fce824SCristian Pallarés# ------------------------------------
1233*b3fce824SCristian Pallarés# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1234189777a2SCristian Pallares# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1235189777a2SCristian Pallares# is given, then evaluate it.  Use the saved locale for evaluation.
1236189777a2SCristian Pallaresfunc_show_eval_locale ()
1237189777a2SCristian Pallares{
1238*b3fce824SCristian Pallarés    $debug_cmd
1239189777a2SCristian Pallares
1240*b3fce824SCristian Pallarés    _G_cmd=$1
1241*b3fce824SCristian Pallarés    _G_fail_exp=${2-':'}
1242*b3fce824SCristian Pallarés
1243*b3fce824SCristian Pallarés    $opt_quiet || {
1244*b3fce824SCristian Pallarés      func_quote_for_expand "$_G_cmd"
1245189777a2SCristian Pallares      eval "func_echo $func_quote_for_expand_result"
1246189777a2SCristian Pallares    }
1247189777a2SCristian Pallares
1248*b3fce824SCristian Pallarés    $opt_dry_run || {
1249*b3fce824SCristian Pallarés      eval "$_G_user_locale
1250*b3fce824SCristian Pallarés	    $_G_cmd"
1251*b3fce824SCristian Pallarés      _G_status=$?
1252*b3fce824SCristian Pallarés      eval "$_G_safe_locale"
1253*b3fce824SCristian Pallarés      if test 0 -ne "$_G_status"; then
1254*b3fce824SCristian Pallarés	eval "(exit $_G_status); $_G_fail_exp"
1255189777a2SCristian Pallares      fi
1256189777a2SCristian Pallares    }
1257*b3fce824SCristian Pallarés}
1258*b3fce824SCristian Pallarés
1259189777a2SCristian Pallares
1260189777a2SCristian Pallares# func_tr_sh
1261*b3fce824SCristian Pallarés# ----------
1262189777a2SCristian Pallares# Turn $1 into a string suitable for a shell variable name.
1263189777a2SCristian Pallares# Result is stored in $func_tr_sh_result.  All characters
1264189777a2SCristian Pallares# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1265189777a2SCristian Pallares# if $1 begins with a digit, a '_' is prepended as well.
1266189777a2SCristian Pallaresfunc_tr_sh ()
1267189777a2SCristian Pallares{
1268*b3fce824SCristian Pallarés    $debug_cmd
1269*b3fce824SCristian Pallarés
1270189777a2SCristian Pallares    case $1 in
1271189777a2SCristian Pallares    [0-9]* | *[!a-zA-Z0-9_]*)
1272*b3fce824SCristian Pallarés      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1273189777a2SCristian Pallares      ;;
1274189777a2SCristian Pallares    * )
1275189777a2SCristian Pallares      func_tr_sh_result=$1
1276189777a2SCristian Pallares      ;;
1277189777a2SCristian Pallares    esac
1278189777a2SCristian Pallares}
1279189777a2SCristian Pallares
1280189777a2SCristian Pallares
1281*b3fce824SCristian Pallarés# func_verbose ARG...
1282*b3fce824SCristian Pallarés# -------------------
1283*b3fce824SCristian Pallarés# Echo program name prefixed message in verbose mode only.
1284*b3fce824SCristian Pallarésfunc_verbose ()
1285189777a2SCristian Pallares{
1286*b3fce824SCristian Pallarés    $debug_cmd
1287189777a2SCristian Pallares
1288*b3fce824SCristian Pallarés    $opt_verbose && func_echo "$*"
1289*b3fce824SCristian Pallarés
1290*b3fce824SCristian Pallarés    :
1291189777a2SCristian Pallares}
1292189777a2SCristian Pallares
1293*b3fce824SCristian Pallarés
1294*b3fce824SCristian Pallarés# func_warn_and_continue ARG...
1295*b3fce824SCristian Pallarés# -----------------------------
1296*b3fce824SCristian Pallarés# Echo program name prefixed warning message to standard error.
1297*b3fce824SCristian Pallarésfunc_warn_and_continue ()
1298189777a2SCristian Pallares{
1299*b3fce824SCristian Pallarés    $debug_cmd
1300189777a2SCristian Pallares
1301*b3fce824SCristian Pallarés    $require_term_colors
1302*b3fce824SCristian Pallarés
1303*b3fce824SCristian Pallarés    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1304189777a2SCristian Pallares}
1305189777a2SCristian Pallares
1306*b3fce824SCristian Pallarés
1307*b3fce824SCristian Pallarés# func_warning CATEGORY ARG...
1308*b3fce824SCristian Pallarés# ----------------------------
1309*b3fce824SCristian Pallarés# Echo program name prefixed warning message to standard error. Warning
1310*b3fce824SCristian Pallarés# messages can be filtered according to CATEGORY, where this function
1311*b3fce824SCristian Pallarés# elides messages where CATEGORY is not listed in the global variable
1312*b3fce824SCristian Pallarés# 'opt_warning_types'.
1313*b3fce824SCristian Pallarésfunc_warning ()
1314*b3fce824SCristian Pallarés{
1315*b3fce824SCristian Pallarés    $debug_cmd
1316*b3fce824SCristian Pallarés
1317*b3fce824SCristian Pallarés    # CATEGORY must be in the warning_categories list!
1318*b3fce824SCristian Pallarés    case " $warning_categories " in
1319*b3fce824SCristian Pallarés      *" $1 "*) ;;
1320*b3fce824SCristian Pallarés      *) func_internal_error "invalid warning category '$1'" ;;
1321*b3fce824SCristian Pallarés    esac
1322*b3fce824SCristian Pallarés
1323*b3fce824SCristian Pallarés    _G_category=$1
1324*b3fce824SCristian Pallarés    shift
1325*b3fce824SCristian Pallarés
1326*b3fce824SCristian Pallarés    case " $opt_warning_types " in
1327*b3fce824SCristian Pallarés      *" $_G_category "*) $warning_func ${1+"$@"} ;;
1328*b3fce824SCristian Pallarés    esac
1329*b3fce824SCristian Pallarés}
1330*b3fce824SCristian Pallarés
1331*b3fce824SCristian Pallarés
1332*b3fce824SCristian Pallarés# func_sort_ver VER1 VER2
1333*b3fce824SCristian Pallarés# -----------------------
1334*b3fce824SCristian Pallarés# 'sort -V' is not generally available.
1335*b3fce824SCristian Pallarés# Note this deviates from the version comparison in automake
1336*b3fce824SCristian Pallarés# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1337*b3fce824SCristian Pallarés# but this should suffice as we won't be specifying old
1338*b3fce824SCristian Pallarés# version formats or redundant trailing .0 in bootstrap.conf.
1339*b3fce824SCristian Pallarés# If we did want full compatibility then we should probably
1340*b3fce824SCristian Pallarés# use m4_version_compare from autoconf.
1341*b3fce824SCristian Pallarésfunc_sort_ver ()
1342*b3fce824SCristian Pallarés{
1343*b3fce824SCristian Pallarés    $debug_cmd
1344*b3fce824SCristian Pallarés
1345*b3fce824SCristian Pallarés    printf '%s\n%s\n' "$1" "$2" \
1346*b3fce824SCristian Pallarés      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
1347*b3fce824SCristian Pallarés}
1348*b3fce824SCristian Pallarés
1349*b3fce824SCristian Pallarés# func_lt_ver PREV CURR
1350*b3fce824SCristian Pallarés# ---------------------
1351*b3fce824SCristian Pallarés# Return true if PREV and CURR are in the correct order according to
1352*b3fce824SCristian Pallarés# func_sort_ver, otherwise false.  Use it like this:
1353*b3fce824SCristian Pallarés#
1354*b3fce824SCristian Pallarés#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1355*b3fce824SCristian Pallarésfunc_lt_ver ()
1356*b3fce824SCristian Pallarés{
1357*b3fce824SCristian Pallarés    $debug_cmd
1358*b3fce824SCristian Pallarés
1359*b3fce824SCristian Pallarés    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1360*b3fce824SCristian Pallarés}
1361*b3fce824SCristian Pallarés
1362*b3fce824SCristian Pallarés
1363*b3fce824SCristian Pallarés# Local variables:
1364*b3fce824SCristian Pallarés# mode: shell-script
1365*b3fce824SCristian Pallarés# sh-indentation: 2
1366*b3fce824SCristian Pallarés# eval: (add-hook 'before-save-hook 'time-stamp)
1367*b3fce824SCristian Pallarés# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1368*b3fce824SCristian Pallarés# time-stamp-time-zone: "UTC"
1369*b3fce824SCristian Pallarés# End:
1370*b3fce824SCristian Pallarés#! /bin/sh
1371*b3fce824SCristian Pallarés
1372*b3fce824SCristian Pallarés# Set a version string for this script.
1373*b3fce824SCristian Pallarésscriptversion=2014-01-07.03; # UTC
1374*b3fce824SCristian Pallarés
1375*b3fce824SCristian Pallarés# A portable, pluggable option parser for Bourne shell.
1376*b3fce824SCristian Pallarés# Written by Gary V. Vaughan, 2010
1377*b3fce824SCristian Pallarés
1378*b3fce824SCristian Pallarés# Copyright (C) 2010-2015 Free Software Foundation, Inc.
1379*b3fce824SCristian Pallarés# This is free software; see the source for copying conditions.  There is NO
1380*b3fce824SCristian Pallarés# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1381*b3fce824SCristian Pallarés
1382*b3fce824SCristian Pallarés# This program is free software: you can redistribute it and/or modify
1383*b3fce824SCristian Pallarés# it under the terms of the GNU General Public License as published by
1384*b3fce824SCristian Pallarés# the Free Software Foundation, either version 3 of the License, or
1385*b3fce824SCristian Pallarés# (at your option) any later version.
1386*b3fce824SCristian Pallarés
1387*b3fce824SCristian Pallarés# This program is distributed in the hope that it will be useful,
1388*b3fce824SCristian Pallarés# but WITHOUT ANY WARRANTY; without even the implied warranty of
1389*b3fce824SCristian Pallarés# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1390*b3fce824SCristian Pallarés# GNU General Public License for more details.
1391*b3fce824SCristian Pallarés
1392*b3fce824SCristian Pallarés# You should have received a copy of the GNU General Public License
1393*b3fce824SCristian Pallarés# along with this program.  If not, see <http://www.gnu.org/licenses/>.
1394*b3fce824SCristian Pallarés
1395*b3fce824SCristian Pallarés# Please report bugs or propose patches to [email protected].
1396*b3fce824SCristian Pallarés
1397*b3fce824SCristian Pallarés
1398*b3fce824SCristian Pallarés## ------ ##
1399*b3fce824SCristian Pallarés## Usage. ##
1400*b3fce824SCristian Pallarés## ------ ##
1401*b3fce824SCristian Pallarés
1402*b3fce824SCristian Pallarés# This file is a library for parsing options in your shell scripts along
1403*b3fce824SCristian Pallarés# with assorted other useful supporting features that you can make use
1404*b3fce824SCristian Pallarés# of too.
1405*b3fce824SCristian Pallarés#
1406*b3fce824SCristian Pallarés# For the simplest scripts you might need only:
1407*b3fce824SCristian Pallarés#
1408*b3fce824SCristian Pallarés#   #!/bin/sh
1409*b3fce824SCristian Pallarés#   . relative/path/to/funclib.sh
1410*b3fce824SCristian Pallarés#   . relative/path/to/options-parser
1411*b3fce824SCristian Pallarés#   scriptversion=1.0
1412*b3fce824SCristian Pallarés#   func_options ${1+"$@"}
1413*b3fce824SCristian Pallarés#   eval set dummy "$func_options_result"; shift
1414*b3fce824SCristian Pallarés#   ...rest of your script...
1415*b3fce824SCristian Pallarés#
1416*b3fce824SCristian Pallarés# In order for the '--version' option to work, you will need to have a
1417*b3fce824SCristian Pallarés# suitably formatted comment like the one at the top of this file
1418*b3fce824SCristian Pallarés# starting with '# Written by ' and ending with '# warranty; '.
1419*b3fce824SCristian Pallarés#
1420*b3fce824SCristian Pallarés# For '-h' and '--help' to work, you will also need a one line
1421*b3fce824SCristian Pallarés# description of your script's purpose in a comment directly above the
1422*b3fce824SCristian Pallarés# '# Written by ' line, like the one at the top of this file.
1423*b3fce824SCristian Pallarés#
1424*b3fce824SCristian Pallarés# The default options also support '--debug', which will turn on shell
1425*b3fce824SCristian Pallarés# execution tracing (see the comment above debug_cmd below for another
1426*b3fce824SCristian Pallarés# use), and '--verbose' and the func_verbose function to allow your script
1427*b3fce824SCristian Pallarés# to display verbose messages only when your user has specified
1428*b3fce824SCristian Pallarés# '--verbose'.
1429*b3fce824SCristian Pallarés#
1430*b3fce824SCristian Pallarés# After sourcing this file, you can plug processing for additional
1431*b3fce824SCristian Pallarés# options by amending the variables from the 'Configuration' section
1432*b3fce824SCristian Pallarés# below, and following the instructions in the 'Option parsing'
1433*b3fce824SCristian Pallarés# section further down.
1434*b3fce824SCristian Pallarés
1435*b3fce824SCristian Pallarés## -------------- ##
1436*b3fce824SCristian Pallarés## Configuration. ##
1437*b3fce824SCristian Pallarés## -------------- ##
1438*b3fce824SCristian Pallarés
1439*b3fce824SCristian Pallarés# You should override these variables in your script after sourcing this
1440*b3fce824SCristian Pallarés# file so that they reflect the customisations you have added to the
1441*b3fce824SCristian Pallarés# option parser.
1442*b3fce824SCristian Pallarés
1443*b3fce824SCristian Pallarés# The usage line for option parsing errors and the start of '-h' and
1444*b3fce824SCristian Pallarés# '--help' output messages. You can embed shell variables for delayed
1445*b3fce824SCristian Pallarés# expansion at the time the message is displayed, but you will need to
1446*b3fce824SCristian Pallarés# quote other shell meta-characters carefully to prevent them being
1447*b3fce824SCristian Pallarés# expanded when the contents are evaled.
1448*b3fce824SCristian Pallarésusage='$progpath [OPTION]...'
1449*b3fce824SCristian Pallarés
1450*b3fce824SCristian Pallarés# Short help message in response to '-h' and '--help'.  Add to this or
1451*b3fce824SCristian Pallarés# override it after sourcing this library to reflect the full set of
1452*b3fce824SCristian Pallarés# options your script accepts.
1453*b3fce824SCristian Pallarésusage_message="\
1454*b3fce824SCristian Pallarés       --debug        enable verbose shell tracing
1455*b3fce824SCristian Pallarés   -W, --warnings=CATEGORY
1456*b3fce824SCristian Pallarés                      report the warnings falling in CATEGORY [all]
1457*b3fce824SCristian Pallarés   -v, --verbose      verbosely report processing
1458*b3fce824SCristian Pallarés       --version      print version information and exit
1459*b3fce824SCristian Pallarés   -h, --help         print short or long help message and exit
1460*b3fce824SCristian Pallarés"
1461*b3fce824SCristian Pallarés
1462*b3fce824SCristian Pallarés# Additional text appended to 'usage_message' in response to '--help'.
1463*b3fce824SCristian Pallaréslong_help_message="
1464*b3fce824SCristian PallarésWarning categories include:
1465*b3fce824SCristian Pallarés       'all'          show all warnings
1466*b3fce824SCristian Pallarés       'none'         turn off all the warnings
1467*b3fce824SCristian Pallarés       'error'        warnings are treated as fatal errors"
1468*b3fce824SCristian Pallarés
1469*b3fce824SCristian Pallarés# Help message printed before fatal option parsing errors.
1470*b3fce824SCristian Pallarésfatal_help="Try '\$progname --help' for more information."
1471*b3fce824SCristian Pallarés
1472*b3fce824SCristian Pallarés
1473*b3fce824SCristian Pallarés
1474*b3fce824SCristian Pallarés## ------------------------- ##
1475*b3fce824SCristian Pallarés## Hook function management. ##
1476*b3fce824SCristian Pallarés## ------------------------- ##
1477*b3fce824SCristian Pallarés
1478*b3fce824SCristian Pallarés# This section contains functions for adding, removing, and running hooks
1479*b3fce824SCristian Pallarés# to the main code.  A hook is just a named list of of function, that can
1480*b3fce824SCristian Pallarés# be run in order later on.
1481*b3fce824SCristian Pallarés
1482*b3fce824SCristian Pallarés# func_hookable FUNC_NAME
1483*b3fce824SCristian Pallarés# -----------------------
1484*b3fce824SCristian Pallarés# Declare that FUNC_NAME will run hooks added with
1485*b3fce824SCristian Pallarés# 'func_add_hook FUNC_NAME ...'.
1486*b3fce824SCristian Pallarésfunc_hookable ()
1487*b3fce824SCristian Pallarés{
1488*b3fce824SCristian Pallarés    $debug_cmd
1489*b3fce824SCristian Pallarés
1490*b3fce824SCristian Pallarés    func_append hookable_fns " $1"
1491*b3fce824SCristian Pallarés}
1492*b3fce824SCristian Pallarés
1493*b3fce824SCristian Pallarés
1494*b3fce824SCristian Pallarés# func_add_hook FUNC_NAME HOOK_FUNC
1495*b3fce824SCristian Pallarés# ---------------------------------
1496*b3fce824SCristian Pallarés# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
1497*b3fce824SCristian Pallarés# first have been declared "hookable" by a call to 'func_hookable'.
1498*b3fce824SCristian Pallarésfunc_add_hook ()
1499*b3fce824SCristian Pallarés{
1500*b3fce824SCristian Pallarés    $debug_cmd
1501*b3fce824SCristian Pallarés
1502*b3fce824SCristian Pallarés    case " $hookable_fns " in
1503*b3fce824SCristian Pallarés      *" $1 "*) ;;
1504*b3fce824SCristian Pallarés      *) func_fatal_error "'$1' does not accept hook functions." ;;
1505*b3fce824SCristian Pallarés    esac
1506*b3fce824SCristian Pallarés
1507*b3fce824SCristian Pallarés    eval func_append ${1}_hooks '" $2"'
1508*b3fce824SCristian Pallarés}
1509*b3fce824SCristian Pallarés
1510*b3fce824SCristian Pallarés
1511*b3fce824SCristian Pallarés# func_remove_hook FUNC_NAME HOOK_FUNC
1512*b3fce824SCristian Pallarés# ------------------------------------
1513*b3fce824SCristian Pallarés# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
1514*b3fce824SCristian Pallarésfunc_remove_hook ()
1515*b3fce824SCristian Pallarés{
1516*b3fce824SCristian Pallarés    $debug_cmd
1517*b3fce824SCristian Pallarés
1518*b3fce824SCristian Pallarés    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1519*b3fce824SCristian Pallarés}
1520*b3fce824SCristian Pallarés
1521*b3fce824SCristian Pallarés
1522*b3fce824SCristian Pallarés# func_run_hooks FUNC_NAME [ARG]...
1523*b3fce824SCristian Pallarés# ---------------------------------
1524*b3fce824SCristian Pallarés# Run all hook functions registered to FUNC_NAME.
1525*b3fce824SCristian Pallarés# It is assumed that the list of hook functions contains nothing more
1526*b3fce824SCristian Pallarés# than a whitespace-delimited list of legal shell function names, and
1527*b3fce824SCristian Pallarés# no effort is wasted trying to catch shell meta-characters or preserve
1528*b3fce824SCristian Pallarés# whitespace.
1529*b3fce824SCristian Pallarésfunc_run_hooks ()
1530*b3fce824SCristian Pallarés{
1531*b3fce824SCristian Pallarés    $debug_cmd
1532*b3fce824SCristian Pallarés
1533*b3fce824SCristian Pallarés    case " $hookable_fns " in
1534*b3fce824SCristian Pallarés      *" $1 "*) ;;
1535*b3fce824SCristian Pallarés      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
1536*b3fce824SCristian Pallarés    esac
1537*b3fce824SCristian Pallarés
1538*b3fce824SCristian Pallarés    eval _G_hook_fns=\$$1_hooks; shift
1539*b3fce824SCristian Pallarés
1540*b3fce824SCristian Pallarés    for _G_hook in $_G_hook_fns; do
1541*b3fce824SCristian Pallarés      eval $_G_hook '"$@"'
1542*b3fce824SCristian Pallarés
1543*b3fce824SCristian Pallarés      # store returned options list back into positional
1544*b3fce824SCristian Pallarés      # parameters for next 'cmd' execution.
1545*b3fce824SCristian Pallarés      eval _G_hook_result=\$${_G_hook}_result
1546*b3fce824SCristian Pallarés      eval set dummy "$_G_hook_result"; shift
1547*b3fce824SCristian Pallarés    done
1548*b3fce824SCristian Pallarés
1549*b3fce824SCristian Pallarés    func_quote_for_eval ${1+"$@"}
1550*b3fce824SCristian Pallarés    func_run_hooks_result=$func_quote_for_eval_result
1551*b3fce824SCristian Pallarés}
1552*b3fce824SCristian Pallarés
1553*b3fce824SCristian Pallarés
1554*b3fce824SCristian Pallarés
1555*b3fce824SCristian Pallarés## --------------- ##
1556*b3fce824SCristian Pallarés## Option parsing. ##
1557*b3fce824SCristian Pallarés## --------------- ##
1558*b3fce824SCristian Pallarés
1559*b3fce824SCristian Pallarés# In order to add your own option parsing hooks, you must accept the
1560*b3fce824SCristian Pallarés# full positional parameter list in your hook function, remove any
1561*b3fce824SCristian Pallarés# options that you action, and then pass back the remaining unprocessed
1562*b3fce824SCristian Pallarés# options in '<hooked_function_name>_result', escaped suitably for
1563*b3fce824SCristian Pallarés# 'eval'.  Like this:
1564*b3fce824SCristian Pallarés#
1565*b3fce824SCristian Pallarés#    my_options_prep ()
1566*b3fce824SCristian Pallarés#    {
1567*b3fce824SCristian Pallarés#        $debug_cmd
1568*b3fce824SCristian Pallarés#
1569*b3fce824SCristian Pallarés#        # Extend the existing usage message.
1570*b3fce824SCristian Pallarés#        usage_message=$usage_message'
1571*b3fce824SCristian Pallarés#      -s, --silent       don'\''t print informational messages
1572*b3fce824SCristian Pallarés#    '
1573*b3fce824SCristian Pallarés#
1574*b3fce824SCristian Pallarés#        func_quote_for_eval ${1+"$@"}
1575*b3fce824SCristian Pallarés#        my_options_prep_result=$func_quote_for_eval_result
1576*b3fce824SCristian Pallarés#    }
1577*b3fce824SCristian Pallarés#    func_add_hook func_options_prep my_options_prep
1578*b3fce824SCristian Pallarés#
1579*b3fce824SCristian Pallarés#
1580*b3fce824SCristian Pallarés#    my_silent_option ()
1581*b3fce824SCristian Pallarés#    {
1582*b3fce824SCristian Pallarés#        $debug_cmd
1583*b3fce824SCristian Pallarés#
1584*b3fce824SCristian Pallarés#        # Note that for efficiency, we parse as many options as we can
1585*b3fce824SCristian Pallarés#        # recognise in a loop before passing the remainder back to the
1586*b3fce824SCristian Pallarés#        # caller on the first unrecognised argument we encounter.
1587*b3fce824SCristian Pallarés#        while test $# -gt 0; do
1588*b3fce824SCristian Pallarés#          opt=$1; shift
1589*b3fce824SCristian Pallarés#          case $opt in
1590*b3fce824SCristian Pallarés#            --silent|-s) opt_silent=: ;;
1591*b3fce824SCristian Pallarés#            # Separate non-argument short options:
1592*b3fce824SCristian Pallarés#            -s*)         func_split_short_opt "$_G_opt"
1593*b3fce824SCristian Pallarés#                         set dummy "$func_split_short_opt_name" \
1594*b3fce824SCristian Pallarés#                             "-$func_split_short_opt_arg" ${1+"$@"}
1595*b3fce824SCristian Pallarés#                         shift
1596*b3fce824SCristian Pallarés#                         ;;
1597*b3fce824SCristian Pallarés#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
1598*b3fce824SCristian Pallarés#          esac
1599*b3fce824SCristian Pallarés#        done
1600*b3fce824SCristian Pallarés#
1601*b3fce824SCristian Pallarés#        func_quote_for_eval ${1+"$@"}
1602*b3fce824SCristian Pallarés#        my_silent_option_result=$func_quote_for_eval_result
1603*b3fce824SCristian Pallarés#    }
1604*b3fce824SCristian Pallarés#    func_add_hook func_parse_options my_silent_option
1605*b3fce824SCristian Pallarés#
1606*b3fce824SCristian Pallarés#
1607*b3fce824SCristian Pallarés#    my_option_validation ()
1608*b3fce824SCristian Pallarés#    {
1609*b3fce824SCristian Pallarés#        $debug_cmd
1610*b3fce824SCristian Pallarés#
1611*b3fce824SCristian Pallarés#        $opt_silent && $opt_verbose && func_fatal_help "\
1612*b3fce824SCristian Pallarés#    '--silent' and '--verbose' options are mutually exclusive."
1613*b3fce824SCristian Pallarés#
1614*b3fce824SCristian Pallarés#        func_quote_for_eval ${1+"$@"}
1615*b3fce824SCristian Pallarés#        my_option_validation_result=$func_quote_for_eval_result
1616*b3fce824SCristian Pallarés#    }
1617*b3fce824SCristian Pallarés#    func_add_hook func_validate_options my_option_validation
1618*b3fce824SCristian Pallarés#
1619*b3fce824SCristian Pallarés# You'll alse need to manually amend $usage_message to reflect the extra
1620*b3fce824SCristian Pallarés# options you parse.  It's preferable to append if you can, so that
1621*b3fce824SCristian Pallarés# multiple option parsing hooks can be added safely.
1622*b3fce824SCristian Pallarés
1623*b3fce824SCristian Pallarés
1624*b3fce824SCristian Pallarés# func_options [ARG]...
1625*b3fce824SCristian Pallarés# ---------------------
1626*b3fce824SCristian Pallarés# All the functions called inside func_options are hookable. See the
1627*b3fce824SCristian Pallarés# individual implementations for details.
1628*b3fce824SCristian Pallarésfunc_hookable func_options
1629*b3fce824SCristian Pallarésfunc_options ()
1630*b3fce824SCristian Pallarés{
1631*b3fce824SCristian Pallarés    $debug_cmd
1632*b3fce824SCristian Pallarés
1633*b3fce824SCristian Pallarés    func_options_prep ${1+"$@"}
1634*b3fce824SCristian Pallarés    eval func_parse_options \
1635*b3fce824SCristian Pallarés        ${func_options_prep_result+"$func_options_prep_result"}
1636*b3fce824SCristian Pallarés    eval func_validate_options \
1637*b3fce824SCristian Pallarés        ${func_parse_options_result+"$func_parse_options_result"}
1638*b3fce824SCristian Pallarés
1639*b3fce824SCristian Pallarés    eval func_run_hooks func_options \
1640*b3fce824SCristian Pallarés        ${func_validate_options_result+"$func_validate_options_result"}
1641*b3fce824SCristian Pallarés
1642*b3fce824SCristian Pallarés    # save modified positional parameters for caller
1643*b3fce824SCristian Pallarés    func_options_result=$func_run_hooks_result
1644*b3fce824SCristian Pallarés}
1645*b3fce824SCristian Pallarés
1646*b3fce824SCristian Pallarés
1647*b3fce824SCristian Pallarés# func_options_prep [ARG]...
1648*b3fce824SCristian Pallarés# --------------------------
1649*b3fce824SCristian Pallarés# All initialisations required before starting the option parse loop.
1650*b3fce824SCristian Pallarés# Note that when calling hook functions, we pass through the list of
1651*b3fce824SCristian Pallarés# positional parameters.  If a hook function modifies that list, and
1652*b3fce824SCristian Pallarés# needs to propogate that back to rest of this script, then the complete
1653*b3fce824SCristian Pallarés# modified list must be put in 'func_run_hooks_result' before
1654*b3fce824SCristian Pallarés# returning.
1655*b3fce824SCristian Pallarésfunc_hookable func_options_prep
1656*b3fce824SCristian Pallarésfunc_options_prep ()
1657*b3fce824SCristian Pallarés{
1658*b3fce824SCristian Pallarés    $debug_cmd
1659*b3fce824SCristian Pallarés
1660*b3fce824SCristian Pallarés    # Option defaults:
1661*b3fce824SCristian Pallarés    opt_verbose=false
1662*b3fce824SCristian Pallarés    opt_warning_types=
1663*b3fce824SCristian Pallarés
1664*b3fce824SCristian Pallarés    func_run_hooks func_options_prep ${1+"$@"}
1665*b3fce824SCristian Pallarés
1666*b3fce824SCristian Pallarés    # save modified positional parameters for caller
1667*b3fce824SCristian Pallarés    func_options_prep_result=$func_run_hooks_result
1668*b3fce824SCristian Pallarés}
1669*b3fce824SCristian Pallarés
1670*b3fce824SCristian Pallarés
1671*b3fce824SCristian Pallarés# func_parse_options [ARG]...
1672*b3fce824SCristian Pallarés# ---------------------------
1673*b3fce824SCristian Pallarés# The main option parsing loop.
1674*b3fce824SCristian Pallarésfunc_hookable func_parse_options
1675*b3fce824SCristian Pallarésfunc_parse_options ()
1676*b3fce824SCristian Pallarés{
1677*b3fce824SCristian Pallarés    $debug_cmd
1678*b3fce824SCristian Pallarés
1679*b3fce824SCristian Pallarés    func_parse_options_result=
1680*b3fce824SCristian Pallarés
1681*b3fce824SCristian Pallarés    # this just eases exit handling
1682*b3fce824SCristian Pallarés    while test $# -gt 0; do
1683*b3fce824SCristian Pallarés      # Defer to hook functions for initial option parsing, so they
1684*b3fce824SCristian Pallarés      # get priority in the event of reusing an option name.
1685*b3fce824SCristian Pallarés      func_run_hooks func_parse_options ${1+"$@"}
1686*b3fce824SCristian Pallarés
1687*b3fce824SCristian Pallarés      # Adjust func_parse_options positional parameters to match
1688*b3fce824SCristian Pallarés      eval set dummy "$func_run_hooks_result"; shift
1689*b3fce824SCristian Pallarés
1690*b3fce824SCristian Pallarés      # Break out of the loop if we already parsed every option.
1691*b3fce824SCristian Pallarés      test $# -gt 0 || break
1692*b3fce824SCristian Pallarés
1693*b3fce824SCristian Pallarés      _G_opt=$1
1694*b3fce824SCristian Pallarés      shift
1695*b3fce824SCristian Pallarés      case $_G_opt in
1696*b3fce824SCristian Pallarés        --debug|-x)   debug_cmd='set -x'
1697*b3fce824SCristian Pallarés                      func_echo "enabling shell trace mode"
1698*b3fce824SCristian Pallarés                      $debug_cmd
1699*b3fce824SCristian Pallarés                      ;;
1700*b3fce824SCristian Pallarés
1701*b3fce824SCristian Pallarés        --no-warnings|--no-warning|--no-warn)
1702*b3fce824SCristian Pallarés                      set dummy --warnings none ${1+"$@"}
1703*b3fce824SCristian Pallarés                      shift
1704*b3fce824SCristian Pallarés		      ;;
1705*b3fce824SCristian Pallarés
1706*b3fce824SCristian Pallarés        --warnings|--warning|-W)
1707*b3fce824SCristian Pallarés                      test $# = 0 && func_missing_arg $_G_opt && break
1708*b3fce824SCristian Pallarés                      case " $warning_categories $1" in
1709*b3fce824SCristian Pallarés                        *" $1 "*)
1710*b3fce824SCristian Pallarés                          # trailing space prevents matching last $1 above
1711*b3fce824SCristian Pallarés                          func_append_uniq opt_warning_types " $1"
1712*b3fce824SCristian Pallarés                          ;;
1713*b3fce824SCristian Pallarés                        *all)
1714*b3fce824SCristian Pallarés                          opt_warning_types=$warning_categories
1715*b3fce824SCristian Pallarés                          ;;
1716*b3fce824SCristian Pallarés                        *none)
1717*b3fce824SCristian Pallarés                          opt_warning_types=none
1718*b3fce824SCristian Pallarés                          warning_func=:
1719*b3fce824SCristian Pallarés                          ;;
1720*b3fce824SCristian Pallarés                        *error)
1721*b3fce824SCristian Pallarés                          opt_warning_types=$warning_categories
1722*b3fce824SCristian Pallarés                          warning_func=func_fatal_error
1723*b3fce824SCristian Pallarés                          ;;
1724*b3fce824SCristian Pallarés                        *)
1725*b3fce824SCristian Pallarés                          func_fatal_error \
1726*b3fce824SCristian Pallarés                             "unsupported warning category: '$1'"
1727*b3fce824SCristian Pallarés                          ;;
1728*b3fce824SCristian Pallarés                      esac
1729*b3fce824SCristian Pallarés                      shift
1730*b3fce824SCristian Pallarés                      ;;
1731*b3fce824SCristian Pallarés
1732*b3fce824SCristian Pallarés        --verbose|-v) opt_verbose=: ;;
1733*b3fce824SCristian Pallarés        --version)    func_version ;;
1734*b3fce824SCristian Pallarés        -\?|-h)       func_usage ;;
1735*b3fce824SCristian Pallarés        --help)       func_help ;;
1736*b3fce824SCristian Pallarés
1737*b3fce824SCristian Pallarés	# Separate optargs to long options (plugins may need this):
1738*b3fce824SCristian Pallarés	--*=*)        func_split_equals "$_G_opt"
1739*b3fce824SCristian Pallarés	              set dummy "$func_split_equals_lhs" \
1740*b3fce824SCristian Pallarés                          "$func_split_equals_rhs" ${1+"$@"}
1741*b3fce824SCristian Pallarés                      shift
1742*b3fce824SCristian Pallarés                      ;;
1743*b3fce824SCristian Pallarés
1744*b3fce824SCristian Pallarés       # Separate optargs to short options:
1745*b3fce824SCristian Pallarés        -W*)
1746*b3fce824SCristian Pallarés                      func_split_short_opt "$_G_opt"
1747*b3fce824SCristian Pallarés                      set dummy "$func_split_short_opt_name" \
1748*b3fce824SCristian Pallarés                          "$func_split_short_opt_arg" ${1+"$@"}
1749*b3fce824SCristian Pallarés                      shift
1750*b3fce824SCristian Pallarés                      ;;
1751*b3fce824SCristian Pallarés
1752*b3fce824SCristian Pallarés        # Separate non-argument short options:
1753*b3fce824SCristian Pallarés        -\?*|-h*|-v*|-x*)
1754*b3fce824SCristian Pallarés                      func_split_short_opt "$_G_opt"
1755*b3fce824SCristian Pallarés                      set dummy "$func_split_short_opt_name" \
1756*b3fce824SCristian Pallarés                          "-$func_split_short_opt_arg" ${1+"$@"}
1757*b3fce824SCristian Pallarés                      shift
1758*b3fce824SCristian Pallarés                      ;;
1759*b3fce824SCristian Pallarés
1760*b3fce824SCristian Pallarés        --)           break ;;
1761*b3fce824SCristian Pallarés        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
1762*b3fce824SCristian Pallarés        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1763*b3fce824SCristian Pallarés      esac
1764*b3fce824SCristian Pallarés    done
1765*b3fce824SCristian Pallarés
1766*b3fce824SCristian Pallarés    # save modified positional parameters for caller
1767*b3fce824SCristian Pallarés    func_quote_for_eval ${1+"$@"}
1768*b3fce824SCristian Pallarés    func_parse_options_result=$func_quote_for_eval_result
1769*b3fce824SCristian Pallarés}
1770*b3fce824SCristian Pallarés
1771*b3fce824SCristian Pallarés
1772*b3fce824SCristian Pallarés# func_validate_options [ARG]...
1773*b3fce824SCristian Pallarés# ------------------------------
1774*b3fce824SCristian Pallarés# Perform any sanity checks on option settings and/or unconsumed
1775*b3fce824SCristian Pallarés# arguments.
1776*b3fce824SCristian Pallarésfunc_hookable func_validate_options
1777*b3fce824SCristian Pallarésfunc_validate_options ()
1778*b3fce824SCristian Pallarés{
1779*b3fce824SCristian Pallarés    $debug_cmd
1780*b3fce824SCristian Pallarés
1781*b3fce824SCristian Pallarés    # Display all warnings if -W was not given.
1782*b3fce824SCristian Pallarés    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
1783*b3fce824SCristian Pallarés
1784*b3fce824SCristian Pallarés    func_run_hooks func_validate_options ${1+"$@"}
1785*b3fce824SCristian Pallarés
1786*b3fce824SCristian Pallarés    # Bail if the options were screwed!
1787*b3fce824SCristian Pallarés    $exit_cmd $EXIT_FAILURE
1788*b3fce824SCristian Pallarés
1789*b3fce824SCristian Pallarés    # save modified positional parameters for caller
1790*b3fce824SCristian Pallarés    func_validate_options_result=$func_run_hooks_result
1791*b3fce824SCristian Pallarés}
1792*b3fce824SCristian Pallarés
1793*b3fce824SCristian Pallarés
1794*b3fce824SCristian Pallarés
1795*b3fce824SCristian Pallarés## ----------------- ##
1796*b3fce824SCristian Pallarés## Helper functions. ##
1797*b3fce824SCristian Pallarés## ----------------- ##
1798*b3fce824SCristian Pallarés
1799*b3fce824SCristian Pallarés# This section contains the helper functions used by the rest of the
1800*b3fce824SCristian Pallarés# hookable option parser framework in ascii-betical order.
1801*b3fce824SCristian Pallarés
1802*b3fce824SCristian Pallarés
1803*b3fce824SCristian Pallarés# func_fatal_help ARG...
1804*b3fce824SCristian Pallarés# ----------------------
1805*b3fce824SCristian Pallarés# Echo program name prefixed message to standard error, followed by
1806*b3fce824SCristian Pallarés# a help hint, and exit.
1807*b3fce824SCristian Pallarésfunc_fatal_help ()
1808*b3fce824SCristian Pallarés{
1809*b3fce824SCristian Pallarés    $debug_cmd
1810*b3fce824SCristian Pallarés
1811*b3fce824SCristian Pallarés    eval \$ECHO \""Usage: $usage"\"
1812*b3fce824SCristian Pallarés    eval \$ECHO \""$fatal_help"\"
1813*b3fce824SCristian Pallarés    func_error ${1+"$@"}
1814*b3fce824SCristian Pallarés    exit $EXIT_FAILURE
1815*b3fce824SCristian Pallarés}
1816*b3fce824SCristian Pallarés
1817*b3fce824SCristian Pallarés
1818*b3fce824SCristian Pallarés# func_help
1819*b3fce824SCristian Pallarés# ---------
1820*b3fce824SCristian Pallarés# Echo long help message to standard output and exit.
1821189777a2SCristian Pallaresfunc_help ()
1822189777a2SCristian Pallares{
1823*b3fce824SCristian Pallarés    $debug_cmd
1824189777a2SCristian Pallares
1825*b3fce824SCristian Pallarés    func_usage_message
1826*b3fce824SCristian Pallarés    $ECHO "$long_help_message"
1827*b3fce824SCristian Pallarés    exit 0
1828189777a2SCristian Pallares}
1829189777a2SCristian Pallares
1830*b3fce824SCristian Pallarés
1831*b3fce824SCristian Pallarés# func_missing_arg ARGNAME
1832*b3fce824SCristian Pallarés# ------------------------
1833189777a2SCristian Pallares# Echo program name prefixed message to standard error and set global
1834189777a2SCristian Pallares# exit_cmd.
1835189777a2SCristian Pallaresfunc_missing_arg ()
1836189777a2SCristian Pallares{
1837*b3fce824SCristian Pallarés    $debug_cmd
1838189777a2SCristian Pallares
1839*b3fce824SCristian Pallarés    func_error "Missing argument for '$1'."
1840189777a2SCristian Pallares    exit_cmd=exit
1841189777a2SCristian Pallares}
1842189777a2SCristian Pallares
1843189777a2SCristian Pallares
1844*b3fce824SCristian Pallarés# func_split_equals STRING
1845*b3fce824SCristian Pallarés# ------------------------
1846*b3fce824SCristian Pallarés# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
1847*b3fce824SCristian Pallarés# splitting STRING at the '=' sign.
1848*b3fce824SCristian Pallaréstest -z "$_G_HAVE_XSI_OPS" \
1849*b3fce824SCristian Pallarés    && (eval 'x=a/b/c;
1850*b3fce824SCristian Pallarés      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
1851*b3fce824SCristian Pallarés    && _G_HAVE_XSI_OPS=yes
1852*b3fce824SCristian Pallarés
1853*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"
1854*b3fce824SCristian Pallarésthen
1855*b3fce824SCristian Pallarés  # This is an XSI compatible shell, allowing a faster implementation...
1856*b3fce824SCristian Pallarés  eval 'func_split_equals ()
1857*b3fce824SCristian Pallarés  {
1858*b3fce824SCristian Pallarés      $debug_cmd
1859*b3fce824SCristian Pallarés
1860*b3fce824SCristian Pallarés      func_split_equals_lhs=${1%%=*}
1861*b3fce824SCristian Pallarés      func_split_equals_rhs=${1#*=}
1862*b3fce824SCristian Pallarés      test "x$func_split_equals_lhs" = "x$1" \
1863*b3fce824SCristian Pallarés        && func_split_equals_rhs=
1864*b3fce824SCristian Pallarés  }'
1865*b3fce824SCristian Pallaréselse
1866*b3fce824SCristian Pallarés  # ...otherwise fall back to using expr, which is often a shell builtin.
1867*b3fce824SCristian Pallarés  func_split_equals ()
1868*b3fce824SCristian Pallarés  {
1869*b3fce824SCristian Pallarés      $debug_cmd
1870*b3fce824SCristian Pallarés
1871*b3fce824SCristian Pallarés      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
1872*b3fce824SCristian Pallarés      func_split_equals_rhs=
1873*b3fce824SCristian Pallarés      test "x$func_split_equals_lhs" = "x$1" \
1874*b3fce824SCristian Pallarés        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
1875*b3fce824SCristian Pallarés  }
1876*b3fce824SCristian Pallarésfi #func_split_equals
1877*b3fce824SCristian Pallarés
1878*b3fce824SCristian Pallarés
1879*b3fce824SCristian Pallarés# func_split_short_opt SHORTOPT
1880*b3fce824SCristian Pallarés# -----------------------------
1881189777a2SCristian Pallares# Set func_split_short_opt_name and func_split_short_opt_arg shell
1882189777a2SCristian Pallares# variables after splitting SHORTOPT after the 2nd character.
1883*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"
1884*b3fce824SCristian Pallarésthen
1885*b3fce824SCristian Pallarés  # This is an XSI compatible shell, allowing a faster implementation...
1886*b3fce824SCristian Pallarés  eval 'func_split_short_opt ()
1887*b3fce824SCristian Pallarés  {
1888*b3fce824SCristian Pallarés      $debug_cmd
1889*b3fce824SCristian Pallarés
1890*b3fce824SCristian Pallarés      func_split_short_opt_arg=${1#??}
1891*b3fce824SCristian Pallarés      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
1892*b3fce824SCristian Pallarés  }'
1893*b3fce824SCristian Pallaréselse
1894*b3fce824SCristian Pallarés  # ...otherwise fall back to using expr, which is often a shell builtin.
1895189777a2SCristian Pallares  func_split_short_opt ()
1896189777a2SCristian Pallares  {
1897*b3fce824SCristian Pallarés      $debug_cmd
1898189777a2SCristian Pallares
1899*b3fce824SCristian Pallarés      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
1900*b3fce824SCristian Pallarés      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
1901*b3fce824SCristian Pallarés  }
1902*b3fce824SCristian Pallarésfi #func_split_short_opt
1903189777a2SCristian Pallares
1904189777a2SCristian Pallares
1905*b3fce824SCristian Pallarés# func_usage
1906*b3fce824SCristian Pallarés# ----------
1907*b3fce824SCristian Pallarés# Echo short help message to standard output and exit.
1908*b3fce824SCristian Pallarésfunc_usage ()
1909189777a2SCristian Pallares{
1910*b3fce824SCristian Pallarés    $debug_cmd
1911189777a2SCristian Pallares
1912*b3fce824SCristian Pallarés    func_usage_message
1913*b3fce824SCristian Pallarés    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
1914*b3fce824SCristian Pallarés    exit 0
1915*b3fce824SCristian Pallarés}
1916189777a2SCristian Pallares
1917189777a2SCristian Pallares
1918*b3fce824SCristian Pallarés# func_usage_message
1919*b3fce824SCristian Pallarés# ------------------
1920*b3fce824SCristian Pallarés# Echo short help message to standard output.
1921*b3fce824SCristian Pallarésfunc_usage_message ()
1922189777a2SCristian Pallares{
1923*b3fce824SCristian Pallarés    $debug_cmd
1924189777a2SCristian Pallares
1925*b3fce824SCristian Pallarés    eval \$ECHO \""Usage: $usage"\"
1926*b3fce824SCristian Pallarés    echo
1927*b3fce824SCristian Pallarés    $SED -n 's|^# ||
1928*b3fce824SCristian Pallarés        /^Written by/{
1929*b3fce824SCristian Pallarés          x;p;x
1930*b3fce824SCristian Pallarés        }
1931*b3fce824SCristian Pallarés	h
1932*b3fce824SCristian Pallarés	/^Written by/q' < "$progpath"
1933*b3fce824SCristian Pallarés    echo
1934*b3fce824SCristian Pallarés    eval \$ECHO \""$usage_message"\"
1935*b3fce824SCristian Pallarés}
1936*b3fce824SCristian Pallarés
1937*b3fce824SCristian Pallarés
1938*b3fce824SCristian Pallarés# func_version
1939*b3fce824SCristian Pallarés# ------------
1940*b3fce824SCristian Pallarés# Echo version message to standard output and exit.
1941*b3fce824SCristian Pallarésfunc_version ()
1942189777a2SCristian Pallares{
1943*b3fce824SCristian Pallarés    $debug_cmd
1944*b3fce824SCristian Pallarés
1945*b3fce824SCristian Pallarés    printf '%s\n' "$progname $scriptversion"
1946*b3fce824SCristian Pallarés    $SED -n '
1947*b3fce824SCristian Pallarés        /(C)/!b go
1948*b3fce824SCristian Pallarés        :more
1949*b3fce824SCristian Pallarés        /\./!{
1950*b3fce824SCristian Pallarés          N
1951*b3fce824SCristian Pallarés          s|\n# | |
1952*b3fce824SCristian Pallarés          b more
1953*b3fce824SCristian Pallarés        }
1954*b3fce824SCristian Pallarés        :go
1955*b3fce824SCristian Pallarés        /^# Written by /,/# warranty; / {
1956*b3fce824SCristian Pallarés          s|^# ||
1957*b3fce824SCristian Pallarés          s|^# *$||
1958*b3fce824SCristian Pallarés          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
1959*b3fce824SCristian Pallarés          p
1960*b3fce824SCristian Pallarés        }
1961*b3fce824SCristian Pallarés        /^# Written by / {
1962*b3fce824SCristian Pallarés          s|^# ||
1963*b3fce824SCristian Pallarés          p
1964*b3fce824SCristian Pallarés        }
1965*b3fce824SCristian Pallarés        /^warranty; /q' < "$progpath"
1966*b3fce824SCristian Pallarés
1967*b3fce824SCristian Pallarés    exit $?
1968*b3fce824SCristian Pallarés}
1969189777a2SCristian Pallares
1970189777a2SCristian Pallares
1971*b3fce824SCristian Pallarés# Local variables:
1972*b3fce824SCristian Pallarés# mode: shell-script
1973*b3fce824SCristian Pallarés# sh-indentation: 2
1974*b3fce824SCristian Pallarés# eval: (add-hook 'before-save-hook 'time-stamp)
1975*b3fce824SCristian Pallarés# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1976*b3fce824SCristian Pallarés# time-stamp-time-zone: "UTC"
1977*b3fce824SCristian Pallarés# End:
1978*b3fce824SCristian Pallarés
1979*b3fce824SCristian Pallarés# Set a version string.
1980*b3fce824SCristian Pallarésscriptversion='(GNU libtool) 2.4.6 Debian-2.4.6-1'
1981*b3fce824SCristian Pallarés
1982*b3fce824SCristian Pallarés
1983*b3fce824SCristian Pallarés# func_echo ARG...
1984*b3fce824SCristian Pallarés# ----------------
1985*b3fce824SCristian Pallarés# Libtool also displays the current mode in messages, so override
1986*b3fce824SCristian Pallarés# funclib.sh func_echo with this custom definition.
1987*b3fce824SCristian Pallarésfunc_echo ()
1988189777a2SCristian Pallares{
1989*b3fce824SCristian Pallarés    $debug_cmd
1990*b3fce824SCristian Pallarés
1991*b3fce824SCristian Pallarés    _G_message=$*
1992*b3fce824SCristian Pallarés
1993*b3fce824SCristian Pallarés    func_echo_IFS=$IFS
1994*b3fce824SCristian Pallarés    IFS=$nl
1995*b3fce824SCristian Pallarés    for _G_line in $_G_message; do
1996*b3fce824SCristian Pallarés      IFS=$func_echo_IFS
1997*b3fce824SCristian Pallarés      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
1998*b3fce824SCristian Pallarés    done
1999*b3fce824SCristian Pallarés    IFS=$func_echo_IFS
2000*b3fce824SCristian Pallarés}
2001189777a2SCristian Pallares
2002189777a2SCristian Pallares
2003*b3fce824SCristian Pallarés# func_warning ARG...
2004*b3fce824SCristian Pallarés# -------------------
2005*b3fce824SCristian Pallarés# Libtool warnings are not categorized, so override funclib.sh
2006*b3fce824SCristian Pallarés# func_warning with this simpler definition.
2007*b3fce824SCristian Pallarésfunc_warning ()
2008189777a2SCristian Pallares{
2009*b3fce824SCristian Pallarés    $debug_cmd
2010*b3fce824SCristian Pallarés
2011*b3fce824SCristian Pallarés    $warning_func ${1+"$@"}
2012*b3fce824SCristian Pallarés}
2013189777a2SCristian Pallares
2014189777a2SCristian Pallares
2015*b3fce824SCristian Pallarés## ---------------- ##
2016*b3fce824SCristian Pallarés## Options parsing. ##
2017*b3fce824SCristian Pallarés## ---------------- ##
2018*b3fce824SCristian Pallarés
2019*b3fce824SCristian Pallarés# Hook in the functions to make sure our own options are parsed during
2020*b3fce824SCristian Pallarés# the option parsing loop.
2021*b3fce824SCristian Pallarés
2022*b3fce824SCristian Pallarésusage='$progpath [OPTION]... [MODE-ARG]...'
2023*b3fce824SCristian Pallarés
2024*b3fce824SCristian Pallarés# Short help message in response to '-h'.
2025*b3fce824SCristian Pallarésusage_message="Options:
2026*b3fce824SCristian Pallarés       --config             show all configuration variables
2027*b3fce824SCristian Pallarés       --debug              enable verbose shell tracing
2028*b3fce824SCristian Pallarés   -n, --dry-run            display commands without modifying any files
2029*b3fce824SCristian Pallarés       --features           display basic configuration information and exit
2030*b3fce824SCristian Pallarés       --mode=MODE          use operation mode MODE
2031*b3fce824SCristian Pallarés       --no-warnings        equivalent to '-Wnone'
2032*b3fce824SCristian Pallarés       --preserve-dup-deps  don't remove duplicate dependency libraries
2033*b3fce824SCristian Pallarés       --quiet, --silent    don't print informational messages
2034*b3fce824SCristian Pallarés       --tag=TAG            use configuration variables from tag TAG
2035*b3fce824SCristian Pallarés   -v, --verbose            print more informational messages than default
2036*b3fce824SCristian Pallarés       --version            print version information
2037*b3fce824SCristian Pallarés   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
2038*b3fce824SCristian Pallarés   -h, --help, --help-all   print short, long, or detailed help message
2039*b3fce824SCristian Pallarés"
2040*b3fce824SCristian Pallarés
2041*b3fce824SCristian Pallarés# Additional text appended to 'usage_message' in response to '--help'.
2042*b3fce824SCristian Pallarésfunc_help ()
2043*b3fce824SCristian Pallarés{
2044*b3fce824SCristian Pallarés    $debug_cmd
2045*b3fce824SCristian Pallarés
2046*b3fce824SCristian Pallarés    func_usage_message
2047*b3fce824SCristian Pallarés    $ECHO "$long_help_message
2048*b3fce824SCristian Pallarés
2049*b3fce824SCristian PallarésMODE must be one of the following:
2050*b3fce824SCristian Pallarés
2051*b3fce824SCristian Pallarés       clean           remove files from the build directory
2052*b3fce824SCristian Pallarés       compile         compile a source file into a libtool object
2053*b3fce824SCristian Pallarés       execute         automatically set library path, then run a program
2054*b3fce824SCristian Pallarés       finish          complete the installation of libtool libraries
2055*b3fce824SCristian Pallarés       install         install libraries or executables
2056*b3fce824SCristian Pallarés       link            create a library or an executable
2057*b3fce824SCristian Pallarés       uninstall       remove libraries from an installed directory
2058*b3fce824SCristian Pallarés
2059*b3fce824SCristian PallarésMODE-ARGS vary depending on the MODE.  When passed as first option,
2060*b3fce824SCristian Pallarés'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2061*b3fce824SCristian PallarésTry '$progname --help --mode=MODE' for a more detailed description of MODE.
2062*b3fce824SCristian Pallarés
2063*b3fce824SCristian PallarésWhen reporting a bug, please describe a test case to reproduce it and
2064*b3fce824SCristian Pallarésinclude the following information:
2065*b3fce824SCristian Pallarés
2066*b3fce824SCristian Pallarés       host-triplet:   $host
2067*b3fce824SCristian Pallarés       shell:          $SHELL
2068*b3fce824SCristian Pallarés       compiler:       $LTCC
2069*b3fce824SCristian Pallarés       compiler flags: $LTCFLAGS
2070*b3fce824SCristian Pallarés       linker:         $LD (gnu? $with_gnu_ld)
2071*b3fce824SCristian Pallarés       version:        $progname $scriptversion
2072*b3fce824SCristian Pallarés       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2073*b3fce824SCristian Pallarés       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2074*b3fce824SCristian Pallarés
2075*b3fce824SCristian PallarésReport bugs to <[email protected]>.
2076*b3fce824SCristian PallarésGNU libtool home page: <http://www.gnu.org/s/libtool/>.
2077*b3fce824SCristian PallarésGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
2078*b3fce824SCristian Pallarés    exit 0
2079*b3fce824SCristian Pallarés}
2080*b3fce824SCristian Pallarés
2081*b3fce824SCristian Pallarés
2082*b3fce824SCristian Pallarés# func_lo2o OBJECT-NAME
2083*b3fce824SCristian Pallarés# ---------------------
2084*b3fce824SCristian Pallarés# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2085*b3fce824SCristian Pallarés# object suffix.
2086*b3fce824SCristian Pallarés
2087*b3fce824SCristian Pallaréslo2o=s/\\.lo\$/.$objext/
2088*b3fce824SCristian Pallaréso2lo=s/\\.$objext\$/.lo/
2089*b3fce824SCristian Pallarés
2090*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then
2091*b3fce824SCristian Pallarés  eval 'func_lo2o ()
2092*b3fce824SCristian Pallarés  {
2093*b3fce824SCristian Pallarés    case $1 in
2094*b3fce824SCristian Pallarés      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2095*b3fce824SCristian Pallarés      *   ) func_lo2o_result=$1               ;;
2096*b3fce824SCristian Pallarés    esac
2097*b3fce824SCristian Pallarés  }'
2098*b3fce824SCristian Pallarés
2099*b3fce824SCristian Pallarés  # func_xform LIBOBJ-OR-SOURCE
2100*b3fce824SCristian Pallarés  # ---------------------------
2101*b3fce824SCristian Pallarés  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2102*b3fce824SCristian Pallarés  # suffix to a '.lo' libtool-object suffix.
2103*b3fce824SCristian Pallarés  eval 'func_xform ()
2104*b3fce824SCristian Pallarés  {
2105*b3fce824SCristian Pallarés    func_xform_result=${1%.*}.lo
2106*b3fce824SCristian Pallarés  }'
2107*b3fce824SCristian Pallaréselse
2108*b3fce824SCristian Pallarés  # ...otherwise fall back to using sed.
2109189777a2SCristian Pallares  func_lo2o ()
2110189777a2SCristian Pallares  {
2111*b3fce824SCristian Pallarés    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2112*b3fce824SCristian Pallarés  }
2113189777a2SCristian Pallares
2114189777a2SCristian Pallares  func_xform ()
2115189777a2SCristian Pallares  {
2116*b3fce824SCristian Pallarés    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2117*b3fce824SCristian Pallarés  }
2118*b3fce824SCristian Pallarésfi
2119189777a2SCristian Pallares
2120189777a2SCristian Pallares
2121*b3fce824SCristian Pallarés# func_fatal_configuration ARG...
2122*b3fce824SCristian Pallarés# -------------------------------
2123189777a2SCristian Pallares# Echo program name prefixed message to standard error, followed by
2124189777a2SCristian Pallares# a configuration failure hint, and exit.
2125189777a2SCristian Pallaresfunc_fatal_configuration ()
2126189777a2SCristian Pallares{
2127*b3fce824SCristian Pallarés    func__fatal_error ${1+"$@"} \
2128*b3fce824SCristian Pallarés      "See the $PACKAGE documentation for more information." \
2129*b3fce824SCristian Pallarés      "Fatal configuration error."
2130189777a2SCristian Pallares}
2131189777a2SCristian Pallares
2132189777a2SCristian Pallares
2133189777a2SCristian Pallares# func_config
2134*b3fce824SCristian Pallarés# -----------
2135189777a2SCristian Pallares# Display the configuration for all the tags in this script.
2136189777a2SCristian Pallaresfunc_config ()
2137189777a2SCristian Pallares{
2138189777a2SCristian Pallares    re_begincf='^# ### BEGIN LIBTOOL'
2139189777a2SCristian Pallares    re_endcf='^# ### END LIBTOOL'
2140189777a2SCristian Pallares
2141189777a2SCristian Pallares    # Default configuration.
2142189777a2SCristian Pallares    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2143189777a2SCristian Pallares
2144189777a2SCristian Pallares    # Now print the configurations for the tags.
2145189777a2SCristian Pallares    for tagname in $taglist; do
2146189777a2SCristian Pallares      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2147189777a2SCristian Pallares    done
2148189777a2SCristian Pallares
2149189777a2SCristian Pallares    exit $?
2150189777a2SCristian Pallares}
2151189777a2SCristian Pallares
2152*b3fce824SCristian Pallarés
2153189777a2SCristian Pallares# func_features
2154*b3fce824SCristian Pallarés# -------------
2155189777a2SCristian Pallares# Display the features supported by this script.
2156189777a2SCristian Pallaresfunc_features ()
2157189777a2SCristian Pallares{
2158189777a2SCristian Pallares    echo "host: $host"
2159*b3fce824SCristian Pallarés    if test yes = "$build_libtool_libs"; then
2160189777a2SCristian Pallares      echo "enable shared libraries"
2161189777a2SCristian Pallares    else
2162189777a2SCristian Pallares      echo "disable shared libraries"
2163189777a2SCristian Pallares    fi
2164*b3fce824SCristian Pallarés    if test yes = "$build_old_libs"; then
2165189777a2SCristian Pallares      echo "enable static libraries"
2166189777a2SCristian Pallares    else
2167189777a2SCristian Pallares      echo "disable static libraries"
2168189777a2SCristian Pallares    fi
2169189777a2SCristian Pallares
2170189777a2SCristian Pallares    exit $?
2171189777a2SCristian Pallares}
2172189777a2SCristian Pallares
2173*b3fce824SCristian Pallarés
2174*b3fce824SCristian Pallarés# func_enable_tag TAGNAME
2175*b3fce824SCristian Pallarés# -----------------------
2176189777a2SCristian Pallares# Verify that TAGNAME is valid, and either flag an error and exit, or
2177189777a2SCristian Pallares# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2178189777a2SCristian Pallares# variable here.
2179189777a2SCristian Pallaresfunc_enable_tag ()
2180189777a2SCristian Pallares{
2181189777a2SCristian Pallares    # Global variable:
2182*b3fce824SCristian Pallarés    tagname=$1
2183189777a2SCristian Pallares
2184189777a2SCristian Pallares    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2185189777a2SCristian Pallares    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2186*b3fce824SCristian Pallarés    sed_extractcf=/$re_begincf/,/$re_endcf/p
2187189777a2SCristian Pallares
2188189777a2SCristian Pallares    # Validate tagname.
2189189777a2SCristian Pallares    case $tagname in
2190189777a2SCristian Pallares      *[!-_A-Za-z0-9,/]*)
2191189777a2SCristian Pallares        func_fatal_error "invalid tag name: $tagname"
2192189777a2SCristian Pallares        ;;
2193189777a2SCristian Pallares    esac
2194189777a2SCristian Pallares
2195189777a2SCristian Pallares    # Don't test for the "default" C tag, as we know it's
2196189777a2SCristian Pallares    # there but not specially marked.
2197189777a2SCristian Pallares    case $tagname in
2198189777a2SCristian Pallares        CC) ;;
2199189777a2SCristian Pallares    *)
2200189777a2SCristian Pallares        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2201189777a2SCristian Pallares	  taglist="$taglist $tagname"
2202189777a2SCristian Pallares
2203189777a2SCristian Pallares	  # Evaluate the configuration.  Be careful to quote the path
2204189777a2SCristian Pallares	  # and the sed script, to avoid splitting on whitespace, but
2205189777a2SCristian Pallares	  # also don't use non-portable quotes within backquotes within
2206189777a2SCristian Pallares	  # quotes we have to do it in 2 steps:
2207189777a2SCristian Pallares	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2208189777a2SCristian Pallares	  eval "$extractedcf"
2209189777a2SCristian Pallares        else
2210189777a2SCristian Pallares	  func_error "ignoring unknown tag $tagname"
2211189777a2SCristian Pallares        fi
2212189777a2SCristian Pallares        ;;
2213189777a2SCristian Pallares    esac
2214189777a2SCristian Pallares}
2215189777a2SCristian Pallares
2216*b3fce824SCristian Pallarés
2217189777a2SCristian Pallares# func_check_version_match
2218*b3fce824SCristian Pallarés# ------------------------
2219189777a2SCristian Pallares# Ensure that we are using m4 macros, and libtool script from the same
2220189777a2SCristian Pallares# release of libtool.
2221189777a2SCristian Pallaresfunc_check_version_match ()
2222189777a2SCristian Pallares{
2223189777a2SCristian Pallares    if test "$package_revision" != "$macro_revision"; then
2224189777a2SCristian Pallares      if test "$VERSION" != "$macro_version"; then
2225189777a2SCristian Pallares        if test -z "$macro_version"; then
2226189777a2SCristian Pallares          cat >&2 <<_LT_EOF
2227189777a2SCristian Pallares$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2228189777a2SCristian Pallares$progname: definition of this LT_INIT comes from an older release.
2229189777a2SCristian Pallares$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2230189777a2SCristian Pallares$progname: and run autoconf again.
2231189777a2SCristian Pallares_LT_EOF
2232189777a2SCristian Pallares        else
2233189777a2SCristian Pallares          cat >&2 <<_LT_EOF
2234189777a2SCristian Pallares$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2235189777a2SCristian Pallares$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2236189777a2SCristian Pallares$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2237189777a2SCristian Pallares$progname: and run autoconf again.
2238189777a2SCristian Pallares_LT_EOF
2239189777a2SCristian Pallares        fi
2240189777a2SCristian Pallares      else
2241189777a2SCristian Pallares        cat >&2 <<_LT_EOF
2242189777a2SCristian Pallares$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2243189777a2SCristian Pallares$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2244189777a2SCristian Pallares$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2245189777a2SCristian Pallares$progname: of $PACKAGE $VERSION and run autoconf again.
2246189777a2SCristian Pallares_LT_EOF
2247189777a2SCristian Pallares      fi
2248189777a2SCristian Pallares
2249189777a2SCristian Pallares      exit $EXIT_MISMATCH
2250189777a2SCristian Pallares    fi
2251189777a2SCristian Pallares}
2252189777a2SCristian Pallares
2253189777a2SCristian Pallares
2254*b3fce824SCristian Pallarés# libtool_options_prep [ARG]...
2255*b3fce824SCristian Pallarés# -----------------------------
2256*b3fce824SCristian Pallarés# Preparation for options parsed by libtool.
2257*b3fce824SCristian Pallaréslibtool_options_prep ()
2258*b3fce824SCristian Pallarés{
2259*b3fce824SCristian Pallarés    $debug_mode
2260*b3fce824SCristian Pallarés
2261*b3fce824SCristian Pallarés    # Option defaults:
2262*b3fce824SCristian Pallarés    opt_config=false
2263*b3fce824SCristian Pallarés    opt_dlopen=
2264*b3fce824SCristian Pallarés    opt_dry_run=false
2265*b3fce824SCristian Pallarés    opt_help=false
2266*b3fce824SCristian Pallarés    opt_mode=
2267*b3fce824SCristian Pallarés    opt_preserve_dup_deps=false
2268*b3fce824SCristian Pallarés    opt_quiet=false
2269*b3fce824SCristian Pallarés
2270*b3fce824SCristian Pallarés    nonopt=
2271*b3fce824SCristian Pallarés    preserve_args=
2272*b3fce824SCristian Pallarés
2273189777a2SCristian Pallares    # Shorthand for --mode=foo, only valid as the first argument
2274189777a2SCristian Pallares    case $1 in
2275189777a2SCristian Pallares    clean|clea|cle|cl)
2276189777a2SCristian Pallares      shift; set dummy --mode clean ${1+"$@"}; shift
2277189777a2SCristian Pallares      ;;
2278189777a2SCristian Pallares    compile|compil|compi|comp|com|co|c)
2279189777a2SCristian Pallares      shift; set dummy --mode compile ${1+"$@"}; shift
2280189777a2SCristian Pallares      ;;
2281189777a2SCristian Pallares    execute|execut|execu|exec|exe|ex|e)
2282189777a2SCristian Pallares      shift; set dummy --mode execute ${1+"$@"}; shift
2283189777a2SCristian Pallares      ;;
2284189777a2SCristian Pallares    finish|finis|fini|fin|fi|f)
2285189777a2SCristian Pallares      shift; set dummy --mode finish ${1+"$@"}; shift
2286189777a2SCristian Pallares      ;;
2287189777a2SCristian Pallares    install|instal|insta|inst|ins|in|i)
2288189777a2SCristian Pallares      shift; set dummy --mode install ${1+"$@"}; shift
2289189777a2SCristian Pallares      ;;
2290189777a2SCristian Pallares    link|lin|li|l)
2291189777a2SCristian Pallares      shift; set dummy --mode link ${1+"$@"}; shift
2292189777a2SCristian Pallares      ;;
2293189777a2SCristian Pallares    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2294189777a2SCristian Pallares      shift; set dummy --mode uninstall ${1+"$@"}; shift
2295189777a2SCristian Pallares      ;;
2296189777a2SCristian Pallares    esac
2297189777a2SCristian Pallares
2298*b3fce824SCristian Pallarés    # Pass back the list of options.
2299*b3fce824SCristian Pallarés    func_quote_for_eval ${1+"$@"}
2300*b3fce824SCristian Pallarés    libtool_options_prep_result=$func_quote_for_eval_result
2301*b3fce824SCristian Pallarés}
2302*b3fce824SCristian Pallarésfunc_add_hook func_options_prep libtool_options_prep
2303189777a2SCristian Pallares
2304189777a2SCristian Pallares
2305*b3fce824SCristian Pallarés# libtool_parse_options [ARG]...
2306*b3fce824SCristian Pallarés# ---------------------------------
2307*b3fce824SCristian Pallarés# Provide handling for libtool specific options.
2308*b3fce824SCristian Pallaréslibtool_parse_options ()
2309189777a2SCristian Pallares{
2310*b3fce824SCristian Pallarés    $debug_cmd
2311*b3fce824SCristian Pallarés
2312*b3fce824SCristian Pallarés    # Perform our own loop to consume as many options as possible in
2313*b3fce824SCristian Pallarés    # each iteration.
2314189777a2SCristian Pallares    while test $# -gt 0; do
2315*b3fce824SCristian Pallarés      _G_opt=$1
2316189777a2SCristian Pallares      shift
2317*b3fce824SCristian Pallarés      case $_G_opt in
2318189777a2SCristian Pallares        --dry-run|--dryrun|-n)
2319189777a2SCristian Pallares                        opt_dry_run=:
2320189777a2SCristian Pallares                        ;;
2321*b3fce824SCristian Pallarés
2322*b3fce824SCristian Pallarés        --config)       func_config ;;
2323*b3fce824SCristian Pallarés
2324189777a2SCristian Pallares        --dlopen|-dlopen)
2325189777a2SCristian Pallares                        opt_dlopen="${opt_dlopen+$opt_dlopen
2326*b3fce824SCristian Pallarés}$1"
2327189777a2SCristian Pallares                        shift
2328189777a2SCristian Pallares                        ;;
2329*b3fce824SCristian Pallarés
2330189777a2SCristian Pallares        --preserve-dup-deps)
2331*b3fce824SCristian Pallarés                        opt_preserve_dup_deps=: ;;
2332*b3fce824SCristian Pallarés
2333*b3fce824SCristian Pallarés        --features)     func_features ;;
2334*b3fce824SCristian Pallarés
2335*b3fce824SCristian Pallarés        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
2336*b3fce824SCristian Pallarés
2337*b3fce824SCristian Pallarés        --help)         opt_help=: ;;
2338*b3fce824SCristian Pallarés
2339*b3fce824SCristian Pallarés        --help-all)     opt_help=': help-all' ;;
2340*b3fce824SCristian Pallarés
2341*b3fce824SCristian Pallarés        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
2342*b3fce824SCristian Pallarés                        opt_mode=$1
2343*b3fce824SCristian Pallarés                        case $1 in
2344189777a2SCristian Pallares                          # Valid mode arguments:
2345189777a2SCristian Pallares                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
2346189777a2SCristian Pallares
2347189777a2SCristian Pallares                          # Catch anything else as an error
2348*b3fce824SCristian Pallarés                          *) func_error "invalid argument for $_G_opt"
2349189777a2SCristian Pallares                             exit_cmd=exit
2350189777a2SCristian Pallares                             break
2351189777a2SCristian Pallares                             ;;
2352189777a2SCristian Pallares                        esac
2353189777a2SCristian Pallares                        shift
2354189777a2SCristian Pallares                        ;;
2355*b3fce824SCristian Pallarés
2356189777a2SCristian Pallares        --no-silent|--no-quiet)
2357*b3fce824SCristian Pallarés                        opt_quiet=false
2358*b3fce824SCristian Pallarés                        func_append preserve_args " $_G_opt"
2359189777a2SCristian Pallares                        ;;
2360*b3fce824SCristian Pallarés
2361*b3fce824SCristian Pallarés        --no-warnings|--no-warning|--no-warn)
2362189777a2SCristian Pallares                        opt_warning=false
2363*b3fce824SCristian Pallarés                        func_append preserve_args " $_G_opt"
2364189777a2SCristian Pallares                        ;;
2365*b3fce824SCristian Pallarés
2366189777a2SCristian Pallares        --no-verbose)
2367189777a2SCristian Pallares                        opt_verbose=false
2368*b3fce824SCristian Pallarés                        func_append preserve_args " $_G_opt"
2369189777a2SCristian Pallares                        ;;
2370*b3fce824SCristian Pallarés
2371189777a2SCristian Pallares        --silent|--quiet)
2372*b3fce824SCristian Pallarés                        opt_quiet=:
2373189777a2SCristian Pallares                        opt_verbose=false
2374*b3fce824SCristian Pallarés                        func_append preserve_args " $_G_opt"
2375189777a2SCristian Pallares                        ;;
2376*b3fce824SCristian Pallarés
2377*b3fce824SCristian Pallarés        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
2378*b3fce824SCristian Pallarés                        opt_tag=$1
2379*b3fce824SCristian Pallarés                        func_append preserve_args " $_G_opt $1"
2380*b3fce824SCristian Pallarés                        func_enable_tag "$1"
2381*b3fce824SCristian Pallarés                        shift
2382*b3fce824SCristian Pallarés                        ;;
2383*b3fce824SCristian Pallarés
2384*b3fce824SCristian Pallarés        --verbose|-v)   opt_quiet=false
2385189777a2SCristian Pallares                        opt_verbose=:
2386*b3fce824SCristian Pallarés                        func_append preserve_args " $_G_opt"
2387189777a2SCristian Pallares                        ;;
2388189777a2SCristian Pallares
2389*b3fce824SCristian Pallarés	# An option not handled by this hook function:
2390*b3fce824SCristian Pallarés        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
2391189777a2SCristian Pallares      esac
2392189777a2SCristian Pallares    done
2393189777a2SCristian Pallares
2394189777a2SCristian Pallares
2395*b3fce824SCristian Pallarés    # save modified positional parameters for caller
2396*b3fce824SCristian Pallarés    func_quote_for_eval ${1+"$@"}
2397*b3fce824SCristian Pallarés    libtool_parse_options_result=$func_quote_for_eval_result
2398*b3fce824SCristian Pallarés}
2399*b3fce824SCristian Pallarésfunc_add_hook func_parse_options libtool_parse_options
2400*b3fce824SCristian Pallarés
2401*b3fce824SCristian Pallarés
2402*b3fce824SCristian Pallarés
2403*b3fce824SCristian Pallarés# libtool_validate_options [ARG]...
2404*b3fce824SCristian Pallarés# ---------------------------------
2405*b3fce824SCristian Pallarés# Perform any sanity checks on option settings and/or unconsumed
2406*b3fce824SCristian Pallarés# arguments.
2407*b3fce824SCristian Pallaréslibtool_validate_options ()
2408*b3fce824SCristian Pallarés{
2409189777a2SCristian Pallares    # save first non-option argument
2410*b3fce824SCristian Pallarés    if test 0 -lt $#; then
2411*b3fce824SCristian Pallarés      nonopt=$1
2412189777a2SCristian Pallares      shift
2413189777a2SCristian Pallares    fi
2414189777a2SCristian Pallares
2415189777a2SCristian Pallares    # preserve --debug
2416*b3fce824SCristian Pallarés    test : = "$debug_cmd" || func_append preserve_args " --debug"
2417189777a2SCristian Pallares
2418189777a2SCristian Pallares    case $host in
2419*b3fce824SCristian Pallarés      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2420*b3fce824SCristian Pallarés      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2421*b3fce824SCristian Pallarés      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
2422189777a2SCristian Pallares        # don't eliminate duplications in $postdeps and $predeps
2423189777a2SCristian Pallares        opt_duplicate_compiler_generated_deps=:
2424189777a2SCristian Pallares        ;;
2425189777a2SCristian Pallares      *)
2426189777a2SCristian Pallares        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2427189777a2SCristian Pallares        ;;
2428189777a2SCristian Pallares    esac
2429189777a2SCristian Pallares
2430189777a2SCristian Pallares    $opt_help || {
2431189777a2SCristian Pallares      # Sanity checks first:
2432189777a2SCristian Pallares      func_check_version_match
2433189777a2SCristian Pallares
2434*b3fce824SCristian Pallarés      test yes != "$build_libtool_libs" \
2435*b3fce824SCristian Pallarés        && test yes != "$build_old_libs" \
2436*b3fce824SCristian Pallarés        && func_fatal_configuration "not configured to build any kind of library"
2437189777a2SCristian Pallares
2438189777a2SCristian Pallares      # Darwin sucks
2439189777a2SCristian Pallares      eval std_shrext=\"$shrext_cmds\"
2440189777a2SCristian Pallares
2441189777a2SCristian Pallares      # Only execute mode is allowed to have -dlopen flags.
2442*b3fce824SCristian Pallarés      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2443*b3fce824SCristian Pallarés        func_error "unrecognized option '-dlopen'"
2444189777a2SCristian Pallares        $ECHO "$help" 1>&2
2445189777a2SCristian Pallares        exit $EXIT_FAILURE
2446189777a2SCristian Pallares      fi
2447189777a2SCristian Pallares
2448189777a2SCristian Pallares      # Change the help message to a mode-specific one.
2449*b3fce824SCristian Pallarés      generic_help=$help
2450*b3fce824SCristian Pallarés      help="Try '$progname --help --mode=$opt_mode' for more information."
2451189777a2SCristian Pallares    }
2452189777a2SCristian Pallares
2453*b3fce824SCristian Pallarés    # Pass back the unparsed argument list
2454*b3fce824SCristian Pallarés    func_quote_for_eval ${1+"$@"}
2455*b3fce824SCristian Pallarés    libtool_validate_options_result=$func_quote_for_eval_result
2456189777a2SCristian Pallares}
2457*b3fce824SCristian Pallarésfunc_add_hook func_validate_options libtool_validate_options
2458189777a2SCristian Pallares
2459189777a2SCristian Pallares
2460*b3fce824SCristian Pallarés# Process options as early as possible so that --help and --version
2461*b3fce824SCristian Pallarés# can return quickly.
2462*b3fce824SCristian Pallarésfunc_options ${1+"$@"}
2463*b3fce824SCristian Pallaréseval set dummy "$func_options_result"; shift
2464*b3fce824SCristian Pallarés
2465189777a2SCristian Pallares
2466189777a2SCristian Pallares
2467189777a2SCristian Pallares## ----------- ##
2468189777a2SCristian Pallares##    Main.    ##
2469189777a2SCristian Pallares## ----------- ##
2470189777a2SCristian Pallares
2471*b3fce824SCristian Pallarésmagic='%%%MAGIC variable%%%'
2472*b3fce824SCristian Pallarésmagic_exe='%%%MAGIC EXE variable%%%'
2473*b3fce824SCristian Pallarés
2474*b3fce824SCristian Pallarés# Global variables.
2475*b3fce824SCristian Pallarésextracted_archives=
2476*b3fce824SCristian Pallarésextracted_serial=0
2477*b3fce824SCristian Pallarés
2478*b3fce824SCristian Pallarés# If this variable is set in any of the actions, the command in it
2479*b3fce824SCristian Pallarés# will be execed at the end.  This prevents here-documents from being
2480*b3fce824SCristian Pallarés# left over by shells.
2481*b3fce824SCristian Pallarésexec_cmd=
2482*b3fce824SCristian Pallarés
2483*b3fce824SCristian Pallarés
2484*b3fce824SCristian Pallarés# A function that is used when there is no print builtin or printf.
2485*b3fce824SCristian Pallarésfunc_fallback_echo ()
2486*b3fce824SCristian Pallarés{
2487*b3fce824SCristian Pallarés  eval 'cat <<_LTECHO_EOF
2488*b3fce824SCristian Pallarés$1
2489*b3fce824SCristian Pallarés_LTECHO_EOF'
2490*b3fce824SCristian Pallarés}
2491*b3fce824SCristian Pallarés
2492*b3fce824SCristian Pallarés# func_generated_by_libtool
2493*b3fce824SCristian Pallarés# True iff stdin has been generated by Libtool. This function is only
2494*b3fce824SCristian Pallarés# a basic sanity check; it will hardly flush out determined imposters.
2495*b3fce824SCristian Pallarésfunc_generated_by_libtool_p ()
2496*b3fce824SCristian Pallarés{
2497*b3fce824SCristian Pallarés  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2498*b3fce824SCristian Pallarés}
2499*b3fce824SCristian Pallarés
2500189777a2SCristian Pallares# func_lalib_p file
2501*b3fce824SCristian Pallarés# True iff FILE is a libtool '.la' library or '.lo' object file.
2502189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out
2503189777a2SCristian Pallares# determined imposters.
2504189777a2SCristian Pallaresfunc_lalib_p ()
2505189777a2SCristian Pallares{
2506189777a2SCristian Pallares    test -f "$1" &&
2507*b3fce824SCristian Pallarés      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2508189777a2SCristian Pallares}
2509189777a2SCristian Pallares
2510189777a2SCristian Pallares# func_lalib_unsafe_p file
2511*b3fce824SCristian Pallarés# True iff FILE is a libtool '.la' library or '.lo' object file.
2512189777a2SCristian Pallares# This function implements the same check as func_lalib_p without
2513189777a2SCristian Pallares# resorting to external programs.  To this end, it redirects stdin and
2514189777a2SCristian Pallares# closes it afterwards, without saving the original file descriptor.
2515189777a2SCristian Pallares# As a safety measure, use it only where a negative result would be
2516*b3fce824SCristian Pallarés# fatal anyway.  Works if 'file' does not exist.
2517189777a2SCristian Pallaresfunc_lalib_unsafe_p ()
2518189777a2SCristian Pallares{
2519189777a2SCristian Pallares    lalib_p=no
2520189777a2SCristian Pallares    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2521189777a2SCristian Pallares	for lalib_p_l in 1 2 3 4
2522189777a2SCristian Pallares	do
2523189777a2SCristian Pallares	    read lalib_p_line
2524*b3fce824SCristian Pallarés	    case $lalib_p_line in
2525189777a2SCristian Pallares		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2526189777a2SCristian Pallares	    esac
2527189777a2SCristian Pallares	done
2528189777a2SCristian Pallares	exec 0<&5 5<&-
2529189777a2SCristian Pallares    fi
2530*b3fce824SCristian Pallarés    test yes = "$lalib_p"
2531189777a2SCristian Pallares}
2532189777a2SCristian Pallares
2533189777a2SCristian Pallares# func_ltwrapper_script_p file
2534189777a2SCristian Pallares# True iff FILE is a libtool wrapper script
2535189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out
2536189777a2SCristian Pallares# determined imposters.
2537189777a2SCristian Pallaresfunc_ltwrapper_script_p ()
2538189777a2SCristian Pallares{
2539*b3fce824SCristian Pallarés    test -f "$1" &&
2540*b3fce824SCristian Pallarés      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2541189777a2SCristian Pallares}
2542189777a2SCristian Pallares
2543189777a2SCristian Pallares# func_ltwrapper_executable_p file
2544189777a2SCristian Pallares# True iff FILE is a libtool wrapper executable
2545189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out
2546189777a2SCristian Pallares# determined imposters.
2547189777a2SCristian Pallaresfunc_ltwrapper_executable_p ()
2548189777a2SCristian Pallares{
2549189777a2SCristian Pallares    func_ltwrapper_exec_suffix=
2550189777a2SCristian Pallares    case $1 in
2551189777a2SCristian Pallares    *.exe) ;;
2552189777a2SCristian Pallares    *) func_ltwrapper_exec_suffix=.exe ;;
2553189777a2SCristian Pallares    esac
2554189777a2SCristian Pallares    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2555189777a2SCristian Pallares}
2556189777a2SCristian Pallares
2557189777a2SCristian Pallares# func_ltwrapper_scriptname file
2558189777a2SCristian Pallares# Assumes file is an ltwrapper_executable
2559189777a2SCristian Pallares# uses $file to determine the appropriate filename for a
2560189777a2SCristian Pallares# temporary ltwrapper_script.
2561189777a2SCristian Pallaresfunc_ltwrapper_scriptname ()
2562189777a2SCristian Pallares{
2563189777a2SCristian Pallares    func_dirname_and_basename "$1" "" "."
2564189777a2SCristian Pallares    func_stripname '' '.exe' "$func_basename_result"
2565*b3fce824SCristian Pallarés    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2566189777a2SCristian Pallares}
2567189777a2SCristian Pallares
2568189777a2SCristian Pallares# func_ltwrapper_p file
2569189777a2SCristian Pallares# True iff FILE is a libtool wrapper script or wrapper executable
2570189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out
2571189777a2SCristian Pallares# determined imposters.
2572189777a2SCristian Pallaresfunc_ltwrapper_p ()
2573189777a2SCristian Pallares{
2574189777a2SCristian Pallares    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2575189777a2SCristian Pallares}
2576189777a2SCristian Pallares
2577189777a2SCristian Pallares
2578189777a2SCristian Pallares# func_execute_cmds commands fail_cmd
2579189777a2SCristian Pallares# Execute tilde-delimited COMMANDS.
2580189777a2SCristian Pallares# If FAIL_CMD is given, eval that upon failure.
2581189777a2SCristian Pallares# FAIL_CMD may read-access the current command in variable CMD!
2582189777a2SCristian Pallaresfunc_execute_cmds ()
2583189777a2SCristian Pallares{
2584*b3fce824SCristian Pallarés    $debug_cmd
2585*b3fce824SCristian Pallarés
2586189777a2SCristian Pallares    save_ifs=$IFS; IFS='~'
2587189777a2SCristian Pallares    for cmd in $1; do
2588*b3fce824SCristian Pallarés      IFS=$sp$nl
2589189777a2SCristian Pallares      eval cmd=\"$cmd\"
2590*b3fce824SCristian Pallarés      IFS=$save_ifs
2591189777a2SCristian Pallares      func_show_eval "$cmd" "${2-:}"
2592189777a2SCristian Pallares    done
2593189777a2SCristian Pallares    IFS=$save_ifs
2594189777a2SCristian Pallares}
2595189777a2SCristian Pallares
2596189777a2SCristian Pallares
2597189777a2SCristian Pallares# func_source file
2598189777a2SCristian Pallares# Source FILE, adding directory component if necessary.
2599189777a2SCristian Pallares# Note that it is not necessary on cygwin/mingw to append a dot to
2600189777a2SCristian Pallares# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2601189777a2SCristian Pallares# behavior happens only for exec(3), not for open(2)!  Also, sourcing
2602*b3fce824SCristian Pallarés# 'FILE.' does not work on cygwin managed mounts.
2603189777a2SCristian Pallaresfunc_source ()
2604189777a2SCristian Pallares{
2605*b3fce824SCristian Pallarés    $debug_cmd
2606*b3fce824SCristian Pallarés
2607189777a2SCristian Pallares    case $1 in
2608189777a2SCristian Pallares    */* | *\\*)	. "$1" ;;
2609189777a2SCristian Pallares    *)		. "./$1" ;;
2610189777a2SCristian Pallares    esac
2611189777a2SCristian Pallares}
2612189777a2SCristian Pallares
2613189777a2SCristian Pallares
2614189777a2SCristian Pallares# func_resolve_sysroot PATH
2615189777a2SCristian Pallares# Replace a leading = in PATH with a sysroot.  Store the result into
2616189777a2SCristian Pallares# func_resolve_sysroot_result
2617189777a2SCristian Pallaresfunc_resolve_sysroot ()
2618189777a2SCristian Pallares{
2619189777a2SCristian Pallares  func_resolve_sysroot_result=$1
2620189777a2SCristian Pallares  case $func_resolve_sysroot_result in
2621189777a2SCristian Pallares  =*)
2622189777a2SCristian Pallares    func_stripname '=' '' "$func_resolve_sysroot_result"
2623189777a2SCristian Pallares    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2624189777a2SCristian Pallares    ;;
2625189777a2SCristian Pallares  esac
2626189777a2SCristian Pallares}
2627189777a2SCristian Pallares
2628189777a2SCristian Pallares# func_replace_sysroot PATH
2629189777a2SCristian Pallares# If PATH begins with the sysroot, replace it with = and
2630189777a2SCristian Pallares# store the result into func_replace_sysroot_result.
2631189777a2SCristian Pallaresfunc_replace_sysroot ()
2632189777a2SCristian Pallares{
2633*b3fce824SCristian Pallarés  case $lt_sysroot:$1 in
2634189777a2SCristian Pallares  ?*:"$lt_sysroot"*)
2635189777a2SCristian Pallares    func_stripname "$lt_sysroot" '' "$1"
2636*b3fce824SCristian Pallarés    func_replace_sysroot_result='='$func_stripname_result
2637189777a2SCristian Pallares    ;;
2638189777a2SCristian Pallares  *)
2639189777a2SCristian Pallares    # Including no sysroot.
2640189777a2SCristian Pallares    func_replace_sysroot_result=$1
2641189777a2SCristian Pallares    ;;
2642189777a2SCristian Pallares  esac
2643189777a2SCristian Pallares}
2644189777a2SCristian Pallares
2645189777a2SCristian Pallares# func_infer_tag arg
2646189777a2SCristian Pallares# Infer tagged configuration to use if any are available and
2647189777a2SCristian Pallares# if one wasn't chosen via the "--tag" command line option.
2648189777a2SCristian Pallares# Only attempt this if the compiler in the base compile
2649189777a2SCristian Pallares# command doesn't match the default compiler.
2650189777a2SCristian Pallares# arg is usually of the form 'gcc ...'
2651189777a2SCristian Pallaresfunc_infer_tag ()
2652189777a2SCristian Pallares{
2653*b3fce824SCristian Pallarés    $debug_cmd
2654*b3fce824SCristian Pallarés
2655189777a2SCristian Pallares    if test -n "$available_tags" && test -z "$tagname"; then
2656189777a2SCristian Pallares      CC_quoted=
2657189777a2SCristian Pallares      for arg in $CC; do
2658189777a2SCristian Pallares	func_append_quoted CC_quoted "$arg"
2659189777a2SCristian Pallares      done
2660189777a2SCristian Pallares      CC_expanded=`func_echo_all $CC`
2661189777a2SCristian Pallares      CC_quoted_expanded=`func_echo_all $CC_quoted`
2662189777a2SCristian Pallares      case $@ in
2663189777a2SCristian Pallares      # Blanks in the command may have been stripped by the calling shell,
2664189777a2SCristian Pallares      # but not from the CC environment variable when configure was run.
2665189777a2SCristian Pallares      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2666189777a2SCristian Pallares      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2667189777a2SCristian Pallares      # Blanks at the start of $base_compile will cause this to fail
2668189777a2SCristian Pallares      # if we don't check for them as well.
2669189777a2SCristian Pallares      *)
2670189777a2SCristian Pallares	for z in $available_tags; do
2671189777a2SCristian Pallares	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2672189777a2SCristian Pallares	    # Evaluate the configuration.
2673*b3fce824SCristian Pallarés	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2674189777a2SCristian Pallares	    CC_quoted=
2675189777a2SCristian Pallares	    for arg in $CC; do
2676189777a2SCristian Pallares	      # Double-quote args containing other shell metacharacters.
2677189777a2SCristian Pallares	      func_append_quoted CC_quoted "$arg"
2678189777a2SCristian Pallares	    done
2679189777a2SCristian Pallares	    CC_expanded=`func_echo_all $CC`
2680189777a2SCristian Pallares	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2681189777a2SCristian Pallares	    case "$@ " in
2682189777a2SCristian Pallares	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2683189777a2SCristian Pallares	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2684189777a2SCristian Pallares	      # The compiler in the base compile command matches
2685189777a2SCristian Pallares	      # the one in the tagged configuration.
2686189777a2SCristian Pallares	      # Assume this is the tagged configuration we want.
2687189777a2SCristian Pallares	      tagname=$z
2688189777a2SCristian Pallares	      break
2689189777a2SCristian Pallares	      ;;
2690189777a2SCristian Pallares	    esac
2691189777a2SCristian Pallares	  fi
2692189777a2SCristian Pallares	done
2693189777a2SCristian Pallares	# If $tagname still isn't set, then no tagged configuration
2694189777a2SCristian Pallares	# was found and let the user know that the "--tag" command
2695189777a2SCristian Pallares	# line option must be used.
2696189777a2SCristian Pallares	if test -z "$tagname"; then
2697189777a2SCristian Pallares	  func_echo "unable to infer tagged configuration"
2698*b3fce824SCristian Pallarés	  func_fatal_error "specify a tag with '--tag'"
2699189777a2SCristian Pallares#	else
2700189777a2SCristian Pallares#	  func_verbose "using $tagname tagged configuration"
2701189777a2SCristian Pallares	fi
2702189777a2SCristian Pallares	;;
2703189777a2SCristian Pallares      esac
2704189777a2SCristian Pallares    fi
2705189777a2SCristian Pallares}
2706189777a2SCristian Pallares
2707189777a2SCristian Pallares
2708189777a2SCristian Pallares
2709189777a2SCristian Pallares# func_write_libtool_object output_name pic_name nonpic_name
2710189777a2SCristian Pallares# Create a libtool object file (analogous to a ".la" file),
2711189777a2SCristian Pallares# but don't create it if we're doing a dry run.
2712189777a2SCristian Pallaresfunc_write_libtool_object ()
2713189777a2SCristian Pallares{
2714*b3fce824SCristian Pallarés    write_libobj=$1
2715*b3fce824SCristian Pallarés    if test yes = "$build_libtool_libs"; then
2716*b3fce824SCristian Pallarés      write_lobj=\'$2\'
2717189777a2SCristian Pallares    else
2718189777a2SCristian Pallares      write_lobj=none
2719189777a2SCristian Pallares    fi
2720189777a2SCristian Pallares
2721*b3fce824SCristian Pallarés    if test yes = "$build_old_libs"; then
2722*b3fce824SCristian Pallarés      write_oldobj=\'$3\'
2723189777a2SCristian Pallares    else
2724189777a2SCristian Pallares      write_oldobj=none
2725189777a2SCristian Pallares    fi
2726189777a2SCristian Pallares
2727189777a2SCristian Pallares    $opt_dry_run || {
2728189777a2SCristian Pallares      cat >${write_libobj}T <<EOF
2729189777a2SCristian Pallares# $write_libobj - a libtool object file
2730*b3fce824SCristian Pallarés# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2731189777a2SCristian Pallares#
2732189777a2SCristian Pallares# Please DO NOT delete this file!
2733189777a2SCristian Pallares# It is necessary for linking the library.
2734189777a2SCristian Pallares
2735189777a2SCristian Pallares# Name of the PIC object.
2736189777a2SCristian Pallarespic_object=$write_lobj
2737189777a2SCristian Pallares
2738189777a2SCristian Pallares# Name of the non-PIC object
2739189777a2SCristian Pallaresnon_pic_object=$write_oldobj
2740189777a2SCristian Pallares
2741189777a2SCristian PallaresEOF
2742*b3fce824SCristian Pallarés      $MV "${write_libobj}T" "$write_libobj"
2743189777a2SCristian Pallares    }
2744189777a2SCristian Pallares}
2745189777a2SCristian Pallares
2746189777a2SCristian Pallares
2747189777a2SCristian Pallares##################################################
2748189777a2SCristian Pallares# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2749189777a2SCristian Pallares##################################################
2750189777a2SCristian Pallares
2751189777a2SCristian Pallares# func_convert_core_file_wine_to_w32 ARG
2752189777a2SCristian Pallares# Helper function used by file name conversion functions when $build is *nix,
2753189777a2SCristian Pallares# and $host is mingw, cygwin, or some other w32 environment. Relies on a
2754189777a2SCristian Pallares# correctly configured wine environment available, with the winepath program
2755189777a2SCristian Pallares# in $build's $PATH.
2756189777a2SCristian Pallares#
2757189777a2SCristian Pallares# ARG is the $build file name to be converted to w32 format.
2758189777a2SCristian Pallares# Result is available in $func_convert_core_file_wine_to_w32_result, and will
2759189777a2SCristian Pallares# be empty on error (or when ARG is empty)
2760189777a2SCristian Pallaresfunc_convert_core_file_wine_to_w32 ()
2761189777a2SCristian Pallares{
2762*b3fce824SCristian Pallarés  $debug_cmd
2763*b3fce824SCristian Pallarés
2764*b3fce824SCristian Pallarés  func_convert_core_file_wine_to_w32_result=$1
2765189777a2SCristian Pallares  if test -n "$1"; then
2766189777a2SCristian Pallares    # Unfortunately, winepath does not exit with a non-zero error code, so we
2767189777a2SCristian Pallares    # are forced to check the contents of stdout. On the other hand, if the
2768189777a2SCristian Pallares    # command is not found, the shell will set an exit code of 127 and print
2769189777a2SCristian Pallares    # *an error message* to stdout. So we must check for both error code of
2770189777a2SCristian Pallares    # zero AND non-empty stdout, which explains the odd construction:
2771189777a2SCristian Pallares    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
2772*b3fce824SCristian Pallarés    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2773189777a2SCristian Pallares      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
2774*b3fce824SCristian Pallarés        $SED -e "$sed_naive_backslashify"`
2775189777a2SCristian Pallares    else
2776189777a2SCristian Pallares      func_convert_core_file_wine_to_w32_result=
2777189777a2SCristian Pallares    fi
2778189777a2SCristian Pallares  fi
2779189777a2SCristian Pallares}
2780189777a2SCristian Pallares# end: func_convert_core_file_wine_to_w32
2781189777a2SCristian Pallares
2782189777a2SCristian Pallares
2783189777a2SCristian Pallares# func_convert_core_path_wine_to_w32 ARG
2784189777a2SCristian Pallares# Helper function used by path conversion functions when $build is *nix, and
2785189777a2SCristian Pallares# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
2786189777a2SCristian Pallares# configured wine environment available, with the winepath program in $build's
2787189777a2SCristian Pallares# $PATH. Assumes ARG has no leading or trailing path separator characters.
2788189777a2SCristian Pallares#
2789189777a2SCristian Pallares# ARG is path to be converted from $build format to win32.
2790189777a2SCristian Pallares# Result is available in $func_convert_core_path_wine_to_w32_result.
2791189777a2SCristian Pallares# Unconvertible file (directory) names in ARG are skipped; if no directory names
2792189777a2SCristian Pallares# are convertible, then the result may be empty.
2793189777a2SCristian Pallaresfunc_convert_core_path_wine_to_w32 ()
2794189777a2SCristian Pallares{
2795*b3fce824SCristian Pallarés  $debug_cmd
2796*b3fce824SCristian Pallarés
2797189777a2SCristian Pallares  # unfortunately, winepath doesn't convert paths, only file names
2798*b3fce824SCristian Pallarés  func_convert_core_path_wine_to_w32_result=
2799189777a2SCristian Pallares  if test -n "$1"; then
2800189777a2SCristian Pallares    oldIFS=$IFS
2801189777a2SCristian Pallares    IFS=:
2802189777a2SCristian Pallares    for func_convert_core_path_wine_to_w32_f in $1; do
2803189777a2SCristian Pallares      IFS=$oldIFS
2804189777a2SCristian Pallares      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
2805189777a2SCristian Pallares      if test -n "$func_convert_core_file_wine_to_w32_result"; then
2806189777a2SCristian Pallares        if test -z "$func_convert_core_path_wine_to_w32_result"; then
2807*b3fce824SCristian Pallarés          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
2808189777a2SCristian Pallares        else
2809189777a2SCristian Pallares          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
2810189777a2SCristian Pallares        fi
2811189777a2SCristian Pallares      fi
2812189777a2SCristian Pallares    done
2813189777a2SCristian Pallares    IFS=$oldIFS
2814189777a2SCristian Pallares  fi
2815189777a2SCristian Pallares}
2816189777a2SCristian Pallares# end: func_convert_core_path_wine_to_w32
2817189777a2SCristian Pallares
2818189777a2SCristian Pallares
2819189777a2SCristian Pallares# func_cygpath ARGS...
2820189777a2SCristian Pallares# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
2821189777a2SCristian Pallares# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
2822189777a2SCristian Pallares# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
2823189777a2SCristian Pallares# (2), returns the Cygwin file name or path in func_cygpath_result (input
2824189777a2SCristian Pallares# file name or path is assumed to be in w32 format, as previously converted
2825189777a2SCristian Pallares# from $build's *nix or MSYS format). In case (3), returns the w32 file name
2826189777a2SCristian Pallares# or path in func_cygpath_result (input file name or path is assumed to be in
2827189777a2SCristian Pallares# Cygwin format). Returns an empty string on error.
2828189777a2SCristian Pallares#
2829189777a2SCristian Pallares# ARGS are passed to cygpath, with the last one being the file name or path to
2830189777a2SCristian Pallares# be converted.
2831189777a2SCristian Pallares#
2832189777a2SCristian Pallares# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
2833189777a2SCristian Pallares# environment variable; do not put it in $PATH.
2834189777a2SCristian Pallaresfunc_cygpath ()
2835189777a2SCristian Pallares{
2836*b3fce824SCristian Pallarés  $debug_cmd
2837*b3fce824SCristian Pallarés
2838189777a2SCristian Pallares  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
2839189777a2SCristian Pallares    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
2840189777a2SCristian Pallares    if test "$?" -ne 0; then
2841189777a2SCristian Pallares      # on failure, ensure result is empty
2842189777a2SCristian Pallares      func_cygpath_result=
2843189777a2SCristian Pallares    fi
2844189777a2SCristian Pallares  else
2845189777a2SCristian Pallares    func_cygpath_result=
2846*b3fce824SCristian Pallarés    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
2847189777a2SCristian Pallares  fi
2848189777a2SCristian Pallares}
2849189777a2SCristian Pallares#end: func_cygpath
2850189777a2SCristian Pallares
2851189777a2SCristian Pallares
2852189777a2SCristian Pallares# func_convert_core_msys_to_w32 ARG
2853189777a2SCristian Pallares# Convert file name or path ARG from MSYS format to w32 format.  Return
2854189777a2SCristian Pallares# result in func_convert_core_msys_to_w32_result.
2855189777a2SCristian Pallaresfunc_convert_core_msys_to_w32 ()
2856189777a2SCristian Pallares{
2857*b3fce824SCristian Pallarés  $debug_cmd
2858*b3fce824SCristian Pallarés
2859189777a2SCristian Pallares  # awkward: cmd appends spaces to result
2860189777a2SCristian Pallares  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
2861*b3fce824SCristian Pallarés    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
2862189777a2SCristian Pallares}
2863189777a2SCristian Pallares#end: func_convert_core_msys_to_w32
2864189777a2SCristian Pallares
2865189777a2SCristian Pallares
2866189777a2SCristian Pallares# func_convert_file_check ARG1 ARG2
2867189777a2SCristian Pallares# Verify that ARG1 (a file name in $build format) was converted to $host
2868189777a2SCristian Pallares# format in ARG2. Otherwise, emit an error message, but continue (resetting
2869189777a2SCristian Pallares# func_to_host_file_result to ARG1).
2870189777a2SCristian Pallaresfunc_convert_file_check ()
2871189777a2SCristian Pallares{
2872*b3fce824SCristian Pallarés  $debug_cmd
2873*b3fce824SCristian Pallarés
2874189777a2SCristian Pallares  if test -z "$2" && test -n "$1"; then
2875189777a2SCristian Pallares    func_error "Could not determine host file name corresponding to"
2876*b3fce824SCristian Pallarés    func_error "  '$1'"
2877189777a2SCristian Pallares    func_error "Continuing, but uninstalled executables may not work."
2878189777a2SCristian Pallares    # Fallback:
2879*b3fce824SCristian Pallarés    func_to_host_file_result=$1
2880189777a2SCristian Pallares  fi
2881189777a2SCristian Pallares}
2882189777a2SCristian Pallares# end func_convert_file_check
2883189777a2SCristian Pallares
2884189777a2SCristian Pallares
2885189777a2SCristian Pallares# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
2886189777a2SCristian Pallares# Verify that FROM_PATH (a path in $build format) was converted to $host
2887189777a2SCristian Pallares# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
2888189777a2SCristian Pallares# func_to_host_file_result to a simplistic fallback value (see below).
2889189777a2SCristian Pallaresfunc_convert_path_check ()
2890189777a2SCristian Pallares{
2891*b3fce824SCristian Pallarés  $debug_cmd
2892*b3fce824SCristian Pallarés
2893189777a2SCristian Pallares  if test -z "$4" && test -n "$3"; then
2894189777a2SCristian Pallares    func_error "Could not determine the host path corresponding to"
2895*b3fce824SCristian Pallarés    func_error "  '$3'"
2896189777a2SCristian Pallares    func_error "Continuing, but uninstalled executables may not work."
2897189777a2SCristian Pallares    # Fallback.  This is a deliberately simplistic "conversion" and
2898189777a2SCristian Pallares    # should not be "improved".  See libtool.info.
2899189777a2SCristian Pallares    if test "x$1" != "x$2"; then
2900189777a2SCristian Pallares      lt_replace_pathsep_chars="s|$1|$2|g"
2901189777a2SCristian Pallares      func_to_host_path_result=`echo "$3" |
2902189777a2SCristian Pallares        $SED -e "$lt_replace_pathsep_chars"`
2903189777a2SCristian Pallares    else
2904*b3fce824SCristian Pallarés      func_to_host_path_result=$3
2905189777a2SCristian Pallares    fi
2906189777a2SCristian Pallares  fi
2907189777a2SCristian Pallares}
2908189777a2SCristian Pallares# end func_convert_path_check
2909189777a2SCristian Pallares
2910189777a2SCristian Pallares
2911189777a2SCristian Pallares# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
2912189777a2SCristian Pallares# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
2913189777a2SCristian Pallares# and appending REPL if ORIG matches BACKPAT.
2914189777a2SCristian Pallaresfunc_convert_path_front_back_pathsep ()
2915189777a2SCristian Pallares{
2916*b3fce824SCristian Pallarés  $debug_cmd
2917*b3fce824SCristian Pallarés
2918189777a2SCristian Pallares  case $4 in
2919*b3fce824SCristian Pallarés  $1 ) func_to_host_path_result=$3$func_to_host_path_result
2920189777a2SCristian Pallares    ;;
2921189777a2SCristian Pallares  esac
2922189777a2SCristian Pallares  case $4 in
2923189777a2SCristian Pallares  $2 ) func_append func_to_host_path_result "$3"
2924189777a2SCristian Pallares    ;;
2925189777a2SCristian Pallares  esac
2926189777a2SCristian Pallares}
2927189777a2SCristian Pallares# end func_convert_path_front_back_pathsep
2928189777a2SCristian Pallares
2929189777a2SCristian Pallares
2930189777a2SCristian Pallares##################################################
2931189777a2SCristian Pallares# $build to $host FILE NAME CONVERSION FUNCTIONS #
2932189777a2SCristian Pallares##################################################
2933*b3fce824SCristian Pallarés# invoked via '$to_host_file_cmd ARG'
2934189777a2SCristian Pallares#
2935189777a2SCristian Pallares# In each case, ARG is the path to be converted from $build to $host format.
2936189777a2SCristian Pallares# Result will be available in $func_to_host_file_result.
2937189777a2SCristian Pallares
2938189777a2SCristian Pallares
2939189777a2SCristian Pallares# func_to_host_file ARG
2940189777a2SCristian Pallares# Converts the file name ARG from $build format to $host format. Return result
2941189777a2SCristian Pallares# in func_to_host_file_result.
2942189777a2SCristian Pallaresfunc_to_host_file ()
2943189777a2SCristian Pallares{
2944*b3fce824SCristian Pallarés  $debug_cmd
2945*b3fce824SCristian Pallarés
2946189777a2SCristian Pallares  $to_host_file_cmd "$1"
2947189777a2SCristian Pallares}
2948189777a2SCristian Pallares# end func_to_host_file
2949189777a2SCristian Pallares
2950189777a2SCristian Pallares
2951189777a2SCristian Pallares# func_to_tool_file ARG LAZY
2952189777a2SCristian Pallares# converts the file name ARG from $build format to toolchain format. Return
2953189777a2SCristian Pallares# result in func_to_tool_file_result.  If the conversion in use is listed
2954189777a2SCristian Pallares# in (the comma separated) LAZY, no conversion takes place.
2955189777a2SCristian Pallaresfunc_to_tool_file ()
2956189777a2SCristian Pallares{
2957*b3fce824SCristian Pallarés  $debug_cmd
2958*b3fce824SCristian Pallarés
2959189777a2SCristian Pallares  case ,$2, in
2960189777a2SCristian Pallares    *,"$to_tool_file_cmd",*)
2961189777a2SCristian Pallares      func_to_tool_file_result=$1
2962189777a2SCristian Pallares      ;;
2963189777a2SCristian Pallares    *)
2964189777a2SCristian Pallares      $to_tool_file_cmd "$1"
2965189777a2SCristian Pallares      func_to_tool_file_result=$func_to_host_file_result
2966189777a2SCristian Pallares      ;;
2967189777a2SCristian Pallares  esac
2968189777a2SCristian Pallares}
2969189777a2SCristian Pallares# end func_to_tool_file
2970189777a2SCristian Pallares
2971189777a2SCristian Pallares
2972189777a2SCristian Pallares# func_convert_file_noop ARG
2973189777a2SCristian Pallares# Copy ARG to func_to_host_file_result.
2974189777a2SCristian Pallaresfunc_convert_file_noop ()
2975189777a2SCristian Pallares{
2976*b3fce824SCristian Pallarés  func_to_host_file_result=$1
2977189777a2SCristian Pallares}
2978189777a2SCristian Pallares# end func_convert_file_noop
2979189777a2SCristian Pallares
2980189777a2SCristian Pallares
2981189777a2SCristian Pallares# func_convert_file_msys_to_w32 ARG
2982189777a2SCristian Pallares# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
2983189777a2SCristian Pallares# conversion to w32 is not available inside the cwrapper.  Returns result in
2984189777a2SCristian Pallares# func_to_host_file_result.
2985189777a2SCristian Pallaresfunc_convert_file_msys_to_w32 ()
2986189777a2SCristian Pallares{
2987*b3fce824SCristian Pallarés  $debug_cmd
2988*b3fce824SCristian Pallarés
2989*b3fce824SCristian Pallarés  func_to_host_file_result=$1
2990189777a2SCristian Pallares  if test -n "$1"; then
2991189777a2SCristian Pallares    func_convert_core_msys_to_w32 "$1"
2992*b3fce824SCristian Pallarés    func_to_host_file_result=$func_convert_core_msys_to_w32_result
2993189777a2SCristian Pallares  fi
2994189777a2SCristian Pallares  func_convert_file_check "$1" "$func_to_host_file_result"
2995189777a2SCristian Pallares}
2996189777a2SCristian Pallares# end func_convert_file_msys_to_w32
2997189777a2SCristian Pallares
2998189777a2SCristian Pallares
2999189777a2SCristian Pallares# func_convert_file_cygwin_to_w32 ARG
3000189777a2SCristian Pallares# Convert file name ARG from Cygwin to w32 format.  Returns result in
3001189777a2SCristian Pallares# func_to_host_file_result.
3002189777a2SCristian Pallaresfunc_convert_file_cygwin_to_w32 ()
3003189777a2SCristian Pallares{
3004*b3fce824SCristian Pallarés  $debug_cmd
3005*b3fce824SCristian Pallarés
3006*b3fce824SCristian Pallarés  func_to_host_file_result=$1
3007189777a2SCristian Pallares  if test -n "$1"; then
3008189777a2SCristian Pallares    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3009189777a2SCristian Pallares    # LT_CYGPATH in this case.
3010189777a2SCristian Pallares    func_to_host_file_result=`cygpath -m "$1"`
3011189777a2SCristian Pallares  fi
3012189777a2SCristian Pallares  func_convert_file_check "$1" "$func_to_host_file_result"
3013189777a2SCristian Pallares}
3014189777a2SCristian Pallares# end func_convert_file_cygwin_to_w32
3015189777a2SCristian Pallares
3016189777a2SCristian Pallares
3017189777a2SCristian Pallares# func_convert_file_nix_to_w32 ARG
3018189777a2SCristian Pallares# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3019189777a2SCristian Pallares# and a working winepath. Returns result in func_to_host_file_result.
3020189777a2SCristian Pallaresfunc_convert_file_nix_to_w32 ()
3021189777a2SCristian Pallares{
3022*b3fce824SCristian Pallarés  $debug_cmd
3023*b3fce824SCristian Pallarés
3024*b3fce824SCristian Pallarés  func_to_host_file_result=$1
3025189777a2SCristian Pallares  if test -n "$1"; then
3026189777a2SCristian Pallares    func_convert_core_file_wine_to_w32 "$1"
3027*b3fce824SCristian Pallarés    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3028189777a2SCristian Pallares  fi
3029189777a2SCristian Pallares  func_convert_file_check "$1" "$func_to_host_file_result"
3030189777a2SCristian Pallares}
3031189777a2SCristian Pallares# end func_convert_file_nix_to_w32
3032189777a2SCristian Pallares
3033189777a2SCristian Pallares
3034189777a2SCristian Pallares# func_convert_file_msys_to_cygwin ARG
3035189777a2SCristian Pallares# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3036189777a2SCristian Pallares# Returns result in func_to_host_file_result.
3037189777a2SCristian Pallaresfunc_convert_file_msys_to_cygwin ()
3038189777a2SCristian Pallares{
3039*b3fce824SCristian Pallarés  $debug_cmd
3040*b3fce824SCristian Pallarés
3041*b3fce824SCristian Pallarés  func_to_host_file_result=$1
3042189777a2SCristian Pallares  if test -n "$1"; then
3043189777a2SCristian Pallares    func_convert_core_msys_to_w32 "$1"
3044189777a2SCristian Pallares    func_cygpath -u "$func_convert_core_msys_to_w32_result"
3045*b3fce824SCristian Pallarés    func_to_host_file_result=$func_cygpath_result
3046189777a2SCristian Pallares  fi
3047189777a2SCristian Pallares  func_convert_file_check "$1" "$func_to_host_file_result"
3048189777a2SCristian Pallares}
3049189777a2SCristian Pallares# end func_convert_file_msys_to_cygwin
3050189777a2SCristian Pallares
3051189777a2SCristian Pallares
3052189777a2SCristian Pallares# func_convert_file_nix_to_cygwin ARG
3053189777a2SCristian Pallares# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3054189777a2SCristian Pallares# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3055189777a2SCristian Pallares# in func_to_host_file_result.
3056189777a2SCristian Pallaresfunc_convert_file_nix_to_cygwin ()
3057189777a2SCristian Pallares{
3058*b3fce824SCristian Pallarés  $debug_cmd
3059*b3fce824SCristian Pallarés
3060*b3fce824SCristian Pallarés  func_to_host_file_result=$1
3061189777a2SCristian Pallares  if test -n "$1"; then
3062189777a2SCristian Pallares    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3063189777a2SCristian Pallares    func_convert_core_file_wine_to_w32 "$1"
3064189777a2SCristian Pallares    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3065*b3fce824SCristian Pallarés    func_to_host_file_result=$func_cygpath_result
3066189777a2SCristian Pallares  fi
3067189777a2SCristian Pallares  func_convert_file_check "$1" "$func_to_host_file_result"
3068189777a2SCristian Pallares}
3069189777a2SCristian Pallares# end func_convert_file_nix_to_cygwin
3070189777a2SCristian Pallares
3071189777a2SCristian Pallares
3072189777a2SCristian Pallares#############################################
3073189777a2SCristian Pallares# $build to $host PATH CONVERSION FUNCTIONS #
3074189777a2SCristian Pallares#############################################
3075*b3fce824SCristian Pallarés# invoked via '$to_host_path_cmd ARG'
3076189777a2SCristian Pallares#
3077189777a2SCristian Pallares# In each case, ARG is the path to be converted from $build to $host format.
3078189777a2SCristian Pallares# The result will be available in $func_to_host_path_result.
3079189777a2SCristian Pallares#
3080189777a2SCristian Pallares# Path separators are also converted from $build format to $host format.  If
3081189777a2SCristian Pallares# ARG begins or ends with a path separator character, it is preserved (but
3082189777a2SCristian Pallares# converted to $host format) on output.
3083189777a2SCristian Pallares#
3084189777a2SCristian Pallares# All path conversion functions are named using the following convention:
3085189777a2SCristian Pallares#   file name conversion function    : func_convert_file_X_to_Y ()
3086189777a2SCristian Pallares#   path conversion function         : func_convert_path_X_to_Y ()
3087189777a2SCristian Pallares# where, for any given $build/$host combination the 'X_to_Y' value is the
3088189777a2SCristian Pallares# same.  If conversion functions are added for new $build/$host combinations,
3089189777a2SCristian Pallares# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3090189777a2SCristian Pallares# will break.
3091189777a2SCristian Pallares
3092189777a2SCristian Pallares
3093189777a2SCristian Pallares# func_init_to_host_path_cmd
3094189777a2SCristian Pallares# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3095189777a2SCristian Pallares# appropriate value, based on the value of $to_host_file_cmd.
3096189777a2SCristian Pallaresto_host_path_cmd=
3097189777a2SCristian Pallaresfunc_init_to_host_path_cmd ()
3098189777a2SCristian Pallares{
3099*b3fce824SCristian Pallarés  $debug_cmd
3100*b3fce824SCristian Pallarés
3101189777a2SCristian Pallares  if test -z "$to_host_path_cmd"; then
3102189777a2SCristian Pallares    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3103*b3fce824SCristian Pallarés    to_host_path_cmd=func_convert_path_$func_stripname_result
3104189777a2SCristian Pallares  fi
3105189777a2SCristian Pallares}
3106189777a2SCristian Pallares
3107189777a2SCristian Pallares
3108189777a2SCristian Pallares# func_to_host_path ARG
3109189777a2SCristian Pallares# Converts the path ARG from $build format to $host format. Return result
3110189777a2SCristian Pallares# in func_to_host_path_result.
3111189777a2SCristian Pallaresfunc_to_host_path ()
3112189777a2SCristian Pallares{
3113*b3fce824SCristian Pallarés  $debug_cmd
3114*b3fce824SCristian Pallarés
3115189777a2SCristian Pallares  func_init_to_host_path_cmd
3116189777a2SCristian Pallares  $to_host_path_cmd "$1"
3117189777a2SCristian Pallares}
3118189777a2SCristian Pallares# end func_to_host_path
3119189777a2SCristian Pallares
3120189777a2SCristian Pallares
3121189777a2SCristian Pallares# func_convert_path_noop ARG
3122189777a2SCristian Pallares# Copy ARG to func_to_host_path_result.
3123189777a2SCristian Pallaresfunc_convert_path_noop ()
3124189777a2SCristian Pallares{
3125*b3fce824SCristian Pallarés  func_to_host_path_result=$1
3126189777a2SCristian Pallares}
3127189777a2SCristian Pallares# end func_convert_path_noop
3128189777a2SCristian Pallares
3129189777a2SCristian Pallares
3130189777a2SCristian Pallares# func_convert_path_msys_to_w32 ARG
3131189777a2SCristian Pallares# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3132189777a2SCristian Pallares# conversion to w32 is not available inside the cwrapper.  Returns result in
3133189777a2SCristian Pallares# func_to_host_path_result.
3134189777a2SCristian Pallaresfunc_convert_path_msys_to_w32 ()
3135189777a2SCristian Pallares{
3136*b3fce824SCristian Pallarés  $debug_cmd
3137*b3fce824SCristian Pallarés
3138*b3fce824SCristian Pallarés  func_to_host_path_result=$1
3139189777a2SCristian Pallares  if test -n "$1"; then
3140189777a2SCristian Pallares    # Remove leading and trailing path separator characters from ARG.  MSYS
3141189777a2SCristian Pallares    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3142189777a2SCristian Pallares    # and winepath ignores them completely.
3143189777a2SCristian Pallares    func_stripname : : "$1"
3144189777a2SCristian Pallares    func_to_host_path_tmp1=$func_stripname_result
3145189777a2SCristian Pallares    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3146*b3fce824SCristian Pallarés    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3147189777a2SCristian Pallares    func_convert_path_check : ";" \
3148189777a2SCristian Pallares      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3149189777a2SCristian Pallares    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3150189777a2SCristian Pallares  fi
3151189777a2SCristian Pallares}
3152189777a2SCristian Pallares# end func_convert_path_msys_to_w32
3153189777a2SCristian Pallares
3154189777a2SCristian Pallares
3155189777a2SCristian Pallares# func_convert_path_cygwin_to_w32 ARG
3156189777a2SCristian Pallares# Convert path ARG from Cygwin to w32 format.  Returns result in
3157189777a2SCristian Pallares# func_to_host_file_result.
3158189777a2SCristian Pallaresfunc_convert_path_cygwin_to_w32 ()
3159189777a2SCristian Pallares{
3160*b3fce824SCristian Pallarés  $debug_cmd
3161*b3fce824SCristian Pallarés
3162*b3fce824SCristian Pallarés  func_to_host_path_result=$1
3163189777a2SCristian Pallares  if test -n "$1"; then
3164189777a2SCristian Pallares    # See func_convert_path_msys_to_w32:
3165189777a2SCristian Pallares    func_stripname : : "$1"
3166189777a2SCristian Pallares    func_to_host_path_tmp1=$func_stripname_result
3167189777a2SCristian Pallares    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3168189777a2SCristian Pallares    func_convert_path_check : ";" \
3169189777a2SCristian Pallares      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3170189777a2SCristian Pallares    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3171189777a2SCristian Pallares  fi
3172189777a2SCristian Pallares}
3173189777a2SCristian Pallares# end func_convert_path_cygwin_to_w32
3174189777a2SCristian Pallares
3175189777a2SCristian Pallares
3176189777a2SCristian Pallares# func_convert_path_nix_to_w32 ARG
3177189777a2SCristian Pallares# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3178189777a2SCristian Pallares# a working winepath.  Returns result in func_to_host_file_result.
3179189777a2SCristian Pallaresfunc_convert_path_nix_to_w32 ()
3180189777a2SCristian Pallares{
3181*b3fce824SCristian Pallarés  $debug_cmd
3182*b3fce824SCristian Pallarés
3183*b3fce824SCristian Pallarés  func_to_host_path_result=$1
3184189777a2SCristian Pallares  if test -n "$1"; then
3185189777a2SCristian Pallares    # See func_convert_path_msys_to_w32:
3186189777a2SCristian Pallares    func_stripname : : "$1"
3187189777a2SCristian Pallares    func_to_host_path_tmp1=$func_stripname_result
3188189777a2SCristian Pallares    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3189*b3fce824SCristian Pallarés    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3190189777a2SCristian Pallares    func_convert_path_check : ";" \
3191189777a2SCristian Pallares      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3192189777a2SCristian Pallares    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3193189777a2SCristian Pallares  fi
3194189777a2SCristian Pallares}
3195189777a2SCristian Pallares# end func_convert_path_nix_to_w32
3196189777a2SCristian Pallares
3197189777a2SCristian Pallares
3198189777a2SCristian Pallares# func_convert_path_msys_to_cygwin ARG
3199189777a2SCristian Pallares# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3200189777a2SCristian Pallares# Returns result in func_to_host_file_result.
3201189777a2SCristian Pallaresfunc_convert_path_msys_to_cygwin ()
3202189777a2SCristian Pallares{
3203*b3fce824SCristian Pallarés  $debug_cmd
3204*b3fce824SCristian Pallarés
3205*b3fce824SCristian Pallarés  func_to_host_path_result=$1
3206189777a2SCristian Pallares  if test -n "$1"; then
3207189777a2SCristian Pallares    # See func_convert_path_msys_to_w32:
3208189777a2SCristian Pallares    func_stripname : : "$1"
3209189777a2SCristian Pallares    func_to_host_path_tmp1=$func_stripname_result
3210189777a2SCristian Pallares    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3211189777a2SCristian Pallares    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3212*b3fce824SCristian Pallarés    func_to_host_path_result=$func_cygpath_result
3213189777a2SCristian Pallares    func_convert_path_check : : \
3214189777a2SCristian Pallares      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3215189777a2SCristian Pallares    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3216189777a2SCristian Pallares  fi
3217189777a2SCristian Pallares}
3218189777a2SCristian Pallares# end func_convert_path_msys_to_cygwin
3219189777a2SCristian Pallares
3220189777a2SCristian Pallares
3221189777a2SCristian Pallares# func_convert_path_nix_to_cygwin ARG
3222189777a2SCristian Pallares# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3223189777a2SCristian Pallares# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3224189777a2SCristian Pallares# func_to_host_file_result.
3225189777a2SCristian Pallaresfunc_convert_path_nix_to_cygwin ()
3226189777a2SCristian Pallares{
3227*b3fce824SCristian Pallarés  $debug_cmd
3228*b3fce824SCristian Pallarés
3229*b3fce824SCristian Pallarés  func_to_host_path_result=$1
3230189777a2SCristian Pallares  if test -n "$1"; then
3231189777a2SCristian Pallares    # Remove leading and trailing path separator characters from
3232189777a2SCristian Pallares    # ARG. msys behavior is inconsistent here, cygpath turns them
3233189777a2SCristian Pallares    # into '.;' and ';.', and winepath ignores them completely.
3234189777a2SCristian Pallares    func_stripname : : "$1"
3235189777a2SCristian Pallares    func_to_host_path_tmp1=$func_stripname_result
3236189777a2SCristian Pallares    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3237189777a2SCristian Pallares    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3238*b3fce824SCristian Pallarés    func_to_host_path_result=$func_cygpath_result
3239189777a2SCristian Pallares    func_convert_path_check : : \
3240189777a2SCristian Pallares      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3241189777a2SCristian Pallares    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3242189777a2SCristian Pallares  fi
3243189777a2SCristian Pallares}
3244189777a2SCristian Pallares# end func_convert_path_nix_to_cygwin
3245189777a2SCristian Pallares
3246189777a2SCristian Pallares
3247*b3fce824SCristian Pallarés# func_dll_def_p FILE
3248*b3fce824SCristian Pallarés# True iff FILE is a Windows DLL '.def' file.
3249*b3fce824SCristian Pallarés# Keep in sync with _LT_DLL_DEF_P in libtool.m4
3250*b3fce824SCristian Pallarésfunc_dll_def_p ()
3251*b3fce824SCristian Pallarés{
3252*b3fce824SCristian Pallarés  $debug_cmd
3253*b3fce824SCristian Pallarés
3254*b3fce824SCristian Pallarés  func_dll_def_p_tmp=`$SED -n \
3255*b3fce824SCristian Pallarés    -e 's/^[	 ]*//' \
3256*b3fce824SCristian Pallarés    -e '/^\(;.*\)*$/d' \
3257*b3fce824SCristian Pallarés    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
3258*b3fce824SCristian Pallarés    -e q \
3259*b3fce824SCristian Pallarés    "$1"`
3260*b3fce824SCristian Pallarés  test DEF = "$func_dll_def_p_tmp"
3261*b3fce824SCristian Pallarés}
3262*b3fce824SCristian Pallarés
3263*b3fce824SCristian Pallarés
3264189777a2SCristian Pallares# func_mode_compile arg...
3265189777a2SCristian Pallaresfunc_mode_compile ()
3266189777a2SCristian Pallares{
3267*b3fce824SCristian Pallarés    $debug_cmd
3268*b3fce824SCristian Pallarés
3269189777a2SCristian Pallares    # Get the compilation command and the source file.
3270189777a2SCristian Pallares    base_compile=
3271*b3fce824SCristian Pallarés    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3272189777a2SCristian Pallares    suppress_opt=yes
3273189777a2SCristian Pallares    suppress_output=
3274189777a2SCristian Pallares    arg_mode=normal
3275189777a2SCristian Pallares    libobj=
3276189777a2SCristian Pallares    later=
3277189777a2SCristian Pallares    pie_flag=
3278189777a2SCristian Pallares
3279189777a2SCristian Pallares    for arg
3280189777a2SCristian Pallares    do
3281189777a2SCristian Pallares      case $arg_mode in
3282189777a2SCristian Pallares      arg  )
3283189777a2SCristian Pallares	# do not "continue".  Instead, add this to base_compile
3284*b3fce824SCristian Pallarés	lastarg=$arg
3285189777a2SCristian Pallares	arg_mode=normal
3286189777a2SCristian Pallares	;;
3287189777a2SCristian Pallares
3288189777a2SCristian Pallares      target )
3289*b3fce824SCristian Pallarés	libobj=$arg
3290189777a2SCristian Pallares	arg_mode=normal
3291189777a2SCristian Pallares	continue
3292189777a2SCristian Pallares	;;
3293189777a2SCristian Pallares
3294189777a2SCristian Pallares      normal )
3295189777a2SCristian Pallares	# Accept any command-line options.
3296189777a2SCristian Pallares	case $arg in
3297189777a2SCristian Pallares	-o)
3298189777a2SCristian Pallares	  test -n "$libobj" && \
3299*b3fce824SCristian Pallarés	    func_fatal_error "you cannot specify '-o' more than once"
3300189777a2SCristian Pallares	  arg_mode=target
3301189777a2SCristian Pallares	  continue
3302189777a2SCristian Pallares	  ;;
3303189777a2SCristian Pallares
3304189777a2SCristian Pallares	-pie | -fpie | -fPIE)
3305189777a2SCristian Pallares          func_append pie_flag " $arg"
3306189777a2SCristian Pallares	  continue
3307189777a2SCristian Pallares	  ;;
3308189777a2SCristian Pallares
3309189777a2SCristian Pallares	-shared | -static | -prefer-pic | -prefer-non-pic)
3310189777a2SCristian Pallares	  func_append later " $arg"
3311189777a2SCristian Pallares	  continue
3312189777a2SCristian Pallares	  ;;
3313189777a2SCristian Pallares
3314189777a2SCristian Pallares	-no-suppress)
3315189777a2SCristian Pallares	  suppress_opt=no
3316189777a2SCristian Pallares	  continue
3317189777a2SCristian Pallares	  ;;
3318189777a2SCristian Pallares
3319189777a2SCristian Pallares	-Xcompiler)
3320189777a2SCristian Pallares	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3321189777a2SCristian Pallares	  continue      #  The current "srcfile" will either be retained or
3322189777a2SCristian Pallares	  ;;            #  replaced later.  I would guess that would be a bug.
3323189777a2SCristian Pallares
3324189777a2SCristian Pallares	-Wc,*)
3325189777a2SCristian Pallares	  func_stripname '-Wc,' '' "$arg"
3326189777a2SCristian Pallares	  args=$func_stripname_result
3327189777a2SCristian Pallares	  lastarg=
3328*b3fce824SCristian Pallarés	  save_ifs=$IFS; IFS=,
3329189777a2SCristian Pallares	  for arg in $args; do
3330*b3fce824SCristian Pallarés	    IFS=$save_ifs
3331189777a2SCristian Pallares	    func_append_quoted lastarg "$arg"
3332189777a2SCristian Pallares	  done
3333*b3fce824SCristian Pallarés	  IFS=$save_ifs
3334189777a2SCristian Pallares	  func_stripname ' ' '' "$lastarg"
3335189777a2SCristian Pallares	  lastarg=$func_stripname_result
3336189777a2SCristian Pallares
3337189777a2SCristian Pallares	  # Add the arguments to base_compile.
3338189777a2SCristian Pallares	  func_append base_compile " $lastarg"
3339189777a2SCristian Pallares	  continue
3340189777a2SCristian Pallares	  ;;
3341189777a2SCristian Pallares
3342189777a2SCristian Pallares	*)
3343189777a2SCristian Pallares	  # Accept the current argument as the source file.
3344189777a2SCristian Pallares	  # The previous "srcfile" becomes the current argument.
3345189777a2SCristian Pallares	  #
3346*b3fce824SCristian Pallarés	  lastarg=$srcfile
3347*b3fce824SCristian Pallarés	  srcfile=$arg
3348189777a2SCristian Pallares	  ;;
3349189777a2SCristian Pallares	esac  #  case $arg
3350189777a2SCristian Pallares	;;
3351189777a2SCristian Pallares      esac    #  case $arg_mode
3352189777a2SCristian Pallares
3353189777a2SCristian Pallares      # Aesthetically quote the previous argument.
3354189777a2SCristian Pallares      func_append_quoted base_compile "$lastarg"
3355189777a2SCristian Pallares    done # for arg
3356189777a2SCristian Pallares
3357189777a2SCristian Pallares    case $arg_mode in
3358189777a2SCristian Pallares    arg)
3359189777a2SCristian Pallares      func_fatal_error "you must specify an argument for -Xcompile"
3360189777a2SCristian Pallares      ;;
3361189777a2SCristian Pallares    target)
3362*b3fce824SCristian Pallarés      func_fatal_error "you must specify a target with '-o'"
3363189777a2SCristian Pallares      ;;
3364189777a2SCristian Pallares    *)
3365189777a2SCristian Pallares      # Get the name of the library object.
3366189777a2SCristian Pallares      test -z "$libobj" && {
3367189777a2SCristian Pallares	func_basename "$srcfile"
3368*b3fce824SCristian Pallarés	libobj=$func_basename_result
3369189777a2SCristian Pallares      }
3370189777a2SCristian Pallares      ;;
3371189777a2SCristian Pallares    esac
3372189777a2SCristian Pallares
3373189777a2SCristian Pallares    # Recognize several different file suffixes.
3374189777a2SCristian Pallares    # If the user specifies -o file.o, it is replaced with file.lo
3375189777a2SCristian Pallares    case $libobj in
3376189777a2SCristian Pallares    *.[cCFSifmso] | \
3377189777a2SCristian Pallares    *.ada | *.adb | *.ads | *.asm | \
3378189777a2SCristian Pallares    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3379189777a2SCristian Pallares    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3380189777a2SCristian Pallares      func_xform "$libobj"
3381189777a2SCristian Pallares      libobj=$func_xform_result
3382189777a2SCristian Pallares      ;;
3383189777a2SCristian Pallares    esac
3384189777a2SCristian Pallares
3385189777a2SCristian Pallares    case $libobj in
3386189777a2SCristian Pallares    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3387189777a2SCristian Pallares    *)
3388*b3fce824SCristian Pallarés      func_fatal_error "cannot determine name of library object from '$libobj'"
3389189777a2SCristian Pallares      ;;
3390189777a2SCristian Pallares    esac
3391189777a2SCristian Pallares
3392189777a2SCristian Pallares    func_infer_tag $base_compile
3393189777a2SCristian Pallares
3394189777a2SCristian Pallares    for arg in $later; do
3395189777a2SCristian Pallares      case $arg in
3396189777a2SCristian Pallares      -shared)
3397*b3fce824SCristian Pallarés	test yes = "$build_libtool_libs" \
3398*b3fce824SCristian Pallarés	  || func_fatal_configuration "cannot build a shared library"
3399189777a2SCristian Pallares	build_old_libs=no
3400189777a2SCristian Pallares	continue
3401189777a2SCristian Pallares	;;
3402189777a2SCristian Pallares
3403189777a2SCristian Pallares      -static)
3404189777a2SCristian Pallares	build_libtool_libs=no
3405189777a2SCristian Pallares	build_old_libs=yes
3406189777a2SCristian Pallares	continue
3407189777a2SCristian Pallares	;;
3408189777a2SCristian Pallares
3409189777a2SCristian Pallares      -prefer-pic)
3410189777a2SCristian Pallares	pic_mode=yes
3411189777a2SCristian Pallares	continue
3412189777a2SCristian Pallares	;;
3413189777a2SCristian Pallares
3414189777a2SCristian Pallares      -prefer-non-pic)
3415189777a2SCristian Pallares	pic_mode=no
3416189777a2SCristian Pallares	continue
3417189777a2SCristian Pallares	;;
3418189777a2SCristian Pallares      esac
3419189777a2SCristian Pallares    done
3420189777a2SCristian Pallares
3421189777a2SCristian Pallares    func_quote_for_eval "$libobj"
3422189777a2SCristian Pallares    test "X$libobj" != "X$func_quote_for_eval_result" \
3423189777a2SCristian Pallares      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
3424*b3fce824SCristian Pallarés      && func_warning "libobj name '$libobj' may not contain shell special characters."
3425189777a2SCristian Pallares    func_dirname_and_basename "$obj" "/" ""
3426*b3fce824SCristian Pallarés    objname=$func_basename_result
3427*b3fce824SCristian Pallarés    xdir=$func_dirname_result
3428*b3fce824SCristian Pallarés    lobj=$xdir$objdir/$objname
3429189777a2SCristian Pallares
3430189777a2SCristian Pallares    test -z "$base_compile" && \
3431189777a2SCristian Pallares      func_fatal_help "you must specify a compilation command"
3432189777a2SCristian Pallares
3433189777a2SCristian Pallares    # Delete any leftover library objects.
3434*b3fce824SCristian Pallarés    if test yes = "$build_old_libs"; then
3435189777a2SCristian Pallares      removelist="$obj $lobj $libobj ${libobj}T"
3436189777a2SCristian Pallares    else
3437189777a2SCristian Pallares      removelist="$lobj $libobj ${libobj}T"
3438189777a2SCristian Pallares    fi
3439189777a2SCristian Pallares
3440189777a2SCristian Pallares    # On Cygwin there's no "real" PIC flag so we must build both object types
3441189777a2SCristian Pallares    case $host_os in
3442189777a2SCristian Pallares    cygwin* | mingw* | pw32* | os2* | cegcc*)
3443189777a2SCristian Pallares      pic_mode=default
3444189777a2SCristian Pallares      ;;
3445189777a2SCristian Pallares    esac
3446*b3fce824SCristian Pallarés    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3447189777a2SCristian Pallares      # non-PIC code in shared libraries is not supported
3448189777a2SCristian Pallares      pic_mode=default
3449189777a2SCristian Pallares    fi
3450189777a2SCristian Pallares
3451189777a2SCristian Pallares    # Calculate the filename of the output object if compiler does
3452189777a2SCristian Pallares    # not support -o with -c
3453*b3fce824SCristian Pallarés    if test no = "$compiler_c_o"; then
3454*b3fce824SCristian Pallarés      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3455*b3fce824SCristian Pallarés      lockfile=$output_obj.lock
3456189777a2SCristian Pallares    else
3457189777a2SCristian Pallares      output_obj=
3458189777a2SCristian Pallares      need_locks=no
3459189777a2SCristian Pallares      lockfile=
3460189777a2SCristian Pallares    fi
3461189777a2SCristian Pallares
3462189777a2SCristian Pallares    # Lock this critical section if it is needed
3463189777a2SCristian Pallares    # We use this script file to make the link, it avoids creating a new file
3464*b3fce824SCristian Pallarés    if test yes = "$need_locks"; then
3465189777a2SCristian Pallares      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3466189777a2SCristian Pallares	func_echo "Waiting for $lockfile to be removed"
3467189777a2SCristian Pallares	sleep 2
3468189777a2SCristian Pallares      done
3469*b3fce824SCristian Pallarés    elif test warn = "$need_locks"; then
3470189777a2SCristian Pallares      if test -f "$lockfile"; then
3471189777a2SCristian Pallares	$ECHO "\
3472189777a2SCristian Pallares*** ERROR, $lockfile exists and contains:
3473189777a2SCristian Pallares`cat $lockfile 2>/dev/null`
3474189777a2SCristian Pallares
3475189777a2SCristian PallaresThis indicates that another process is trying to use the same
3476189777a2SCristian Pallarestemporary object file, and libtool could not work around it because
3477*b3fce824SCristian Pallarésyour compiler does not support '-c' and '-o' together.  If you
3478189777a2SCristian Pallaresrepeat this compilation, it may succeed, by chance, but you had better
3479189777a2SCristian Pallaresavoid parallel builds (make -j) in this platform, or get a better
3480189777a2SCristian Pallarescompiler."
3481189777a2SCristian Pallares
3482189777a2SCristian Pallares	$opt_dry_run || $RM $removelist
3483189777a2SCristian Pallares	exit $EXIT_FAILURE
3484189777a2SCristian Pallares      fi
3485189777a2SCristian Pallares      func_append removelist " $output_obj"
3486189777a2SCristian Pallares      $ECHO "$srcfile" > "$lockfile"
3487189777a2SCristian Pallares    fi
3488189777a2SCristian Pallares
3489189777a2SCristian Pallares    $opt_dry_run || $RM $removelist
3490189777a2SCristian Pallares    func_append removelist " $lockfile"
3491189777a2SCristian Pallares    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3492189777a2SCristian Pallares
3493189777a2SCristian Pallares    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3494189777a2SCristian Pallares    srcfile=$func_to_tool_file_result
3495189777a2SCristian Pallares    func_quote_for_eval "$srcfile"
3496189777a2SCristian Pallares    qsrcfile=$func_quote_for_eval_result
3497189777a2SCristian Pallares
3498189777a2SCristian Pallares    # Only build a PIC object if we are building libtool libraries.
3499*b3fce824SCristian Pallarés    if test yes = "$build_libtool_libs"; then
3500189777a2SCristian Pallares      # Without this assignment, base_compile gets emptied.
3501189777a2SCristian Pallares      fbsd_hideous_sh_bug=$base_compile
3502189777a2SCristian Pallares
3503*b3fce824SCristian Pallarés      if test no != "$pic_mode"; then
3504189777a2SCristian Pallares	command="$base_compile $qsrcfile $pic_flag"
3505189777a2SCristian Pallares      else
3506189777a2SCristian Pallares	# Don't build PIC code
3507189777a2SCristian Pallares	command="$base_compile $qsrcfile"
3508189777a2SCristian Pallares      fi
3509189777a2SCristian Pallares
3510189777a2SCristian Pallares      func_mkdir_p "$xdir$objdir"
3511189777a2SCristian Pallares
3512189777a2SCristian Pallares      if test -z "$output_obj"; then
3513189777a2SCristian Pallares	# Place PIC objects in $objdir
3514189777a2SCristian Pallares	func_append command " -o $lobj"
3515189777a2SCristian Pallares      fi
3516189777a2SCristian Pallares
3517189777a2SCristian Pallares      func_show_eval_locale "$command"	\
3518189777a2SCristian Pallares          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3519189777a2SCristian Pallares
3520*b3fce824SCristian Pallarés      if test warn = "$need_locks" &&
3521189777a2SCristian Pallares	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3522189777a2SCristian Pallares	$ECHO "\
3523189777a2SCristian Pallares*** ERROR, $lockfile contains:
3524189777a2SCristian Pallares`cat $lockfile 2>/dev/null`
3525189777a2SCristian Pallares
3526189777a2SCristian Pallaresbut it should contain:
3527189777a2SCristian Pallares$srcfile
3528189777a2SCristian Pallares
3529189777a2SCristian PallaresThis indicates that another process is trying to use the same
3530189777a2SCristian Pallarestemporary object file, and libtool could not work around it because
3531*b3fce824SCristian Pallarésyour compiler does not support '-c' and '-o' together.  If you
3532189777a2SCristian Pallaresrepeat this compilation, it may succeed, by chance, but you had better
3533189777a2SCristian Pallaresavoid parallel builds (make -j) in this platform, or get a better
3534189777a2SCristian Pallarescompiler."
3535189777a2SCristian Pallares
3536189777a2SCristian Pallares	$opt_dry_run || $RM $removelist
3537189777a2SCristian Pallares	exit $EXIT_FAILURE
3538189777a2SCristian Pallares      fi
3539189777a2SCristian Pallares
3540189777a2SCristian Pallares      # Just move the object if needed, then go on to compile the next one
3541189777a2SCristian Pallares      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3542189777a2SCristian Pallares	func_show_eval '$MV "$output_obj" "$lobj"' \
3543189777a2SCristian Pallares	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3544189777a2SCristian Pallares      fi
3545189777a2SCristian Pallares
3546189777a2SCristian Pallares      # Allow error messages only from the first compilation.
3547*b3fce824SCristian Pallarés      if test yes = "$suppress_opt"; then
3548189777a2SCristian Pallares	suppress_output=' >/dev/null 2>&1'
3549189777a2SCristian Pallares      fi
3550189777a2SCristian Pallares    fi
3551189777a2SCristian Pallares
3552189777a2SCristian Pallares    # Only build a position-dependent object if we build old libraries.
3553*b3fce824SCristian Pallarés    if test yes = "$build_old_libs"; then
3554*b3fce824SCristian Pallarés      if test yes != "$pic_mode"; then
3555189777a2SCristian Pallares	# Don't build PIC code
3556189777a2SCristian Pallares	command="$base_compile $qsrcfile$pie_flag"
3557189777a2SCristian Pallares      else
3558189777a2SCristian Pallares	command="$base_compile $qsrcfile $pic_flag"
3559189777a2SCristian Pallares      fi
3560*b3fce824SCristian Pallarés      if test yes = "$compiler_c_o"; then
3561189777a2SCristian Pallares	func_append command " -o $obj"
3562189777a2SCristian Pallares      fi
3563189777a2SCristian Pallares
3564189777a2SCristian Pallares      # Suppress compiler output if we already did a PIC compilation.
3565189777a2SCristian Pallares      func_append command "$suppress_output"
3566189777a2SCristian Pallares      func_show_eval_locale "$command" \
3567189777a2SCristian Pallares        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3568189777a2SCristian Pallares
3569*b3fce824SCristian Pallarés      if test warn = "$need_locks" &&
3570189777a2SCristian Pallares	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3571189777a2SCristian Pallares	$ECHO "\
3572189777a2SCristian Pallares*** ERROR, $lockfile contains:
3573189777a2SCristian Pallares`cat $lockfile 2>/dev/null`
3574189777a2SCristian Pallares
3575189777a2SCristian Pallaresbut it should contain:
3576189777a2SCristian Pallares$srcfile
3577189777a2SCristian Pallares
3578189777a2SCristian PallaresThis indicates that another process is trying to use the same
3579189777a2SCristian Pallarestemporary object file, and libtool could not work around it because
3580*b3fce824SCristian Pallarésyour compiler does not support '-c' and '-o' together.  If you
3581189777a2SCristian Pallaresrepeat this compilation, it may succeed, by chance, but you had better
3582189777a2SCristian Pallaresavoid parallel builds (make -j) in this platform, or get a better
3583189777a2SCristian Pallarescompiler."
3584189777a2SCristian Pallares
3585189777a2SCristian Pallares	$opt_dry_run || $RM $removelist
3586189777a2SCristian Pallares	exit $EXIT_FAILURE
3587189777a2SCristian Pallares      fi
3588189777a2SCristian Pallares
3589189777a2SCristian Pallares      # Just move the object if needed
3590189777a2SCristian Pallares      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3591189777a2SCristian Pallares	func_show_eval '$MV "$output_obj" "$obj"' \
3592189777a2SCristian Pallares	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3593189777a2SCristian Pallares      fi
3594189777a2SCristian Pallares    fi
3595189777a2SCristian Pallares
3596189777a2SCristian Pallares    $opt_dry_run || {
3597189777a2SCristian Pallares      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3598189777a2SCristian Pallares
3599189777a2SCristian Pallares      # Unlock the critical section if it was locked
3600*b3fce824SCristian Pallarés      if test no != "$need_locks"; then
3601189777a2SCristian Pallares	removelist=$lockfile
3602189777a2SCristian Pallares        $RM "$lockfile"
3603189777a2SCristian Pallares      fi
3604189777a2SCristian Pallares    }
3605189777a2SCristian Pallares
3606189777a2SCristian Pallares    exit $EXIT_SUCCESS
3607189777a2SCristian Pallares}
3608189777a2SCristian Pallares
3609189777a2SCristian Pallares$opt_help || {
3610*b3fce824SCristian Pallarés  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3611189777a2SCristian Pallares}
3612189777a2SCristian Pallares
3613189777a2SCristian Pallaresfunc_mode_help ()
3614189777a2SCristian Pallares{
3615189777a2SCristian Pallares    # We need to display help for each of the modes.
3616189777a2SCristian Pallares    case $opt_mode in
3617189777a2SCristian Pallares      "")
3618189777a2SCristian Pallares        # Generic help is extracted from the usage comments
3619189777a2SCristian Pallares        # at the start of this file.
3620189777a2SCristian Pallares        func_help
3621189777a2SCristian Pallares        ;;
3622189777a2SCristian Pallares
3623189777a2SCristian Pallares      clean)
3624189777a2SCristian Pallares        $ECHO \
3625189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3626189777a2SCristian Pallares
3627189777a2SCristian PallaresRemove files from the build directory.
3628189777a2SCristian Pallares
3629189777a2SCristian PallaresRM is the name of the program to use to delete files associated with each FILE
3630*b3fce824SCristian Pallarés(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3631189777a2SCristian Pallaresto RM.
3632189777a2SCristian Pallares
3633189777a2SCristian PallaresIf FILE is a libtool library, object or program, all the files associated
3634189777a2SCristian Pallareswith it are deleted. Otherwise, only FILE itself is deleted using RM."
3635189777a2SCristian Pallares        ;;
3636189777a2SCristian Pallares
3637189777a2SCristian Pallares      compile)
3638189777a2SCristian Pallares      $ECHO \
3639189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3640189777a2SCristian Pallares
3641189777a2SCristian PallaresCompile a source file into a libtool library object.
3642189777a2SCristian Pallares
3643189777a2SCristian PallaresThis mode accepts the following additional options:
3644189777a2SCristian Pallares
3645189777a2SCristian Pallares  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
3646189777a2SCristian Pallares  -no-suppress      do not suppress compiler output for multiple passes
3647189777a2SCristian Pallares  -prefer-pic       try to build PIC objects only
3648189777a2SCristian Pallares  -prefer-non-pic   try to build non-PIC objects only
3649*b3fce824SCristian Pallarés  -shared           do not build a '.o' file suitable for static linking
3650*b3fce824SCristian Pallarés  -static           only build a '.o' file suitable for static linking
3651189777a2SCristian Pallares  -Wc,FLAG          pass FLAG directly to the compiler
3652189777a2SCristian Pallares
3653*b3fce824SCristian PallarésCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
3654189777a2SCristian Pallaresfrom the given SOURCEFILE.
3655189777a2SCristian Pallares
3656189777a2SCristian PallaresThe output file name is determined by removing the directory component from
3657*b3fce824SCristian PallarésSOURCEFILE, then substituting the C source code suffix '.c' with the
3658*b3fce824SCristian Pallaréslibrary object suffix, '.lo'."
3659189777a2SCristian Pallares        ;;
3660189777a2SCristian Pallares
3661189777a2SCristian Pallares      execute)
3662189777a2SCristian Pallares        $ECHO \
3663189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3664189777a2SCristian Pallares
3665189777a2SCristian PallaresAutomatically set library path, then run a program.
3666189777a2SCristian Pallares
3667189777a2SCristian PallaresThis mode accepts the following additional options:
3668189777a2SCristian Pallares
3669189777a2SCristian Pallares  -dlopen FILE      add the directory containing FILE to the library path
3670189777a2SCristian Pallares
3671*b3fce824SCristian PallarésThis mode sets the library path environment variable according to '-dlopen'
3672189777a2SCristian Pallaresflags.
3673189777a2SCristian Pallares
3674189777a2SCristian PallaresIf any of the ARGS are libtool executable wrappers, then they are translated
3675189777a2SCristian Pallaresinto their corresponding uninstalled binary, and any of their required library
3676189777a2SCristian Pallaresdirectories are added to the library path.
3677189777a2SCristian Pallares
3678189777a2SCristian PallaresThen, COMMAND is executed, with ARGS as arguments."
3679189777a2SCristian Pallares        ;;
3680189777a2SCristian Pallares
3681189777a2SCristian Pallares      finish)
3682189777a2SCristian Pallares        $ECHO \
3683189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3684189777a2SCristian Pallares
3685189777a2SCristian PallaresComplete the installation of libtool libraries.
3686189777a2SCristian Pallares
3687189777a2SCristian PallaresEach LIBDIR is a directory that contains libtool libraries.
3688189777a2SCristian Pallares
3689189777a2SCristian PallaresThe commands that this mode executes may require superuser privileges.  Use
3690*b3fce824SCristian Pallarésthe '--dry-run' option if you just want to see what would be executed."
3691189777a2SCristian Pallares        ;;
3692189777a2SCristian Pallares
3693189777a2SCristian Pallares      install)
3694189777a2SCristian Pallares        $ECHO \
3695189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3696189777a2SCristian Pallares
3697189777a2SCristian PallaresInstall executables or libraries.
3698189777a2SCristian Pallares
3699189777a2SCristian PallaresINSTALL-COMMAND is the installation command.  The first component should be
3700*b3fce824SCristian Pallaréseither the 'install' or 'cp' program.
3701189777a2SCristian Pallares
3702189777a2SCristian PallaresThe following components of INSTALL-COMMAND are treated specially:
3703189777a2SCristian Pallares
3704189777a2SCristian Pallares  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
3705189777a2SCristian Pallares
3706189777a2SCristian PallaresThe rest of the components are interpreted as arguments to that command (only
3707189777a2SCristian PallaresBSD-compatible install options are recognized)."
3708189777a2SCristian Pallares        ;;
3709189777a2SCristian Pallares
3710189777a2SCristian Pallares      link)
3711189777a2SCristian Pallares        $ECHO \
3712189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3713189777a2SCristian Pallares
3714189777a2SCristian PallaresLink object files or libraries together to form another library, or to
3715189777a2SCristian Pallarescreate an executable program.
3716189777a2SCristian Pallares
3717189777a2SCristian PallaresLINK-COMMAND is a command using the C compiler that you would use to create
3718189777a2SCristian Pallaresa program from several object files.
3719189777a2SCristian Pallares
3720189777a2SCristian PallaresThe following components of LINK-COMMAND are treated specially:
3721189777a2SCristian Pallares
3722189777a2SCristian Pallares  -all-static       do not do any dynamic linking at all
3723189777a2SCristian Pallares  -avoid-version    do not add a version suffix if possible
3724189777a2SCristian Pallares  -bindir BINDIR    specify path to binaries directory (for systems where
3725189777a2SCristian Pallares                    libraries must be found in the PATH setting at runtime)
3726*b3fce824SCristian Pallarés  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
3727189777a2SCristian Pallares  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
3728189777a2SCristian Pallares  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3729189777a2SCristian Pallares  -export-symbols SYMFILE
3730189777a2SCristian Pallares                    try to export only the symbols listed in SYMFILE
3731189777a2SCristian Pallares  -export-symbols-regex REGEX
3732189777a2SCristian Pallares                    try to export only the symbols matching REGEX
3733189777a2SCristian Pallares  -LLIBDIR          search LIBDIR for required installed libraries
3734189777a2SCristian Pallares  -lNAME            OUTPUT-FILE requires the installed library libNAME
3735189777a2SCristian Pallares  -module           build a library that can dlopened
3736189777a2SCristian Pallares  -no-fast-install  disable the fast-install mode
3737189777a2SCristian Pallares  -no-install       link a not-installable executable
3738189777a2SCristian Pallares  -no-undefined     declare that a library does not refer to external symbols
3739189777a2SCristian Pallares  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
3740*b3fce824SCristian Pallarés  -objectlist FILE  use a list of object files found in FILE to specify objects
3741*b3fce824SCristian Pallarés  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
3742189777a2SCristian Pallares  -precious-files-regex REGEX
3743189777a2SCristian Pallares                    don't remove output files matching REGEX
3744189777a2SCristian Pallares  -release RELEASE  specify package release information
3745189777a2SCristian Pallares  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
3746189777a2SCristian Pallares  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
3747189777a2SCristian Pallares  -shared           only do dynamic linking of libtool libraries
3748189777a2SCristian Pallares  -shrext SUFFIX    override the standard shared library file extension
3749189777a2SCristian Pallares  -static           do not do any dynamic linking of uninstalled libtool libraries
3750189777a2SCristian Pallares  -static-libtool-libs
3751189777a2SCristian Pallares                    do not do any dynamic linking of libtool libraries
3752189777a2SCristian Pallares  -version-info CURRENT[:REVISION[:AGE]]
3753189777a2SCristian Pallares                    specify library version info [each variable defaults to 0]
3754189777a2SCristian Pallares  -weak LIBNAME     declare that the target provides the LIBNAME interface
3755189777a2SCristian Pallares  -Wc,FLAG
3756189777a2SCristian Pallares  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
3757189777a2SCristian Pallares  -Wl,FLAG
3758189777a2SCristian Pallares  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
3759189777a2SCristian Pallares  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
3760189777a2SCristian Pallares
3761*b3fce824SCristian PallarésAll other options (arguments beginning with '-') are ignored.
3762189777a2SCristian Pallares
3763*b3fce824SCristian PallarésEvery other argument is treated as a filename.  Files ending in '.la' are
3764189777a2SCristian Pallarestreated as uninstalled libtool libraries, other files are standard or library
3765189777a2SCristian Pallaresobject files.
3766189777a2SCristian Pallares
3767*b3fce824SCristian PallarésIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
3768*b3fce824SCristian Pallarésonly library objects ('.lo' files) may be specified, and '-rpath' is
3769189777a2SCristian Pallaresrequired, except when creating a convenience library.
3770189777a2SCristian Pallares
3771*b3fce824SCristian PallarésIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
3772*b3fce824SCristian Pallarésusing 'ar' and 'ranlib', or on Windows using 'lib'.
3773189777a2SCristian Pallares
3774*b3fce824SCristian PallarésIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3775189777a2SCristian Pallaresis created, otherwise an executable program is created."
3776189777a2SCristian Pallares        ;;
3777189777a2SCristian Pallares
3778189777a2SCristian Pallares      uninstall)
3779189777a2SCristian Pallares        $ECHO \
3780189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3781189777a2SCristian Pallares
3782189777a2SCristian PallaresRemove libraries from an installation directory.
3783189777a2SCristian Pallares
3784189777a2SCristian PallaresRM is the name of the program to use to delete files associated with each FILE
3785*b3fce824SCristian Pallarés(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3786189777a2SCristian Pallaresto RM.
3787189777a2SCristian Pallares
3788189777a2SCristian PallaresIf FILE is a libtool library, all the files associated with it are deleted.
3789189777a2SCristian PallaresOtherwise, only FILE itself is deleted using RM."
3790189777a2SCristian Pallares        ;;
3791189777a2SCristian Pallares
3792189777a2SCristian Pallares      *)
3793*b3fce824SCristian Pallarés        func_fatal_help "invalid operation mode '$opt_mode'"
3794189777a2SCristian Pallares        ;;
3795189777a2SCristian Pallares    esac
3796189777a2SCristian Pallares
3797189777a2SCristian Pallares    echo
3798*b3fce824SCristian Pallarés    $ECHO "Try '$progname --help' for more information about other modes."
3799189777a2SCristian Pallares}
3800189777a2SCristian Pallares
3801189777a2SCristian Pallares# Now that we've collected a possible --mode arg, show help if necessary
3802189777a2SCristian Pallaresif $opt_help; then
3803*b3fce824SCristian Pallarés  if test : = "$opt_help"; then
3804189777a2SCristian Pallares    func_mode_help
3805189777a2SCristian Pallares  else
3806189777a2SCristian Pallares    {
3807189777a2SCristian Pallares      func_help noexit
3808189777a2SCristian Pallares      for opt_mode in compile link execute install finish uninstall clean; do
3809189777a2SCristian Pallares	func_mode_help
3810189777a2SCristian Pallares      done
3811*b3fce824SCristian Pallarés    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
3812189777a2SCristian Pallares    {
3813189777a2SCristian Pallares      func_help noexit
3814189777a2SCristian Pallares      for opt_mode in compile link execute install finish uninstall clean; do
3815189777a2SCristian Pallares	echo
3816189777a2SCristian Pallares	func_mode_help
3817189777a2SCristian Pallares      done
3818189777a2SCristian Pallares    } |
3819*b3fce824SCristian Pallarés    $SED '1d
3820189777a2SCristian Pallares      /^When reporting/,/^Report/{
3821189777a2SCristian Pallares	H
3822189777a2SCristian Pallares	d
3823189777a2SCristian Pallares      }
3824189777a2SCristian Pallares      $x
3825189777a2SCristian Pallares      /information about other modes/d
3826189777a2SCristian Pallares      /more detailed .*MODE/d
3827189777a2SCristian Pallares      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
3828189777a2SCristian Pallares  fi
3829189777a2SCristian Pallares  exit $?
3830189777a2SCristian Pallaresfi
3831189777a2SCristian Pallares
3832189777a2SCristian Pallares
3833189777a2SCristian Pallares# func_mode_execute arg...
3834189777a2SCristian Pallaresfunc_mode_execute ()
3835189777a2SCristian Pallares{
3836*b3fce824SCristian Pallarés    $debug_cmd
3837*b3fce824SCristian Pallarés
3838189777a2SCristian Pallares    # The first argument is the command name.
3839*b3fce824SCristian Pallarés    cmd=$nonopt
3840189777a2SCristian Pallares    test -z "$cmd" && \
3841189777a2SCristian Pallares      func_fatal_help "you must specify a COMMAND"
3842189777a2SCristian Pallares
3843189777a2SCristian Pallares    # Handle -dlopen flags immediately.
3844189777a2SCristian Pallares    for file in $opt_dlopen; do
3845189777a2SCristian Pallares      test -f "$file" \
3846*b3fce824SCristian Pallarés	|| func_fatal_help "'$file' is not a file"
3847189777a2SCristian Pallares
3848189777a2SCristian Pallares      dir=
3849189777a2SCristian Pallares      case $file in
3850189777a2SCristian Pallares      *.la)
3851189777a2SCristian Pallares	func_resolve_sysroot "$file"
3852189777a2SCristian Pallares	file=$func_resolve_sysroot_result
3853189777a2SCristian Pallares
3854189777a2SCristian Pallares	# Check to see that this really is a libtool archive.
3855189777a2SCristian Pallares	func_lalib_unsafe_p "$file" \
3856*b3fce824SCristian Pallarés	  || func_fatal_help "'$lib' is not a valid libtool archive"
3857189777a2SCristian Pallares
3858189777a2SCristian Pallares	# Read the libtool library.
3859189777a2SCristian Pallares	dlname=
3860189777a2SCristian Pallares	library_names=
3861189777a2SCristian Pallares	func_source "$file"
3862189777a2SCristian Pallares
3863189777a2SCristian Pallares	# Skip this library if it cannot be dlopened.
3864189777a2SCristian Pallares	if test -z "$dlname"; then
3865189777a2SCristian Pallares	  # Warn if it was a shared library.
3866189777a2SCristian Pallares	  test -n "$library_names" && \
3867*b3fce824SCristian Pallarés	    func_warning "'$file' was not linked with '-export-dynamic'"
3868189777a2SCristian Pallares	  continue
3869189777a2SCristian Pallares	fi
3870189777a2SCristian Pallares
3871189777a2SCristian Pallares	func_dirname "$file" "" "."
3872*b3fce824SCristian Pallarés	dir=$func_dirname_result
3873189777a2SCristian Pallares
3874189777a2SCristian Pallares	if test -f "$dir/$objdir/$dlname"; then
3875189777a2SCristian Pallares	  func_append dir "/$objdir"
3876189777a2SCristian Pallares	else
3877189777a2SCristian Pallares	  if test ! -f "$dir/$dlname"; then
3878*b3fce824SCristian Pallarés	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
3879189777a2SCristian Pallares	  fi
3880189777a2SCristian Pallares	fi
3881189777a2SCristian Pallares	;;
3882189777a2SCristian Pallares
3883189777a2SCristian Pallares      *.lo)
3884189777a2SCristian Pallares	# Just add the directory containing the .lo file.
3885189777a2SCristian Pallares	func_dirname "$file" "" "."
3886*b3fce824SCristian Pallarés	dir=$func_dirname_result
3887189777a2SCristian Pallares	;;
3888189777a2SCristian Pallares
3889189777a2SCristian Pallares      *)
3890*b3fce824SCristian Pallarés	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
3891189777a2SCristian Pallares	continue
3892189777a2SCristian Pallares	;;
3893189777a2SCristian Pallares      esac
3894189777a2SCristian Pallares
3895189777a2SCristian Pallares      # Get the absolute pathname.
3896189777a2SCristian Pallares      absdir=`cd "$dir" && pwd`
3897*b3fce824SCristian Pallarés      test -n "$absdir" && dir=$absdir
3898189777a2SCristian Pallares
3899189777a2SCristian Pallares      # Now add the directory to shlibpath_var.
3900189777a2SCristian Pallares      if eval "test -z \"\$$shlibpath_var\""; then
3901189777a2SCristian Pallares	eval "$shlibpath_var=\"\$dir\""
3902189777a2SCristian Pallares      else
3903189777a2SCristian Pallares	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
3904189777a2SCristian Pallares      fi
3905189777a2SCristian Pallares    done
3906189777a2SCristian Pallares
3907189777a2SCristian Pallares    # This variable tells wrapper scripts just to set shlibpath_var
3908189777a2SCristian Pallares    # rather than running their programs.
3909*b3fce824SCristian Pallarés    libtool_execute_magic=$magic
3910189777a2SCristian Pallares
3911189777a2SCristian Pallares    # Check if any of the arguments is a wrapper script.
3912189777a2SCristian Pallares    args=
3913189777a2SCristian Pallares    for file
3914189777a2SCristian Pallares    do
3915189777a2SCristian Pallares      case $file in
3916189777a2SCristian Pallares      -* | *.la | *.lo ) ;;
3917189777a2SCristian Pallares      *)
3918189777a2SCristian Pallares	# Do a test to see if this is really a libtool program.
3919189777a2SCristian Pallares	if func_ltwrapper_script_p "$file"; then
3920189777a2SCristian Pallares	  func_source "$file"
3921189777a2SCristian Pallares	  # Transform arg to wrapped name.
3922*b3fce824SCristian Pallarés	  file=$progdir/$program
3923189777a2SCristian Pallares	elif func_ltwrapper_executable_p "$file"; then
3924189777a2SCristian Pallares	  func_ltwrapper_scriptname "$file"
3925189777a2SCristian Pallares	  func_source "$func_ltwrapper_scriptname_result"
3926189777a2SCristian Pallares	  # Transform arg to wrapped name.
3927*b3fce824SCristian Pallarés	  file=$progdir/$program
3928189777a2SCristian Pallares	fi
3929189777a2SCristian Pallares	;;
3930189777a2SCristian Pallares      esac
3931189777a2SCristian Pallares      # Quote arguments (to preserve shell metacharacters).
3932189777a2SCristian Pallares      func_append_quoted args "$file"
3933189777a2SCristian Pallares    done
3934189777a2SCristian Pallares
3935*b3fce824SCristian Pallarés    if $opt_dry_run; then
3936*b3fce824SCristian Pallarés      # Display what would be done.
3937*b3fce824SCristian Pallarés      if test -n "$shlibpath_var"; then
3938*b3fce824SCristian Pallarés	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
3939*b3fce824SCristian Pallarés	echo "export $shlibpath_var"
3940*b3fce824SCristian Pallarés      fi
3941*b3fce824SCristian Pallarés      $ECHO "$cmd$args"
3942*b3fce824SCristian Pallarés      exit $EXIT_SUCCESS
3943*b3fce824SCristian Pallarés    else
3944189777a2SCristian Pallares      if test -n "$shlibpath_var"; then
3945189777a2SCristian Pallares	# Export the shlibpath_var.
3946189777a2SCristian Pallares	eval "export $shlibpath_var"
3947189777a2SCristian Pallares      fi
3948189777a2SCristian Pallares
3949189777a2SCristian Pallares      # Restore saved environment variables
3950189777a2SCristian Pallares      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
3951189777a2SCristian Pallares      do
3952189777a2SCristian Pallares	eval "if test \"\${save_$lt_var+set}\" = set; then
3953189777a2SCristian Pallares                $lt_var=\$save_$lt_var; export $lt_var
3954189777a2SCristian Pallares	      else
3955189777a2SCristian Pallares		$lt_unset $lt_var
3956189777a2SCristian Pallares	      fi"
3957189777a2SCristian Pallares      done
3958189777a2SCristian Pallares
3959189777a2SCristian Pallares      # Now prepare to actually exec the command.
3960*b3fce824SCristian Pallarés      exec_cmd=\$cmd$args
3961189777a2SCristian Pallares    fi
3962189777a2SCristian Pallares}
3963189777a2SCristian Pallares
3964*b3fce824SCristian Pallaréstest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
3965189777a2SCristian Pallares
3966189777a2SCristian Pallares
3967189777a2SCristian Pallares# func_mode_finish arg...
3968189777a2SCristian Pallaresfunc_mode_finish ()
3969189777a2SCristian Pallares{
3970*b3fce824SCristian Pallarés    $debug_cmd
3971*b3fce824SCristian Pallarés
3972189777a2SCristian Pallares    libs=
3973189777a2SCristian Pallares    libdirs=
3974189777a2SCristian Pallares    admincmds=
3975189777a2SCristian Pallares
3976189777a2SCristian Pallares    for opt in "$nonopt" ${1+"$@"}
3977189777a2SCristian Pallares    do
3978189777a2SCristian Pallares      if test -d "$opt"; then
3979189777a2SCristian Pallares	func_append libdirs " $opt"
3980189777a2SCristian Pallares
3981189777a2SCristian Pallares      elif test -f "$opt"; then
3982189777a2SCristian Pallares	if func_lalib_unsafe_p "$opt"; then
3983189777a2SCristian Pallares	  func_append libs " $opt"
3984189777a2SCristian Pallares	else
3985*b3fce824SCristian Pallarés	  func_warning "'$opt' is not a valid libtool archive"
3986189777a2SCristian Pallares	fi
3987189777a2SCristian Pallares
3988189777a2SCristian Pallares      else
3989*b3fce824SCristian Pallarés	func_fatal_error "invalid argument '$opt'"
3990189777a2SCristian Pallares      fi
3991189777a2SCristian Pallares    done
3992189777a2SCristian Pallares
3993189777a2SCristian Pallares    if test -n "$libs"; then
3994189777a2SCristian Pallares      if test -n "$lt_sysroot"; then
3995189777a2SCristian Pallares        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
3996189777a2SCristian Pallares        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
3997189777a2SCristian Pallares      else
3998189777a2SCristian Pallares        sysroot_cmd=
3999189777a2SCristian Pallares      fi
4000189777a2SCristian Pallares
4001189777a2SCristian Pallares      # Remove sysroot references
4002189777a2SCristian Pallares      if $opt_dry_run; then
4003189777a2SCristian Pallares        for lib in $libs; do
4004*b3fce824SCristian Pallarés          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4005189777a2SCristian Pallares        done
4006189777a2SCristian Pallares      else
4007189777a2SCristian Pallares        tmpdir=`func_mktempdir`
4008189777a2SCristian Pallares        for lib in $libs; do
4009*b3fce824SCristian Pallarés	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4010189777a2SCristian Pallares	    > $tmpdir/tmp-la
4011189777a2SCristian Pallares	  mv -f $tmpdir/tmp-la $lib
4012189777a2SCristian Pallares	done
4013189777a2SCristian Pallares        ${RM}r "$tmpdir"
4014189777a2SCristian Pallares      fi
4015189777a2SCristian Pallares    fi
4016189777a2SCristian Pallares
4017189777a2SCristian Pallares    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4018189777a2SCristian Pallares      for libdir in $libdirs; do
4019189777a2SCristian Pallares	if test -n "$finish_cmds"; then
4020189777a2SCristian Pallares	  # Do each command in the finish commands.
4021189777a2SCristian Pallares	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4022189777a2SCristian Pallares'"$cmd"'"'
4023189777a2SCristian Pallares	fi
4024189777a2SCristian Pallares	if test -n "$finish_eval"; then
4025189777a2SCristian Pallares	  # Do the single finish_eval.
4026189777a2SCristian Pallares	  eval cmds=\"$finish_eval\"
4027189777a2SCristian Pallares	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4028189777a2SCristian Pallares       $cmds"
4029189777a2SCristian Pallares	fi
4030189777a2SCristian Pallares      done
4031189777a2SCristian Pallares    fi
4032189777a2SCristian Pallares
4033189777a2SCristian Pallares    # Exit here if they wanted silent mode.
4034*b3fce824SCristian Pallarés    $opt_quiet && exit $EXIT_SUCCESS
4035189777a2SCristian Pallares
4036189777a2SCristian Pallares    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4037189777a2SCristian Pallares      echo "----------------------------------------------------------------------"
4038189777a2SCristian Pallares      echo "Libraries have been installed in:"
4039189777a2SCristian Pallares      for libdir in $libdirs; do
4040189777a2SCristian Pallares	$ECHO "   $libdir"
4041189777a2SCristian Pallares      done
4042189777a2SCristian Pallares      echo
4043189777a2SCristian Pallares      echo "If you ever happen to want to link against installed libraries"
4044189777a2SCristian Pallares      echo "in a given directory, LIBDIR, you must either use libtool, and"
4045*b3fce824SCristian Pallarés      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4046189777a2SCristian Pallares      echo "flag during linking and do at least one of the following:"
4047189777a2SCristian Pallares      if test -n "$shlibpath_var"; then
4048*b3fce824SCristian Pallarés	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4049189777a2SCristian Pallares	echo "     during execution"
4050189777a2SCristian Pallares      fi
4051189777a2SCristian Pallares      if test -n "$runpath_var"; then
4052*b3fce824SCristian Pallarés	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4053189777a2SCristian Pallares	echo "     during linking"
4054189777a2SCristian Pallares      fi
4055189777a2SCristian Pallares      if test -n "$hardcode_libdir_flag_spec"; then
4056189777a2SCristian Pallares	libdir=LIBDIR
4057189777a2SCristian Pallares	eval flag=\"$hardcode_libdir_flag_spec\"
4058189777a2SCristian Pallares
4059*b3fce824SCristian Pallarés	$ECHO "   - use the '$flag' linker flag"
4060189777a2SCristian Pallares      fi
4061189777a2SCristian Pallares      if test -n "$admincmds"; then
4062189777a2SCristian Pallares	$ECHO "   - have your system administrator run these commands:$admincmds"
4063189777a2SCristian Pallares      fi
4064189777a2SCristian Pallares      if test -f /etc/ld.so.conf; then
4065*b3fce824SCristian Pallarés	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4066189777a2SCristian Pallares      fi
4067189777a2SCristian Pallares      echo
4068189777a2SCristian Pallares
4069189777a2SCristian Pallares      echo "See any operating system documentation about shared libraries for"
4070189777a2SCristian Pallares      case $host in
4071189777a2SCristian Pallares	solaris2.[6789]|solaris2.1[0-9])
4072189777a2SCristian Pallares	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4073189777a2SCristian Pallares	  echo "pages."
4074189777a2SCristian Pallares	  ;;
4075189777a2SCristian Pallares	*)
4076189777a2SCristian Pallares	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4077189777a2SCristian Pallares	  ;;
4078189777a2SCristian Pallares      esac
4079189777a2SCristian Pallares      echo "----------------------------------------------------------------------"
4080189777a2SCristian Pallares    fi
4081189777a2SCristian Pallares    exit $EXIT_SUCCESS
4082189777a2SCristian Pallares}
4083189777a2SCristian Pallares
4084*b3fce824SCristian Pallaréstest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4085189777a2SCristian Pallares
4086189777a2SCristian Pallares
4087189777a2SCristian Pallares# func_mode_install arg...
4088189777a2SCristian Pallaresfunc_mode_install ()
4089189777a2SCristian Pallares{
4090*b3fce824SCristian Pallarés    $debug_cmd
4091*b3fce824SCristian Pallarés
4092189777a2SCristian Pallares    # There may be an optional sh(1) argument at the beginning of
4093189777a2SCristian Pallares    # install_prog (especially on Windows NT).
4094*b3fce824SCristian Pallarés    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4095189777a2SCristian Pallares       # Allow the use of GNU shtool's install command.
4096*b3fce824SCristian Pallarés       case $nonopt in *shtool*) :;; *) false;; esac
4097*b3fce824SCristian Pallarés    then
4098189777a2SCristian Pallares      # Aesthetically quote it.
4099189777a2SCristian Pallares      func_quote_for_eval "$nonopt"
4100189777a2SCristian Pallares      install_prog="$func_quote_for_eval_result "
4101189777a2SCristian Pallares      arg=$1
4102189777a2SCristian Pallares      shift
4103189777a2SCristian Pallares    else
4104189777a2SCristian Pallares      install_prog=
4105189777a2SCristian Pallares      arg=$nonopt
4106189777a2SCristian Pallares    fi
4107189777a2SCristian Pallares
4108189777a2SCristian Pallares    # The real first argument should be the name of the installation program.
4109189777a2SCristian Pallares    # Aesthetically quote it.
4110189777a2SCristian Pallares    func_quote_for_eval "$arg"
4111189777a2SCristian Pallares    func_append install_prog "$func_quote_for_eval_result"
4112189777a2SCristian Pallares    install_shared_prog=$install_prog
4113189777a2SCristian Pallares    case " $install_prog " in
4114189777a2SCristian Pallares      *[\\\ /]cp\ *) install_cp=: ;;
4115189777a2SCristian Pallares      *) install_cp=false ;;
4116189777a2SCristian Pallares    esac
4117189777a2SCristian Pallares
4118189777a2SCristian Pallares    # We need to accept at least all the BSD install flags.
4119189777a2SCristian Pallares    dest=
4120189777a2SCristian Pallares    files=
4121189777a2SCristian Pallares    opts=
4122189777a2SCristian Pallares    prev=
4123189777a2SCristian Pallares    install_type=
4124*b3fce824SCristian Pallarés    isdir=false
4125189777a2SCristian Pallares    stripme=
4126189777a2SCristian Pallares    no_mode=:
4127189777a2SCristian Pallares    for arg
4128189777a2SCristian Pallares    do
4129189777a2SCristian Pallares      arg2=
4130189777a2SCristian Pallares      if test -n "$dest"; then
4131189777a2SCristian Pallares	func_append files " $dest"
4132189777a2SCristian Pallares	dest=$arg
4133189777a2SCristian Pallares	continue
4134189777a2SCristian Pallares      fi
4135189777a2SCristian Pallares
4136189777a2SCristian Pallares      case $arg in
4137*b3fce824SCristian Pallarés      -d) isdir=: ;;
4138189777a2SCristian Pallares      -f)
4139189777a2SCristian Pallares	if $install_cp; then :; else
4140189777a2SCristian Pallares	  prev=$arg
4141189777a2SCristian Pallares	fi
4142189777a2SCristian Pallares	;;
4143189777a2SCristian Pallares      -g | -m | -o)
4144189777a2SCristian Pallares	prev=$arg
4145189777a2SCristian Pallares	;;
4146189777a2SCristian Pallares      -s)
4147189777a2SCristian Pallares	stripme=" -s"
4148189777a2SCristian Pallares	continue
4149189777a2SCristian Pallares	;;
4150189777a2SCristian Pallares      -*)
4151189777a2SCristian Pallares	;;
4152189777a2SCristian Pallares      *)
4153189777a2SCristian Pallares	# If the previous option needed an argument, then skip it.
4154189777a2SCristian Pallares	if test -n "$prev"; then
4155*b3fce824SCristian Pallarés	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4156189777a2SCristian Pallares	    arg2=$install_override_mode
4157189777a2SCristian Pallares	    no_mode=false
4158189777a2SCristian Pallares	  fi
4159189777a2SCristian Pallares	  prev=
4160189777a2SCristian Pallares	else
4161189777a2SCristian Pallares	  dest=$arg
4162189777a2SCristian Pallares	  continue
4163189777a2SCristian Pallares	fi
4164189777a2SCristian Pallares	;;
4165189777a2SCristian Pallares      esac
4166189777a2SCristian Pallares
4167189777a2SCristian Pallares      # Aesthetically quote the argument.
4168189777a2SCristian Pallares      func_quote_for_eval "$arg"
4169189777a2SCristian Pallares      func_append install_prog " $func_quote_for_eval_result"
4170189777a2SCristian Pallares      if test -n "$arg2"; then
4171189777a2SCristian Pallares	func_quote_for_eval "$arg2"
4172189777a2SCristian Pallares      fi
4173189777a2SCristian Pallares      func_append install_shared_prog " $func_quote_for_eval_result"
4174189777a2SCristian Pallares    done
4175189777a2SCristian Pallares
4176189777a2SCristian Pallares    test -z "$install_prog" && \
4177189777a2SCristian Pallares      func_fatal_help "you must specify an install program"
4178189777a2SCristian Pallares
4179189777a2SCristian Pallares    test -n "$prev" && \
4180*b3fce824SCristian Pallarés      func_fatal_help "the '$prev' option requires an argument"
4181189777a2SCristian Pallares
4182189777a2SCristian Pallares    if test -n "$install_override_mode" && $no_mode; then
4183189777a2SCristian Pallares      if $install_cp; then :; else
4184189777a2SCristian Pallares	func_quote_for_eval "$install_override_mode"
4185189777a2SCristian Pallares	func_append install_shared_prog " -m $func_quote_for_eval_result"
4186189777a2SCristian Pallares      fi
4187189777a2SCristian Pallares    fi
4188189777a2SCristian Pallares
4189189777a2SCristian Pallares    if test -z "$files"; then
4190189777a2SCristian Pallares      if test -z "$dest"; then
4191189777a2SCristian Pallares	func_fatal_help "no file or destination specified"
4192189777a2SCristian Pallares      else
4193189777a2SCristian Pallares	func_fatal_help "you must specify a destination"
4194189777a2SCristian Pallares      fi
4195189777a2SCristian Pallares    fi
4196189777a2SCristian Pallares
4197189777a2SCristian Pallares    # Strip any trailing slash from the destination.
4198189777a2SCristian Pallares    func_stripname '' '/' "$dest"
4199189777a2SCristian Pallares    dest=$func_stripname_result
4200189777a2SCristian Pallares
4201189777a2SCristian Pallares    # Check to see that the destination is a directory.
4202*b3fce824SCristian Pallarés    test -d "$dest" && isdir=:
4203*b3fce824SCristian Pallarés    if $isdir; then
4204*b3fce824SCristian Pallarés      destdir=$dest
4205189777a2SCristian Pallares      destname=
4206189777a2SCristian Pallares    else
4207189777a2SCristian Pallares      func_dirname_and_basename "$dest" "" "."
4208*b3fce824SCristian Pallarés      destdir=$func_dirname_result
4209*b3fce824SCristian Pallarés      destname=$func_basename_result
4210189777a2SCristian Pallares
4211189777a2SCristian Pallares      # Not a directory, so check to see that there is only one file specified.
4212189777a2SCristian Pallares      set dummy $files; shift
4213189777a2SCristian Pallares      test "$#" -gt 1 && \
4214*b3fce824SCristian Pallarés	func_fatal_help "'$dest' is not a directory"
4215189777a2SCristian Pallares    fi
4216189777a2SCristian Pallares    case $destdir in
4217189777a2SCristian Pallares    [\\/]* | [A-Za-z]:[\\/]*) ;;
4218189777a2SCristian Pallares    *)
4219189777a2SCristian Pallares      for file in $files; do
4220189777a2SCristian Pallares	case $file in
4221189777a2SCristian Pallares	*.lo) ;;
4222189777a2SCristian Pallares	*)
4223*b3fce824SCristian Pallarés	  func_fatal_help "'$destdir' must be an absolute directory name"
4224189777a2SCristian Pallares	  ;;
4225189777a2SCristian Pallares	esac
4226189777a2SCristian Pallares      done
4227189777a2SCristian Pallares      ;;
4228189777a2SCristian Pallares    esac
4229189777a2SCristian Pallares
4230189777a2SCristian Pallares    # This variable tells wrapper scripts just to set variables rather
4231189777a2SCristian Pallares    # than running their programs.
4232*b3fce824SCristian Pallarés    libtool_install_magic=$magic
4233189777a2SCristian Pallares
4234189777a2SCristian Pallares    staticlibs=
4235189777a2SCristian Pallares    future_libdirs=
4236189777a2SCristian Pallares    current_libdirs=
4237189777a2SCristian Pallares    for file in $files; do
4238189777a2SCristian Pallares
4239189777a2SCristian Pallares      # Do each installation.
4240189777a2SCristian Pallares      case $file in
4241189777a2SCristian Pallares      *.$libext)
4242189777a2SCristian Pallares	# Do the static libraries later.
4243189777a2SCristian Pallares	func_append staticlibs " $file"
4244189777a2SCristian Pallares	;;
4245189777a2SCristian Pallares
4246189777a2SCristian Pallares      *.la)
4247189777a2SCristian Pallares	func_resolve_sysroot "$file"
4248189777a2SCristian Pallares	file=$func_resolve_sysroot_result
4249189777a2SCristian Pallares
4250189777a2SCristian Pallares	# Check to see that this really is a libtool archive.
4251189777a2SCristian Pallares	func_lalib_unsafe_p "$file" \
4252*b3fce824SCristian Pallarés	  || func_fatal_help "'$file' is not a valid libtool archive"
4253189777a2SCristian Pallares
4254189777a2SCristian Pallares	library_names=
4255189777a2SCristian Pallares	old_library=
4256189777a2SCristian Pallares	relink_command=
4257189777a2SCristian Pallares	func_source "$file"
4258189777a2SCristian Pallares
4259189777a2SCristian Pallares	# Add the libdir to current_libdirs if it is the destination.
4260189777a2SCristian Pallares	if test "X$destdir" = "X$libdir"; then
4261189777a2SCristian Pallares	  case "$current_libdirs " in
4262189777a2SCristian Pallares	  *" $libdir "*) ;;
4263189777a2SCristian Pallares	  *) func_append current_libdirs " $libdir" ;;
4264189777a2SCristian Pallares	  esac
4265189777a2SCristian Pallares	else
4266189777a2SCristian Pallares	  # Note the libdir as a future libdir.
4267189777a2SCristian Pallares	  case "$future_libdirs " in
4268189777a2SCristian Pallares	  *" $libdir "*) ;;
4269189777a2SCristian Pallares	  *) func_append future_libdirs " $libdir" ;;
4270189777a2SCristian Pallares	  esac
4271189777a2SCristian Pallares	fi
4272189777a2SCristian Pallares
4273189777a2SCristian Pallares	func_dirname "$file" "/" ""
4274*b3fce824SCristian Pallarés	dir=$func_dirname_result
4275189777a2SCristian Pallares	func_append dir "$objdir"
4276189777a2SCristian Pallares
4277189777a2SCristian Pallares	if test -n "$relink_command"; then
4278189777a2SCristian Pallares	  # Determine the prefix the user has applied to our future dir.
4279189777a2SCristian Pallares	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4280189777a2SCristian Pallares
4281189777a2SCristian Pallares	  # Don't allow the user to place us outside of our expected
4282189777a2SCristian Pallares	  # location b/c this prevents finding dependent libraries that
4283189777a2SCristian Pallares	  # are installed to the same prefix.
4284189777a2SCristian Pallares	  # At present, this check doesn't affect windows .dll's that
4285189777a2SCristian Pallares	  # are installed into $libdir/../bin (currently, that works fine)
4286189777a2SCristian Pallares	  # but it's something to keep an eye on.
4287189777a2SCristian Pallares	  test "$inst_prefix_dir" = "$destdir" && \
4288*b3fce824SCristian Pallarés	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4289189777a2SCristian Pallares
4290189777a2SCristian Pallares	  if test -n "$inst_prefix_dir"; then
4291189777a2SCristian Pallares	    # Stick the inst_prefix_dir data into the link command.
4292189777a2SCristian Pallares	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4293189777a2SCristian Pallares	  else
4294189777a2SCristian Pallares	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4295189777a2SCristian Pallares	  fi
4296189777a2SCristian Pallares
4297*b3fce824SCristian Pallarés	  func_warning "relinking '$file'"
4298189777a2SCristian Pallares	  func_show_eval "$relink_command" \
4299*b3fce824SCristian Pallarés	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4300189777a2SCristian Pallares	fi
4301189777a2SCristian Pallares
4302189777a2SCristian Pallares	# See the names of the shared library.
4303189777a2SCristian Pallares	set dummy $library_names; shift
4304189777a2SCristian Pallares	if test -n "$1"; then
4305*b3fce824SCristian Pallarés	  realname=$1
4306189777a2SCristian Pallares	  shift
4307189777a2SCristian Pallares
4308*b3fce824SCristian Pallarés	  srcname=$realname
4309*b3fce824SCristian Pallarés	  test -n "$relink_command" && srcname=${realname}T
4310189777a2SCristian Pallares
4311189777a2SCristian Pallares	  # Install the shared library and build the symlinks.
4312189777a2SCristian Pallares	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4313189777a2SCristian Pallares	      'exit $?'
4314*b3fce824SCristian Pallarés	  tstripme=$stripme
4315189777a2SCristian Pallares	  case $host_os in
4316189777a2SCristian Pallares	  cygwin* | mingw* | pw32* | cegcc*)
4317189777a2SCristian Pallares	    case $realname in
4318189777a2SCristian Pallares	    *.dll.a)
4319*b3fce824SCristian Pallarés	      tstripme=
4320*b3fce824SCristian Pallarés	      ;;
4321*b3fce824SCristian Pallarés	    esac
4322*b3fce824SCristian Pallarés	    ;;
4323*b3fce824SCristian Pallarés	  os2*)
4324*b3fce824SCristian Pallarés	    case $realname in
4325*b3fce824SCristian Pallarés	    *_dll.a)
4326*b3fce824SCristian Pallarés	      tstripme=
4327189777a2SCristian Pallares	      ;;
4328189777a2SCristian Pallares	    esac
4329189777a2SCristian Pallares	    ;;
4330189777a2SCristian Pallares	  esac
4331189777a2SCristian Pallares	  if test -n "$tstripme" && test -n "$striplib"; then
4332189777a2SCristian Pallares	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
4333189777a2SCristian Pallares	  fi
4334189777a2SCristian Pallares
4335189777a2SCristian Pallares	  if test "$#" -gt 0; then
4336189777a2SCristian Pallares	    # Delete the old symlinks, and create new ones.
4337*b3fce824SCristian Pallarés	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4338189777a2SCristian Pallares	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4339189777a2SCristian Pallares	    # so we also need to try rm && ln -s.
4340189777a2SCristian Pallares	    for linkname
4341189777a2SCristian Pallares	    do
4342189777a2SCristian Pallares	      test "$linkname" != "$realname" \
4343189777a2SCristian Pallares		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4344189777a2SCristian Pallares	    done
4345189777a2SCristian Pallares	  fi
4346189777a2SCristian Pallares
4347189777a2SCristian Pallares	  # Do each command in the postinstall commands.
4348*b3fce824SCristian Pallarés	  lib=$destdir/$realname
4349189777a2SCristian Pallares	  func_execute_cmds "$postinstall_cmds" 'exit $?'
4350189777a2SCristian Pallares	fi
4351189777a2SCristian Pallares
4352189777a2SCristian Pallares	# Install the pseudo-library for information purposes.
4353189777a2SCristian Pallares	func_basename "$file"
4354*b3fce824SCristian Pallarés	name=$func_basename_result
4355*b3fce824SCristian Pallarés	instname=$dir/${name}i
4356189777a2SCristian Pallares	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4357189777a2SCristian Pallares
4358189777a2SCristian Pallares	# Maybe install the static library, too.
4359189777a2SCristian Pallares	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4360189777a2SCristian Pallares	;;
4361189777a2SCristian Pallares
4362189777a2SCristian Pallares      *.lo)
4363189777a2SCristian Pallares	# Install (i.e. copy) a libtool object.
4364189777a2SCristian Pallares
4365189777a2SCristian Pallares	# Figure out destination file name, if it wasn't already specified.
4366189777a2SCristian Pallares	if test -n "$destname"; then
4367*b3fce824SCristian Pallarés	  destfile=$destdir/$destname
4368189777a2SCristian Pallares	else
4369189777a2SCristian Pallares	  func_basename "$file"
4370*b3fce824SCristian Pallarés	  destfile=$func_basename_result
4371*b3fce824SCristian Pallarés	  destfile=$destdir/$destfile
4372189777a2SCristian Pallares	fi
4373189777a2SCristian Pallares
4374189777a2SCristian Pallares	# Deduce the name of the destination old-style object file.
4375189777a2SCristian Pallares	case $destfile in
4376189777a2SCristian Pallares	*.lo)
4377189777a2SCristian Pallares	  func_lo2o "$destfile"
4378189777a2SCristian Pallares	  staticdest=$func_lo2o_result
4379189777a2SCristian Pallares	  ;;
4380189777a2SCristian Pallares	*.$objext)
4381*b3fce824SCristian Pallarés	  staticdest=$destfile
4382189777a2SCristian Pallares	  destfile=
4383189777a2SCristian Pallares	  ;;
4384189777a2SCristian Pallares	*)
4385*b3fce824SCristian Pallarés	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4386189777a2SCristian Pallares	  ;;
4387189777a2SCristian Pallares	esac
4388189777a2SCristian Pallares
4389189777a2SCristian Pallares	# Install the libtool object if requested.
4390189777a2SCristian Pallares	test -n "$destfile" && \
4391189777a2SCristian Pallares	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4392189777a2SCristian Pallares
4393189777a2SCristian Pallares	# Install the old object if enabled.
4394*b3fce824SCristian Pallarés	if test yes = "$build_old_libs"; then
4395189777a2SCristian Pallares	  # Deduce the name of the old-style object file.
4396189777a2SCristian Pallares	  func_lo2o "$file"
4397189777a2SCristian Pallares	  staticobj=$func_lo2o_result
4398189777a2SCristian Pallares	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4399189777a2SCristian Pallares	fi
4400189777a2SCristian Pallares	exit $EXIT_SUCCESS
4401189777a2SCristian Pallares	;;
4402189777a2SCristian Pallares
4403189777a2SCristian Pallares      *)
4404189777a2SCristian Pallares	# Figure out destination file name, if it wasn't already specified.
4405189777a2SCristian Pallares	if test -n "$destname"; then
4406*b3fce824SCristian Pallarés	  destfile=$destdir/$destname
4407189777a2SCristian Pallares	else
4408189777a2SCristian Pallares	  func_basename "$file"
4409*b3fce824SCristian Pallarés	  destfile=$func_basename_result
4410*b3fce824SCristian Pallarés	  destfile=$destdir/$destfile
4411189777a2SCristian Pallares	fi
4412189777a2SCristian Pallares
4413189777a2SCristian Pallares	# If the file is missing, and there is a .exe on the end, strip it
4414189777a2SCristian Pallares	# because it is most likely a libtool script we actually want to
4415189777a2SCristian Pallares	# install
4416*b3fce824SCristian Pallarés	stripped_ext=
4417189777a2SCristian Pallares	case $file in
4418189777a2SCristian Pallares	  *.exe)
4419189777a2SCristian Pallares	    if test ! -f "$file"; then
4420189777a2SCristian Pallares	      func_stripname '' '.exe' "$file"
4421189777a2SCristian Pallares	      file=$func_stripname_result
4422*b3fce824SCristian Pallarés	      stripped_ext=.exe
4423189777a2SCristian Pallares	    fi
4424189777a2SCristian Pallares	    ;;
4425189777a2SCristian Pallares	esac
4426189777a2SCristian Pallares
4427189777a2SCristian Pallares	# Do a test to see if this is really a libtool program.
4428189777a2SCristian Pallares	case $host in
4429189777a2SCristian Pallares	*cygwin* | *mingw*)
4430189777a2SCristian Pallares	    if func_ltwrapper_executable_p "$file"; then
4431189777a2SCristian Pallares	      func_ltwrapper_scriptname "$file"
4432189777a2SCristian Pallares	      wrapper=$func_ltwrapper_scriptname_result
4433189777a2SCristian Pallares	    else
4434189777a2SCristian Pallares	      func_stripname '' '.exe' "$file"
4435189777a2SCristian Pallares	      wrapper=$func_stripname_result
4436189777a2SCristian Pallares	    fi
4437189777a2SCristian Pallares	    ;;
4438189777a2SCristian Pallares	*)
4439189777a2SCristian Pallares	    wrapper=$file
4440189777a2SCristian Pallares	    ;;
4441189777a2SCristian Pallares	esac
4442189777a2SCristian Pallares	if func_ltwrapper_script_p "$wrapper"; then
4443189777a2SCristian Pallares	  notinst_deplibs=
4444189777a2SCristian Pallares	  relink_command=
4445189777a2SCristian Pallares
4446189777a2SCristian Pallares	  func_source "$wrapper"
4447189777a2SCristian Pallares
4448189777a2SCristian Pallares	  # Check the variables that should have been set.
4449189777a2SCristian Pallares	  test -z "$generated_by_libtool_version" && \
4450*b3fce824SCristian Pallarés	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4451189777a2SCristian Pallares
4452*b3fce824SCristian Pallarés	  finalize=:
4453189777a2SCristian Pallares	  for lib in $notinst_deplibs; do
4454189777a2SCristian Pallares	    # Check to see that each library is installed.
4455189777a2SCristian Pallares	    libdir=
4456189777a2SCristian Pallares	    if test -f "$lib"; then
4457189777a2SCristian Pallares	      func_source "$lib"
4458189777a2SCristian Pallares	    fi
4459*b3fce824SCristian Pallarés	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4460189777a2SCristian Pallares	    if test -n "$libdir" && test ! -f "$libfile"; then
4461*b3fce824SCristian Pallarés	      func_warning "'$lib' has not been installed in '$libdir'"
4462*b3fce824SCristian Pallarés	      finalize=false
4463189777a2SCristian Pallares	    fi
4464189777a2SCristian Pallares	  done
4465189777a2SCristian Pallares
4466189777a2SCristian Pallares	  relink_command=
4467189777a2SCristian Pallares	  func_source "$wrapper"
4468189777a2SCristian Pallares
4469189777a2SCristian Pallares	  outputname=
4470*b3fce824SCristian Pallarés	  if test no = "$fast_install" && test -n "$relink_command"; then
4471189777a2SCristian Pallares	    $opt_dry_run || {
4472*b3fce824SCristian Pallarés	      if $finalize; then
4473189777a2SCristian Pallares	        tmpdir=`func_mktempdir`
4474189777a2SCristian Pallares		func_basename "$file$stripped_ext"
4475*b3fce824SCristian Pallarés		file=$func_basename_result
4476*b3fce824SCristian Pallarés	        outputname=$tmpdir/$file
4477189777a2SCristian Pallares	        # Replace the output file specification.
4478189777a2SCristian Pallares	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4479189777a2SCristian Pallares
4480*b3fce824SCristian Pallarés	        $opt_quiet || {
4481189777a2SCristian Pallares	          func_quote_for_expand "$relink_command"
4482189777a2SCristian Pallares		  eval "func_echo $func_quote_for_expand_result"
4483189777a2SCristian Pallares	        }
4484189777a2SCristian Pallares	        if eval "$relink_command"; then :
4485189777a2SCristian Pallares	          else
4486*b3fce824SCristian Pallarés		  func_error "error: relink '$file' with the above command before installing it"
4487189777a2SCristian Pallares		  $opt_dry_run || ${RM}r "$tmpdir"
4488189777a2SCristian Pallares		  continue
4489189777a2SCristian Pallares	        fi
4490*b3fce824SCristian Pallarés	        file=$outputname
4491189777a2SCristian Pallares	      else
4492*b3fce824SCristian Pallarés	        func_warning "cannot relink '$file'"
4493189777a2SCristian Pallares	      fi
4494189777a2SCristian Pallares	    }
4495189777a2SCristian Pallares	  else
4496189777a2SCristian Pallares	    # Install the binary that we compiled earlier.
4497189777a2SCristian Pallares	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4498189777a2SCristian Pallares	  fi
4499189777a2SCristian Pallares	fi
4500189777a2SCristian Pallares
4501189777a2SCristian Pallares	# remove .exe since cygwin /usr/bin/install will append another
4502189777a2SCristian Pallares	# one anyway
4503189777a2SCristian Pallares	case $install_prog,$host in
4504189777a2SCristian Pallares	*/usr/bin/install*,*cygwin*)
4505189777a2SCristian Pallares	  case $file:$destfile in
4506189777a2SCristian Pallares	  *.exe:*.exe)
4507189777a2SCristian Pallares	    # this is ok
4508189777a2SCristian Pallares	    ;;
4509189777a2SCristian Pallares	  *.exe:*)
4510189777a2SCristian Pallares	    destfile=$destfile.exe
4511189777a2SCristian Pallares	    ;;
4512189777a2SCristian Pallares	  *:*.exe)
4513189777a2SCristian Pallares	    func_stripname '' '.exe' "$destfile"
4514189777a2SCristian Pallares	    destfile=$func_stripname_result
4515189777a2SCristian Pallares	    ;;
4516189777a2SCristian Pallares	  esac
4517189777a2SCristian Pallares	  ;;
4518189777a2SCristian Pallares	esac
4519189777a2SCristian Pallares	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4520189777a2SCristian Pallares	$opt_dry_run || if test -n "$outputname"; then
4521189777a2SCristian Pallares	  ${RM}r "$tmpdir"
4522189777a2SCristian Pallares	fi
4523189777a2SCristian Pallares	;;
4524189777a2SCristian Pallares      esac
4525189777a2SCristian Pallares    done
4526189777a2SCristian Pallares
4527189777a2SCristian Pallares    for file in $staticlibs; do
4528189777a2SCristian Pallares      func_basename "$file"
4529*b3fce824SCristian Pallarés      name=$func_basename_result
4530189777a2SCristian Pallares
4531189777a2SCristian Pallares      # Set up the ranlib parameters.
4532*b3fce824SCristian Pallarés      oldlib=$destdir/$name
4533189777a2SCristian Pallares      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4534189777a2SCristian Pallares      tool_oldlib=$func_to_tool_file_result
4535189777a2SCristian Pallares
4536189777a2SCristian Pallares      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4537189777a2SCristian Pallares
4538189777a2SCristian Pallares      if test -n "$stripme" && test -n "$old_striplib"; then
4539189777a2SCristian Pallares	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4540189777a2SCristian Pallares      fi
4541189777a2SCristian Pallares
4542189777a2SCristian Pallares      # Do each command in the postinstall commands.
4543189777a2SCristian Pallares      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4544189777a2SCristian Pallares    done
4545189777a2SCristian Pallares
4546189777a2SCristian Pallares    test -n "$future_libdirs" && \
4547*b3fce824SCristian Pallarés      func_warning "remember to run '$progname --finish$future_libdirs'"
4548189777a2SCristian Pallares
4549189777a2SCristian Pallares    if test -n "$current_libdirs"; then
4550189777a2SCristian Pallares      # Maybe just do a dry run.
4551189777a2SCristian Pallares      $opt_dry_run && current_libdirs=" -n$current_libdirs"
4552*b3fce824SCristian Pallarés      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4553189777a2SCristian Pallares    else
4554189777a2SCristian Pallares      exit $EXIT_SUCCESS
4555189777a2SCristian Pallares    fi
4556189777a2SCristian Pallares}
4557189777a2SCristian Pallares
4558*b3fce824SCristian Pallaréstest install = "$opt_mode" && func_mode_install ${1+"$@"}
4559189777a2SCristian Pallares
4560189777a2SCristian Pallares
4561189777a2SCristian Pallares# func_generate_dlsyms outputname originator pic_p
4562189777a2SCristian Pallares# Extract symbols from dlprefiles and create ${outputname}S.o with
4563189777a2SCristian Pallares# a dlpreopen symbol table.
4564189777a2SCristian Pallaresfunc_generate_dlsyms ()
4565189777a2SCristian Pallares{
4566*b3fce824SCristian Pallarés    $debug_cmd
4567*b3fce824SCristian Pallarés
4568*b3fce824SCristian Pallarés    my_outputname=$1
4569*b3fce824SCristian Pallarés    my_originator=$2
4570*b3fce824SCristian Pallarés    my_pic_p=${3-false}
4571*b3fce824SCristian Pallarés    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4572189777a2SCristian Pallares    my_dlsyms=
4573189777a2SCristian Pallares
4574*b3fce824SCristian Pallarés    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4575189777a2SCristian Pallares      if test -n "$NM" && test -n "$global_symbol_pipe"; then
4576*b3fce824SCristian Pallarés	my_dlsyms=${my_outputname}S.c
4577189777a2SCristian Pallares      else
4578189777a2SCristian Pallares	func_error "not configured to extract global symbols from dlpreopened files"
4579189777a2SCristian Pallares      fi
4580189777a2SCristian Pallares    fi
4581189777a2SCristian Pallares
4582189777a2SCristian Pallares    if test -n "$my_dlsyms"; then
4583189777a2SCristian Pallares      case $my_dlsyms in
4584189777a2SCristian Pallares      "") ;;
4585189777a2SCristian Pallares      *.c)
4586189777a2SCristian Pallares	# Discover the nlist of each of the dlfiles.
4587*b3fce824SCristian Pallarés	nlist=$output_objdir/$my_outputname.nm
4588189777a2SCristian Pallares
4589189777a2SCristian Pallares	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4590189777a2SCristian Pallares
4591189777a2SCristian Pallares	# Parse the name list into a source file.
4592189777a2SCristian Pallares	func_verbose "creating $output_objdir/$my_dlsyms"
4593189777a2SCristian Pallares
4594189777a2SCristian Pallares	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4595*b3fce824SCristian Pallarés/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4596*b3fce824SCristian Pallarés/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4597189777a2SCristian Pallares
4598189777a2SCristian Pallares#ifdef __cplusplus
4599189777a2SCristian Pallaresextern \"C\" {
4600189777a2SCristian Pallares#endif
4601189777a2SCristian Pallares
4602*b3fce824SCristian Pallarés#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4603189777a2SCristian Pallares#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4604189777a2SCristian Pallares#endif
4605189777a2SCristian Pallares
4606189777a2SCristian Pallares/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
4607*b3fce824SCristian Pallarés#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
4608*b3fce824SCristian Pallarés/* DATA imports from DLLs on WIN32 can't be const, because runtime
4609189777a2SCristian Pallares   relocations are performed -- see ld's documentation on pseudo-relocs.  */
4610189777a2SCristian Pallares# define LT_DLSYM_CONST
4611*b3fce824SCristian Pallarés#elif defined __osf__
4612189777a2SCristian Pallares/* This system does not cope well with relocations in const data.  */
4613189777a2SCristian Pallares# define LT_DLSYM_CONST
4614189777a2SCristian Pallares#else
4615189777a2SCristian Pallares# define LT_DLSYM_CONST const
4616189777a2SCristian Pallares#endif
4617189777a2SCristian Pallares
4618*b3fce824SCristian Pallarés#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
4619*b3fce824SCristian Pallarés
4620189777a2SCristian Pallares/* External symbol declarations for the compiler. */\
4621189777a2SCristian Pallares"
4622189777a2SCristian Pallares
4623*b3fce824SCristian Pallarés	if test yes = "$dlself"; then
4624*b3fce824SCristian Pallarés	  func_verbose "generating symbol list for '$output'"
4625189777a2SCristian Pallares
4626189777a2SCristian Pallares	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4627189777a2SCristian Pallares
4628189777a2SCristian Pallares	  # Add our own program objects to the symbol list.
4629189777a2SCristian Pallares	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4630189777a2SCristian Pallares	  for progfile in $progfiles; do
4631189777a2SCristian Pallares	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
4632*b3fce824SCristian Pallarés	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4633189777a2SCristian Pallares	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4634189777a2SCristian Pallares	  done
4635189777a2SCristian Pallares
4636189777a2SCristian Pallares	  if test -n "$exclude_expsyms"; then
4637189777a2SCristian Pallares	    $opt_dry_run || {
4638189777a2SCristian Pallares	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4639189777a2SCristian Pallares	      eval '$MV "$nlist"T "$nlist"'
4640189777a2SCristian Pallares	    }
4641189777a2SCristian Pallares	  fi
4642189777a2SCristian Pallares
4643189777a2SCristian Pallares	  if test -n "$export_symbols_regex"; then
4644189777a2SCristian Pallares	    $opt_dry_run || {
4645189777a2SCristian Pallares	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4646189777a2SCristian Pallares	      eval '$MV "$nlist"T "$nlist"'
4647189777a2SCristian Pallares	    }
4648189777a2SCristian Pallares	  fi
4649189777a2SCristian Pallares
4650189777a2SCristian Pallares	  # Prepare the list of exported symbols
4651189777a2SCristian Pallares	  if test -z "$export_symbols"; then
4652*b3fce824SCristian Pallarés	    export_symbols=$output_objdir/$outputname.exp
4653189777a2SCristian Pallares	    $opt_dry_run || {
4654189777a2SCristian Pallares	      $RM $export_symbols
4655*b3fce824SCristian Pallarés	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4656189777a2SCristian Pallares	      case $host in
4657189777a2SCristian Pallares	      *cygwin* | *mingw* | *cegcc* )
4658189777a2SCristian Pallares                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4659189777a2SCristian Pallares                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4660189777a2SCristian Pallares	        ;;
4661189777a2SCristian Pallares	      esac
4662189777a2SCristian Pallares	    }
4663189777a2SCristian Pallares	  else
4664189777a2SCristian Pallares	    $opt_dry_run || {
4665*b3fce824SCristian Pallarés	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4666189777a2SCristian Pallares	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4667189777a2SCristian Pallares	      eval '$MV "$nlist"T "$nlist"'
4668189777a2SCristian Pallares	      case $host in
4669189777a2SCristian Pallares	        *cygwin* | *mingw* | *cegcc* )
4670189777a2SCristian Pallares	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4671189777a2SCristian Pallares	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4672189777a2SCristian Pallares	          ;;
4673189777a2SCristian Pallares	      esac
4674189777a2SCristian Pallares	    }
4675189777a2SCristian Pallares	  fi
4676189777a2SCristian Pallares	fi
4677189777a2SCristian Pallares
4678189777a2SCristian Pallares	for dlprefile in $dlprefiles; do
4679*b3fce824SCristian Pallarés	  func_verbose "extracting global C symbols from '$dlprefile'"
4680189777a2SCristian Pallares	  func_basename "$dlprefile"
4681*b3fce824SCristian Pallarés	  name=$func_basename_result
4682189777a2SCristian Pallares          case $host in
4683189777a2SCristian Pallares	    *cygwin* | *mingw* | *cegcc* )
4684189777a2SCristian Pallares	      # if an import library, we need to obtain dlname
4685189777a2SCristian Pallares	      if func_win32_import_lib_p "$dlprefile"; then
4686189777a2SCristian Pallares	        func_tr_sh "$dlprefile"
4687189777a2SCristian Pallares	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
4688*b3fce824SCristian Pallarés	        dlprefile_dlbasename=
4689189777a2SCristian Pallares	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4690189777a2SCristian Pallares	          # Use subshell, to avoid clobbering current variable values
4691189777a2SCristian Pallares	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
4692189777a2SCristian Pallares	          if test -n "$dlprefile_dlname"; then
4693189777a2SCristian Pallares	            func_basename "$dlprefile_dlname"
4694*b3fce824SCristian Pallarés	            dlprefile_dlbasename=$func_basename_result
4695189777a2SCristian Pallares	          else
4696189777a2SCristian Pallares	            # no lafile. user explicitly requested -dlpreopen <import library>.
4697189777a2SCristian Pallares	            $sharedlib_from_linklib_cmd "$dlprefile"
4698189777a2SCristian Pallares	            dlprefile_dlbasename=$sharedlib_from_linklib_result
4699189777a2SCristian Pallares	          fi
4700189777a2SCristian Pallares	        fi
4701189777a2SCristian Pallares	        $opt_dry_run || {
4702189777a2SCristian Pallares	          if test -n "$dlprefile_dlbasename"; then
4703189777a2SCristian Pallares	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4704189777a2SCristian Pallares	          else
4705189777a2SCristian Pallares	            func_warning "Could not compute DLL name from $name"
4706189777a2SCristian Pallares	            eval '$ECHO ": $name " >> "$nlist"'
4707189777a2SCristian Pallares	          fi
4708189777a2SCristian Pallares	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4709189777a2SCristian Pallares	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4710189777a2SCristian Pallares	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4711189777a2SCristian Pallares	        }
4712189777a2SCristian Pallares	      else # not an import lib
4713189777a2SCristian Pallares	        $opt_dry_run || {
4714189777a2SCristian Pallares	          eval '$ECHO ": $name " >> "$nlist"'
4715189777a2SCristian Pallares	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4716189777a2SCristian Pallares	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4717189777a2SCristian Pallares	        }
4718189777a2SCristian Pallares	      fi
4719189777a2SCristian Pallares	    ;;
4720189777a2SCristian Pallares	    *)
4721189777a2SCristian Pallares	      $opt_dry_run || {
4722189777a2SCristian Pallares	        eval '$ECHO ": $name " >> "$nlist"'
4723189777a2SCristian Pallares	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4724189777a2SCristian Pallares	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4725189777a2SCristian Pallares	      }
4726189777a2SCristian Pallares	    ;;
4727189777a2SCristian Pallares          esac
4728189777a2SCristian Pallares	done
4729189777a2SCristian Pallares
4730189777a2SCristian Pallares	$opt_dry_run || {
4731189777a2SCristian Pallares	  # Make sure we have at least an empty file.
4732189777a2SCristian Pallares	  test -f "$nlist" || : > "$nlist"
4733189777a2SCristian Pallares
4734189777a2SCristian Pallares	  if test -n "$exclude_expsyms"; then
4735189777a2SCristian Pallares	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4736189777a2SCristian Pallares	    $MV "$nlist"T "$nlist"
4737189777a2SCristian Pallares	  fi
4738189777a2SCristian Pallares
4739189777a2SCristian Pallares	  # Try sorting and uniquifying the output.
4740189777a2SCristian Pallares	  if $GREP -v "^: " < "$nlist" |
4741189777a2SCristian Pallares	      if sort -k 3 </dev/null >/dev/null 2>&1; then
4742189777a2SCristian Pallares		sort -k 3
4743189777a2SCristian Pallares	      else
4744189777a2SCristian Pallares		sort +2
4745189777a2SCristian Pallares	      fi |
4746189777a2SCristian Pallares	      uniq > "$nlist"S; then
4747189777a2SCristian Pallares	    :
4748189777a2SCristian Pallares	  else
4749189777a2SCristian Pallares	    $GREP -v "^: " < "$nlist" > "$nlist"S
4750189777a2SCristian Pallares	  fi
4751189777a2SCristian Pallares
4752189777a2SCristian Pallares	  if test -f "$nlist"S; then
4753189777a2SCristian Pallares	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4754189777a2SCristian Pallares	  else
4755189777a2SCristian Pallares	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4756189777a2SCristian Pallares	  fi
4757189777a2SCristian Pallares
4758*b3fce824SCristian Pallarés	  func_show_eval '$RM "${nlist}I"'
4759*b3fce824SCristian Pallarés	  if test -n "$global_symbol_to_import"; then
4760*b3fce824SCristian Pallarés	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
4761*b3fce824SCristian Pallarés	  fi
4762*b3fce824SCristian Pallarés
4763189777a2SCristian Pallares	  echo >> "$output_objdir/$my_dlsyms" "\
4764189777a2SCristian Pallares
4765189777a2SCristian Pallares/* The mapping between symbol names and symbols.  */
4766189777a2SCristian Pallarestypedef struct {
4767189777a2SCristian Pallares  const char *name;
4768189777a2SCristian Pallares  void *address;
4769189777a2SCristian Pallares} lt_dlsymlist;
4770189777a2SCristian Pallaresextern LT_DLSYM_CONST lt_dlsymlist
4771*b3fce824SCristian Pallaréslt_${my_prefix}_LTX_preloaded_symbols[];\
4772*b3fce824SCristian Pallarés"
4773*b3fce824SCristian Pallarés
4774*b3fce824SCristian Pallarés	  if test -s "$nlist"I; then
4775*b3fce824SCristian Pallarés	    echo >> "$output_objdir/$my_dlsyms" "\
4776*b3fce824SCristian Pallarésstatic void lt_syminit(void)
4777*b3fce824SCristian Pallarés{
4778*b3fce824SCristian Pallarés  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
4779*b3fce824SCristian Pallarés  for (; symbol->name; ++symbol)
4780*b3fce824SCristian Pallarés    {"
4781*b3fce824SCristian Pallarés	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
4782*b3fce824SCristian Pallarés	    echo >> "$output_objdir/$my_dlsyms" "\
4783*b3fce824SCristian Pallarés    }
4784*b3fce824SCristian Pallarés}"
4785*b3fce824SCristian Pallarés	  fi
4786*b3fce824SCristian Pallarés	  echo >> "$output_objdir/$my_dlsyms" "\
4787189777a2SCristian PallaresLT_DLSYM_CONST lt_dlsymlist
4788189777a2SCristian Pallareslt_${my_prefix}_LTX_preloaded_symbols[] =
4789*b3fce824SCristian Pallarés{ {\"$my_originator\", (void *) 0},"
4790*b3fce824SCristian Pallarés
4791*b3fce824SCristian Pallarés	  if test -s "$nlist"I; then
4792*b3fce824SCristian Pallarés	    echo >> "$output_objdir/$my_dlsyms" "\
4793*b3fce824SCristian Pallarés  {\"@INIT@\", (void *) &lt_syminit},"
4794*b3fce824SCristian Pallarés	  fi
4795189777a2SCristian Pallares
4796189777a2SCristian Pallares	  case $need_lib_prefix in
4797189777a2SCristian Pallares	  no)
4798189777a2SCristian Pallares	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4799189777a2SCristian Pallares	    ;;
4800189777a2SCristian Pallares	  *)
4801189777a2SCristian Pallares	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4802189777a2SCristian Pallares	    ;;
4803189777a2SCristian Pallares	  esac
4804189777a2SCristian Pallares	  echo >> "$output_objdir/$my_dlsyms" "\
4805189777a2SCristian Pallares  {0, (void *) 0}
4806189777a2SCristian Pallares};
4807189777a2SCristian Pallares
4808189777a2SCristian Pallares/* This works around a problem in FreeBSD linker */
4809189777a2SCristian Pallares#ifdef FREEBSD_WORKAROUND
4810189777a2SCristian Pallaresstatic const void *lt_preloaded_setup() {
4811189777a2SCristian Pallares  return lt_${my_prefix}_LTX_preloaded_symbols;
4812189777a2SCristian Pallares}
4813189777a2SCristian Pallares#endif
4814189777a2SCristian Pallares
4815189777a2SCristian Pallares#ifdef __cplusplus
4816189777a2SCristian Pallares}
4817189777a2SCristian Pallares#endif\
4818189777a2SCristian Pallares"
4819189777a2SCristian Pallares	} # !$opt_dry_run
4820189777a2SCristian Pallares
4821189777a2SCristian Pallares	pic_flag_for_symtable=
4822189777a2SCristian Pallares	case "$compile_command " in
4823189777a2SCristian Pallares	*" -static "*) ;;
4824189777a2SCristian Pallares	*)
4825189777a2SCristian Pallares	  case $host in
4826189777a2SCristian Pallares	  # compiling the symbol table file with pic_flag works around
4827189777a2SCristian Pallares	  # a FreeBSD bug that causes programs to crash when -lm is
4828189777a2SCristian Pallares	  # linked before any other PIC object.  But we must not use
4829189777a2SCristian Pallares	  # pic_flag when linking with -static.  The problem exists in
4830189777a2SCristian Pallares	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
4831189777a2SCristian Pallares	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
4832189777a2SCristian Pallares	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
4833189777a2SCristian Pallares	  *-*-hpux*)
4834189777a2SCristian Pallares	    pic_flag_for_symtable=" $pic_flag"  ;;
4835189777a2SCristian Pallares	  *)
4836*b3fce824SCristian Pallarés	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
4837189777a2SCristian Pallares	    ;;
4838189777a2SCristian Pallares	  esac
4839189777a2SCristian Pallares	  ;;
4840189777a2SCristian Pallares	esac
4841189777a2SCristian Pallares	symtab_cflags=
4842189777a2SCristian Pallares	for arg in $LTCFLAGS; do
4843189777a2SCristian Pallares	  case $arg in
4844189777a2SCristian Pallares	  -pie | -fpie | -fPIE) ;;
4845189777a2SCristian Pallares	  *) func_append symtab_cflags " $arg" ;;
4846189777a2SCristian Pallares	  esac
4847189777a2SCristian Pallares	done
4848189777a2SCristian Pallares
4849189777a2SCristian Pallares	# Now compile the dynamic symbol file.
4850189777a2SCristian Pallares	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
4851189777a2SCristian Pallares
4852189777a2SCristian Pallares	# Clean up the generated files.
4853*b3fce824SCristian Pallarés	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4854189777a2SCristian Pallares
4855189777a2SCristian Pallares	# Transform the symbol file into the correct name.
4856*b3fce824SCristian Pallarés	symfileobj=$output_objdir/${my_outputname}S.$objext
4857189777a2SCristian Pallares	case $host in
4858189777a2SCristian Pallares	*cygwin* | *mingw* | *cegcc* )
4859189777a2SCristian Pallares	  if test -f "$output_objdir/$my_outputname.def"; then
4860189777a2SCristian Pallares	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4861189777a2SCristian Pallares	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4862189777a2SCristian Pallares	  else
4863189777a2SCristian Pallares	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4864189777a2SCristian Pallares	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4865189777a2SCristian Pallares	  fi
4866189777a2SCristian Pallares	  ;;
4867189777a2SCristian Pallares	*)
4868189777a2SCristian Pallares	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4869189777a2SCristian Pallares	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4870189777a2SCristian Pallares	  ;;
4871189777a2SCristian Pallares	esac
4872189777a2SCristian Pallares	;;
4873189777a2SCristian Pallares      *)
4874*b3fce824SCristian Pallarés	func_fatal_error "unknown suffix for '$my_dlsyms'"
4875189777a2SCristian Pallares	;;
4876189777a2SCristian Pallares      esac
4877189777a2SCristian Pallares    else
4878189777a2SCristian Pallares      # We keep going just in case the user didn't refer to
4879189777a2SCristian Pallares      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
4880189777a2SCristian Pallares      # really was required.
4881189777a2SCristian Pallares
4882189777a2SCristian Pallares      # Nullify the symbol file.
4883189777a2SCristian Pallares      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
4884189777a2SCristian Pallares      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
4885189777a2SCristian Pallares    fi
4886189777a2SCristian Pallares}
4887189777a2SCristian Pallares
4888*b3fce824SCristian Pallarés# func_cygming_gnu_implib_p ARG
4889*b3fce824SCristian Pallarés# This predicate returns with zero status (TRUE) if
4890*b3fce824SCristian Pallarés# ARG is a GNU/binutils-style import library. Returns
4891*b3fce824SCristian Pallarés# with nonzero status (FALSE) otherwise.
4892*b3fce824SCristian Pallarésfunc_cygming_gnu_implib_p ()
4893*b3fce824SCristian Pallarés{
4894*b3fce824SCristian Pallarés  $debug_cmd
4895*b3fce824SCristian Pallarés
4896*b3fce824SCristian Pallarés  func_to_tool_file "$1" func_convert_file_msys_to_w32
4897*b3fce824SCristian Pallarés  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
4898*b3fce824SCristian Pallarés  test -n "$func_cygming_gnu_implib_tmp"
4899*b3fce824SCristian Pallarés}
4900*b3fce824SCristian Pallarés
4901*b3fce824SCristian Pallarés# func_cygming_ms_implib_p ARG
4902*b3fce824SCristian Pallarés# This predicate returns with zero status (TRUE) if
4903*b3fce824SCristian Pallarés# ARG is an MS-style import library. Returns
4904*b3fce824SCristian Pallarés# with nonzero status (FALSE) otherwise.
4905*b3fce824SCristian Pallarésfunc_cygming_ms_implib_p ()
4906*b3fce824SCristian Pallarés{
4907*b3fce824SCristian Pallarés  $debug_cmd
4908*b3fce824SCristian Pallarés
4909*b3fce824SCristian Pallarés  func_to_tool_file "$1" func_convert_file_msys_to_w32
4910*b3fce824SCristian Pallarés  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
4911*b3fce824SCristian Pallarés  test -n "$func_cygming_ms_implib_tmp"
4912*b3fce824SCristian Pallarés}
4913*b3fce824SCristian Pallarés
4914189777a2SCristian Pallares# func_win32_libid arg
4915189777a2SCristian Pallares# return the library type of file 'arg'
4916189777a2SCristian Pallares#
4917189777a2SCristian Pallares# Need a lot of goo to handle *both* DLLs and import libs
4918189777a2SCristian Pallares# Has to be a shell function in order to 'eat' the argument
4919189777a2SCristian Pallares# that is supplied when $file_magic_command is called.
4920189777a2SCristian Pallares# Despite the name, also deal with 64 bit binaries.
4921189777a2SCristian Pallaresfunc_win32_libid ()
4922189777a2SCristian Pallares{
4923*b3fce824SCristian Pallarés  $debug_cmd
4924*b3fce824SCristian Pallarés
4925*b3fce824SCristian Pallarés  win32_libid_type=unknown
4926189777a2SCristian Pallares  win32_fileres=`file -L $1 2>/dev/null`
4927189777a2SCristian Pallares  case $win32_fileres in
4928189777a2SCristian Pallares  *ar\ archive\ import\ library*) # definitely import
4929189777a2SCristian Pallares    win32_libid_type="x86 archive import"
4930189777a2SCristian Pallares    ;;
4931189777a2SCristian Pallares  *ar\ archive*) # could be an import, or static
4932189777a2SCristian Pallares    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
4933189777a2SCristian Pallares    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
4934189777a2SCristian Pallares       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
4935*b3fce824SCristian Pallarés      case $nm_interface in
4936*b3fce824SCristian Pallarés      "MS dumpbin")
4937*b3fce824SCristian Pallarés	if func_cygming_ms_implib_p "$1" ||
4938*b3fce824SCristian Pallarés	   func_cygming_gnu_implib_p "$1"
4939*b3fce824SCristian Pallarés	then
4940*b3fce824SCristian Pallarés	  win32_nmres=import
4941*b3fce824SCristian Pallarés	else
4942*b3fce824SCristian Pallarés	  win32_nmres=
4943*b3fce824SCristian Pallarés	fi
4944*b3fce824SCristian Pallarés	;;
4945*b3fce824SCristian Pallarés      *)
4946189777a2SCristian Pallares	func_to_tool_file "$1" func_convert_file_msys_to_w32
4947189777a2SCristian Pallares	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
4948189777a2SCristian Pallares	  $SED -n -e '
4949189777a2SCristian Pallares	    1,100{
4950189777a2SCristian Pallares		/ I /{
4951*b3fce824SCristian Pallarés		    s|.*|import|
4952189777a2SCristian Pallares		    p
4953189777a2SCristian Pallares		    q
4954189777a2SCristian Pallares		}
4955189777a2SCristian Pallares	    }'`
4956*b3fce824SCristian Pallarés	;;
4957*b3fce824SCristian Pallarés      esac
4958189777a2SCristian Pallares      case $win32_nmres in
4959189777a2SCristian Pallares      import*)  win32_libid_type="x86 archive import";;
4960189777a2SCristian Pallares      *)        win32_libid_type="x86 archive static";;
4961189777a2SCristian Pallares      esac
4962189777a2SCristian Pallares    fi
4963189777a2SCristian Pallares    ;;
4964189777a2SCristian Pallares  *DLL*)
4965189777a2SCristian Pallares    win32_libid_type="x86 DLL"
4966189777a2SCristian Pallares    ;;
4967189777a2SCristian Pallares  *executable*) # but shell scripts are "executable" too...
4968189777a2SCristian Pallares    case $win32_fileres in
4969189777a2SCristian Pallares    *MS\ Windows\ PE\ Intel*)
4970189777a2SCristian Pallares      win32_libid_type="x86 DLL"
4971189777a2SCristian Pallares      ;;
4972189777a2SCristian Pallares    esac
4973189777a2SCristian Pallares    ;;
4974189777a2SCristian Pallares  esac
4975189777a2SCristian Pallares  $ECHO "$win32_libid_type"
4976189777a2SCristian Pallares}
4977189777a2SCristian Pallares
4978189777a2SCristian Pallares# func_cygming_dll_for_implib ARG
4979189777a2SCristian Pallares#
4980189777a2SCristian Pallares# Platform-specific function to extract the
4981189777a2SCristian Pallares# name of the DLL associated with the specified
4982189777a2SCristian Pallares# import library ARG.
4983189777a2SCristian Pallares# Invoked by eval'ing the libtool variable
4984189777a2SCristian Pallares#    $sharedlib_from_linklib_cmd
4985189777a2SCristian Pallares# Result is available in the variable
4986189777a2SCristian Pallares#    $sharedlib_from_linklib_result
4987189777a2SCristian Pallaresfunc_cygming_dll_for_implib ()
4988189777a2SCristian Pallares{
4989*b3fce824SCristian Pallarés  $debug_cmd
4990*b3fce824SCristian Pallarés
4991189777a2SCristian Pallares  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
4992189777a2SCristian Pallares}
4993189777a2SCristian Pallares
4994189777a2SCristian Pallares# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
4995189777a2SCristian Pallares#
4996189777a2SCristian Pallares# The is the core of a fallback implementation of a
4997189777a2SCristian Pallares# platform-specific function to extract the name of the
4998189777a2SCristian Pallares# DLL associated with the specified import library LIBNAME.
4999189777a2SCristian Pallares#
5000189777a2SCristian Pallares# SECTION_NAME is either .idata$6 or .idata$7, depending
5001189777a2SCristian Pallares# on the platform and compiler that created the implib.
5002189777a2SCristian Pallares#
5003189777a2SCristian Pallares# Echos the name of the DLL associated with the
5004189777a2SCristian Pallares# specified import library.
5005189777a2SCristian Pallaresfunc_cygming_dll_for_implib_fallback_core ()
5006189777a2SCristian Pallares{
5007*b3fce824SCristian Pallarés  $debug_cmd
5008*b3fce824SCristian Pallarés
5009189777a2SCristian Pallares  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5010189777a2SCristian Pallares  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5011189777a2SCristian Pallares    $SED '/^Contents of section '"$match_literal"':/{
5012189777a2SCristian Pallares      # Place marker at beginning of archive member dllname section
5013189777a2SCristian Pallares      s/.*/====MARK====/
5014189777a2SCristian Pallares      p
5015189777a2SCristian Pallares      d
5016189777a2SCristian Pallares    }
5017189777a2SCristian Pallares    # These lines can sometimes be longer than 43 characters, but
5018189777a2SCristian Pallares    # are always uninteresting
5019189777a2SCristian Pallares    /:[	 ]*file format pe[i]\{,1\}-/d
5020189777a2SCristian Pallares    /^In archive [^:]*:/d
5021189777a2SCristian Pallares    # Ensure marker is printed
5022189777a2SCristian Pallares    /^====MARK====/p
5023189777a2SCristian Pallares    # Remove all lines with less than 43 characters
5024189777a2SCristian Pallares    /^.\{43\}/!d
5025189777a2SCristian Pallares    # From remaining lines, remove first 43 characters
5026189777a2SCristian Pallares    s/^.\{43\}//' |
5027189777a2SCristian Pallares    $SED -n '
5028189777a2SCristian Pallares      # Join marker and all lines until next marker into a single line
5029189777a2SCristian Pallares      /^====MARK====/ b para
5030189777a2SCristian Pallares      H
5031189777a2SCristian Pallares      $ b para
5032189777a2SCristian Pallares      b
5033189777a2SCristian Pallares      :para
5034189777a2SCristian Pallares      x
5035189777a2SCristian Pallares      s/\n//g
5036189777a2SCristian Pallares      # Remove the marker
5037189777a2SCristian Pallares      s/^====MARK====//
5038189777a2SCristian Pallares      # Remove trailing dots and whitespace
5039189777a2SCristian Pallares      s/[\. \t]*$//
5040189777a2SCristian Pallares      # Print
5041189777a2SCristian Pallares      /./p' |
5042189777a2SCristian Pallares    # we now have a list, one entry per line, of the stringified
5043189777a2SCristian Pallares    # contents of the appropriate section of all members of the
5044*b3fce824SCristian Pallarés    # archive that possess that section. Heuristic: eliminate
5045*b3fce824SCristian Pallarés    # all those that have a first or second character that is
5046189777a2SCristian Pallares    # a '.' (that is, objdump's representation of an unprintable
5047189777a2SCristian Pallares    # character.) This should work for all archives with less than
5048189777a2SCristian Pallares    # 0x302f exports -- but will fail for DLLs whose name actually
5049189777a2SCristian Pallares    # begins with a literal '.' or a single character followed by
5050189777a2SCristian Pallares    # a '.'.
5051189777a2SCristian Pallares    #
5052189777a2SCristian Pallares    # Of those that remain, print the first one.
5053189777a2SCristian Pallares    $SED -e '/^\./d;/^.\./d;q'
5054189777a2SCristian Pallares}
5055189777a2SCristian Pallares
5056189777a2SCristian Pallares# func_cygming_dll_for_implib_fallback ARG
5057189777a2SCristian Pallares# Platform-specific function to extract the
5058189777a2SCristian Pallares# name of the DLL associated with the specified
5059189777a2SCristian Pallares# import library ARG.
5060189777a2SCristian Pallares#
5061189777a2SCristian Pallares# This fallback implementation is for use when $DLLTOOL
5062189777a2SCristian Pallares# does not support the --identify-strict option.
5063189777a2SCristian Pallares# Invoked by eval'ing the libtool variable
5064189777a2SCristian Pallares#    $sharedlib_from_linklib_cmd
5065189777a2SCristian Pallares# Result is available in the variable
5066189777a2SCristian Pallares#    $sharedlib_from_linklib_result
5067189777a2SCristian Pallaresfunc_cygming_dll_for_implib_fallback ()
5068189777a2SCristian Pallares{
5069*b3fce824SCristian Pallarés  $debug_cmd
5070*b3fce824SCristian Pallarés
5071189777a2SCristian Pallares  if func_cygming_gnu_implib_p "$1"; then
5072189777a2SCristian Pallares    # binutils import library
5073189777a2SCristian Pallares    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5074189777a2SCristian Pallares  elif func_cygming_ms_implib_p "$1"; then
5075189777a2SCristian Pallares    # ms-generated import library
5076189777a2SCristian Pallares    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5077189777a2SCristian Pallares  else
5078189777a2SCristian Pallares    # unknown
5079*b3fce824SCristian Pallarés    sharedlib_from_linklib_result=
5080189777a2SCristian Pallares  fi
5081189777a2SCristian Pallares}
5082189777a2SCristian Pallares
5083189777a2SCristian Pallares
5084189777a2SCristian Pallares# func_extract_an_archive dir oldlib
5085189777a2SCristian Pallaresfunc_extract_an_archive ()
5086189777a2SCristian Pallares{
5087*b3fce824SCristian Pallarés    $debug_cmd
5088*b3fce824SCristian Pallarés
5089*b3fce824SCristian Pallarés    f_ex_an_ar_dir=$1; shift
5090*b3fce824SCristian Pallarés    f_ex_an_ar_oldlib=$1
5091*b3fce824SCristian Pallarés    if test yes = "$lock_old_archive_extraction"; then
5092189777a2SCristian Pallares      lockfile=$f_ex_an_ar_oldlib.lock
5093189777a2SCristian Pallares      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5094189777a2SCristian Pallares	func_echo "Waiting for $lockfile to be removed"
5095189777a2SCristian Pallares	sleep 2
5096189777a2SCristian Pallares      done
5097189777a2SCristian Pallares    fi
5098189777a2SCristian Pallares    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5099189777a2SCristian Pallares		   'stat=$?; rm -f "$lockfile"; exit $stat'
5100*b3fce824SCristian Pallarés    if test yes = "$lock_old_archive_extraction"; then
5101189777a2SCristian Pallares      $opt_dry_run || rm -f "$lockfile"
5102189777a2SCristian Pallares    fi
5103189777a2SCristian Pallares    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5104189777a2SCristian Pallares     :
5105189777a2SCristian Pallares    else
5106189777a2SCristian Pallares      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5107189777a2SCristian Pallares    fi
5108189777a2SCristian Pallares}
5109189777a2SCristian Pallares
5110189777a2SCristian Pallares
5111189777a2SCristian Pallares# func_extract_archives gentop oldlib ...
5112189777a2SCristian Pallaresfunc_extract_archives ()
5113189777a2SCristian Pallares{
5114*b3fce824SCristian Pallarés    $debug_cmd
5115*b3fce824SCristian Pallarés
5116*b3fce824SCristian Pallarés    my_gentop=$1; shift
5117189777a2SCristian Pallares    my_oldlibs=${1+"$@"}
5118*b3fce824SCristian Pallarés    my_oldobjs=
5119*b3fce824SCristian Pallarés    my_xlib=
5120*b3fce824SCristian Pallarés    my_xabs=
5121*b3fce824SCristian Pallarés    my_xdir=
5122189777a2SCristian Pallares
5123189777a2SCristian Pallares    for my_xlib in $my_oldlibs; do
5124189777a2SCristian Pallares      # Extract the objects.
5125189777a2SCristian Pallares      case $my_xlib in
5126*b3fce824SCristian Pallarés	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5127189777a2SCristian Pallares	*) my_xabs=`pwd`"/$my_xlib" ;;
5128189777a2SCristian Pallares      esac
5129189777a2SCristian Pallares      func_basename "$my_xlib"
5130*b3fce824SCristian Pallarés      my_xlib=$func_basename_result
5131189777a2SCristian Pallares      my_xlib_u=$my_xlib
5132189777a2SCristian Pallares      while :; do
5133189777a2SCristian Pallares        case " $extracted_archives " in
5134189777a2SCristian Pallares	*" $my_xlib_u "*)
5135189777a2SCristian Pallares	  func_arith $extracted_serial + 1
5136189777a2SCristian Pallares	  extracted_serial=$func_arith_result
5137189777a2SCristian Pallares	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5138189777a2SCristian Pallares	*) break ;;
5139189777a2SCristian Pallares	esac
5140189777a2SCristian Pallares      done
5141189777a2SCristian Pallares      extracted_archives="$extracted_archives $my_xlib_u"
5142*b3fce824SCristian Pallarés      my_xdir=$my_gentop/$my_xlib_u
5143189777a2SCristian Pallares
5144189777a2SCristian Pallares      func_mkdir_p "$my_xdir"
5145189777a2SCristian Pallares
5146189777a2SCristian Pallares      case $host in
5147189777a2SCristian Pallares      *-darwin*)
5148189777a2SCristian Pallares	func_verbose "Extracting $my_xabs"
5149189777a2SCristian Pallares	# Do not bother doing anything if just a dry run
5150189777a2SCristian Pallares	$opt_dry_run || {
5151189777a2SCristian Pallares	  darwin_orig_dir=`pwd`
5152189777a2SCristian Pallares	  cd $my_xdir || exit $?
5153189777a2SCristian Pallares	  darwin_archive=$my_xabs
5154189777a2SCristian Pallares	  darwin_curdir=`pwd`
5155*b3fce824SCristian Pallarés	  func_basename "$darwin_archive"
5156*b3fce824SCristian Pallarés	  darwin_base_archive=$func_basename_result
5157189777a2SCristian Pallares	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5158189777a2SCristian Pallares	  if test -n "$darwin_arches"; then
5159189777a2SCristian Pallares	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5160189777a2SCristian Pallares	    darwin_arch=
5161189777a2SCristian Pallares	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5162189777a2SCristian Pallares	    for darwin_arch in  $darwin_arches; do
5163*b3fce824SCristian Pallarés	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5164*b3fce824SCristian Pallarés	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5165*b3fce824SCristian Pallarés	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5166*b3fce824SCristian Pallarés	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5167189777a2SCristian Pallares	      cd "$darwin_curdir"
5168*b3fce824SCristian Pallarés	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5169189777a2SCristian Pallares	    done # $darwin_arches
5170189777a2SCristian Pallares            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5171*b3fce824SCristian Pallarés	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5172189777a2SCristian Pallares	    darwin_file=
5173189777a2SCristian Pallares	    darwin_files=
5174189777a2SCristian Pallares	    for darwin_file in $darwin_filelist; do
5175189777a2SCristian Pallares	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5176189777a2SCristian Pallares	      $LIPO -create -output "$darwin_file" $darwin_files
5177189777a2SCristian Pallares	    done # $darwin_filelist
5178189777a2SCristian Pallares	    $RM -rf unfat-$$
5179189777a2SCristian Pallares	    cd "$darwin_orig_dir"
5180189777a2SCristian Pallares	  else
5181189777a2SCristian Pallares	    cd $darwin_orig_dir
5182189777a2SCristian Pallares	    func_extract_an_archive "$my_xdir" "$my_xabs"
5183189777a2SCristian Pallares	  fi # $darwin_arches
5184189777a2SCristian Pallares	} # !$opt_dry_run
5185189777a2SCristian Pallares	;;
5186189777a2SCristian Pallares      *)
5187189777a2SCristian Pallares        func_extract_an_archive "$my_xdir" "$my_xabs"
5188189777a2SCristian Pallares	;;
5189189777a2SCristian Pallares      esac
5190189777a2SCristian Pallares      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5191189777a2SCristian Pallares    done
5192189777a2SCristian Pallares
5193*b3fce824SCristian Pallarés    func_extract_archives_result=$my_oldobjs
5194189777a2SCristian Pallares}
5195189777a2SCristian Pallares
5196189777a2SCristian Pallares
5197189777a2SCristian Pallares# func_emit_wrapper [arg=no]
5198189777a2SCristian Pallares#
5199189777a2SCristian Pallares# Emit a libtool wrapper script on stdout.
5200189777a2SCristian Pallares# Don't directly open a file because we may want to
5201189777a2SCristian Pallares# incorporate the script contents within a cygwin/mingw
5202189777a2SCristian Pallares# wrapper executable.  Must ONLY be called from within
5203189777a2SCristian Pallares# func_mode_link because it depends on a number of variables
5204189777a2SCristian Pallares# set therein.
5205189777a2SCristian Pallares#
5206189777a2SCristian Pallares# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5207189777a2SCristian Pallares# variable will take.  If 'yes', then the emitted script
5208*b3fce824SCristian Pallarés# will assume that the directory where it is stored is
5209189777a2SCristian Pallares# the $objdir directory.  This is a cygwin/mingw-specific
5210189777a2SCristian Pallares# behavior.
5211189777a2SCristian Pallaresfunc_emit_wrapper ()
5212189777a2SCristian Pallares{
5213189777a2SCristian Pallares	func_emit_wrapper_arg1=${1-no}
5214189777a2SCristian Pallares
5215189777a2SCristian Pallares	$ECHO "\
5216189777a2SCristian Pallares#! $SHELL
5217189777a2SCristian Pallares
5218189777a2SCristian Pallares# $output - temporary wrapper script for $objdir/$outputname
5219*b3fce824SCristian Pallarés# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5220189777a2SCristian Pallares#
5221189777a2SCristian Pallares# The $output program cannot be directly executed until all the libtool
5222189777a2SCristian Pallares# libraries that it depends on are installed.
5223189777a2SCristian Pallares#
5224189777a2SCristian Pallares# This wrapper script should never be moved out of the build directory.
5225189777a2SCristian Pallares# If it is, it will not operate correctly.
5226189777a2SCristian Pallares
5227189777a2SCristian Pallares# Sed substitution that helps us do robust quoting.  It backslashifies
5228189777a2SCristian Pallares# metacharacters that are still active within double-quoted strings.
5229189777a2SCristian Pallaressed_quote_subst='$sed_quote_subst'
5230189777a2SCristian Pallares
5231189777a2SCristian Pallares# Be Bourne compatible
5232189777a2SCristian Pallaresif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5233189777a2SCristian Pallares  emulate sh
5234189777a2SCristian Pallares  NULLCMD=:
5235189777a2SCristian Pallares  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5236189777a2SCristian Pallares  # is contrary to our usage.  Disable this feature.
5237189777a2SCristian Pallares  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5238189777a2SCristian Pallares  setopt NO_GLOB_SUBST
5239189777a2SCristian Pallareselse
5240189777a2SCristian Pallares  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5241189777a2SCristian Pallaresfi
5242189777a2SCristian PallaresBIN_SH=xpg4; export BIN_SH # for Tru64
5243189777a2SCristian PallaresDUALCASE=1; export DUALCASE # for MKS sh
5244189777a2SCristian Pallares
5245189777a2SCristian Pallares# The HP-UX ksh and POSIX shell print the target directory to stdout
5246189777a2SCristian Pallares# if CDPATH is set.
5247189777a2SCristian Pallares(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5248189777a2SCristian Pallares
5249189777a2SCristian Pallaresrelink_command=\"$relink_command\"
5250189777a2SCristian Pallares
5251189777a2SCristian Pallares# This environment variable determines our operation mode.
5252189777a2SCristian Pallaresif test \"\$libtool_install_magic\" = \"$magic\"; then
5253189777a2SCristian Pallares  # install mode needs the following variables:
5254189777a2SCristian Pallares  generated_by_libtool_version='$macro_version'
5255189777a2SCristian Pallares  notinst_deplibs='$notinst_deplibs'
5256189777a2SCristian Pallareselse
5257189777a2SCristian Pallares  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5258189777a2SCristian Pallares  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5259189777a2SCristian Pallares    file=\"\$0\""
5260189777a2SCristian Pallares
5261189777a2SCristian Pallares    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
5262189777a2SCristian Pallares    $ECHO "\
5263189777a2SCristian Pallares
5264189777a2SCristian Pallares# A function that is used when there is no print builtin or printf.
5265189777a2SCristian Pallaresfunc_fallback_echo ()
5266189777a2SCristian Pallares{
5267189777a2SCristian Pallares  eval 'cat <<_LTECHO_EOF
5268189777a2SCristian Pallares\$1
5269189777a2SCristian Pallares_LTECHO_EOF'
5270189777a2SCristian Pallares}
5271189777a2SCristian Pallares    ECHO=\"$qECHO\"
5272189777a2SCristian Pallares  fi
5273189777a2SCristian Pallares
5274189777a2SCristian Pallares# Very basic option parsing. These options are (a) specific to
5275189777a2SCristian Pallares# the libtool wrapper, (b) are identical between the wrapper
5276*b3fce824SCristian Pallarés# /script/ and the wrapper /executable/ that is used only on
5277189777a2SCristian Pallares# windows platforms, and (c) all begin with the string "--lt-"
5278*b3fce824SCristian Pallarés# (application programs are unlikely to have options that match
5279189777a2SCristian Pallares# this pattern).
5280189777a2SCristian Pallares#
5281189777a2SCristian Pallares# There are only two supported options: --lt-debug and
5282189777a2SCristian Pallares# --lt-dump-script. There is, deliberately, no --lt-help.
5283189777a2SCristian Pallares#
5284189777a2SCristian Pallares# The first argument to this parsing function should be the
5285189777a2SCristian Pallares# script's $0 value, followed by "$@".
5286189777a2SCristian Pallareslt_option_debug=
5287189777a2SCristian Pallaresfunc_parse_lt_options ()
5288189777a2SCristian Pallares{
5289189777a2SCristian Pallares  lt_script_arg0=\$0
5290189777a2SCristian Pallares  shift
5291189777a2SCristian Pallares  for lt_opt
5292189777a2SCristian Pallares  do
5293189777a2SCristian Pallares    case \"\$lt_opt\" in
5294189777a2SCristian Pallares    --lt-debug) lt_option_debug=1 ;;
5295189777a2SCristian Pallares    --lt-dump-script)
5296189777a2SCristian Pallares        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5297189777a2SCristian Pallares        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5298189777a2SCristian Pallares        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5299189777a2SCristian Pallares        cat \"\$lt_dump_D/\$lt_dump_F\"
5300189777a2SCristian Pallares        exit 0
5301189777a2SCristian Pallares      ;;
5302189777a2SCristian Pallares    --lt-*)
5303189777a2SCristian Pallares        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5304189777a2SCristian Pallares        exit 1
5305189777a2SCristian Pallares      ;;
5306189777a2SCristian Pallares    esac
5307189777a2SCristian Pallares  done
5308189777a2SCristian Pallares
5309189777a2SCristian Pallares  # Print the debug banner immediately:
5310189777a2SCristian Pallares  if test -n \"\$lt_option_debug\"; then
5311*b3fce824SCristian Pallarés    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5312189777a2SCristian Pallares  fi
5313189777a2SCristian Pallares}
5314189777a2SCristian Pallares
5315189777a2SCristian Pallares# Used when --lt-debug. Prints its arguments to stdout
5316189777a2SCristian Pallares# (redirection is the responsibility of the caller)
5317189777a2SCristian Pallaresfunc_lt_dump_args ()
5318189777a2SCristian Pallares{
5319189777a2SCristian Pallares  lt_dump_args_N=1;
5320189777a2SCristian Pallares  for lt_arg
5321189777a2SCristian Pallares  do
5322*b3fce824SCristian Pallarés    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5323189777a2SCristian Pallares    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5324189777a2SCristian Pallares  done
5325189777a2SCristian Pallares}
5326189777a2SCristian Pallares
5327189777a2SCristian Pallares# Core function for launching the target application
5328189777a2SCristian Pallaresfunc_exec_program_core ()
5329189777a2SCristian Pallares{
5330189777a2SCristian Pallares"
5331189777a2SCristian Pallares  case $host in
5332189777a2SCristian Pallares  # Backslashes separate directories on plain windows
5333189777a2SCristian Pallares  *-*-mingw | *-*-os2* | *-cegcc*)
5334189777a2SCristian Pallares    $ECHO "\
5335189777a2SCristian Pallares      if test -n \"\$lt_option_debug\"; then
5336*b3fce824SCristian Pallarés        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5337189777a2SCristian Pallares        func_lt_dump_args \${1+\"\$@\"} 1>&2
5338189777a2SCristian Pallares      fi
5339189777a2SCristian Pallares      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5340189777a2SCristian Pallares"
5341189777a2SCristian Pallares    ;;
5342189777a2SCristian Pallares
5343189777a2SCristian Pallares  *)
5344189777a2SCristian Pallares    $ECHO "\
5345189777a2SCristian Pallares      if test -n \"\$lt_option_debug\"; then
5346*b3fce824SCristian Pallarés        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5347189777a2SCristian Pallares        func_lt_dump_args \${1+\"\$@\"} 1>&2
5348189777a2SCristian Pallares      fi
5349189777a2SCristian Pallares      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5350189777a2SCristian Pallares"
5351189777a2SCristian Pallares    ;;
5352189777a2SCristian Pallares  esac
5353189777a2SCristian Pallares  $ECHO "\
5354189777a2SCristian Pallares      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5355189777a2SCristian Pallares      exit 1
5356189777a2SCristian Pallares}
5357189777a2SCristian Pallares
5358189777a2SCristian Pallares# A function to encapsulate launching the target application
5359189777a2SCristian Pallares# Strips options in the --lt-* namespace from \$@ and
5360189777a2SCristian Pallares# launches target application with the remaining arguments.
5361189777a2SCristian Pallaresfunc_exec_program ()
5362189777a2SCristian Pallares{
5363189777a2SCristian Pallares  case \" \$* \" in
5364189777a2SCristian Pallares  *\\ --lt-*)
5365189777a2SCristian Pallares    for lt_wr_arg
5366189777a2SCristian Pallares    do
5367189777a2SCristian Pallares      case \$lt_wr_arg in
5368189777a2SCristian Pallares      --lt-*) ;;
5369189777a2SCristian Pallares      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5370189777a2SCristian Pallares      esac
5371189777a2SCristian Pallares      shift
5372189777a2SCristian Pallares    done ;;
5373189777a2SCristian Pallares  esac
5374189777a2SCristian Pallares  func_exec_program_core \${1+\"\$@\"}
5375189777a2SCristian Pallares}
5376189777a2SCristian Pallares
5377189777a2SCristian Pallares  # Parse options
5378189777a2SCristian Pallares  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5379189777a2SCristian Pallares
5380189777a2SCristian Pallares  # Find the directory that this script lives in.
5381189777a2SCristian Pallares  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5382189777a2SCristian Pallares  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5383189777a2SCristian Pallares
5384189777a2SCristian Pallares  # Follow symbolic links until we get to the real thisdir.
5385189777a2SCristian Pallares  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5386189777a2SCristian Pallares  while test -n \"\$file\"; do
5387189777a2SCristian Pallares    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5388189777a2SCristian Pallares
5389189777a2SCristian Pallares    # If there was a directory component, then change thisdir.
5390189777a2SCristian Pallares    if test \"x\$destdir\" != \"x\$file\"; then
5391189777a2SCristian Pallares      case \"\$destdir\" in
5392189777a2SCristian Pallares      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5393189777a2SCristian Pallares      *) thisdir=\"\$thisdir/\$destdir\" ;;
5394189777a2SCristian Pallares      esac
5395189777a2SCristian Pallares    fi
5396189777a2SCristian Pallares
5397189777a2SCristian Pallares    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5398189777a2SCristian Pallares    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5399189777a2SCristian Pallares  done
5400189777a2SCristian Pallares
5401189777a2SCristian Pallares  # Usually 'no', except on cygwin/mingw when embedded into
5402189777a2SCristian Pallares  # the cwrapper.
5403189777a2SCristian Pallares  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5404189777a2SCristian Pallares  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5405189777a2SCristian Pallares    # special case for '.'
5406189777a2SCristian Pallares    if test \"\$thisdir\" = \".\"; then
5407189777a2SCristian Pallares      thisdir=\`pwd\`
5408189777a2SCristian Pallares    fi
5409189777a2SCristian Pallares    # remove .libs from thisdir
5410189777a2SCristian Pallares    case \"\$thisdir\" in
5411189777a2SCristian Pallares    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5412189777a2SCristian Pallares    $objdir )   thisdir=. ;;
5413189777a2SCristian Pallares    esac
5414189777a2SCristian Pallares  fi
5415189777a2SCristian Pallares
5416189777a2SCristian Pallares  # Try to get the absolute directory name.
5417189777a2SCristian Pallares  absdir=\`cd \"\$thisdir\" && pwd\`
5418189777a2SCristian Pallares  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5419189777a2SCristian Pallares"
5420189777a2SCristian Pallares
5421*b3fce824SCristian Pallarés	if test yes = "$fast_install"; then
5422189777a2SCristian Pallares	  $ECHO "\
5423189777a2SCristian Pallares  program=lt-'$outputname'$exeext
5424189777a2SCristian Pallares  progdir=\"\$thisdir/$objdir\"
5425189777a2SCristian Pallares
5426189777a2SCristian Pallares  if test ! -f \"\$progdir/\$program\" ||
5427*b3fce824SCristian Pallarés     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5428189777a2SCristian Pallares       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5429189777a2SCristian Pallares
5430189777a2SCristian Pallares    file=\"\$\$-\$program\"
5431189777a2SCristian Pallares
5432189777a2SCristian Pallares    if test ! -d \"\$progdir\"; then
5433189777a2SCristian Pallares      $MKDIR \"\$progdir\"
5434189777a2SCristian Pallares    else
5435189777a2SCristian Pallares      $RM \"\$progdir/\$file\"
5436189777a2SCristian Pallares    fi"
5437189777a2SCristian Pallares
5438189777a2SCristian Pallares	  $ECHO "\
5439189777a2SCristian Pallares
5440189777a2SCristian Pallares    # relink executable if necessary
5441189777a2SCristian Pallares    if test -n \"\$relink_command\"; then
5442189777a2SCristian Pallares      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5443189777a2SCristian Pallares      else
5444*b3fce824SCristian Pallarés	\$ECHO \"\$relink_command_output\" >&2
5445189777a2SCristian Pallares	$RM \"\$progdir/\$file\"
5446189777a2SCristian Pallares	exit 1
5447189777a2SCristian Pallares      fi
5448189777a2SCristian Pallares    fi
5449189777a2SCristian Pallares
5450189777a2SCristian Pallares    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5451189777a2SCristian Pallares    { $RM \"\$progdir/\$program\";
5452189777a2SCristian Pallares      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5453189777a2SCristian Pallares    $RM \"\$progdir/\$file\"
5454189777a2SCristian Pallares  fi"
5455189777a2SCristian Pallares	else
5456189777a2SCristian Pallares	  $ECHO "\
5457189777a2SCristian Pallares  program='$outputname'
5458189777a2SCristian Pallares  progdir=\"\$thisdir/$objdir\"
5459189777a2SCristian Pallares"
5460189777a2SCristian Pallares	fi
5461189777a2SCristian Pallares
5462189777a2SCristian Pallares	$ECHO "\
5463189777a2SCristian Pallares
5464189777a2SCristian Pallares  if test -f \"\$progdir/\$program\"; then"
5465189777a2SCristian Pallares
5466189777a2SCristian Pallares	# fixup the dll searchpath if we need to.
5467189777a2SCristian Pallares	#
5468189777a2SCristian Pallares	# Fix the DLL searchpath if we need to.  Do this before prepending
5469189777a2SCristian Pallares	# to shlibpath, because on Windows, both are PATH and uninstalled
5470189777a2SCristian Pallares	# libraries must come first.
5471189777a2SCristian Pallares	if test -n "$dllsearchpath"; then
5472189777a2SCristian Pallares	  $ECHO "\
5473189777a2SCristian Pallares    # Add the dll search path components to the executable PATH
5474189777a2SCristian Pallares    PATH=$dllsearchpath:\$PATH
5475189777a2SCristian Pallares"
5476189777a2SCristian Pallares	fi
5477189777a2SCristian Pallares
5478189777a2SCristian Pallares	# Export our shlibpath_var if we have one.
5479*b3fce824SCristian Pallarés	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5480189777a2SCristian Pallares	  $ECHO "\
5481189777a2SCristian Pallares    # Add our own library path to $shlibpath_var
5482189777a2SCristian Pallares    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5483189777a2SCristian Pallares
5484189777a2SCristian Pallares    # Some systems cannot cope with colon-terminated $shlibpath_var
5485189777a2SCristian Pallares    # The second colon is a workaround for a bug in BeOS R4 sed
5486189777a2SCristian Pallares    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5487189777a2SCristian Pallares
5488189777a2SCristian Pallares    export $shlibpath_var
5489189777a2SCristian Pallares"
5490189777a2SCristian Pallares	fi
5491189777a2SCristian Pallares
5492189777a2SCristian Pallares	$ECHO "\
5493189777a2SCristian Pallares    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5494189777a2SCristian Pallares      # Run the actual program with our arguments.
5495189777a2SCristian Pallares      func_exec_program \${1+\"\$@\"}
5496189777a2SCristian Pallares    fi
5497189777a2SCristian Pallares  else
5498189777a2SCristian Pallares    # The program doesn't exist.
5499*b3fce824SCristian Pallarés    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5500189777a2SCristian Pallares    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5501189777a2SCristian Pallares    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5502189777a2SCristian Pallares    exit 1
5503189777a2SCristian Pallares  fi
5504189777a2SCristian Pallaresfi\
5505189777a2SCristian Pallares"
5506189777a2SCristian Pallares}
5507189777a2SCristian Pallares
5508189777a2SCristian Pallares
5509189777a2SCristian Pallares# func_emit_cwrapperexe_src
5510189777a2SCristian Pallares# emit the source code for a wrapper executable on stdout
5511189777a2SCristian Pallares# Must ONLY be called from within func_mode_link because
5512189777a2SCristian Pallares# it depends on a number of variable set therein.
5513189777a2SCristian Pallaresfunc_emit_cwrapperexe_src ()
5514189777a2SCristian Pallares{
5515189777a2SCristian Pallares	cat <<EOF
5516189777a2SCristian Pallares
5517189777a2SCristian Pallares/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5518*b3fce824SCristian Pallarés   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5519189777a2SCristian Pallares
5520189777a2SCristian Pallares   The $output program cannot be directly executed until all the libtool
5521189777a2SCristian Pallares   libraries that it depends on are installed.
5522189777a2SCristian Pallares
5523189777a2SCristian Pallares   This wrapper executable should never be moved out of the build directory.
5524189777a2SCristian Pallares   If it is, it will not operate correctly.
5525189777a2SCristian Pallares*/
5526189777a2SCristian PallaresEOF
5527189777a2SCristian Pallares	    cat <<"EOF"
5528189777a2SCristian Pallares#ifdef _MSC_VER
5529189777a2SCristian Pallares# define _CRT_SECURE_NO_DEPRECATE 1
5530189777a2SCristian Pallares#endif
5531189777a2SCristian Pallares#include <stdio.h>
5532189777a2SCristian Pallares#include <stdlib.h>
5533189777a2SCristian Pallares#ifdef _MSC_VER
5534189777a2SCristian Pallares# include <direct.h>
5535189777a2SCristian Pallares# include <process.h>
5536189777a2SCristian Pallares# include <io.h>
5537189777a2SCristian Pallares#else
5538189777a2SCristian Pallares# include <unistd.h>
5539189777a2SCristian Pallares# include <stdint.h>
5540189777a2SCristian Pallares# ifdef __CYGWIN__
5541189777a2SCristian Pallares#  include <io.h>
5542189777a2SCristian Pallares# endif
5543189777a2SCristian Pallares#endif
5544189777a2SCristian Pallares#include <malloc.h>
5545189777a2SCristian Pallares#include <stdarg.h>
5546189777a2SCristian Pallares#include <assert.h>
5547189777a2SCristian Pallares#include <string.h>
5548189777a2SCristian Pallares#include <ctype.h>
5549189777a2SCristian Pallares#include <errno.h>
5550189777a2SCristian Pallares#include <fcntl.h>
5551189777a2SCristian Pallares#include <sys/stat.h>
5552189777a2SCristian Pallares
5553*b3fce824SCristian Pallarés#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5554*b3fce824SCristian Pallarés
5555189777a2SCristian Pallares/* declarations of non-ANSI functions */
5556*b3fce824SCristian Pallarés#if defined __MINGW32__
5557189777a2SCristian Pallares# ifdef __STRICT_ANSI__
5558189777a2SCristian Pallaresint _putenv (const char *);
5559189777a2SCristian Pallares# endif
5560*b3fce824SCristian Pallarés#elif defined __CYGWIN__
5561189777a2SCristian Pallares# ifdef __STRICT_ANSI__
5562189777a2SCristian Pallareschar *realpath (const char *, char *);
5563189777a2SCristian Pallaresint putenv (char *);
5564189777a2SCristian Pallaresint setenv (const char *, const char *, int);
5565189777a2SCristian Pallares# endif
5566*b3fce824SCristian Pallarés/* #elif defined other_platform || defined ... */
5567189777a2SCristian Pallares#endif
5568189777a2SCristian Pallares
5569189777a2SCristian Pallares/* portability defines, excluding path handling macros */
5570*b3fce824SCristian Pallarés#if defined _MSC_VER
5571189777a2SCristian Pallares# define setmode _setmode
5572189777a2SCristian Pallares# define stat    _stat
5573189777a2SCristian Pallares# define chmod   _chmod
5574189777a2SCristian Pallares# define getcwd  _getcwd
5575189777a2SCristian Pallares# define putenv  _putenv
5576189777a2SCristian Pallares# define S_IXUSR _S_IEXEC
5577*b3fce824SCristian Pallarés#elif defined __MINGW32__
5578189777a2SCristian Pallares# define setmode _setmode
5579189777a2SCristian Pallares# define stat    _stat
5580189777a2SCristian Pallares# define chmod   _chmod
5581189777a2SCristian Pallares# define getcwd  _getcwd
5582189777a2SCristian Pallares# define putenv  _putenv
5583*b3fce824SCristian Pallarés#elif defined __CYGWIN__
5584189777a2SCristian Pallares# define HAVE_SETENV
5585189777a2SCristian Pallares# define FOPEN_WB "wb"
5586*b3fce824SCristian Pallarés/* #elif defined other platforms ... */
5587189777a2SCristian Pallares#endif
5588189777a2SCristian Pallares
5589*b3fce824SCristian Pallarés#if defined PATH_MAX
5590189777a2SCristian Pallares# define LT_PATHMAX PATH_MAX
5591*b3fce824SCristian Pallarés#elif defined MAXPATHLEN
5592189777a2SCristian Pallares# define LT_PATHMAX MAXPATHLEN
5593189777a2SCristian Pallares#else
5594189777a2SCristian Pallares# define LT_PATHMAX 1024
5595189777a2SCristian Pallares#endif
5596189777a2SCristian Pallares
5597189777a2SCristian Pallares#ifndef S_IXOTH
5598189777a2SCristian Pallares# define S_IXOTH 0
5599189777a2SCristian Pallares#endif
5600189777a2SCristian Pallares#ifndef S_IXGRP
5601189777a2SCristian Pallares# define S_IXGRP 0
5602189777a2SCristian Pallares#endif
5603189777a2SCristian Pallares
5604189777a2SCristian Pallares/* path handling portability macros */
5605189777a2SCristian Pallares#ifndef DIR_SEPARATOR
5606189777a2SCristian Pallares# define DIR_SEPARATOR '/'
5607189777a2SCristian Pallares# define PATH_SEPARATOR ':'
5608189777a2SCristian Pallares#endif
5609189777a2SCristian Pallares
5610*b3fce824SCristian Pallarés#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
5611*b3fce824SCristian Pallarés  defined __OS2__
5612189777a2SCristian Pallares# define HAVE_DOS_BASED_FILE_SYSTEM
5613189777a2SCristian Pallares# define FOPEN_WB "wb"
5614189777a2SCristian Pallares# ifndef DIR_SEPARATOR_2
5615189777a2SCristian Pallares#  define DIR_SEPARATOR_2 '\\'
5616189777a2SCristian Pallares# endif
5617189777a2SCristian Pallares# ifndef PATH_SEPARATOR_2
5618189777a2SCristian Pallares#  define PATH_SEPARATOR_2 ';'
5619189777a2SCristian Pallares# endif
5620189777a2SCristian Pallares#endif
5621189777a2SCristian Pallares
5622189777a2SCristian Pallares#ifndef DIR_SEPARATOR_2
5623189777a2SCristian Pallares# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5624189777a2SCristian Pallares#else /* DIR_SEPARATOR_2 */
5625189777a2SCristian Pallares# define IS_DIR_SEPARATOR(ch) \
5626189777a2SCristian Pallares	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5627189777a2SCristian Pallares#endif /* DIR_SEPARATOR_2 */
5628189777a2SCristian Pallares
5629189777a2SCristian Pallares#ifndef PATH_SEPARATOR_2
5630189777a2SCristian Pallares# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5631189777a2SCristian Pallares#else /* PATH_SEPARATOR_2 */
5632189777a2SCristian Pallares# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5633189777a2SCristian Pallares#endif /* PATH_SEPARATOR_2 */
5634189777a2SCristian Pallares
5635189777a2SCristian Pallares#ifndef FOPEN_WB
5636189777a2SCristian Pallares# define FOPEN_WB "w"
5637189777a2SCristian Pallares#endif
5638189777a2SCristian Pallares#ifndef _O_BINARY
5639189777a2SCristian Pallares# define _O_BINARY 0
5640189777a2SCristian Pallares#endif
5641189777a2SCristian Pallares
5642189777a2SCristian Pallares#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
5643189777a2SCristian Pallares#define XFREE(stale) do { \
5644*b3fce824SCristian Pallarés  if (stale) { free (stale); stale = 0; } \
5645189777a2SCristian Pallares} while (0)
5646189777a2SCristian Pallares
5647*b3fce824SCristian Pallarés#if defined LT_DEBUGWRAPPER
5648189777a2SCristian Pallaresstatic int lt_debug = 1;
5649189777a2SCristian Pallares#else
5650189777a2SCristian Pallaresstatic int lt_debug = 0;
5651189777a2SCristian Pallares#endif
5652189777a2SCristian Pallares
5653189777a2SCristian Pallaresconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5654189777a2SCristian Pallares
5655189777a2SCristian Pallaresvoid *xmalloc (size_t num);
5656189777a2SCristian Pallareschar *xstrdup (const char *string);
5657189777a2SCristian Pallaresconst char *base_name (const char *name);
5658189777a2SCristian Pallareschar *find_executable (const char *wrapper);
5659189777a2SCristian Pallareschar *chase_symlinks (const char *pathspec);
5660189777a2SCristian Pallaresint make_executable (const char *path);
5661189777a2SCristian Pallaresint check_executable (const char *path);
5662189777a2SCristian Pallareschar *strendzap (char *str, const char *pat);
5663189777a2SCristian Pallaresvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
5664189777a2SCristian Pallaresvoid lt_fatal (const char *file, int line, const char *message, ...);
5665189777a2SCristian Pallaresstatic const char *nonnull (const char *s);
5666189777a2SCristian Pallaresstatic const char *nonempty (const char *s);
5667189777a2SCristian Pallaresvoid lt_setenv (const char *name, const char *value);
5668189777a2SCristian Pallareschar *lt_extend_str (const char *orig_value, const char *add, int to_end);
5669189777a2SCristian Pallaresvoid lt_update_exe_path (const char *name, const char *value);
5670189777a2SCristian Pallaresvoid lt_update_lib_path (const char *name, const char *value);
5671189777a2SCristian Pallareschar **prepare_spawn (char **argv);
5672189777a2SCristian Pallaresvoid lt_dump_script (FILE *f);
5673189777a2SCristian PallaresEOF
5674189777a2SCristian Pallares
5675189777a2SCristian Pallares	    cat <<EOF
5676*b3fce824SCristian Pallarés#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
5677*b3fce824SCristian Pallarés# define externally_visible volatile
5678*b3fce824SCristian Pallarés#else
5679*b3fce824SCristian Pallarés# define externally_visible __attribute__((externally_visible)) volatile
5680*b3fce824SCristian Pallarés#endif
5681*b3fce824SCristian Pallarésexternally_visible const char * MAGIC_EXE = "$magic_exe";
5682189777a2SCristian Pallaresconst char * LIB_PATH_VARNAME = "$shlibpath_var";
5683189777a2SCristian PallaresEOF
5684189777a2SCristian Pallares
5685*b3fce824SCristian Pallarés	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5686189777a2SCristian Pallares              func_to_host_path "$temp_rpath"
5687189777a2SCristian Pallares	      cat <<EOF
5688189777a2SCristian Pallaresconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
5689189777a2SCristian PallaresEOF
5690189777a2SCristian Pallares	    else
5691189777a2SCristian Pallares	      cat <<"EOF"
5692189777a2SCristian Pallaresconst char * LIB_PATH_VALUE   = "";
5693189777a2SCristian PallaresEOF
5694189777a2SCristian Pallares	    fi
5695189777a2SCristian Pallares
5696189777a2SCristian Pallares	    if test -n "$dllsearchpath"; then
5697189777a2SCristian Pallares              func_to_host_path "$dllsearchpath:"
5698189777a2SCristian Pallares	      cat <<EOF
5699189777a2SCristian Pallaresconst char * EXE_PATH_VARNAME = "PATH";
5700189777a2SCristian Pallaresconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
5701189777a2SCristian PallaresEOF
5702189777a2SCristian Pallares	    else
5703189777a2SCristian Pallares	      cat <<"EOF"
5704189777a2SCristian Pallaresconst char * EXE_PATH_VARNAME = "";
5705189777a2SCristian Pallaresconst char * EXE_PATH_VALUE   = "";
5706189777a2SCristian PallaresEOF
5707189777a2SCristian Pallares	    fi
5708189777a2SCristian Pallares
5709*b3fce824SCristian Pallarés	    if test yes = "$fast_install"; then
5710189777a2SCristian Pallares	      cat <<EOF
5711189777a2SCristian Pallaresconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5712189777a2SCristian PallaresEOF
5713189777a2SCristian Pallares	    else
5714189777a2SCristian Pallares	      cat <<EOF
5715189777a2SCristian Pallaresconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5716189777a2SCristian PallaresEOF
5717189777a2SCristian Pallares	    fi
5718189777a2SCristian Pallares
5719189777a2SCristian Pallares
5720189777a2SCristian Pallares	    cat <<"EOF"
5721189777a2SCristian Pallares
5722189777a2SCristian Pallares#define LTWRAPPER_OPTION_PREFIX         "--lt-"
5723189777a2SCristian Pallares
5724189777a2SCristian Pallaresstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5725189777a2SCristian Pallaresstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
5726189777a2SCristian Pallaresstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
5727189777a2SCristian Pallares
5728189777a2SCristian Pallaresint
5729189777a2SCristian Pallaresmain (int argc, char *argv[])
5730189777a2SCristian Pallares{
5731189777a2SCristian Pallares  char **newargz;
5732189777a2SCristian Pallares  int  newargc;
5733189777a2SCristian Pallares  char *tmp_pathspec;
5734189777a2SCristian Pallares  char *actual_cwrapper_path;
5735189777a2SCristian Pallares  char *actual_cwrapper_name;
5736189777a2SCristian Pallares  char *target_name;
5737189777a2SCristian Pallares  char *lt_argv_zero;
5738*b3fce824SCristian Pallarés  int rval = 127;
5739189777a2SCristian Pallares
5740189777a2SCristian Pallares  int i;
5741189777a2SCristian Pallares
5742189777a2SCristian Pallares  program_name = (char *) xstrdup (base_name (argv[0]));
5743*b3fce824SCristian Pallarés  newargz = XMALLOC (char *, (size_t) argc + 1);
5744189777a2SCristian Pallares
5745189777a2SCristian Pallares  /* very simple arg parsing; don't want to rely on getopt
5746189777a2SCristian Pallares   * also, copy all non cwrapper options to newargz, except
5747189777a2SCristian Pallares   * argz[0], which is handled differently
5748189777a2SCristian Pallares   */
5749189777a2SCristian Pallares  newargc=0;
5750189777a2SCristian Pallares  for (i = 1; i < argc; i++)
5751189777a2SCristian Pallares    {
5752*b3fce824SCristian Pallarés      if (STREQ (argv[i], dumpscript_opt))
5753189777a2SCristian Pallares	{
5754189777a2SCristian PallaresEOF
5755*b3fce824SCristian Pallarés	    case $host in
5756189777a2SCristian Pallares	      *mingw* | *cygwin* )
5757189777a2SCristian Pallares		# make stdout use "unix" line endings
5758189777a2SCristian Pallares		echo "          setmode(1,_O_BINARY);"
5759189777a2SCristian Pallares		;;
5760189777a2SCristian Pallares	      esac
5761189777a2SCristian Pallares
5762189777a2SCristian Pallares	    cat <<"EOF"
5763189777a2SCristian Pallares	  lt_dump_script (stdout);
5764189777a2SCristian Pallares	  return 0;
5765189777a2SCristian Pallares	}
5766*b3fce824SCristian Pallarés      if (STREQ (argv[i], debug_opt))
5767189777a2SCristian Pallares	{
5768189777a2SCristian Pallares          lt_debug = 1;
5769189777a2SCristian Pallares          continue;
5770189777a2SCristian Pallares	}
5771*b3fce824SCristian Pallarés      if (STREQ (argv[i], ltwrapper_option_prefix))
5772189777a2SCristian Pallares        {
5773189777a2SCristian Pallares          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
5774189777a2SCristian Pallares             namespace, but it is not one of the ones we know about and
5775189777a2SCristian Pallares             have already dealt with, above (inluding dump-script), then
5776189777a2SCristian Pallares             report an error. Otherwise, targets might begin to believe
5777189777a2SCristian Pallares             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
5778189777a2SCristian Pallares             namespace. The first time any user complains about this, we'll
5779189777a2SCristian Pallares             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
5780189777a2SCristian Pallares             or a configure.ac-settable value.
5781189777a2SCristian Pallares           */
5782189777a2SCristian Pallares          lt_fatal (__FILE__, __LINE__,
5783189777a2SCristian Pallares		    "unrecognized %s option: '%s'",
5784189777a2SCristian Pallares                    ltwrapper_option_prefix, argv[i]);
5785189777a2SCristian Pallares        }
5786189777a2SCristian Pallares      /* otherwise ... */
5787189777a2SCristian Pallares      newargz[++newargc] = xstrdup (argv[i]);
5788189777a2SCristian Pallares    }
5789189777a2SCristian Pallares  newargz[++newargc] = NULL;
5790189777a2SCristian Pallares
5791189777a2SCristian PallaresEOF
5792189777a2SCristian Pallares	    cat <<EOF
5793189777a2SCristian Pallares  /* The GNU banner must be the first non-error debug message */
5794*b3fce824SCristian Pallarés  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
5795189777a2SCristian PallaresEOF
5796189777a2SCristian Pallares	    cat <<"EOF"
5797189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
5798189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
5799189777a2SCristian Pallares
5800189777a2SCristian Pallares  tmp_pathspec = find_executable (argv[0]);
5801189777a2SCristian Pallares  if (tmp_pathspec == NULL)
5802189777a2SCristian Pallares    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
5803189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__,
5804189777a2SCristian Pallares                  "(main) found exe (before symlink chase) at: %s\n",
5805189777a2SCristian Pallares		  tmp_pathspec);
5806189777a2SCristian Pallares
5807189777a2SCristian Pallares  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
5808189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__,
5809189777a2SCristian Pallares                  "(main) found exe (after symlink chase) at: %s\n",
5810189777a2SCristian Pallares		  actual_cwrapper_path);
5811189777a2SCristian Pallares  XFREE (tmp_pathspec);
5812189777a2SCristian Pallares
5813189777a2SCristian Pallares  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
5814189777a2SCristian Pallares  strendzap (actual_cwrapper_path, actual_cwrapper_name);
5815189777a2SCristian Pallares
5816189777a2SCristian Pallares  /* wrapper name transforms */
5817189777a2SCristian Pallares  strendzap (actual_cwrapper_name, ".exe");
5818189777a2SCristian Pallares  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
5819189777a2SCristian Pallares  XFREE (actual_cwrapper_name);
5820189777a2SCristian Pallares  actual_cwrapper_name = tmp_pathspec;
5821189777a2SCristian Pallares  tmp_pathspec = 0;
5822189777a2SCristian Pallares
5823189777a2SCristian Pallares  /* target_name transforms -- use actual target program name; might have lt- prefix */
5824189777a2SCristian Pallares  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
5825189777a2SCristian Pallares  strendzap (target_name, ".exe");
5826189777a2SCristian Pallares  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
5827189777a2SCristian Pallares  XFREE (target_name);
5828189777a2SCristian Pallares  target_name = tmp_pathspec;
5829189777a2SCristian Pallares  tmp_pathspec = 0;
5830189777a2SCristian Pallares
5831189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__,
5832189777a2SCristian Pallares		  "(main) libtool target name: %s\n",
5833189777a2SCristian Pallares		  target_name);
5834189777a2SCristian PallaresEOF
5835189777a2SCristian Pallares
5836189777a2SCristian Pallares	    cat <<EOF
5837189777a2SCristian Pallares  newargz[0] =
5838189777a2SCristian Pallares    XMALLOC (char, (strlen (actual_cwrapper_path) +
5839189777a2SCristian Pallares		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
5840189777a2SCristian Pallares  strcpy (newargz[0], actual_cwrapper_path);
5841189777a2SCristian Pallares  strcat (newargz[0], "$objdir");
5842189777a2SCristian Pallares  strcat (newargz[0], "/");
5843189777a2SCristian PallaresEOF
5844189777a2SCristian Pallares
5845189777a2SCristian Pallares	    cat <<"EOF"
5846189777a2SCristian Pallares  /* stop here, and copy so we don't have to do this twice */
5847189777a2SCristian Pallares  tmp_pathspec = xstrdup (newargz[0]);
5848189777a2SCristian Pallares
5849189777a2SCristian Pallares  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
5850189777a2SCristian Pallares  strcat (newargz[0], actual_cwrapper_name);
5851189777a2SCristian Pallares
5852189777a2SCristian Pallares  /* DO want the lt- prefix here if it exists, so use target_name */
5853189777a2SCristian Pallares  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
5854189777a2SCristian Pallares  XFREE (tmp_pathspec);
5855189777a2SCristian Pallares  tmp_pathspec = NULL;
5856189777a2SCristian PallaresEOF
5857189777a2SCristian Pallares
5858189777a2SCristian Pallares	    case $host_os in
5859189777a2SCristian Pallares	      mingw*)
5860189777a2SCristian Pallares	    cat <<"EOF"
5861189777a2SCristian Pallares  {
5862189777a2SCristian Pallares    char* p;
5863189777a2SCristian Pallares    while ((p = strchr (newargz[0], '\\')) != NULL)
5864189777a2SCristian Pallares      {
5865189777a2SCristian Pallares	*p = '/';
5866189777a2SCristian Pallares      }
5867189777a2SCristian Pallares    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
5868189777a2SCristian Pallares      {
5869189777a2SCristian Pallares	*p = '/';
5870189777a2SCristian Pallares      }
5871189777a2SCristian Pallares  }
5872189777a2SCristian PallaresEOF
5873189777a2SCristian Pallares	    ;;
5874189777a2SCristian Pallares	    esac
5875189777a2SCristian Pallares
5876189777a2SCristian Pallares	    cat <<"EOF"
5877189777a2SCristian Pallares  XFREE (target_name);
5878189777a2SCristian Pallares  XFREE (actual_cwrapper_path);
5879189777a2SCristian Pallares  XFREE (actual_cwrapper_name);
5880189777a2SCristian Pallares
5881189777a2SCristian Pallares  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
5882189777a2SCristian Pallares  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
5883189777a2SCristian Pallares  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
5884189777a2SCristian Pallares     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
5885189777a2SCristian Pallares     because on Windows, both *_VARNAMEs are PATH but uninstalled
5886189777a2SCristian Pallares     libraries must come first. */
5887189777a2SCristian Pallares  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
5888189777a2SCristian Pallares  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
5889189777a2SCristian Pallares
5890189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
5891189777a2SCristian Pallares		  nonnull (lt_argv_zero));
5892189777a2SCristian Pallares  for (i = 0; i < newargc; i++)
5893189777a2SCristian Pallares    {
5894189777a2SCristian Pallares      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
5895189777a2SCristian Pallares		      i, nonnull (newargz[i]));
5896189777a2SCristian Pallares    }
5897189777a2SCristian Pallares
5898189777a2SCristian PallaresEOF
5899189777a2SCristian Pallares
5900189777a2SCristian Pallares	    case $host_os in
5901189777a2SCristian Pallares	      mingw*)
5902189777a2SCristian Pallares		cat <<"EOF"
5903189777a2SCristian Pallares  /* execv doesn't actually work on mingw as expected on unix */
5904189777a2SCristian Pallares  newargz = prepare_spawn (newargz);
5905*b3fce824SCristian Pallarés  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
5906189777a2SCristian Pallares  if (rval == -1)
5907189777a2SCristian Pallares    {
5908189777a2SCristian Pallares      /* failed to start process */
5909189777a2SCristian Pallares      lt_debugprintf (__FILE__, __LINE__,
5910189777a2SCristian Pallares		      "(main) failed to launch target \"%s\": %s\n",
5911189777a2SCristian Pallares		      lt_argv_zero, nonnull (strerror (errno)));
5912189777a2SCristian Pallares      return 127;
5913189777a2SCristian Pallares    }
5914189777a2SCristian Pallares  return rval;
5915189777a2SCristian PallaresEOF
5916189777a2SCristian Pallares		;;
5917189777a2SCristian Pallares	      *)
5918189777a2SCristian Pallares		cat <<"EOF"
5919189777a2SCristian Pallares  execv (lt_argv_zero, newargz);
5920189777a2SCristian Pallares  return rval; /* =127, but avoids unused variable warning */
5921189777a2SCristian PallaresEOF
5922189777a2SCristian Pallares		;;
5923189777a2SCristian Pallares	    esac
5924189777a2SCristian Pallares
5925189777a2SCristian Pallares	    cat <<"EOF"
5926189777a2SCristian Pallares}
5927189777a2SCristian Pallares
5928189777a2SCristian Pallaresvoid *
5929189777a2SCristian Pallaresxmalloc (size_t num)
5930189777a2SCristian Pallares{
5931189777a2SCristian Pallares  void *p = (void *) malloc (num);
5932189777a2SCristian Pallares  if (!p)
5933189777a2SCristian Pallares    lt_fatal (__FILE__, __LINE__, "memory exhausted");
5934189777a2SCristian Pallares
5935189777a2SCristian Pallares  return p;
5936189777a2SCristian Pallares}
5937189777a2SCristian Pallares
5938189777a2SCristian Pallareschar *
5939189777a2SCristian Pallaresxstrdup (const char *string)
5940189777a2SCristian Pallares{
5941189777a2SCristian Pallares  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
5942189777a2SCristian Pallares			  string) : NULL;
5943189777a2SCristian Pallares}
5944189777a2SCristian Pallares
5945189777a2SCristian Pallaresconst char *
5946189777a2SCristian Pallaresbase_name (const char *name)
5947189777a2SCristian Pallares{
5948189777a2SCristian Pallares  const char *base;
5949189777a2SCristian Pallares
5950*b3fce824SCristian Pallarés#if defined HAVE_DOS_BASED_FILE_SYSTEM
5951189777a2SCristian Pallares  /* Skip over the disk name in MSDOS pathnames. */
5952189777a2SCristian Pallares  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
5953189777a2SCristian Pallares    name += 2;
5954189777a2SCristian Pallares#endif
5955189777a2SCristian Pallares
5956189777a2SCristian Pallares  for (base = name; *name; name++)
5957189777a2SCristian Pallares    if (IS_DIR_SEPARATOR (*name))
5958189777a2SCristian Pallares      base = name + 1;
5959189777a2SCristian Pallares  return base;
5960189777a2SCristian Pallares}
5961189777a2SCristian Pallares
5962189777a2SCristian Pallaresint
5963189777a2SCristian Pallarescheck_executable (const char *path)
5964189777a2SCristian Pallares{
5965189777a2SCristian Pallares  struct stat st;
5966189777a2SCristian Pallares
5967189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
5968189777a2SCristian Pallares                  nonempty (path));
5969189777a2SCristian Pallares  if ((!path) || (!*path))
5970189777a2SCristian Pallares    return 0;
5971189777a2SCristian Pallares
5972189777a2SCristian Pallares  if ((stat (path, &st) >= 0)
5973189777a2SCristian Pallares      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
5974189777a2SCristian Pallares    return 1;
5975189777a2SCristian Pallares  else
5976189777a2SCristian Pallares    return 0;
5977189777a2SCristian Pallares}
5978189777a2SCristian Pallares
5979189777a2SCristian Pallaresint
5980189777a2SCristian Pallaresmake_executable (const char *path)
5981189777a2SCristian Pallares{
5982189777a2SCristian Pallares  int rval = 0;
5983189777a2SCristian Pallares  struct stat st;
5984189777a2SCristian Pallares
5985189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
5986189777a2SCristian Pallares                  nonempty (path));
5987189777a2SCristian Pallares  if ((!path) || (!*path))
5988189777a2SCristian Pallares    return 0;
5989189777a2SCristian Pallares
5990189777a2SCristian Pallares  if (stat (path, &st) >= 0)
5991189777a2SCristian Pallares    {
5992189777a2SCristian Pallares      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
5993189777a2SCristian Pallares    }
5994189777a2SCristian Pallares  return rval;
5995189777a2SCristian Pallares}
5996189777a2SCristian Pallares
5997189777a2SCristian Pallares/* Searches for the full path of the wrapper.  Returns
5998189777a2SCristian Pallares   newly allocated full path name if found, NULL otherwise
5999189777a2SCristian Pallares   Does not chase symlinks, even on platforms that support them.
6000189777a2SCristian Pallares*/
6001189777a2SCristian Pallareschar *
6002189777a2SCristian Pallaresfind_executable (const char *wrapper)
6003189777a2SCristian Pallares{
6004189777a2SCristian Pallares  int has_slash = 0;
6005189777a2SCristian Pallares  const char *p;
6006189777a2SCristian Pallares  const char *p_next;
6007189777a2SCristian Pallares  /* static buffer for getcwd */
6008189777a2SCristian Pallares  char tmp[LT_PATHMAX + 1];
6009*b3fce824SCristian Pallarés  size_t tmp_len;
6010189777a2SCristian Pallares  char *concat_name;
6011189777a2SCristian Pallares
6012189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6013189777a2SCristian Pallares                  nonempty (wrapper));
6014189777a2SCristian Pallares
6015189777a2SCristian Pallares  if ((wrapper == NULL) || (*wrapper == '\0'))
6016189777a2SCristian Pallares    return NULL;
6017189777a2SCristian Pallares
6018189777a2SCristian Pallares  /* Absolute path? */
6019*b3fce824SCristian Pallarés#if defined HAVE_DOS_BASED_FILE_SYSTEM
6020189777a2SCristian Pallares  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6021189777a2SCristian Pallares    {
6022189777a2SCristian Pallares      concat_name = xstrdup (wrapper);
6023189777a2SCristian Pallares      if (check_executable (concat_name))
6024189777a2SCristian Pallares	return concat_name;
6025189777a2SCristian Pallares      XFREE (concat_name);
6026189777a2SCristian Pallares    }
6027189777a2SCristian Pallares  else
6028189777a2SCristian Pallares    {
6029189777a2SCristian Pallares#endif
6030189777a2SCristian Pallares      if (IS_DIR_SEPARATOR (wrapper[0]))
6031189777a2SCristian Pallares	{
6032189777a2SCristian Pallares	  concat_name = xstrdup (wrapper);
6033189777a2SCristian Pallares	  if (check_executable (concat_name))
6034189777a2SCristian Pallares	    return concat_name;
6035189777a2SCristian Pallares	  XFREE (concat_name);
6036189777a2SCristian Pallares	}
6037*b3fce824SCristian Pallarés#if defined HAVE_DOS_BASED_FILE_SYSTEM
6038189777a2SCristian Pallares    }
6039189777a2SCristian Pallares#endif
6040189777a2SCristian Pallares
6041189777a2SCristian Pallares  for (p = wrapper; *p; p++)
6042189777a2SCristian Pallares    if (*p == '/')
6043189777a2SCristian Pallares      {
6044189777a2SCristian Pallares	has_slash = 1;
6045189777a2SCristian Pallares	break;
6046189777a2SCristian Pallares      }
6047189777a2SCristian Pallares  if (!has_slash)
6048189777a2SCristian Pallares    {
6049189777a2SCristian Pallares      /* no slashes; search PATH */
6050189777a2SCristian Pallares      const char *path = getenv ("PATH");
6051189777a2SCristian Pallares      if (path != NULL)
6052189777a2SCristian Pallares	{
6053189777a2SCristian Pallares	  for (p = path; *p; p = p_next)
6054189777a2SCristian Pallares	    {
6055189777a2SCristian Pallares	      const char *q;
6056189777a2SCristian Pallares	      size_t p_len;
6057189777a2SCristian Pallares	      for (q = p; *q; q++)
6058189777a2SCristian Pallares		if (IS_PATH_SEPARATOR (*q))
6059189777a2SCristian Pallares		  break;
6060*b3fce824SCristian Pallarés	      p_len = (size_t) (q - p);
6061189777a2SCristian Pallares	      p_next = (*q == '\0' ? q : q + 1);
6062189777a2SCristian Pallares	      if (p_len == 0)
6063189777a2SCristian Pallares		{
6064189777a2SCristian Pallares		  /* empty path: current directory */
6065189777a2SCristian Pallares		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6066189777a2SCristian Pallares		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6067189777a2SCristian Pallares                              nonnull (strerror (errno)));
6068189777a2SCristian Pallares		  tmp_len = strlen (tmp);
6069189777a2SCristian Pallares		  concat_name =
6070189777a2SCristian Pallares		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6071189777a2SCristian Pallares		  memcpy (concat_name, tmp, tmp_len);
6072189777a2SCristian Pallares		  concat_name[tmp_len] = '/';
6073189777a2SCristian Pallares		  strcpy (concat_name + tmp_len + 1, wrapper);
6074189777a2SCristian Pallares		}
6075189777a2SCristian Pallares	      else
6076189777a2SCristian Pallares		{
6077189777a2SCristian Pallares		  concat_name =
6078189777a2SCristian Pallares		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6079189777a2SCristian Pallares		  memcpy (concat_name, p, p_len);
6080189777a2SCristian Pallares		  concat_name[p_len] = '/';
6081189777a2SCristian Pallares		  strcpy (concat_name + p_len + 1, wrapper);
6082189777a2SCristian Pallares		}
6083189777a2SCristian Pallares	      if (check_executable (concat_name))
6084189777a2SCristian Pallares		return concat_name;
6085189777a2SCristian Pallares	      XFREE (concat_name);
6086189777a2SCristian Pallares	    }
6087189777a2SCristian Pallares	}
6088189777a2SCristian Pallares      /* not found in PATH; assume curdir */
6089189777a2SCristian Pallares    }
6090189777a2SCristian Pallares  /* Relative path | not found in path: prepend cwd */
6091189777a2SCristian Pallares  if (getcwd (tmp, LT_PATHMAX) == NULL)
6092189777a2SCristian Pallares    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6093189777a2SCristian Pallares              nonnull (strerror (errno)));
6094189777a2SCristian Pallares  tmp_len = strlen (tmp);
6095189777a2SCristian Pallares  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6096189777a2SCristian Pallares  memcpy (concat_name, tmp, tmp_len);
6097189777a2SCristian Pallares  concat_name[tmp_len] = '/';
6098189777a2SCristian Pallares  strcpy (concat_name + tmp_len + 1, wrapper);
6099189777a2SCristian Pallares
6100189777a2SCristian Pallares  if (check_executable (concat_name))
6101189777a2SCristian Pallares    return concat_name;
6102189777a2SCristian Pallares  XFREE (concat_name);
6103189777a2SCristian Pallares  return NULL;
6104189777a2SCristian Pallares}
6105189777a2SCristian Pallares
6106189777a2SCristian Pallareschar *
6107189777a2SCristian Pallareschase_symlinks (const char *pathspec)
6108189777a2SCristian Pallares{
6109189777a2SCristian Pallares#ifndef S_ISLNK
6110189777a2SCristian Pallares  return xstrdup (pathspec);
6111189777a2SCristian Pallares#else
6112189777a2SCristian Pallares  char buf[LT_PATHMAX];
6113189777a2SCristian Pallares  struct stat s;
6114189777a2SCristian Pallares  char *tmp_pathspec = xstrdup (pathspec);
6115189777a2SCristian Pallares  char *p;
6116189777a2SCristian Pallares  int has_symlinks = 0;
6117189777a2SCristian Pallares  while (strlen (tmp_pathspec) && !has_symlinks)
6118189777a2SCristian Pallares    {
6119189777a2SCristian Pallares      lt_debugprintf (__FILE__, __LINE__,
6120189777a2SCristian Pallares		      "checking path component for symlinks: %s\n",
6121189777a2SCristian Pallares		      tmp_pathspec);
6122189777a2SCristian Pallares      if (lstat (tmp_pathspec, &s) == 0)
6123189777a2SCristian Pallares	{
6124189777a2SCristian Pallares	  if (S_ISLNK (s.st_mode) != 0)
6125189777a2SCristian Pallares	    {
6126189777a2SCristian Pallares	      has_symlinks = 1;
6127189777a2SCristian Pallares	      break;
6128189777a2SCristian Pallares	    }
6129189777a2SCristian Pallares
6130189777a2SCristian Pallares	  /* search backwards for last DIR_SEPARATOR */
6131189777a2SCristian Pallares	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6132189777a2SCristian Pallares	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6133189777a2SCristian Pallares	    p--;
6134189777a2SCristian Pallares	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6135189777a2SCristian Pallares	    {
6136189777a2SCristian Pallares	      /* no more DIR_SEPARATORS left */
6137189777a2SCristian Pallares	      break;
6138189777a2SCristian Pallares	    }
6139189777a2SCristian Pallares	  *p = '\0';
6140189777a2SCristian Pallares	}
6141189777a2SCristian Pallares      else
6142189777a2SCristian Pallares	{
6143189777a2SCristian Pallares	  lt_fatal (__FILE__, __LINE__,
6144189777a2SCristian Pallares		    "error accessing file \"%s\": %s",
6145189777a2SCristian Pallares		    tmp_pathspec, nonnull (strerror (errno)));
6146189777a2SCristian Pallares	}
6147189777a2SCristian Pallares    }
6148189777a2SCristian Pallares  XFREE (tmp_pathspec);
6149189777a2SCristian Pallares
6150189777a2SCristian Pallares  if (!has_symlinks)
6151189777a2SCristian Pallares    {
6152189777a2SCristian Pallares      return xstrdup (pathspec);
6153189777a2SCristian Pallares    }
6154189777a2SCristian Pallares
6155189777a2SCristian Pallares  tmp_pathspec = realpath (pathspec, buf);
6156189777a2SCristian Pallares  if (tmp_pathspec == 0)
6157189777a2SCristian Pallares    {
6158189777a2SCristian Pallares      lt_fatal (__FILE__, __LINE__,
6159189777a2SCristian Pallares		"could not follow symlinks for %s", pathspec);
6160189777a2SCristian Pallares    }
6161189777a2SCristian Pallares  return xstrdup (tmp_pathspec);
6162189777a2SCristian Pallares#endif
6163189777a2SCristian Pallares}
6164189777a2SCristian Pallares
6165189777a2SCristian Pallareschar *
6166189777a2SCristian Pallaresstrendzap (char *str, const char *pat)
6167189777a2SCristian Pallares{
6168189777a2SCristian Pallares  size_t len, patlen;
6169189777a2SCristian Pallares
6170189777a2SCristian Pallares  assert (str != NULL);
6171189777a2SCristian Pallares  assert (pat != NULL);
6172189777a2SCristian Pallares
6173189777a2SCristian Pallares  len = strlen (str);
6174189777a2SCristian Pallares  patlen = strlen (pat);
6175189777a2SCristian Pallares
6176189777a2SCristian Pallares  if (patlen <= len)
6177189777a2SCristian Pallares    {
6178189777a2SCristian Pallares      str += len - patlen;
6179*b3fce824SCristian Pallarés      if (STREQ (str, pat))
6180189777a2SCristian Pallares	*str = '\0';
6181189777a2SCristian Pallares    }
6182189777a2SCristian Pallares  return str;
6183189777a2SCristian Pallares}
6184189777a2SCristian Pallares
6185189777a2SCristian Pallaresvoid
6186189777a2SCristian Pallareslt_debugprintf (const char *file, int line, const char *fmt, ...)
6187189777a2SCristian Pallares{
6188189777a2SCristian Pallares  va_list args;
6189189777a2SCristian Pallares  if (lt_debug)
6190189777a2SCristian Pallares    {
6191189777a2SCristian Pallares      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6192189777a2SCristian Pallares      va_start (args, fmt);
6193189777a2SCristian Pallares      (void) vfprintf (stderr, fmt, args);
6194189777a2SCristian Pallares      va_end (args);
6195189777a2SCristian Pallares    }
6196189777a2SCristian Pallares}
6197189777a2SCristian Pallares
6198189777a2SCristian Pallaresstatic void
6199189777a2SCristian Pallareslt_error_core (int exit_status, const char *file,
6200189777a2SCristian Pallares	       int line, const char *mode,
6201189777a2SCristian Pallares	       const char *message, va_list ap)
6202189777a2SCristian Pallares{
6203189777a2SCristian Pallares  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6204189777a2SCristian Pallares  vfprintf (stderr, message, ap);
6205189777a2SCristian Pallares  fprintf (stderr, ".\n");
6206189777a2SCristian Pallares
6207189777a2SCristian Pallares  if (exit_status >= 0)
6208189777a2SCristian Pallares    exit (exit_status);
6209189777a2SCristian Pallares}
6210189777a2SCristian Pallares
6211189777a2SCristian Pallaresvoid
6212189777a2SCristian Pallareslt_fatal (const char *file, int line, const char *message, ...)
6213189777a2SCristian Pallares{
6214189777a2SCristian Pallares  va_list ap;
6215189777a2SCristian Pallares  va_start (ap, message);
6216189777a2SCristian Pallares  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6217189777a2SCristian Pallares  va_end (ap);
6218189777a2SCristian Pallares}
6219189777a2SCristian Pallares
6220189777a2SCristian Pallaresstatic const char *
6221189777a2SCristian Pallaresnonnull (const char *s)
6222189777a2SCristian Pallares{
6223189777a2SCristian Pallares  return s ? s : "(null)";
6224189777a2SCristian Pallares}
6225189777a2SCristian Pallares
6226189777a2SCristian Pallaresstatic const char *
6227189777a2SCristian Pallaresnonempty (const char *s)
6228189777a2SCristian Pallares{
6229189777a2SCristian Pallares  return (s && !*s) ? "(empty)" : nonnull (s);
6230189777a2SCristian Pallares}
6231189777a2SCristian Pallares
6232189777a2SCristian Pallaresvoid
6233189777a2SCristian Pallareslt_setenv (const char *name, const char *value)
6234189777a2SCristian Pallares{
6235189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__,
6236189777a2SCristian Pallares		  "(lt_setenv) setting '%s' to '%s'\n",
6237189777a2SCristian Pallares                  nonnull (name), nonnull (value));
6238189777a2SCristian Pallares  {
6239189777a2SCristian Pallares#ifdef HAVE_SETENV
6240189777a2SCristian Pallares    /* always make a copy, for consistency with !HAVE_SETENV */
6241189777a2SCristian Pallares    char *str = xstrdup (value);
6242189777a2SCristian Pallares    setenv (name, str, 1);
6243189777a2SCristian Pallares#else
6244*b3fce824SCristian Pallarés    size_t len = strlen (name) + 1 + strlen (value) + 1;
6245189777a2SCristian Pallares    char *str = XMALLOC (char, len);
6246189777a2SCristian Pallares    sprintf (str, "%s=%s", name, value);
6247189777a2SCristian Pallares    if (putenv (str) != EXIT_SUCCESS)
6248189777a2SCristian Pallares      {
6249189777a2SCristian Pallares        XFREE (str);
6250189777a2SCristian Pallares      }
6251189777a2SCristian Pallares#endif
6252189777a2SCristian Pallares  }
6253189777a2SCristian Pallares}
6254189777a2SCristian Pallares
6255189777a2SCristian Pallareschar *
6256189777a2SCristian Pallareslt_extend_str (const char *orig_value, const char *add, int to_end)
6257189777a2SCristian Pallares{
6258189777a2SCristian Pallares  char *new_value;
6259189777a2SCristian Pallares  if (orig_value && *orig_value)
6260189777a2SCristian Pallares    {
6261*b3fce824SCristian Pallarés      size_t orig_value_len = strlen (orig_value);
6262*b3fce824SCristian Pallarés      size_t add_len = strlen (add);
6263189777a2SCristian Pallares      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6264189777a2SCristian Pallares      if (to_end)
6265189777a2SCristian Pallares        {
6266189777a2SCristian Pallares          strcpy (new_value, orig_value);
6267189777a2SCristian Pallares          strcpy (new_value + orig_value_len, add);
6268189777a2SCristian Pallares        }
6269189777a2SCristian Pallares      else
6270189777a2SCristian Pallares        {
6271189777a2SCristian Pallares          strcpy (new_value, add);
6272189777a2SCristian Pallares          strcpy (new_value + add_len, orig_value);
6273189777a2SCristian Pallares        }
6274189777a2SCristian Pallares    }
6275189777a2SCristian Pallares  else
6276189777a2SCristian Pallares    {
6277189777a2SCristian Pallares      new_value = xstrdup (add);
6278189777a2SCristian Pallares    }
6279189777a2SCristian Pallares  return new_value;
6280189777a2SCristian Pallares}
6281189777a2SCristian Pallares
6282189777a2SCristian Pallaresvoid
6283189777a2SCristian Pallareslt_update_exe_path (const char *name, const char *value)
6284189777a2SCristian Pallares{
6285189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__,
6286189777a2SCristian Pallares		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6287189777a2SCristian Pallares                  nonnull (name), nonnull (value));
6288189777a2SCristian Pallares
6289189777a2SCristian Pallares  if (name && *name && value && *value)
6290189777a2SCristian Pallares    {
6291189777a2SCristian Pallares      char *new_value = lt_extend_str (getenv (name), value, 0);
6292189777a2SCristian Pallares      /* some systems can't cope with a ':'-terminated path #' */
6293*b3fce824SCristian Pallarés      size_t len = strlen (new_value);
6294*b3fce824SCristian Pallarés      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6295189777a2SCristian Pallares        {
6296*b3fce824SCristian Pallarés          new_value[--len] = '\0';
6297189777a2SCristian Pallares        }
6298189777a2SCristian Pallares      lt_setenv (name, new_value);
6299189777a2SCristian Pallares      XFREE (new_value);
6300189777a2SCristian Pallares    }
6301189777a2SCristian Pallares}
6302189777a2SCristian Pallares
6303189777a2SCristian Pallaresvoid
6304189777a2SCristian Pallareslt_update_lib_path (const char *name, const char *value)
6305189777a2SCristian Pallares{
6306189777a2SCristian Pallares  lt_debugprintf (__FILE__, __LINE__,
6307189777a2SCristian Pallares		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6308189777a2SCristian Pallares                  nonnull (name), nonnull (value));
6309189777a2SCristian Pallares
6310189777a2SCristian Pallares  if (name && *name && value && *value)
6311189777a2SCristian Pallares    {
6312189777a2SCristian Pallares      char *new_value = lt_extend_str (getenv (name), value, 0);
6313189777a2SCristian Pallares      lt_setenv (name, new_value);
6314189777a2SCristian Pallares      XFREE (new_value);
6315189777a2SCristian Pallares    }
6316189777a2SCristian Pallares}
6317189777a2SCristian Pallares
6318189777a2SCristian PallaresEOF
6319189777a2SCristian Pallares	    case $host_os in
6320189777a2SCristian Pallares	      mingw*)
6321189777a2SCristian Pallares		cat <<"EOF"
6322189777a2SCristian Pallares
6323189777a2SCristian Pallares/* Prepares an argument vector before calling spawn().
6324189777a2SCristian Pallares   Note that spawn() does not by itself call the command interpreter
6325189777a2SCristian Pallares     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6326189777a2SCristian Pallares      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6327189777a2SCristian Pallares         GetVersionEx(&v);
6328189777a2SCristian Pallares         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6329189777a2SCristian Pallares      }) ? "cmd.exe" : "command.com").
6330189777a2SCristian Pallares   Instead it simply concatenates the arguments, separated by ' ', and calls
6331189777a2SCristian Pallares   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6332189777a2SCristian Pallares   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6333189777a2SCristian Pallares   special way:
6334189777a2SCristian Pallares   - Space and tab are interpreted as delimiters. They are not treated as
6335189777a2SCristian Pallares     delimiters if they are surrounded by double quotes: "...".
6336189777a2SCristian Pallares   - Unescaped double quotes are removed from the input. Their only effect is
6337189777a2SCristian Pallares     that within double quotes, space and tab are treated like normal
6338189777a2SCristian Pallares     characters.
6339189777a2SCristian Pallares   - Backslashes not followed by double quotes are not special.
6340189777a2SCristian Pallares   - But 2*n+1 backslashes followed by a double quote become
6341189777a2SCristian Pallares     n backslashes followed by a double quote (n >= 0):
6342189777a2SCristian Pallares       \" -> "
6343189777a2SCristian Pallares       \\\" -> \"
6344189777a2SCristian Pallares       \\\\\" -> \\"
6345189777a2SCristian Pallares */
6346189777a2SCristian Pallares#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
6347189777a2SCristian Pallares#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
6348189777a2SCristian Pallareschar **
6349189777a2SCristian Pallaresprepare_spawn (char **argv)
6350189777a2SCristian Pallares{
6351189777a2SCristian Pallares  size_t argc;
6352189777a2SCristian Pallares  char **new_argv;
6353189777a2SCristian Pallares  size_t i;
6354189777a2SCristian Pallares
6355189777a2SCristian Pallares  /* Count number of arguments.  */
6356189777a2SCristian Pallares  for (argc = 0; argv[argc] != NULL; argc++)
6357189777a2SCristian Pallares    ;
6358189777a2SCristian Pallares
6359189777a2SCristian Pallares  /* Allocate new argument vector.  */
6360189777a2SCristian Pallares  new_argv = XMALLOC (char *, argc + 1);
6361189777a2SCristian Pallares
6362189777a2SCristian Pallares  /* Put quoted arguments into the new argument vector.  */
6363189777a2SCristian Pallares  for (i = 0; i < argc; i++)
6364189777a2SCristian Pallares    {
6365189777a2SCristian Pallares      const char *string = argv[i];
6366189777a2SCristian Pallares
6367189777a2SCristian Pallares      if (string[0] == '\0')
6368189777a2SCristian Pallares	new_argv[i] = xstrdup ("\"\"");
6369189777a2SCristian Pallares      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6370189777a2SCristian Pallares	{
6371189777a2SCristian Pallares	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6372189777a2SCristian Pallares	  size_t length;
6373189777a2SCristian Pallares	  unsigned int backslashes;
6374189777a2SCristian Pallares	  const char *s;
6375189777a2SCristian Pallares	  char *quoted_string;
6376189777a2SCristian Pallares	  char *p;
6377189777a2SCristian Pallares
6378189777a2SCristian Pallares	  length = 0;
6379189777a2SCristian Pallares	  backslashes = 0;
6380189777a2SCristian Pallares	  if (quote_around)
6381189777a2SCristian Pallares	    length++;
6382189777a2SCristian Pallares	  for (s = string; *s != '\0'; s++)
6383189777a2SCristian Pallares	    {
6384189777a2SCristian Pallares	      char c = *s;
6385189777a2SCristian Pallares	      if (c == '"')
6386189777a2SCristian Pallares		length += backslashes + 1;
6387189777a2SCristian Pallares	      length++;
6388189777a2SCristian Pallares	      if (c == '\\')
6389189777a2SCristian Pallares		backslashes++;
6390189777a2SCristian Pallares	      else
6391189777a2SCristian Pallares		backslashes = 0;
6392189777a2SCristian Pallares	    }
6393189777a2SCristian Pallares	  if (quote_around)
6394189777a2SCristian Pallares	    length += backslashes + 1;
6395189777a2SCristian Pallares
6396189777a2SCristian Pallares	  quoted_string = XMALLOC (char, length + 1);
6397189777a2SCristian Pallares
6398189777a2SCristian Pallares	  p = quoted_string;
6399189777a2SCristian Pallares	  backslashes = 0;
6400189777a2SCristian Pallares	  if (quote_around)
6401189777a2SCristian Pallares	    *p++ = '"';
6402189777a2SCristian Pallares	  for (s = string; *s != '\0'; s++)
6403189777a2SCristian Pallares	    {
6404189777a2SCristian Pallares	      char c = *s;
6405189777a2SCristian Pallares	      if (c == '"')
6406189777a2SCristian Pallares		{
6407189777a2SCristian Pallares		  unsigned int j;
6408189777a2SCristian Pallares		  for (j = backslashes + 1; j > 0; j--)
6409189777a2SCristian Pallares		    *p++ = '\\';
6410189777a2SCristian Pallares		}
6411189777a2SCristian Pallares	      *p++ = c;
6412189777a2SCristian Pallares	      if (c == '\\')
6413189777a2SCristian Pallares		backslashes++;
6414189777a2SCristian Pallares	      else
6415189777a2SCristian Pallares		backslashes = 0;
6416189777a2SCristian Pallares	    }
6417189777a2SCristian Pallares	  if (quote_around)
6418189777a2SCristian Pallares	    {
6419189777a2SCristian Pallares	      unsigned int j;
6420189777a2SCristian Pallares	      for (j = backslashes; j > 0; j--)
6421189777a2SCristian Pallares		*p++ = '\\';
6422189777a2SCristian Pallares	      *p++ = '"';
6423189777a2SCristian Pallares	    }
6424189777a2SCristian Pallares	  *p = '\0';
6425189777a2SCristian Pallares
6426189777a2SCristian Pallares	  new_argv[i] = quoted_string;
6427189777a2SCristian Pallares	}
6428189777a2SCristian Pallares      else
6429189777a2SCristian Pallares	new_argv[i] = (char *) string;
6430189777a2SCristian Pallares    }
6431189777a2SCristian Pallares  new_argv[argc] = NULL;
6432189777a2SCristian Pallares
6433189777a2SCristian Pallares  return new_argv;
6434189777a2SCristian Pallares}
6435189777a2SCristian PallaresEOF
6436189777a2SCristian Pallares		;;
6437189777a2SCristian Pallares	    esac
6438189777a2SCristian Pallares
6439189777a2SCristian Pallares            cat <<"EOF"
6440189777a2SCristian Pallaresvoid lt_dump_script (FILE* f)
6441189777a2SCristian Pallares{
6442189777a2SCristian PallaresEOF
6443189777a2SCristian Pallares	    func_emit_wrapper yes |
6444189777a2SCristian Pallares	      $SED -n -e '
6445189777a2SCristian Pallaress/^\(.\{79\}\)\(..*\)/\1\
6446189777a2SCristian Pallares\2/
6447189777a2SCristian Pallaresh
6448189777a2SCristian Pallaress/\([\\"]\)/\\\1/g
6449189777a2SCristian Pallaress/$/\\n/
6450189777a2SCristian Pallaress/\([^\n]*\).*/  fputs ("\1", f);/p
6451189777a2SCristian Pallaresg
6452189777a2SCristian PallaresD'
6453189777a2SCristian Pallares            cat <<"EOF"
6454189777a2SCristian Pallares}
6455189777a2SCristian PallaresEOF
6456189777a2SCristian Pallares}
6457189777a2SCristian Pallares# end: func_emit_cwrapperexe_src
6458189777a2SCristian Pallares
6459189777a2SCristian Pallares# func_win32_import_lib_p ARG
6460189777a2SCristian Pallares# True if ARG is an import lib, as indicated by $file_magic_cmd
6461189777a2SCristian Pallaresfunc_win32_import_lib_p ()
6462189777a2SCristian Pallares{
6463*b3fce824SCristian Pallarés    $debug_cmd
6464*b3fce824SCristian Pallarés
6465189777a2SCristian Pallares    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6466189777a2SCristian Pallares    *import*) : ;;
6467189777a2SCristian Pallares    *) false ;;
6468189777a2SCristian Pallares    esac
6469189777a2SCristian Pallares}
6470189777a2SCristian Pallares
6471*b3fce824SCristian Pallarés# func_suncc_cstd_abi
6472*b3fce824SCristian Pallarés# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6473*b3fce824SCristian Pallarés# Several compiler flags select an ABI that is incompatible with the
6474*b3fce824SCristian Pallarés# Cstd library. Avoid specifying it if any are in CXXFLAGS.
6475*b3fce824SCristian Pallarésfunc_suncc_cstd_abi ()
6476*b3fce824SCristian Pallarés{
6477*b3fce824SCristian Pallarés    $debug_cmd
6478*b3fce824SCristian Pallarés
6479*b3fce824SCristian Pallarés    case " $compile_command " in
6480*b3fce824SCristian Pallarés    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6481*b3fce824SCristian Pallarés      suncc_use_cstd_abi=no
6482*b3fce824SCristian Pallarés      ;;
6483*b3fce824SCristian Pallarés    *)
6484*b3fce824SCristian Pallarés      suncc_use_cstd_abi=yes
6485*b3fce824SCristian Pallarés      ;;
6486*b3fce824SCristian Pallarés    esac
6487*b3fce824SCristian Pallarés}
6488*b3fce824SCristian Pallarés
6489189777a2SCristian Pallares# func_mode_link arg...
6490189777a2SCristian Pallaresfunc_mode_link ()
6491189777a2SCristian Pallares{
6492*b3fce824SCristian Pallarés    $debug_cmd
6493*b3fce824SCristian Pallarés
6494189777a2SCristian Pallares    case $host in
6495189777a2SCristian Pallares    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6496189777a2SCristian Pallares      # It is impossible to link a dll without this setting, and
6497189777a2SCristian Pallares      # we shouldn't force the makefile maintainer to figure out
6498*b3fce824SCristian Pallarés      # what system we are compiling for in order to pass an extra
6499189777a2SCristian Pallares      # flag for every libtool invocation.
6500189777a2SCristian Pallares      # allow_undefined=no
6501189777a2SCristian Pallares
6502189777a2SCristian Pallares      # FIXME: Unfortunately, there are problems with the above when trying
6503*b3fce824SCristian Pallarés      # to make a dll that has undefined symbols, in which case not
6504189777a2SCristian Pallares      # even a static library is built.  For now, we need to specify
6505189777a2SCristian Pallares      # -no-undefined on the libtool link line when we can be certain
6506189777a2SCristian Pallares      # that all symbols are satisfied, otherwise we get a static library.
6507189777a2SCristian Pallares      allow_undefined=yes
6508189777a2SCristian Pallares      ;;
6509189777a2SCristian Pallares    *)
6510189777a2SCristian Pallares      allow_undefined=yes
6511189777a2SCristian Pallares      ;;
6512189777a2SCristian Pallares    esac
6513189777a2SCristian Pallares    libtool_args=$nonopt
6514189777a2SCristian Pallares    base_compile="$nonopt $@"
6515189777a2SCristian Pallares    compile_command=$nonopt
6516189777a2SCristian Pallares    finalize_command=$nonopt
6517189777a2SCristian Pallares
6518189777a2SCristian Pallares    compile_rpath=
6519189777a2SCristian Pallares    finalize_rpath=
6520189777a2SCristian Pallares    compile_shlibpath=
6521189777a2SCristian Pallares    finalize_shlibpath=
6522189777a2SCristian Pallares    convenience=
6523189777a2SCristian Pallares    old_convenience=
6524189777a2SCristian Pallares    deplibs=
6525189777a2SCristian Pallares    old_deplibs=
6526189777a2SCristian Pallares    compiler_flags=
6527189777a2SCristian Pallares    linker_flags=
6528189777a2SCristian Pallares    dllsearchpath=
6529189777a2SCristian Pallares    lib_search_path=`pwd`
6530189777a2SCristian Pallares    inst_prefix_dir=
6531189777a2SCristian Pallares    new_inherited_linker_flags=
6532189777a2SCristian Pallares
6533189777a2SCristian Pallares    avoid_version=no
6534189777a2SCristian Pallares    bindir=
6535189777a2SCristian Pallares    dlfiles=
6536189777a2SCristian Pallares    dlprefiles=
6537189777a2SCristian Pallares    dlself=no
6538189777a2SCristian Pallares    export_dynamic=no
6539189777a2SCristian Pallares    export_symbols=
6540189777a2SCristian Pallares    export_symbols_regex=
6541189777a2SCristian Pallares    generated=
6542189777a2SCristian Pallares    libobjs=
6543189777a2SCristian Pallares    ltlibs=
6544189777a2SCristian Pallares    module=no
6545189777a2SCristian Pallares    no_install=no
6546189777a2SCristian Pallares    objs=
6547*b3fce824SCristian Pallarés    os2dllname=
6548189777a2SCristian Pallares    non_pic_objects=
6549189777a2SCristian Pallares    precious_files_regex=
6550189777a2SCristian Pallares    prefer_static_libs=no
6551*b3fce824SCristian Pallarés    preload=false
6552189777a2SCristian Pallares    prev=
6553189777a2SCristian Pallares    prevarg=
6554189777a2SCristian Pallares    release=
6555189777a2SCristian Pallares    rpath=
6556189777a2SCristian Pallares    xrpath=
6557189777a2SCristian Pallares    perm_rpath=
6558189777a2SCristian Pallares    temp_rpath=
6559189777a2SCristian Pallares    thread_safe=no
6560189777a2SCristian Pallares    vinfo=
6561189777a2SCristian Pallares    vinfo_number=no
6562189777a2SCristian Pallares    weak_libs=
6563*b3fce824SCristian Pallarés    single_module=$wl-single_module
6564189777a2SCristian Pallares    func_infer_tag $base_compile
6565189777a2SCristian Pallares
6566189777a2SCristian Pallares    # We need to know -static, to get the right output filenames.
6567189777a2SCristian Pallares    for arg
6568189777a2SCristian Pallares    do
6569189777a2SCristian Pallares      case $arg in
6570189777a2SCristian Pallares      -shared)
6571*b3fce824SCristian Pallarés	test yes != "$build_libtool_libs" \
6572*b3fce824SCristian Pallarés	  && func_fatal_configuration "cannot build a shared library"
6573189777a2SCristian Pallares	build_old_libs=no
6574189777a2SCristian Pallares	break
6575189777a2SCristian Pallares	;;
6576189777a2SCristian Pallares      -all-static | -static | -static-libtool-libs)
6577189777a2SCristian Pallares	case $arg in
6578189777a2SCristian Pallares	-all-static)
6579*b3fce824SCristian Pallarés	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6580189777a2SCristian Pallares	    func_warning "complete static linking is impossible in this configuration"
6581189777a2SCristian Pallares	  fi
6582189777a2SCristian Pallares	  if test -n "$link_static_flag"; then
6583189777a2SCristian Pallares	    dlopen_self=$dlopen_self_static
6584189777a2SCristian Pallares	  fi
6585189777a2SCristian Pallares	  prefer_static_libs=yes
6586189777a2SCristian Pallares	  ;;
6587189777a2SCristian Pallares	-static)
6588189777a2SCristian Pallares	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6589189777a2SCristian Pallares	    dlopen_self=$dlopen_self_static
6590189777a2SCristian Pallares	  fi
6591189777a2SCristian Pallares	  prefer_static_libs=built
6592189777a2SCristian Pallares	  ;;
6593189777a2SCristian Pallares	-static-libtool-libs)
6594189777a2SCristian Pallares	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6595189777a2SCristian Pallares	    dlopen_self=$dlopen_self_static
6596189777a2SCristian Pallares	  fi
6597189777a2SCristian Pallares	  prefer_static_libs=yes
6598189777a2SCristian Pallares	  ;;
6599189777a2SCristian Pallares	esac
6600189777a2SCristian Pallares	build_libtool_libs=no
6601189777a2SCristian Pallares	build_old_libs=yes
6602189777a2SCristian Pallares	break
6603189777a2SCristian Pallares	;;
6604189777a2SCristian Pallares      esac
6605189777a2SCristian Pallares    done
6606189777a2SCristian Pallares
6607189777a2SCristian Pallares    # See if our shared archives depend on static archives.
6608189777a2SCristian Pallares    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6609189777a2SCristian Pallares
6610189777a2SCristian Pallares    # Go through the arguments, transforming them on the way.
6611189777a2SCristian Pallares    while test "$#" -gt 0; do
6612*b3fce824SCristian Pallarés      arg=$1
6613189777a2SCristian Pallares      shift
6614189777a2SCristian Pallares      func_quote_for_eval "$arg"
6615189777a2SCristian Pallares      qarg=$func_quote_for_eval_unquoted_result
6616189777a2SCristian Pallares      func_append libtool_args " $func_quote_for_eval_result"
6617189777a2SCristian Pallares
6618189777a2SCristian Pallares      # If the previous option needs an argument, assign it.
6619189777a2SCristian Pallares      if test -n "$prev"; then
6620189777a2SCristian Pallares	case $prev in
6621189777a2SCristian Pallares	output)
6622189777a2SCristian Pallares	  func_append compile_command " @OUTPUT@"
6623189777a2SCristian Pallares	  func_append finalize_command " @OUTPUT@"
6624189777a2SCristian Pallares	  ;;
6625189777a2SCristian Pallares	esac
6626189777a2SCristian Pallares
6627189777a2SCristian Pallares	case $prev in
6628189777a2SCristian Pallares	bindir)
6629*b3fce824SCristian Pallarés	  bindir=$arg
6630189777a2SCristian Pallares	  prev=
6631189777a2SCristian Pallares	  continue
6632189777a2SCristian Pallares	  ;;
6633189777a2SCristian Pallares	dlfiles|dlprefiles)
6634*b3fce824SCristian Pallarés	  $preload || {
6635189777a2SCristian Pallares	    # Add the symbol object into the linking commands.
6636189777a2SCristian Pallares	    func_append compile_command " @SYMFILE@"
6637189777a2SCristian Pallares	    func_append finalize_command " @SYMFILE@"
6638*b3fce824SCristian Pallarés	    preload=:
6639*b3fce824SCristian Pallarés	  }
6640189777a2SCristian Pallares	  case $arg in
6641189777a2SCristian Pallares	  *.la | *.lo) ;;  # We handle these cases below.
6642189777a2SCristian Pallares	  force)
6643*b3fce824SCristian Pallarés	    if test no = "$dlself"; then
6644189777a2SCristian Pallares	      dlself=needless
6645189777a2SCristian Pallares	      export_dynamic=yes
6646189777a2SCristian Pallares	    fi
6647189777a2SCristian Pallares	    prev=
6648189777a2SCristian Pallares	    continue
6649189777a2SCristian Pallares	    ;;
6650189777a2SCristian Pallares	  self)
6651*b3fce824SCristian Pallarés	    if test dlprefiles = "$prev"; then
6652189777a2SCristian Pallares	      dlself=yes
6653*b3fce824SCristian Pallarés	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6654189777a2SCristian Pallares	      dlself=yes
6655189777a2SCristian Pallares	    else
6656189777a2SCristian Pallares	      dlself=needless
6657189777a2SCristian Pallares	      export_dynamic=yes
6658189777a2SCristian Pallares	    fi
6659189777a2SCristian Pallares	    prev=
6660189777a2SCristian Pallares	    continue
6661189777a2SCristian Pallares	    ;;
6662189777a2SCristian Pallares	  *)
6663*b3fce824SCristian Pallarés	    if test dlfiles = "$prev"; then
6664189777a2SCristian Pallares	      func_append dlfiles " $arg"
6665189777a2SCristian Pallares	    else
6666189777a2SCristian Pallares	      func_append dlprefiles " $arg"
6667189777a2SCristian Pallares	    fi
6668189777a2SCristian Pallares	    prev=
6669189777a2SCristian Pallares	    continue
6670189777a2SCristian Pallares	    ;;
6671189777a2SCristian Pallares	  esac
6672189777a2SCristian Pallares	  ;;
6673189777a2SCristian Pallares	expsyms)
6674*b3fce824SCristian Pallarés	  export_symbols=$arg
6675189777a2SCristian Pallares	  test -f "$arg" \
6676*b3fce824SCristian Pallarés	    || func_fatal_error "symbol file '$arg' does not exist"
6677189777a2SCristian Pallares	  prev=
6678189777a2SCristian Pallares	  continue
6679189777a2SCristian Pallares	  ;;
6680189777a2SCristian Pallares	expsyms_regex)
6681*b3fce824SCristian Pallarés	  export_symbols_regex=$arg
6682189777a2SCristian Pallares	  prev=
6683189777a2SCristian Pallares	  continue
6684189777a2SCristian Pallares	  ;;
6685189777a2SCristian Pallares	framework)
6686189777a2SCristian Pallares	  case $host in
6687189777a2SCristian Pallares	    *-*-darwin*)
6688189777a2SCristian Pallares	      case "$deplibs " in
6689189777a2SCristian Pallares		*" $qarg.ltframework "*) ;;
6690189777a2SCristian Pallares		*) func_append deplibs " $qarg.ltframework" # this is fixed later
6691189777a2SCristian Pallares		   ;;
6692189777a2SCristian Pallares	      esac
6693189777a2SCristian Pallares	      ;;
6694189777a2SCristian Pallares	  esac
6695189777a2SCristian Pallares	  prev=
6696189777a2SCristian Pallares	  continue
6697189777a2SCristian Pallares	  ;;
6698189777a2SCristian Pallares	inst_prefix)
6699*b3fce824SCristian Pallarés	  inst_prefix_dir=$arg
6700*b3fce824SCristian Pallarés	  prev=
6701*b3fce824SCristian Pallarés	  continue
6702*b3fce824SCristian Pallarés	  ;;
6703*b3fce824SCristian Pallarés	mllvm)
6704*b3fce824SCristian Pallarés	  # Clang does not use LLVM to link, so we can simply discard any
6705*b3fce824SCristian Pallarés	  # '-mllvm $arg' options when doing the link step.
6706189777a2SCristian Pallares	  prev=
6707189777a2SCristian Pallares	  continue
6708189777a2SCristian Pallares	  ;;
6709189777a2SCristian Pallares	objectlist)
6710189777a2SCristian Pallares	  if test -f "$arg"; then
6711189777a2SCristian Pallares	    save_arg=$arg
6712189777a2SCristian Pallares	    moreargs=
6713189777a2SCristian Pallares	    for fil in `cat "$save_arg"`
6714189777a2SCristian Pallares	    do
6715189777a2SCristian Pallares#	      func_append moreargs " $fil"
6716189777a2SCristian Pallares	      arg=$fil
6717189777a2SCristian Pallares	      # A libtool-controlled object.
6718189777a2SCristian Pallares
6719189777a2SCristian Pallares	      # Check to see that this really is a libtool object.
6720189777a2SCristian Pallares	      if func_lalib_unsafe_p "$arg"; then
6721189777a2SCristian Pallares		pic_object=
6722189777a2SCristian Pallares		non_pic_object=
6723189777a2SCristian Pallares
6724189777a2SCristian Pallares		# Read the .lo file
6725189777a2SCristian Pallares		func_source "$arg"
6726189777a2SCristian Pallares
6727189777a2SCristian Pallares		if test -z "$pic_object" ||
6728189777a2SCristian Pallares		   test -z "$non_pic_object" ||
6729*b3fce824SCristian Pallarés		   test none = "$pic_object" &&
6730*b3fce824SCristian Pallarés		   test none = "$non_pic_object"; then
6731*b3fce824SCristian Pallarés		  func_fatal_error "cannot find name of object for '$arg'"
6732189777a2SCristian Pallares		fi
6733189777a2SCristian Pallares
6734189777a2SCristian Pallares		# Extract subdirectory from the argument.
6735189777a2SCristian Pallares		func_dirname "$arg" "/" ""
6736*b3fce824SCristian Pallarés		xdir=$func_dirname_result
6737189777a2SCristian Pallares
6738*b3fce824SCristian Pallarés		if test none != "$pic_object"; then
6739189777a2SCristian Pallares		  # Prepend the subdirectory the object is found in.
6740*b3fce824SCristian Pallarés		  pic_object=$xdir$pic_object
6741189777a2SCristian Pallares
6742*b3fce824SCristian Pallarés		  if test dlfiles = "$prev"; then
6743*b3fce824SCristian Pallarés		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6744189777a2SCristian Pallares		      func_append dlfiles " $pic_object"
6745189777a2SCristian Pallares		      prev=
6746189777a2SCristian Pallares		      continue
6747189777a2SCristian Pallares		    else
6748189777a2SCristian Pallares		      # If libtool objects are unsupported, then we need to preload.
6749189777a2SCristian Pallares		      prev=dlprefiles
6750189777a2SCristian Pallares		    fi
6751189777a2SCristian Pallares		  fi
6752189777a2SCristian Pallares
6753189777a2SCristian Pallares		  # CHECK ME:  I think I busted this.  -Ossama
6754*b3fce824SCristian Pallarés		  if test dlprefiles = "$prev"; then
6755189777a2SCristian Pallares		    # Preload the old-style object.
6756189777a2SCristian Pallares		    func_append dlprefiles " $pic_object"
6757189777a2SCristian Pallares		    prev=
6758189777a2SCristian Pallares		  fi
6759189777a2SCristian Pallares
6760189777a2SCristian Pallares		  # A PIC object.
6761189777a2SCristian Pallares		  func_append libobjs " $pic_object"
6762*b3fce824SCristian Pallarés		  arg=$pic_object
6763189777a2SCristian Pallares		fi
6764189777a2SCristian Pallares
6765189777a2SCristian Pallares		# Non-PIC object.
6766*b3fce824SCristian Pallarés		if test none != "$non_pic_object"; then
6767189777a2SCristian Pallares		  # Prepend the subdirectory the object is found in.
6768*b3fce824SCristian Pallarés		  non_pic_object=$xdir$non_pic_object
6769189777a2SCristian Pallares
6770189777a2SCristian Pallares		  # A standard non-PIC object
6771189777a2SCristian Pallares		  func_append non_pic_objects " $non_pic_object"
6772*b3fce824SCristian Pallarés		  if test -z "$pic_object" || test none = "$pic_object"; then
6773*b3fce824SCristian Pallarés		    arg=$non_pic_object
6774189777a2SCristian Pallares		  fi
6775189777a2SCristian Pallares		else
6776189777a2SCristian Pallares		  # If the PIC object exists, use it instead.
6777189777a2SCristian Pallares		  # $xdir was prepended to $pic_object above.
6778*b3fce824SCristian Pallarés		  non_pic_object=$pic_object
6779189777a2SCristian Pallares		  func_append non_pic_objects " $non_pic_object"
6780189777a2SCristian Pallares		fi
6781189777a2SCristian Pallares	      else
6782189777a2SCristian Pallares		# Only an error if not doing a dry-run.
6783189777a2SCristian Pallares		if $opt_dry_run; then
6784189777a2SCristian Pallares		  # Extract subdirectory from the argument.
6785189777a2SCristian Pallares		  func_dirname "$arg" "/" ""
6786*b3fce824SCristian Pallarés		  xdir=$func_dirname_result
6787189777a2SCristian Pallares
6788189777a2SCristian Pallares		  func_lo2o "$arg"
6789189777a2SCristian Pallares		  pic_object=$xdir$objdir/$func_lo2o_result
6790189777a2SCristian Pallares		  non_pic_object=$xdir$func_lo2o_result
6791189777a2SCristian Pallares		  func_append libobjs " $pic_object"
6792189777a2SCristian Pallares		  func_append non_pic_objects " $non_pic_object"
6793189777a2SCristian Pallares	        else
6794*b3fce824SCristian Pallarés		  func_fatal_error "'$arg' is not a valid libtool object"
6795189777a2SCristian Pallares		fi
6796189777a2SCristian Pallares	      fi
6797189777a2SCristian Pallares	    done
6798189777a2SCristian Pallares	  else
6799*b3fce824SCristian Pallarés	    func_fatal_error "link input file '$arg' does not exist"
6800189777a2SCristian Pallares	  fi
6801189777a2SCristian Pallares	  arg=$save_arg
6802189777a2SCristian Pallares	  prev=
6803189777a2SCristian Pallares	  continue
6804189777a2SCristian Pallares	  ;;
6805*b3fce824SCristian Pallarés	os2dllname)
6806*b3fce824SCristian Pallarés	  os2dllname=$arg
6807*b3fce824SCristian Pallarés	  prev=
6808*b3fce824SCristian Pallarés	  continue
6809*b3fce824SCristian Pallarés	  ;;
6810189777a2SCristian Pallares	precious_regex)
6811*b3fce824SCristian Pallarés	  precious_files_regex=$arg
6812189777a2SCristian Pallares	  prev=
6813189777a2SCristian Pallares	  continue
6814189777a2SCristian Pallares	  ;;
6815189777a2SCristian Pallares	release)
6816*b3fce824SCristian Pallarés	  release=-$arg
6817189777a2SCristian Pallares	  prev=
6818189777a2SCristian Pallares	  continue
6819189777a2SCristian Pallares	  ;;
6820189777a2SCristian Pallares	rpath | xrpath)
6821189777a2SCristian Pallares	  # We need an absolute path.
6822189777a2SCristian Pallares	  case $arg in
6823189777a2SCristian Pallares	  [\\/]* | [A-Za-z]:[\\/]*) ;;
6824189777a2SCristian Pallares	  *)
6825189777a2SCristian Pallares	    func_fatal_error "only absolute run-paths are allowed"
6826189777a2SCristian Pallares	    ;;
6827189777a2SCristian Pallares	  esac
6828*b3fce824SCristian Pallarés	  if test rpath = "$prev"; then
6829189777a2SCristian Pallares	    case "$rpath " in
6830189777a2SCristian Pallares	    *" $arg "*) ;;
6831189777a2SCristian Pallares	    *) func_append rpath " $arg" ;;
6832189777a2SCristian Pallares	    esac
6833189777a2SCristian Pallares	  else
6834189777a2SCristian Pallares	    case "$xrpath " in
6835189777a2SCristian Pallares	    *" $arg "*) ;;
6836189777a2SCristian Pallares	    *) func_append xrpath " $arg" ;;
6837189777a2SCristian Pallares	    esac
6838189777a2SCristian Pallares	  fi
6839189777a2SCristian Pallares	  prev=
6840189777a2SCristian Pallares	  continue
6841189777a2SCristian Pallares	  ;;
6842189777a2SCristian Pallares	shrext)
6843*b3fce824SCristian Pallarés	  shrext_cmds=$arg
6844189777a2SCristian Pallares	  prev=
6845189777a2SCristian Pallares	  continue
6846189777a2SCristian Pallares	  ;;
6847189777a2SCristian Pallares	weak)
6848189777a2SCristian Pallares	  func_append weak_libs " $arg"
6849189777a2SCristian Pallares	  prev=
6850189777a2SCristian Pallares	  continue
6851189777a2SCristian Pallares	  ;;
6852189777a2SCristian Pallares	xcclinker)
6853189777a2SCristian Pallares	  func_append linker_flags " $qarg"
6854189777a2SCristian Pallares	  func_append compiler_flags " $qarg"
6855189777a2SCristian Pallares	  prev=
6856189777a2SCristian Pallares	  func_append compile_command " $qarg"
6857189777a2SCristian Pallares	  func_append finalize_command " $qarg"
6858189777a2SCristian Pallares	  continue
6859189777a2SCristian Pallares	  ;;
6860189777a2SCristian Pallares	xcompiler)
6861189777a2SCristian Pallares	  func_append compiler_flags " $qarg"
6862189777a2SCristian Pallares	  prev=
6863189777a2SCristian Pallares	  func_append compile_command " $qarg"
6864189777a2SCristian Pallares	  func_append finalize_command " $qarg"
6865189777a2SCristian Pallares	  continue
6866189777a2SCristian Pallares	  ;;
6867189777a2SCristian Pallares	xlinker)
6868189777a2SCristian Pallares	  func_append linker_flags " $qarg"
6869189777a2SCristian Pallares	  func_append compiler_flags " $wl$qarg"
6870189777a2SCristian Pallares	  prev=
6871189777a2SCristian Pallares	  func_append compile_command " $wl$qarg"
6872189777a2SCristian Pallares	  func_append finalize_command " $wl$qarg"
6873189777a2SCristian Pallares	  continue
6874189777a2SCristian Pallares	  ;;
6875189777a2SCristian Pallares	*)
6876189777a2SCristian Pallares	  eval "$prev=\"\$arg\""
6877189777a2SCristian Pallares	  prev=
6878189777a2SCristian Pallares	  continue
6879189777a2SCristian Pallares	  ;;
6880189777a2SCristian Pallares	esac
6881189777a2SCristian Pallares      fi # test -n "$prev"
6882189777a2SCristian Pallares
6883*b3fce824SCristian Pallarés      prevarg=$arg
6884189777a2SCristian Pallares
6885189777a2SCristian Pallares      case $arg in
6886189777a2SCristian Pallares      -all-static)
6887189777a2SCristian Pallares	if test -n "$link_static_flag"; then
6888189777a2SCristian Pallares	  # See comment for -static flag below, for more details.
6889189777a2SCristian Pallares	  func_append compile_command " $link_static_flag"
6890189777a2SCristian Pallares	  func_append finalize_command " $link_static_flag"
6891189777a2SCristian Pallares	fi
6892189777a2SCristian Pallares	continue
6893189777a2SCristian Pallares	;;
6894189777a2SCristian Pallares
6895189777a2SCristian Pallares      -allow-undefined)
6896189777a2SCristian Pallares	# FIXME: remove this flag sometime in the future.
6897*b3fce824SCristian Pallarés	func_fatal_error "'-allow-undefined' must not be used because it is the default"
6898189777a2SCristian Pallares	;;
6899189777a2SCristian Pallares
6900189777a2SCristian Pallares      -avoid-version)
6901189777a2SCristian Pallares	avoid_version=yes
6902189777a2SCristian Pallares	continue
6903189777a2SCristian Pallares	;;
6904189777a2SCristian Pallares
6905189777a2SCristian Pallares      -bindir)
6906189777a2SCristian Pallares	prev=bindir
6907189777a2SCristian Pallares	continue
6908189777a2SCristian Pallares	;;
6909189777a2SCristian Pallares
6910189777a2SCristian Pallares      -dlopen)
6911189777a2SCristian Pallares	prev=dlfiles
6912189777a2SCristian Pallares	continue
6913189777a2SCristian Pallares	;;
6914189777a2SCristian Pallares
6915189777a2SCristian Pallares      -dlpreopen)
6916189777a2SCristian Pallares	prev=dlprefiles
6917189777a2SCristian Pallares	continue
6918189777a2SCristian Pallares	;;
6919189777a2SCristian Pallares
6920189777a2SCristian Pallares      -export-dynamic)
6921189777a2SCristian Pallares	export_dynamic=yes
6922189777a2SCristian Pallares	continue
6923189777a2SCristian Pallares	;;
6924189777a2SCristian Pallares
6925189777a2SCristian Pallares      -export-symbols | -export-symbols-regex)
6926189777a2SCristian Pallares	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
6927189777a2SCristian Pallares	  func_fatal_error "more than one -exported-symbols argument is not allowed"
6928189777a2SCristian Pallares	fi
6929*b3fce824SCristian Pallarés	if test X-export-symbols = "X$arg"; then
6930189777a2SCristian Pallares	  prev=expsyms
6931189777a2SCristian Pallares	else
6932189777a2SCristian Pallares	  prev=expsyms_regex
6933189777a2SCristian Pallares	fi
6934189777a2SCristian Pallares	continue
6935189777a2SCristian Pallares	;;
6936189777a2SCristian Pallares
6937189777a2SCristian Pallares      -framework)
6938189777a2SCristian Pallares	prev=framework
6939189777a2SCristian Pallares	continue
6940189777a2SCristian Pallares	;;
6941189777a2SCristian Pallares
6942189777a2SCristian Pallares      -inst-prefix-dir)
6943189777a2SCristian Pallares	prev=inst_prefix
6944189777a2SCristian Pallares	continue
6945189777a2SCristian Pallares	;;
6946189777a2SCristian Pallares
6947189777a2SCristian Pallares      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
6948189777a2SCristian Pallares      # so, if we see these flags be careful not to treat them like -L
6949189777a2SCristian Pallares      -L[A-Z][A-Z]*:*)
6950189777a2SCristian Pallares	case $with_gcc/$host in
6951189777a2SCristian Pallares	no/*-*-irix* | /*-*-irix*)
6952189777a2SCristian Pallares	  func_append compile_command " $arg"
6953189777a2SCristian Pallares	  func_append finalize_command " $arg"
6954189777a2SCristian Pallares	  ;;
6955189777a2SCristian Pallares	esac
6956189777a2SCristian Pallares	continue
6957189777a2SCristian Pallares	;;
6958189777a2SCristian Pallares
6959189777a2SCristian Pallares      -L*)
6960189777a2SCristian Pallares	func_stripname "-L" '' "$arg"
6961189777a2SCristian Pallares	if test -z "$func_stripname_result"; then
6962189777a2SCristian Pallares	  if test "$#" -gt 0; then
6963*b3fce824SCristian Pallarés	    func_fatal_error "require no space between '-L' and '$1'"
6964189777a2SCristian Pallares	  else
6965*b3fce824SCristian Pallarés	    func_fatal_error "need path for '-L' option"
6966189777a2SCristian Pallares	  fi
6967189777a2SCristian Pallares	fi
6968189777a2SCristian Pallares	func_resolve_sysroot "$func_stripname_result"
6969189777a2SCristian Pallares	dir=$func_resolve_sysroot_result
6970189777a2SCristian Pallares	# We need an absolute path.
6971189777a2SCristian Pallares	case $dir in
6972189777a2SCristian Pallares	[\\/]* | [A-Za-z]:[\\/]*) ;;
6973189777a2SCristian Pallares	*)
6974189777a2SCristian Pallares	  absdir=`cd "$dir" && pwd`
6975189777a2SCristian Pallares	  test -z "$absdir" && \
6976*b3fce824SCristian Pallarés	    func_fatal_error "cannot determine absolute directory name of '$dir'"
6977*b3fce824SCristian Pallarés	  dir=$absdir
6978189777a2SCristian Pallares	  ;;
6979189777a2SCristian Pallares	esac
6980189777a2SCristian Pallares	case "$deplibs " in
6981189777a2SCristian Pallares	*" -L$dir "* | *" $arg "*)
6982189777a2SCristian Pallares	  # Will only happen for absolute or sysroot arguments
6983189777a2SCristian Pallares	  ;;
6984189777a2SCristian Pallares	*)
6985189777a2SCristian Pallares	  # Preserve sysroot, but never include relative directories
6986189777a2SCristian Pallares	  case $dir in
6987189777a2SCristian Pallares	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
6988189777a2SCristian Pallares	    *) func_append deplibs " -L$dir" ;;
6989189777a2SCristian Pallares	  esac
6990189777a2SCristian Pallares	  func_append lib_search_path " $dir"
6991189777a2SCristian Pallares	  ;;
6992189777a2SCristian Pallares	esac
6993189777a2SCristian Pallares	case $host in
6994189777a2SCristian Pallares	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6995189777a2SCristian Pallares	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
6996189777a2SCristian Pallares	  case :$dllsearchpath: in
6997189777a2SCristian Pallares	  *":$dir:"*) ;;
6998189777a2SCristian Pallares	  ::) dllsearchpath=$dir;;
6999189777a2SCristian Pallares	  *) func_append dllsearchpath ":$dir";;
7000189777a2SCristian Pallares	  esac
7001189777a2SCristian Pallares	  case :$dllsearchpath: in
7002189777a2SCristian Pallares	  *":$testbindir:"*) ;;
7003189777a2SCristian Pallares	  ::) dllsearchpath=$testbindir;;
7004189777a2SCristian Pallares	  *) func_append dllsearchpath ":$testbindir";;
7005189777a2SCristian Pallares	  esac
7006189777a2SCristian Pallares	  ;;
7007189777a2SCristian Pallares	esac
7008189777a2SCristian Pallares	continue
7009189777a2SCristian Pallares	;;
7010189777a2SCristian Pallares
7011189777a2SCristian Pallares      -l*)
7012*b3fce824SCristian Pallarés	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7013189777a2SCristian Pallares	  case $host in
7014189777a2SCristian Pallares	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7015189777a2SCristian Pallares	    # These systems don't actually have a C or math library (as such)
7016189777a2SCristian Pallares	    continue
7017189777a2SCristian Pallares	    ;;
7018189777a2SCristian Pallares	  *-*-os2*)
7019189777a2SCristian Pallares	    # These systems don't actually have a C library (as such)
7020*b3fce824SCristian Pallarés	    test X-lc = "X$arg" && continue
7021189777a2SCristian Pallares	    ;;
7022*b3fce824SCristian Pallarés	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7023189777a2SCristian Pallares	    # Do not include libc due to us having libc/libc_r.
7024*b3fce824SCristian Pallarés	    test X-lc = "X$arg" && continue
7025189777a2SCristian Pallares	    ;;
7026189777a2SCristian Pallares	  *-*-rhapsody* | *-*-darwin1.[012])
7027189777a2SCristian Pallares	    # Rhapsody C and math libraries are in the System framework
7028189777a2SCristian Pallares	    func_append deplibs " System.ltframework"
7029189777a2SCristian Pallares	    continue
7030189777a2SCristian Pallares	    ;;
7031189777a2SCristian Pallares	  *-*-sco3.2v5* | *-*-sco5v6*)
7032189777a2SCristian Pallares	    # Causes problems with __ctype
7033*b3fce824SCristian Pallarés	    test X-lc = "X$arg" && continue
7034189777a2SCristian Pallares	    ;;
7035189777a2SCristian Pallares	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7036189777a2SCristian Pallares	    # Compiler inserts libc in the correct place for threads to work
7037*b3fce824SCristian Pallarés	    test X-lc = "X$arg" && continue
7038189777a2SCristian Pallares	    ;;
7039189777a2SCristian Pallares	  esac
7040*b3fce824SCristian Pallarés	elif test X-lc_r = "X$arg"; then
7041189777a2SCristian Pallares	 case $host in
7042*b3fce824SCristian Pallarés	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7043189777a2SCristian Pallares	   # Do not include libc_r directly, use -pthread flag.
7044189777a2SCristian Pallares	   continue
7045189777a2SCristian Pallares	   ;;
7046189777a2SCristian Pallares	 esac
7047189777a2SCristian Pallares	fi
7048189777a2SCristian Pallares	func_append deplibs " $arg"
7049189777a2SCristian Pallares	continue
7050189777a2SCristian Pallares	;;
7051189777a2SCristian Pallares
7052*b3fce824SCristian Pallarés      -mllvm)
7053*b3fce824SCristian Pallarés	prev=mllvm
7054*b3fce824SCristian Pallarés	continue
7055*b3fce824SCristian Pallarés	;;
7056*b3fce824SCristian Pallarés
7057189777a2SCristian Pallares      -module)
7058189777a2SCristian Pallares	module=yes
7059189777a2SCristian Pallares	continue
7060189777a2SCristian Pallares	;;
7061189777a2SCristian Pallares
7062189777a2SCristian Pallares      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7063189777a2SCristian Pallares      # classes, name mangling, and exception handling.
7064189777a2SCristian Pallares      # Darwin uses the -arch flag to determine output architecture.
7065189777a2SCristian Pallares      -model|-arch|-isysroot|--sysroot)
7066189777a2SCristian Pallares	func_append compiler_flags " $arg"
7067189777a2SCristian Pallares	func_append compile_command " $arg"
7068189777a2SCristian Pallares	func_append finalize_command " $arg"
7069189777a2SCristian Pallares	prev=xcompiler
7070189777a2SCristian Pallares	continue
7071189777a2SCristian Pallares	;;
7072189777a2SCristian Pallares
7073189777a2SCristian Pallares      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7074189777a2SCristian Pallares      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7075189777a2SCristian Pallares	func_append compiler_flags " $arg"
7076189777a2SCristian Pallares	func_append compile_command " $arg"
7077189777a2SCristian Pallares	func_append finalize_command " $arg"
7078189777a2SCristian Pallares	case "$new_inherited_linker_flags " in
7079189777a2SCristian Pallares	    *" $arg "*) ;;
7080189777a2SCristian Pallares	    * ) func_append new_inherited_linker_flags " $arg" ;;
7081189777a2SCristian Pallares	esac
7082189777a2SCristian Pallares	continue
7083189777a2SCristian Pallares	;;
7084189777a2SCristian Pallares
7085189777a2SCristian Pallares      -multi_module)
7086*b3fce824SCristian Pallarés	single_module=$wl-multi_module
7087189777a2SCristian Pallares	continue
7088189777a2SCristian Pallares	;;
7089189777a2SCristian Pallares
7090189777a2SCristian Pallares      -no-fast-install)
7091189777a2SCristian Pallares	fast_install=no
7092189777a2SCristian Pallares	continue
7093189777a2SCristian Pallares	;;
7094189777a2SCristian Pallares
7095189777a2SCristian Pallares      -no-install)
7096189777a2SCristian Pallares	case $host in
7097189777a2SCristian Pallares	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7098189777a2SCristian Pallares	  # The PATH hackery in wrapper scripts is required on Windows
7099189777a2SCristian Pallares	  # and Darwin in order for the loader to find any dlls it needs.
7100*b3fce824SCristian Pallarés	  func_warning "'-no-install' is ignored for $host"
7101*b3fce824SCristian Pallarés	  func_warning "assuming '-no-fast-install' instead"
7102189777a2SCristian Pallares	  fast_install=no
7103189777a2SCristian Pallares	  ;;
7104189777a2SCristian Pallares	*) no_install=yes ;;
7105189777a2SCristian Pallares	esac
7106189777a2SCristian Pallares	continue
7107189777a2SCristian Pallares	;;
7108189777a2SCristian Pallares
7109189777a2SCristian Pallares      -no-undefined)
7110189777a2SCristian Pallares	allow_undefined=no
7111189777a2SCristian Pallares	continue
7112189777a2SCristian Pallares	;;
7113189777a2SCristian Pallares
7114189777a2SCristian Pallares      -objectlist)
7115189777a2SCristian Pallares	prev=objectlist
7116189777a2SCristian Pallares	continue
7117189777a2SCristian Pallares	;;
7118189777a2SCristian Pallares
7119*b3fce824SCristian Pallarés      -os2dllname)
7120*b3fce824SCristian Pallarés	prev=os2dllname
7121*b3fce824SCristian Pallarés	continue
7122*b3fce824SCristian Pallarés	;;
7123*b3fce824SCristian Pallarés
7124189777a2SCristian Pallares      -o) prev=output ;;
7125189777a2SCristian Pallares
7126189777a2SCristian Pallares      -precious-files-regex)
7127189777a2SCristian Pallares	prev=precious_regex
7128189777a2SCristian Pallares	continue
7129189777a2SCristian Pallares	;;
7130189777a2SCristian Pallares
7131189777a2SCristian Pallares      -release)
7132189777a2SCristian Pallares	prev=release
7133189777a2SCristian Pallares	continue
7134189777a2SCristian Pallares	;;
7135189777a2SCristian Pallares
7136189777a2SCristian Pallares      -rpath)
7137189777a2SCristian Pallares	prev=rpath
7138189777a2SCristian Pallares	continue
7139189777a2SCristian Pallares	;;
7140189777a2SCristian Pallares
7141189777a2SCristian Pallares      -R)
7142189777a2SCristian Pallares	prev=xrpath
7143189777a2SCristian Pallares	continue
7144189777a2SCristian Pallares	;;
7145189777a2SCristian Pallares
7146189777a2SCristian Pallares      -R*)
7147189777a2SCristian Pallares	func_stripname '-R' '' "$arg"
7148189777a2SCristian Pallares	dir=$func_stripname_result
7149189777a2SCristian Pallares	# We need an absolute path.
7150189777a2SCristian Pallares	case $dir in
7151189777a2SCristian Pallares	[\\/]* | [A-Za-z]:[\\/]*) ;;
7152189777a2SCristian Pallares	=*)
7153189777a2SCristian Pallares	  func_stripname '=' '' "$dir"
7154189777a2SCristian Pallares	  dir=$lt_sysroot$func_stripname_result
7155189777a2SCristian Pallares	  ;;
7156189777a2SCristian Pallares	*)
7157189777a2SCristian Pallares	  func_fatal_error "only absolute run-paths are allowed"
7158189777a2SCristian Pallares	  ;;
7159189777a2SCristian Pallares	esac
7160189777a2SCristian Pallares	case "$xrpath " in
7161189777a2SCristian Pallares	*" $dir "*) ;;
7162189777a2SCristian Pallares	*) func_append xrpath " $dir" ;;
7163189777a2SCristian Pallares	esac
7164189777a2SCristian Pallares	continue
7165189777a2SCristian Pallares	;;
7166189777a2SCristian Pallares
7167189777a2SCristian Pallares      -shared)
7168189777a2SCristian Pallares	# The effects of -shared are defined in a previous loop.
7169189777a2SCristian Pallares	continue
7170189777a2SCristian Pallares	;;
7171189777a2SCristian Pallares
7172189777a2SCristian Pallares      -shrext)
7173189777a2SCristian Pallares	prev=shrext
7174189777a2SCristian Pallares	continue
7175189777a2SCristian Pallares	;;
7176189777a2SCristian Pallares
7177189777a2SCristian Pallares      -static | -static-libtool-libs)
7178189777a2SCristian Pallares	# The effects of -static are defined in a previous loop.
7179189777a2SCristian Pallares	# We used to do the same as -all-static on platforms that
7180189777a2SCristian Pallares	# didn't have a PIC flag, but the assumption that the effects
7181189777a2SCristian Pallares	# would be equivalent was wrong.  It would break on at least
7182189777a2SCristian Pallares	# Digital Unix and AIX.
7183189777a2SCristian Pallares	continue
7184189777a2SCristian Pallares	;;
7185189777a2SCristian Pallares
7186189777a2SCristian Pallares      -thread-safe)
7187189777a2SCristian Pallares	thread_safe=yes
7188189777a2SCristian Pallares	continue
7189189777a2SCristian Pallares	;;
7190189777a2SCristian Pallares
7191189777a2SCristian Pallares      -version-info)
7192189777a2SCristian Pallares	prev=vinfo
7193189777a2SCristian Pallares	continue
7194189777a2SCristian Pallares	;;
7195189777a2SCristian Pallares
7196189777a2SCristian Pallares      -version-number)
7197189777a2SCristian Pallares	prev=vinfo
7198189777a2SCristian Pallares	vinfo_number=yes
7199189777a2SCristian Pallares	continue
7200189777a2SCristian Pallares	;;
7201189777a2SCristian Pallares
7202189777a2SCristian Pallares      -weak)
7203189777a2SCristian Pallares        prev=weak
7204189777a2SCristian Pallares	continue
7205189777a2SCristian Pallares	;;
7206189777a2SCristian Pallares
7207189777a2SCristian Pallares      -Wc,*)
7208189777a2SCristian Pallares	func_stripname '-Wc,' '' "$arg"
7209189777a2SCristian Pallares	args=$func_stripname_result
7210189777a2SCristian Pallares	arg=
7211*b3fce824SCristian Pallarés	save_ifs=$IFS; IFS=,
7212189777a2SCristian Pallares	for flag in $args; do
7213*b3fce824SCristian Pallarés	  IFS=$save_ifs
7214189777a2SCristian Pallares          func_quote_for_eval "$flag"
7215189777a2SCristian Pallares	  func_append arg " $func_quote_for_eval_result"
7216189777a2SCristian Pallares	  func_append compiler_flags " $func_quote_for_eval_result"
7217189777a2SCristian Pallares	done
7218*b3fce824SCristian Pallarés	IFS=$save_ifs
7219189777a2SCristian Pallares	func_stripname ' ' '' "$arg"
7220189777a2SCristian Pallares	arg=$func_stripname_result
7221189777a2SCristian Pallares	;;
7222189777a2SCristian Pallares
7223189777a2SCristian Pallares      -Wl,*)
7224189777a2SCristian Pallares	func_stripname '-Wl,' '' "$arg"
7225189777a2SCristian Pallares	args=$func_stripname_result
7226189777a2SCristian Pallares	arg=
7227*b3fce824SCristian Pallarés	save_ifs=$IFS; IFS=,
7228189777a2SCristian Pallares	for flag in $args; do
7229*b3fce824SCristian Pallarés	  IFS=$save_ifs
7230189777a2SCristian Pallares          func_quote_for_eval "$flag"
7231189777a2SCristian Pallares	  func_append arg " $wl$func_quote_for_eval_result"
7232189777a2SCristian Pallares	  func_append compiler_flags " $wl$func_quote_for_eval_result"
7233189777a2SCristian Pallares	  func_append linker_flags " $func_quote_for_eval_result"
7234189777a2SCristian Pallares	done
7235*b3fce824SCristian Pallarés	IFS=$save_ifs
7236189777a2SCristian Pallares	func_stripname ' ' '' "$arg"
7237189777a2SCristian Pallares	arg=$func_stripname_result
7238189777a2SCristian Pallares	;;
7239189777a2SCristian Pallares
7240189777a2SCristian Pallares      -Xcompiler)
7241189777a2SCristian Pallares	prev=xcompiler
7242189777a2SCristian Pallares	continue
7243189777a2SCristian Pallares	;;
7244189777a2SCristian Pallares
7245189777a2SCristian Pallares      -Xlinker)
7246189777a2SCristian Pallares	prev=xlinker
7247189777a2SCristian Pallares	continue
7248189777a2SCristian Pallares	;;
7249189777a2SCristian Pallares
7250189777a2SCristian Pallares      -XCClinker)
7251189777a2SCristian Pallares	prev=xcclinker
7252189777a2SCristian Pallares	continue
7253189777a2SCristian Pallares	;;
7254189777a2SCristian Pallares
7255189777a2SCristian Pallares      # -msg_* for osf cc
7256189777a2SCristian Pallares      -msg_*)
7257189777a2SCristian Pallares	func_quote_for_eval "$arg"
7258*b3fce824SCristian Pallarés	arg=$func_quote_for_eval_result
7259189777a2SCristian Pallares	;;
7260189777a2SCristian Pallares
7261189777a2SCristian Pallares      # Flags to be passed through unchanged, with rationale:
7262189777a2SCristian Pallares      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7263189777a2SCristian Pallares      # -r[0-9][0-9]*        specify processor for the SGI compiler
7264189777a2SCristian Pallares      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7265189777a2SCristian Pallares      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7266189777a2SCristian Pallares      # -q*                  compiler args for the IBM compiler
7267189777a2SCristian Pallares      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7268189777a2SCristian Pallares      # -F/path              path to uninstalled frameworks, gcc on darwin
7269189777a2SCristian Pallares      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
7270*b3fce824SCristian Pallarés      # -fstack-protector*   stack protector flags for GCC
7271189777a2SCristian Pallares      # @file                GCC response files
7272189777a2SCristian Pallares      # -tp=*                Portland pgcc target processor selection
7273189777a2SCristian Pallares      # --sysroot=*          for sysroot support
7274*b3fce824SCristian Pallarés      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7275*b3fce824SCristian Pallarés      # -specs=*             GCC specs files
7276*b3fce824SCristian Pallarés      # -stdlib=*            select c++ std lib with clang
7277*b3fce824SCristian Pallarés      # -fsanitize=*         Clang/GCC memory and address sanitizer
7278189777a2SCristian Pallares      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7279189777a2SCristian Pallares      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7280*b3fce824SCristian Pallarés      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
7281*b3fce824SCristian Pallarés      -specs=*|-fsanitize=*)
7282189777a2SCristian Pallares        func_quote_for_eval "$arg"
7283*b3fce824SCristian Pallarés	arg=$func_quote_for_eval_result
7284189777a2SCristian Pallares        func_append compile_command " $arg"
7285189777a2SCristian Pallares        func_append finalize_command " $arg"
7286189777a2SCristian Pallares        func_append compiler_flags " $arg"
7287189777a2SCristian Pallares        continue
7288189777a2SCristian Pallares        ;;
7289189777a2SCristian Pallares
7290*b3fce824SCristian Pallarés      -Z*)
7291*b3fce824SCristian Pallarés        if test os2 = "`expr $host : '.*\(os2\)'`"; then
7292*b3fce824SCristian Pallarés          # OS/2 uses -Zxxx to specify OS/2-specific options
7293*b3fce824SCristian Pallarés	  compiler_flags="$compiler_flags $arg"
7294*b3fce824SCristian Pallarés	  func_append compile_command " $arg"
7295*b3fce824SCristian Pallarés	  func_append finalize_command " $arg"
7296*b3fce824SCristian Pallarés	  case $arg in
7297*b3fce824SCristian Pallarés	  -Zlinker | -Zstack)
7298*b3fce824SCristian Pallarés	    prev=xcompiler
7299*b3fce824SCristian Pallarés	    ;;
7300*b3fce824SCristian Pallarés	  esac
7301*b3fce824SCristian Pallarés	  continue
7302*b3fce824SCristian Pallarés        else
7303*b3fce824SCristian Pallarés	  # Otherwise treat like 'Some other compiler flag' below
7304*b3fce824SCristian Pallarés	  func_quote_for_eval "$arg"
7305*b3fce824SCristian Pallarés	  arg=$func_quote_for_eval_result
7306*b3fce824SCristian Pallarés        fi
7307*b3fce824SCristian Pallarés	;;
7308*b3fce824SCristian Pallarés
7309189777a2SCristian Pallares      # Some other compiler flag.
7310189777a2SCristian Pallares      -* | +*)
7311189777a2SCristian Pallares        func_quote_for_eval "$arg"
7312*b3fce824SCristian Pallarés	arg=$func_quote_for_eval_result
7313189777a2SCristian Pallares	;;
7314189777a2SCristian Pallares
7315189777a2SCristian Pallares      *.$objext)
7316189777a2SCristian Pallares	# A standard object.
7317189777a2SCristian Pallares	func_append objs " $arg"
7318189777a2SCristian Pallares	;;
7319189777a2SCristian Pallares
7320189777a2SCristian Pallares      *.lo)
7321189777a2SCristian Pallares	# A libtool-controlled object.
7322189777a2SCristian Pallares
7323189777a2SCristian Pallares	# Check to see that this really is a libtool object.
7324189777a2SCristian Pallares	if func_lalib_unsafe_p "$arg"; then
7325189777a2SCristian Pallares	  pic_object=
7326189777a2SCristian Pallares	  non_pic_object=
7327189777a2SCristian Pallares
7328189777a2SCristian Pallares	  # Read the .lo file
7329189777a2SCristian Pallares	  func_source "$arg"
7330189777a2SCristian Pallares
7331189777a2SCristian Pallares	  if test -z "$pic_object" ||
7332189777a2SCristian Pallares	     test -z "$non_pic_object" ||
7333*b3fce824SCristian Pallarés	     test none = "$pic_object" &&
7334*b3fce824SCristian Pallarés	     test none = "$non_pic_object"; then
7335*b3fce824SCristian Pallarés	    func_fatal_error "cannot find name of object for '$arg'"
7336189777a2SCristian Pallares	  fi
7337189777a2SCristian Pallares
7338189777a2SCristian Pallares	  # Extract subdirectory from the argument.
7339189777a2SCristian Pallares	  func_dirname "$arg" "/" ""
7340*b3fce824SCristian Pallarés	  xdir=$func_dirname_result
7341189777a2SCristian Pallares
7342*b3fce824SCristian Pallarés	  test none = "$pic_object" || {
7343189777a2SCristian Pallares	    # Prepend the subdirectory the object is found in.
7344*b3fce824SCristian Pallarés	    pic_object=$xdir$pic_object
7345189777a2SCristian Pallares
7346*b3fce824SCristian Pallarés	    if test dlfiles = "$prev"; then
7347*b3fce824SCristian Pallarés	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7348189777a2SCristian Pallares		func_append dlfiles " $pic_object"
7349189777a2SCristian Pallares		prev=
7350189777a2SCristian Pallares		continue
7351189777a2SCristian Pallares	      else
7352189777a2SCristian Pallares		# If libtool objects are unsupported, then we need to preload.
7353189777a2SCristian Pallares		prev=dlprefiles
7354189777a2SCristian Pallares	      fi
7355189777a2SCristian Pallares	    fi
7356189777a2SCristian Pallares
7357189777a2SCristian Pallares	    # CHECK ME:  I think I busted this.  -Ossama
7358*b3fce824SCristian Pallarés	    if test dlprefiles = "$prev"; then
7359189777a2SCristian Pallares	      # Preload the old-style object.
7360189777a2SCristian Pallares	      func_append dlprefiles " $pic_object"
7361189777a2SCristian Pallares	      prev=
7362189777a2SCristian Pallares	    fi
7363189777a2SCristian Pallares
7364189777a2SCristian Pallares	    # A PIC object.
7365189777a2SCristian Pallares	    func_append libobjs " $pic_object"
7366*b3fce824SCristian Pallarés	    arg=$pic_object
7367*b3fce824SCristian Pallarés	  }
7368189777a2SCristian Pallares
7369189777a2SCristian Pallares	  # Non-PIC object.
7370*b3fce824SCristian Pallarés	  if test none != "$non_pic_object"; then
7371189777a2SCristian Pallares	    # Prepend the subdirectory the object is found in.
7372*b3fce824SCristian Pallarés	    non_pic_object=$xdir$non_pic_object
7373189777a2SCristian Pallares
7374189777a2SCristian Pallares	    # A standard non-PIC object
7375189777a2SCristian Pallares	    func_append non_pic_objects " $non_pic_object"
7376*b3fce824SCristian Pallarés	    if test -z "$pic_object" || test none = "$pic_object"; then
7377*b3fce824SCristian Pallarés	      arg=$non_pic_object
7378189777a2SCristian Pallares	    fi
7379189777a2SCristian Pallares	  else
7380189777a2SCristian Pallares	    # If the PIC object exists, use it instead.
7381189777a2SCristian Pallares	    # $xdir was prepended to $pic_object above.
7382*b3fce824SCristian Pallarés	    non_pic_object=$pic_object
7383189777a2SCristian Pallares	    func_append non_pic_objects " $non_pic_object"
7384189777a2SCristian Pallares	  fi
7385189777a2SCristian Pallares	else
7386189777a2SCristian Pallares	  # Only an error if not doing a dry-run.
7387189777a2SCristian Pallares	  if $opt_dry_run; then
7388189777a2SCristian Pallares	    # Extract subdirectory from the argument.
7389189777a2SCristian Pallares	    func_dirname "$arg" "/" ""
7390*b3fce824SCristian Pallarés	    xdir=$func_dirname_result
7391189777a2SCristian Pallares
7392189777a2SCristian Pallares	    func_lo2o "$arg"
7393189777a2SCristian Pallares	    pic_object=$xdir$objdir/$func_lo2o_result
7394189777a2SCristian Pallares	    non_pic_object=$xdir$func_lo2o_result
7395189777a2SCristian Pallares	    func_append libobjs " $pic_object"
7396189777a2SCristian Pallares	    func_append non_pic_objects " $non_pic_object"
7397189777a2SCristian Pallares	  else
7398*b3fce824SCristian Pallarés	    func_fatal_error "'$arg' is not a valid libtool object"
7399189777a2SCristian Pallares	  fi
7400189777a2SCristian Pallares	fi
7401189777a2SCristian Pallares	;;
7402189777a2SCristian Pallares
7403189777a2SCristian Pallares      *.$libext)
7404189777a2SCristian Pallares	# An archive.
7405189777a2SCristian Pallares	func_append deplibs " $arg"
7406189777a2SCristian Pallares	func_append old_deplibs " $arg"
7407189777a2SCristian Pallares	continue
7408189777a2SCristian Pallares	;;
7409189777a2SCristian Pallares
7410189777a2SCristian Pallares      *.la)
7411189777a2SCristian Pallares	# A libtool-controlled library.
7412189777a2SCristian Pallares
7413189777a2SCristian Pallares	func_resolve_sysroot "$arg"
7414*b3fce824SCristian Pallarés	if test dlfiles = "$prev"; then
7415189777a2SCristian Pallares	  # This library was specified with -dlopen.
7416189777a2SCristian Pallares	  func_append dlfiles " $func_resolve_sysroot_result"
7417189777a2SCristian Pallares	  prev=
7418*b3fce824SCristian Pallarés	elif test dlprefiles = "$prev"; then
7419189777a2SCristian Pallares	  # The library was specified with -dlpreopen.
7420189777a2SCristian Pallares	  func_append dlprefiles " $func_resolve_sysroot_result"
7421189777a2SCristian Pallares	  prev=
7422189777a2SCristian Pallares	else
7423189777a2SCristian Pallares	  func_append deplibs " $func_resolve_sysroot_result"
7424189777a2SCristian Pallares	fi
7425189777a2SCristian Pallares	continue
7426189777a2SCristian Pallares	;;
7427189777a2SCristian Pallares
7428189777a2SCristian Pallares      # Some other compiler argument.
7429189777a2SCristian Pallares      *)
7430189777a2SCristian Pallares	# Unknown arguments in both finalize_command and compile_command need
7431189777a2SCristian Pallares	# to be aesthetically quoted because they are evaled later.
7432189777a2SCristian Pallares	func_quote_for_eval "$arg"
7433*b3fce824SCristian Pallarés	arg=$func_quote_for_eval_result
7434189777a2SCristian Pallares	;;
7435189777a2SCristian Pallares      esac # arg
7436189777a2SCristian Pallares
7437189777a2SCristian Pallares      # Now actually substitute the argument into the commands.
7438189777a2SCristian Pallares      if test -n "$arg"; then
7439189777a2SCristian Pallares	func_append compile_command " $arg"
7440189777a2SCristian Pallares	func_append finalize_command " $arg"
7441189777a2SCristian Pallares      fi
7442189777a2SCristian Pallares    done # argument parsing loop
7443189777a2SCristian Pallares
7444189777a2SCristian Pallares    test -n "$prev" && \
7445*b3fce824SCristian Pallarés      func_fatal_help "the '$prevarg' option requires an argument"
7446189777a2SCristian Pallares
7447*b3fce824SCristian Pallarés    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7448189777a2SCristian Pallares      eval arg=\"$export_dynamic_flag_spec\"
7449189777a2SCristian Pallares      func_append compile_command " $arg"
7450189777a2SCristian Pallares      func_append finalize_command " $arg"
7451189777a2SCristian Pallares    fi
7452189777a2SCristian Pallares
7453189777a2SCristian Pallares    oldlibs=
7454189777a2SCristian Pallares    # calculate the name of the file, without its directory
7455189777a2SCristian Pallares    func_basename "$output"
7456*b3fce824SCristian Pallarés    outputname=$func_basename_result
7457*b3fce824SCristian Pallarés    libobjs_save=$libobjs
7458189777a2SCristian Pallares
7459189777a2SCristian Pallares    if test -n "$shlibpath_var"; then
7460189777a2SCristian Pallares      # get the directories listed in $shlibpath_var
7461*b3fce824SCristian Pallarés      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7462189777a2SCristian Pallares    else
7463189777a2SCristian Pallares      shlib_search_path=
7464189777a2SCristian Pallares    fi
7465189777a2SCristian Pallares    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7466189777a2SCristian Pallares    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7467189777a2SCristian Pallares
7468*b3fce824SCristian Pallarés    # Definition is injected by LT_CONFIG during libtool generation.
7469*b3fce824SCristian Pallarés    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7470*b3fce824SCristian Pallarés
7471189777a2SCristian Pallares    func_dirname "$output" "/" ""
7472*b3fce824SCristian Pallarés    output_objdir=$func_dirname_result$objdir
7473189777a2SCristian Pallares    func_to_tool_file "$output_objdir/"
7474189777a2SCristian Pallares    tool_output_objdir=$func_to_tool_file_result
7475189777a2SCristian Pallares    # Create the object directory.
7476189777a2SCristian Pallares    func_mkdir_p "$output_objdir"
7477189777a2SCristian Pallares
7478189777a2SCristian Pallares    # Determine the type of output
7479189777a2SCristian Pallares    case $output in
7480189777a2SCristian Pallares    "")
7481189777a2SCristian Pallares      func_fatal_help "you must specify an output file"
7482189777a2SCristian Pallares      ;;
7483189777a2SCristian Pallares    *.$libext) linkmode=oldlib ;;
7484189777a2SCristian Pallares    *.lo | *.$objext) linkmode=obj ;;
7485189777a2SCristian Pallares    *.la) linkmode=lib ;;
7486189777a2SCristian Pallares    *) linkmode=prog ;; # Anything else should be a program.
7487189777a2SCristian Pallares    esac
7488189777a2SCristian Pallares
7489189777a2SCristian Pallares    specialdeplibs=
7490189777a2SCristian Pallares
7491189777a2SCristian Pallares    libs=
7492189777a2SCristian Pallares    # Find all interdependent deplibs by searching for libraries
7493189777a2SCristian Pallares    # that are linked more than once (e.g. -la -lb -la)
7494189777a2SCristian Pallares    for deplib in $deplibs; do
7495189777a2SCristian Pallares      if $opt_preserve_dup_deps; then
7496189777a2SCristian Pallares	case "$libs " in
7497189777a2SCristian Pallares	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7498189777a2SCristian Pallares	esac
7499189777a2SCristian Pallares      fi
7500189777a2SCristian Pallares      func_append libs " $deplib"
7501189777a2SCristian Pallares    done
7502189777a2SCristian Pallares
7503*b3fce824SCristian Pallarés    if test lib = "$linkmode"; then
7504189777a2SCristian Pallares      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7505189777a2SCristian Pallares
7506189777a2SCristian Pallares      # Compute libraries that are listed more than once in $predeps
7507189777a2SCristian Pallares      # $postdeps and mark them as special (i.e., whose duplicates are
7508189777a2SCristian Pallares      # not to be eliminated).
7509189777a2SCristian Pallares      pre_post_deps=
7510189777a2SCristian Pallares      if $opt_duplicate_compiler_generated_deps; then
7511189777a2SCristian Pallares	for pre_post_dep in $predeps $postdeps; do
7512189777a2SCristian Pallares	  case "$pre_post_deps " in
7513189777a2SCristian Pallares	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7514189777a2SCristian Pallares	  esac
7515189777a2SCristian Pallares	  func_append pre_post_deps " $pre_post_dep"
7516189777a2SCristian Pallares	done
7517189777a2SCristian Pallares      fi
7518189777a2SCristian Pallares      pre_post_deps=
7519189777a2SCristian Pallares    fi
7520189777a2SCristian Pallares
7521189777a2SCristian Pallares    deplibs=
7522189777a2SCristian Pallares    newdependency_libs=
7523189777a2SCristian Pallares    newlib_search_path=
7524189777a2SCristian Pallares    need_relink=no # whether we're linking any uninstalled libtool libraries
7525189777a2SCristian Pallares    notinst_deplibs= # not-installed libtool libraries
7526189777a2SCristian Pallares    notinst_path= # paths that contain not-installed libtool libraries
7527189777a2SCristian Pallares
7528189777a2SCristian Pallares    case $linkmode in
7529189777a2SCristian Pallares    lib)
7530189777a2SCristian Pallares	passes="conv dlpreopen link"
7531189777a2SCristian Pallares	for file in $dlfiles $dlprefiles; do
7532189777a2SCristian Pallares	  case $file in
7533189777a2SCristian Pallares	  *.la) ;;
7534189777a2SCristian Pallares	  *)
7535*b3fce824SCristian Pallarés	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7536189777a2SCristian Pallares	    ;;
7537189777a2SCristian Pallares	  esac
7538189777a2SCristian Pallares	done
7539189777a2SCristian Pallares	;;
7540189777a2SCristian Pallares    prog)
7541189777a2SCristian Pallares	compile_deplibs=
7542189777a2SCristian Pallares	finalize_deplibs=
7543*b3fce824SCristian Pallarés	alldeplibs=false
7544189777a2SCristian Pallares	newdlfiles=
7545189777a2SCristian Pallares	newdlprefiles=
7546189777a2SCristian Pallares	passes="conv scan dlopen dlpreopen link"
7547189777a2SCristian Pallares	;;
7548189777a2SCristian Pallares    *)  passes="conv"
7549189777a2SCristian Pallares	;;
7550189777a2SCristian Pallares    esac
7551189777a2SCristian Pallares
7552189777a2SCristian Pallares    for pass in $passes; do
7553189777a2SCristian Pallares      # The preopen pass in lib mode reverses $deplibs; put it back here
7554189777a2SCristian Pallares      # so that -L comes before libs that need it for instance...
7555*b3fce824SCristian Pallarés      if test lib,link = "$linkmode,$pass"; then
7556189777a2SCristian Pallares	## FIXME: Find the place where the list is rebuilt in the wrong
7557189777a2SCristian Pallares	##        order, and fix it there properly
7558189777a2SCristian Pallares        tmp_deplibs=
7559189777a2SCristian Pallares	for deplib in $deplibs; do
7560189777a2SCristian Pallares	  tmp_deplibs="$deplib $tmp_deplibs"
7561189777a2SCristian Pallares	done
7562*b3fce824SCristian Pallarés	deplibs=$tmp_deplibs
7563189777a2SCristian Pallares      fi
7564189777a2SCristian Pallares
7565*b3fce824SCristian Pallarés      if test lib,link = "$linkmode,$pass" ||
7566*b3fce824SCristian Pallarés	 test prog,scan = "$linkmode,$pass"; then
7567*b3fce824SCristian Pallarés	libs=$deplibs
7568189777a2SCristian Pallares	deplibs=
7569189777a2SCristian Pallares      fi
7570*b3fce824SCristian Pallarés      if test prog = "$linkmode"; then
7571189777a2SCristian Pallares	case $pass in
7572*b3fce824SCristian Pallarés	dlopen) libs=$dlfiles ;;
7573*b3fce824SCristian Pallarés	dlpreopen) libs=$dlprefiles ;;
7574189777a2SCristian Pallares	link)
7575189777a2SCristian Pallares	  libs="$deplibs %DEPLIBS%"
7576189777a2SCristian Pallares	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
7577189777a2SCristian Pallares	  ;;
7578189777a2SCristian Pallares	esac
7579189777a2SCristian Pallares      fi
7580*b3fce824SCristian Pallarés      if test lib,dlpreopen = "$linkmode,$pass"; then
7581189777a2SCristian Pallares	# Collect and forward deplibs of preopened libtool libs
7582189777a2SCristian Pallares	for lib in $dlprefiles; do
7583189777a2SCristian Pallares	  # Ignore non-libtool-libs
7584189777a2SCristian Pallares	  dependency_libs=
7585189777a2SCristian Pallares	  func_resolve_sysroot "$lib"
7586189777a2SCristian Pallares	  case $lib in
7587189777a2SCristian Pallares	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7588189777a2SCristian Pallares	  esac
7589189777a2SCristian Pallares
7590189777a2SCristian Pallares	  # Collect preopened libtool deplibs, except any this library
7591189777a2SCristian Pallares	  # has declared as weak libs
7592189777a2SCristian Pallares	  for deplib in $dependency_libs; do
7593189777a2SCristian Pallares	    func_basename "$deplib"
7594189777a2SCristian Pallares            deplib_base=$func_basename_result
7595189777a2SCristian Pallares	    case " $weak_libs " in
7596189777a2SCristian Pallares	    *" $deplib_base "*) ;;
7597189777a2SCristian Pallares	    *) func_append deplibs " $deplib" ;;
7598189777a2SCristian Pallares	    esac
7599189777a2SCristian Pallares	  done
7600189777a2SCristian Pallares	done
7601*b3fce824SCristian Pallarés	libs=$dlprefiles
7602189777a2SCristian Pallares      fi
7603*b3fce824SCristian Pallarés      if test dlopen = "$pass"; then
7604189777a2SCristian Pallares	# Collect dlpreopened libraries
7605*b3fce824SCristian Pallarés	save_deplibs=$deplibs
7606189777a2SCristian Pallares	deplibs=
7607189777a2SCristian Pallares      fi
7608189777a2SCristian Pallares
7609189777a2SCristian Pallares      for deplib in $libs; do
7610189777a2SCristian Pallares	lib=
7611*b3fce824SCristian Pallarés	found=false
7612189777a2SCristian Pallares	case $deplib in
7613189777a2SCristian Pallares	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7614189777a2SCristian Pallares        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7615*b3fce824SCristian Pallarés	  if test prog,link = "$linkmode,$pass"; then
7616189777a2SCristian Pallares	    compile_deplibs="$deplib $compile_deplibs"
7617189777a2SCristian Pallares	    finalize_deplibs="$deplib $finalize_deplibs"
7618189777a2SCristian Pallares	  else
7619189777a2SCristian Pallares	    func_append compiler_flags " $deplib"
7620*b3fce824SCristian Pallarés	    if test lib = "$linkmode"; then
7621189777a2SCristian Pallares		case "$new_inherited_linker_flags " in
7622189777a2SCristian Pallares		    *" $deplib "*) ;;
7623189777a2SCristian Pallares		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7624189777a2SCristian Pallares		esac
7625189777a2SCristian Pallares	    fi
7626189777a2SCristian Pallares	  fi
7627189777a2SCristian Pallares	  continue
7628189777a2SCristian Pallares	  ;;
7629189777a2SCristian Pallares	-l*)
7630*b3fce824SCristian Pallarés	  if test lib != "$linkmode" && test prog != "$linkmode"; then
7631*b3fce824SCristian Pallarés	    func_warning "'-l' is ignored for archives/objects"
7632189777a2SCristian Pallares	    continue
7633189777a2SCristian Pallares	  fi
7634189777a2SCristian Pallares	  func_stripname '-l' '' "$deplib"
7635189777a2SCristian Pallares	  name=$func_stripname_result
7636*b3fce824SCristian Pallarés	  if test lib = "$linkmode"; then
7637189777a2SCristian Pallares	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7638189777a2SCristian Pallares	  else
7639189777a2SCristian Pallares	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7640189777a2SCristian Pallares	  fi
7641189777a2SCristian Pallares	  for searchdir in $searchdirs; do
7642189777a2SCristian Pallares	    for search_ext in .la $std_shrext .so .a; do
7643189777a2SCristian Pallares	      # Search the libtool library
7644*b3fce824SCristian Pallarés	      lib=$searchdir/lib$name$search_ext
7645189777a2SCristian Pallares	      if test -f "$lib"; then
7646*b3fce824SCristian Pallarés		if test .la = "$search_ext"; then
7647*b3fce824SCristian Pallarés		  found=:
7648189777a2SCristian Pallares		else
7649*b3fce824SCristian Pallarés		  found=false
7650189777a2SCristian Pallares		fi
7651189777a2SCristian Pallares		break 2
7652189777a2SCristian Pallares	      fi
7653189777a2SCristian Pallares	    done
7654189777a2SCristian Pallares	  done
7655*b3fce824SCristian Pallarés	  if $found; then
7656*b3fce824SCristian Pallarés	    # deplib is a libtool library
7657189777a2SCristian Pallares	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7658189777a2SCristian Pallares	    # We need to do some special things here, and not later.
7659*b3fce824SCristian Pallarés	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7660189777a2SCristian Pallares	      case " $predeps $postdeps " in
7661189777a2SCristian Pallares	      *" $deplib "*)
7662189777a2SCristian Pallares		if func_lalib_p "$lib"; then
7663189777a2SCristian Pallares		  library_names=
7664189777a2SCristian Pallares		  old_library=
7665189777a2SCristian Pallares		  func_source "$lib"
7666189777a2SCristian Pallares		  for l in $old_library $library_names; do
7667*b3fce824SCristian Pallarés		    ll=$l
7668189777a2SCristian Pallares		  done
7669189777a2SCristian Pallares		  if test "X$ll" = "X$old_library"; then # only static version available
7670*b3fce824SCristian Pallarés		    found=false
7671189777a2SCristian Pallares		    func_dirname "$lib" "" "."
7672*b3fce824SCristian Pallarés		    ladir=$func_dirname_result
7673189777a2SCristian Pallares		    lib=$ladir/$old_library
7674*b3fce824SCristian Pallarés		    if test prog,link = "$linkmode,$pass"; then
7675189777a2SCristian Pallares		      compile_deplibs="$deplib $compile_deplibs"
7676189777a2SCristian Pallares		      finalize_deplibs="$deplib $finalize_deplibs"
7677189777a2SCristian Pallares		    else
7678189777a2SCristian Pallares		      deplibs="$deplib $deplibs"
7679*b3fce824SCristian Pallarés		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7680189777a2SCristian Pallares		    fi
7681189777a2SCristian Pallares		    continue
7682189777a2SCristian Pallares		  fi
7683189777a2SCristian Pallares		fi
7684189777a2SCristian Pallares		;;
7685189777a2SCristian Pallares	      *) ;;
7686189777a2SCristian Pallares	      esac
7687189777a2SCristian Pallares	    fi
7688*b3fce824SCristian Pallarés	  else
7689*b3fce824SCristian Pallarés	    # deplib doesn't seem to be a libtool library
7690*b3fce824SCristian Pallarés	    if test prog,link = "$linkmode,$pass"; then
7691189777a2SCristian Pallares	      compile_deplibs="$deplib $compile_deplibs"
7692189777a2SCristian Pallares	      finalize_deplibs="$deplib $finalize_deplibs"
7693189777a2SCristian Pallares	    else
7694189777a2SCristian Pallares	      deplibs="$deplib $deplibs"
7695*b3fce824SCristian Pallarés	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7696*b3fce824SCristian Pallarés	    fi
7697*b3fce824SCristian Pallarés	    continue
7698*b3fce824SCristian Pallarés	  fi
7699*b3fce824SCristian Pallarés	  ;; # -l
7700*b3fce824SCristian Pallarés	*.ltframework)
7701*b3fce824SCristian Pallarés	  if test prog,link = "$linkmode,$pass"; then
7702*b3fce824SCristian Pallarés	    compile_deplibs="$deplib $compile_deplibs"
7703*b3fce824SCristian Pallarés	    finalize_deplibs="$deplib $finalize_deplibs"
7704*b3fce824SCristian Pallarés	  else
7705*b3fce824SCristian Pallarés	    deplibs="$deplib $deplibs"
7706*b3fce824SCristian Pallarés	    if test lib = "$linkmode"; then
7707189777a2SCristian Pallares		case "$new_inherited_linker_flags " in
7708189777a2SCristian Pallares		    *" $deplib "*) ;;
7709189777a2SCristian Pallares		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7710189777a2SCristian Pallares		esac
7711189777a2SCristian Pallares	    fi
7712189777a2SCristian Pallares	  fi
7713189777a2SCristian Pallares	  continue
7714189777a2SCristian Pallares	  ;;
7715189777a2SCristian Pallares	-L*)
7716189777a2SCristian Pallares	  case $linkmode in
7717189777a2SCristian Pallares	  lib)
7718189777a2SCristian Pallares	    deplibs="$deplib $deplibs"
7719*b3fce824SCristian Pallarés	    test conv = "$pass" && continue
7720189777a2SCristian Pallares	    newdependency_libs="$deplib $newdependency_libs"
7721189777a2SCristian Pallares	    func_stripname '-L' '' "$deplib"
7722189777a2SCristian Pallares	    func_resolve_sysroot "$func_stripname_result"
7723189777a2SCristian Pallares	    func_append newlib_search_path " $func_resolve_sysroot_result"
7724189777a2SCristian Pallares	    ;;
7725189777a2SCristian Pallares	  prog)
7726*b3fce824SCristian Pallarés	    if test conv = "$pass"; then
7727189777a2SCristian Pallares	      deplibs="$deplib $deplibs"
7728189777a2SCristian Pallares	      continue
7729189777a2SCristian Pallares	    fi
7730*b3fce824SCristian Pallarés	    if test scan = "$pass"; then
7731189777a2SCristian Pallares	      deplibs="$deplib $deplibs"
7732189777a2SCristian Pallares	    else
7733189777a2SCristian Pallares	      compile_deplibs="$deplib $compile_deplibs"
7734189777a2SCristian Pallares	      finalize_deplibs="$deplib $finalize_deplibs"
7735189777a2SCristian Pallares	    fi
7736189777a2SCristian Pallares	    func_stripname '-L' '' "$deplib"
7737189777a2SCristian Pallares	    func_resolve_sysroot "$func_stripname_result"
7738189777a2SCristian Pallares	    func_append newlib_search_path " $func_resolve_sysroot_result"
7739189777a2SCristian Pallares	    ;;
7740189777a2SCristian Pallares	  *)
7741*b3fce824SCristian Pallarés	    func_warning "'-L' is ignored for archives/objects"
7742189777a2SCristian Pallares	    ;;
7743189777a2SCristian Pallares	  esac # linkmode
7744189777a2SCristian Pallares	  continue
7745189777a2SCristian Pallares	  ;; # -L
7746189777a2SCristian Pallares	-R*)
7747*b3fce824SCristian Pallarés	  if test link = "$pass"; then
7748189777a2SCristian Pallares	    func_stripname '-R' '' "$deplib"
7749189777a2SCristian Pallares	    func_resolve_sysroot "$func_stripname_result"
7750189777a2SCristian Pallares	    dir=$func_resolve_sysroot_result
7751189777a2SCristian Pallares	    # Make sure the xrpath contains only unique directories.
7752189777a2SCristian Pallares	    case "$xrpath " in
7753189777a2SCristian Pallares	    *" $dir "*) ;;
7754189777a2SCristian Pallares	    *) func_append xrpath " $dir" ;;
7755189777a2SCristian Pallares	    esac
7756189777a2SCristian Pallares	  fi
7757189777a2SCristian Pallares	  deplibs="$deplib $deplibs"
7758189777a2SCristian Pallares	  continue
7759189777a2SCristian Pallares	  ;;
7760189777a2SCristian Pallares	*.la)
7761189777a2SCristian Pallares	  func_resolve_sysroot "$deplib"
7762189777a2SCristian Pallares	  lib=$func_resolve_sysroot_result
7763189777a2SCristian Pallares	  ;;
7764189777a2SCristian Pallares	*.$libext)
7765*b3fce824SCristian Pallarés	  if test conv = "$pass"; then
7766189777a2SCristian Pallares	    deplibs="$deplib $deplibs"
7767189777a2SCristian Pallares	    continue
7768189777a2SCristian Pallares	  fi
7769189777a2SCristian Pallares	  case $linkmode in
7770189777a2SCristian Pallares	  lib)
7771189777a2SCristian Pallares	    # Linking convenience modules into shared libraries is allowed,
7772189777a2SCristian Pallares	    # but linking other static libraries is non-portable.
7773189777a2SCristian Pallares	    case " $dlpreconveniencelibs " in
7774189777a2SCristian Pallares	    *" $deplib "*) ;;
7775189777a2SCristian Pallares	    *)
7776*b3fce824SCristian Pallarés	      valid_a_lib=false
7777189777a2SCristian Pallares	      case $deplibs_check_method in
7778189777a2SCristian Pallares		match_pattern*)
7779189777a2SCristian Pallares		  set dummy $deplibs_check_method; shift
7780189777a2SCristian Pallares		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7781189777a2SCristian Pallares		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7782189777a2SCristian Pallares		    | $EGREP "$match_pattern_regex" > /dev/null; then
7783*b3fce824SCristian Pallarés		    valid_a_lib=:
7784189777a2SCristian Pallares		  fi
7785189777a2SCristian Pallares		;;
7786189777a2SCristian Pallares		pass_all)
7787*b3fce824SCristian Pallarés		  valid_a_lib=:
7788189777a2SCristian Pallares		;;
7789189777a2SCristian Pallares	      esac
7790*b3fce824SCristian Pallarés	      if $valid_a_lib; then
7791*b3fce824SCristian Pallarés		echo
7792*b3fce824SCristian Pallarés		$ECHO "*** Warning: Linking the shared library $output against the"
7793*b3fce824SCristian Pallarés		$ECHO "*** static library $deplib is not portable!"
7794*b3fce824SCristian Pallarés		deplibs="$deplib $deplibs"
7795*b3fce824SCristian Pallarés	      else
7796189777a2SCristian Pallares		echo
7797189777a2SCristian Pallares		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
7798189777a2SCristian Pallares		echo "*** I have the capability to make that library automatically link in when"
7799189777a2SCristian Pallares		echo "*** you link to this library.  But I can only do this if you have a"
7800189777a2SCristian Pallares		echo "*** shared version of the library, which you do not appear to have"
7801189777a2SCristian Pallares		echo "*** because the file extensions .$libext of this argument makes me believe"
7802189777a2SCristian Pallares		echo "*** that it is just a static archive that I should not use here."
7803189777a2SCristian Pallares	      fi
7804189777a2SCristian Pallares	      ;;
7805189777a2SCristian Pallares	    esac
7806189777a2SCristian Pallares	    continue
7807189777a2SCristian Pallares	    ;;
7808189777a2SCristian Pallares	  prog)
7809*b3fce824SCristian Pallarés	    if test link != "$pass"; then
7810189777a2SCristian Pallares	      deplibs="$deplib $deplibs"
7811189777a2SCristian Pallares	    else
7812189777a2SCristian Pallares	      compile_deplibs="$deplib $compile_deplibs"
7813189777a2SCristian Pallares	      finalize_deplibs="$deplib $finalize_deplibs"
7814189777a2SCristian Pallares	    fi
7815189777a2SCristian Pallares	    continue
7816189777a2SCristian Pallares	    ;;
7817189777a2SCristian Pallares	  esac # linkmode
7818189777a2SCristian Pallares	  ;; # *.$libext
7819189777a2SCristian Pallares	*.lo | *.$objext)
7820*b3fce824SCristian Pallarés	  if test conv = "$pass"; then
7821189777a2SCristian Pallares	    deplibs="$deplib $deplibs"
7822*b3fce824SCristian Pallarés	  elif test prog = "$linkmode"; then
7823*b3fce824SCristian Pallarés	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7824189777a2SCristian Pallares	      # If there is no dlopen support or we're linking statically,
7825189777a2SCristian Pallares	      # we need to preload.
7826189777a2SCristian Pallares	      func_append newdlprefiles " $deplib"
7827189777a2SCristian Pallares	      compile_deplibs="$deplib $compile_deplibs"
7828189777a2SCristian Pallares	      finalize_deplibs="$deplib $finalize_deplibs"
7829189777a2SCristian Pallares	    else
7830189777a2SCristian Pallares	      func_append newdlfiles " $deplib"
7831189777a2SCristian Pallares	    fi
7832189777a2SCristian Pallares	  fi
7833189777a2SCristian Pallares	  continue
7834189777a2SCristian Pallares	  ;;
7835189777a2SCristian Pallares	%DEPLIBS%)
7836*b3fce824SCristian Pallarés	  alldeplibs=:
7837189777a2SCristian Pallares	  continue
7838189777a2SCristian Pallares	  ;;
7839189777a2SCristian Pallares	esac # case $deplib
7840189777a2SCristian Pallares
7841*b3fce824SCristian Pallarés	$found || test -f "$lib" \
7842*b3fce824SCristian Pallarés	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7843189777a2SCristian Pallares
7844189777a2SCristian Pallares	# Check to see that this really is a libtool archive.
7845189777a2SCristian Pallares	func_lalib_unsafe_p "$lib" \
7846*b3fce824SCristian Pallarés	  || func_fatal_error "'$lib' is not a valid libtool archive"
7847189777a2SCristian Pallares
7848189777a2SCristian Pallares	func_dirname "$lib" "" "."
7849*b3fce824SCristian Pallarés	ladir=$func_dirname_result
7850189777a2SCristian Pallares
7851189777a2SCristian Pallares	dlname=
7852189777a2SCristian Pallares	dlopen=
7853189777a2SCristian Pallares	dlpreopen=
7854189777a2SCristian Pallares	libdir=
7855189777a2SCristian Pallares	library_names=
7856189777a2SCristian Pallares	old_library=
7857189777a2SCristian Pallares	inherited_linker_flags=
7858189777a2SCristian Pallares	# If the library was installed with an old release of libtool,
7859189777a2SCristian Pallares	# it will not redefine variables installed, or shouldnotlink
7860189777a2SCristian Pallares	installed=yes
7861189777a2SCristian Pallares	shouldnotlink=no
7862189777a2SCristian Pallares	avoidtemprpath=
7863189777a2SCristian Pallares
7864189777a2SCristian Pallares
7865189777a2SCristian Pallares	# Read the .la file
7866189777a2SCristian Pallares	func_source "$lib"
7867189777a2SCristian Pallares
7868189777a2SCristian Pallares	# Convert "-framework foo" to "foo.ltframework"
7869189777a2SCristian Pallares	if test -n "$inherited_linker_flags"; then
7870189777a2SCristian Pallares	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7871189777a2SCristian Pallares	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7872189777a2SCristian Pallares	    case " $new_inherited_linker_flags " in
7873189777a2SCristian Pallares	      *" $tmp_inherited_linker_flag "*) ;;
7874189777a2SCristian Pallares	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7875189777a2SCristian Pallares	    esac
7876189777a2SCristian Pallares	  done
7877189777a2SCristian Pallares	fi
7878189777a2SCristian Pallares	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7879*b3fce824SCristian Pallarés	if test lib,link = "$linkmode,$pass" ||
7880*b3fce824SCristian Pallarés	   test prog,scan = "$linkmode,$pass" ||
7881*b3fce824SCristian Pallarés	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7882189777a2SCristian Pallares	  test -n "$dlopen" && func_append dlfiles " $dlopen"
7883189777a2SCristian Pallares	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7884189777a2SCristian Pallares	fi
7885189777a2SCristian Pallares
7886*b3fce824SCristian Pallarés	if test conv = "$pass"; then
7887189777a2SCristian Pallares	  # Only check for convenience libraries
7888189777a2SCristian Pallares	  deplibs="$lib $deplibs"
7889189777a2SCristian Pallares	  if test -z "$libdir"; then
7890189777a2SCristian Pallares	    if test -z "$old_library"; then
7891*b3fce824SCristian Pallarés	      func_fatal_error "cannot find name of link library for '$lib'"
7892189777a2SCristian Pallares	    fi
7893189777a2SCristian Pallares	    # It is a libtool convenience library, so add in its objects.
7894189777a2SCristian Pallares	    func_append convenience " $ladir/$objdir/$old_library"
7895189777a2SCristian Pallares	    func_append old_convenience " $ladir/$objdir/$old_library"
7896189777a2SCristian Pallares	    tmp_libs=
7897189777a2SCristian Pallares	    for deplib in $dependency_libs; do
7898189777a2SCristian Pallares	      deplibs="$deplib $deplibs"
7899189777a2SCristian Pallares	      if $opt_preserve_dup_deps; then
7900189777a2SCristian Pallares		case "$tmp_libs " in
7901189777a2SCristian Pallares		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7902189777a2SCristian Pallares		esac
7903189777a2SCristian Pallares	      fi
7904189777a2SCristian Pallares	      func_append tmp_libs " $deplib"
7905189777a2SCristian Pallares	    done
7906*b3fce824SCristian Pallarés	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
7907*b3fce824SCristian Pallarés	    func_fatal_error "'$lib' is not a convenience library"
7908189777a2SCristian Pallares	  fi
7909189777a2SCristian Pallares	  continue
7910189777a2SCristian Pallares	fi # $pass = conv
7911189777a2SCristian Pallares
7912189777a2SCristian Pallares
7913189777a2SCristian Pallares	# Get the name of the library we link against.
7914189777a2SCristian Pallares	linklib=
7915189777a2SCristian Pallares	if test -n "$old_library" &&
7916*b3fce824SCristian Pallarés	   { test yes = "$prefer_static_libs" ||
7917*b3fce824SCristian Pallarés	     test built,no = "$prefer_static_libs,$installed"; }; then
7918189777a2SCristian Pallares	  linklib=$old_library
7919189777a2SCristian Pallares	else
7920189777a2SCristian Pallares	  for l in $old_library $library_names; do
7921*b3fce824SCristian Pallarés	    linklib=$l
7922189777a2SCristian Pallares	  done
7923189777a2SCristian Pallares	fi
7924189777a2SCristian Pallares	if test -z "$linklib"; then
7925*b3fce824SCristian Pallarés	  func_fatal_error "cannot find name of link library for '$lib'"
7926189777a2SCristian Pallares	fi
7927189777a2SCristian Pallares
7928189777a2SCristian Pallares	# This library was specified with -dlopen.
7929*b3fce824SCristian Pallarés	if test dlopen = "$pass"; then
7930*b3fce824SCristian Pallarés	  test -z "$libdir" \
7931*b3fce824SCristian Pallarés	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7932189777a2SCristian Pallares	  if test -z "$dlname" ||
7933*b3fce824SCristian Pallarés	     test yes != "$dlopen_support" ||
7934*b3fce824SCristian Pallarés	     test no = "$build_libtool_libs"
7935*b3fce824SCristian Pallarés	  then
7936189777a2SCristian Pallares	    # If there is no dlname, no dlopen support or we're linking
7937189777a2SCristian Pallares	    # statically, we need to preload.  We also need to preload any
7938189777a2SCristian Pallares	    # dependent libraries so libltdl's deplib preloader doesn't
7939189777a2SCristian Pallares	    # bomb out in the load deplibs phase.
7940189777a2SCristian Pallares	    func_append dlprefiles " $lib $dependency_libs"
7941189777a2SCristian Pallares	  else
7942189777a2SCristian Pallares	    func_append newdlfiles " $lib"
7943189777a2SCristian Pallares	  fi
7944189777a2SCristian Pallares	  continue
7945189777a2SCristian Pallares	fi # $pass = dlopen
7946189777a2SCristian Pallares
7947189777a2SCristian Pallares	# We need an absolute path.
7948189777a2SCristian Pallares	case $ladir in
7949*b3fce824SCristian Pallarés	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7950189777a2SCristian Pallares	*)
7951189777a2SCristian Pallares	  abs_ladir=`cd "$ladir" && pwd`
7952189777a2SCristian Pallares	  if test -z "$abs_ladir"; then
7953*b3fce824SCristian Pallarés	    func_warning "cannot determine absolute directory name of '$ladir'"
7954189777a2SCristian Pallares	    func_warning "passing it literally to the linker, although it might fail"
7955*b3fce824SCristian Pallarés	    abs_ladir=$ladir
7956189777a2SCristian Pallares	  fi
7957189777a2SCristian Pallares	  ;;
7958189777a2SCristian Pallares	esac
7959189777a2SCristian Pallares	func_basename "$lib"
7960*b3fce824SCristian Pallarés	laname=$func_basename_result
7961189777a2SCristian Pallares
7962189777a2SCristian Pallares	# Find the relevant object directory and library name.
7963*b3fce824SCristian Pallarés	if test yes = "$installed"; then
7964189777a2SCristian Pallares	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7965*b3fce824SCristian Pallarés	    func_warning "library '$lib' was moved."
7966*b3fce824SCristian Pallarés	    dir=$ladir
7967*b3fce824SCristian Pallarés	    absdir=$abs_ladir
7968*b3fce824SCristian Pallarés	    libdir=$abs_ladir
7969189777a2SCristian Pallares	  else
7970*b3fce824SCristian Pallarés	    dir=$lt_sysroot$libdir
7971*b3fce824SCristian Pallarés	    absdir=$lt_sysroot$libdir
7972189777a2SCristian Pallares	  fi
7973*b3fce824SCristian Pallarés	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
7974189777a2SCristian Pallares	else
7975189777a2SCristian Pallares	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7976*b3fce824SCristian Pallarés	    dir=$ladir
7977*b3fce824SCristian Pallarés	    absdir=$abs_ladir
7978189777a2SCristian Pallares	    # Remove this search path later
7979189777a2SCristian Pallares	    func_append notinst_path " $abs_ladir"
7980189777a2SCristian Pallares	  else
7981*b3fce824SCristian Pallarés	    dir=$ladir/$objdir
7982*b3fce824SCristian Pallarés	    absdir=$abs_ladir/$objdir
7983189777a2SCristian Pallares	    # Remove this search path later
7984189777a2SCristian Pallares	    func_append notinst_path " $abs_ladir"
7985189777a2SCristian Pallares	  fi
7986189777a2SCristian Pallares	fi # $installed = yes
7987189777a2SCristian Pallares	func_stripname 'lib' '.la' "$laname"
7988189777a2SCristian Pallares	name=$func_stripname_result
7989189777a2SCristian Pallares
7990189777a2SCristian Pallares	# This library was specified with -dlpreopen.
7991*b3fce824SCristian Pallarés	if test dlpreopen = "$pass"; then
7992*b3fce824SCristian Pallarés	  if test -z "$libdir" && test prog = "$linkmode"; then
7993*b3fce824SCristian Pallarés	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
7994189777a2SCristian Pallares	  fi
7995*b3fce824SCristian Pallarés	  case $host in
7996189777a2SCristian Pallares	    # special handling for platforms with PE-DLLs.
7997189777a2SCristian Pallares	    *cygwin* | *mingw* | *cegcc* )
7998189777a2SCristian Pallares	      # Linker will automatically link against shared library if both
7999189777a2SCristian Pallares	      # static and shared are present.  Therefore, ensure we extract
8000189777a2SCristian Pallares	      # symbols from the import library if a shared library is present
8001189777a2SCristian Pallares	      # (otherwise, the dlopen module name will be incorrect).  We do
8002189777a2SCristian Pallares	      # this by putting the import library name into $newdlprefiles.
8003189777a2SCristian Pallares	      # We recover the dlopen module name by 'saving' the la file
8004189777a2SCristian Pallares	      # name in a special purpose variable, and (later) extracting the
8005189777a2SCristian Pallares	      # dlname from the la file.
8006189777a2SCristian Pallares	      if test -n "$dlname"; then
8007189777a2SCristian Pallares	        func_tr_sh "$dir/$linklib"
8008189777a2SCristian Pallares	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8009189777a2SCristian Pallares	        func_append newdlprefiles " $dir/$linklib"
8010189777a2SCristian Pallares	      else
8011189777a2SCristian Pallares	        func_append newdlprefiles " $dir/$old_library"
8012189777a2SCristian Pallares	        # Keep a list of preopened convenience libraries to check
8013189777a2SCristian Pallares	        # that they are being used correctly in the link pass.
8014189777a2SCristian Pallares	        test -z "$libdir" && \
8015189777a2SCristian Pallares	          func_append dlpreconveniencelibs " $dir/$old_library"
8016189777a2SCristian Pallares	      fi
8017189777a2SCristian Pallares	    ;;
8018189777a2SCristian Pallares	    * )
8019189777a2SCristian Pallares	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8020189777a2SCristian Pallares	      # are required to link).
8021189777a2SCristian Pallares	      if test -n "$old_library"; then
8022189777a2SCristian Pallares	        func_append newdlprefiles " $dir/$old_library"
8023189777a2SCristian Pallares	        # Keep a list of preopened convenience libraries to check
8024189777a2SCristian Pallares	        # that they are being used correctly in the link pass.
8025189777a2SCristian Pallares	        test -z "$libdir" && \
8026189777a2SCristian Pallares	          func_append dlpreconveniencelibs " $dir/$old_library"
8027189777a2SCristian Pallares	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8028189777a2SCristian Pallares	      elif test -n "$dlname"; then
8029189777a2SCristian Pallares	        func_append newdlprefiles " $dir/$dlname"
8030189777a2SCristian Pallares	      else
8031189777a2SCristian Pallares	        func_append newdlprefiles " $dir/$linklib"
8032189777a2SCristian Pallares	      fi
8033189777a2SCristian Pallares	    ;;
8034189777a2SCristian Pallares	  esac
8035189777a2SCristian Pallares	fi # $pass = dlpreopen
8036189777a2SCristian Pallares
8037189777a2SCristian Pallares	if test -z "$libdir"; then
8038189777a2SCristian Pallares	  # Link the convenience library
8039*b3fce824SCristian Pallarés	  if test lib = "$linkmode"; then
8040189777a2SCristian Pallares	    deplibs="$dir/$old_library $deplibs"
8041*b3fce824SCristian Pallarés	  elif test prog,link = "$linkmode,$pass"; then
8042189777a2SCristian Pallares	    compile_deplibs="$dir/$old_library $compile_deplibs"
8043189777a2SCristian Pallares	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8044189777a2SCristian Pallares	  else
8045189777a2SCristian Pallares	    deplibs="$lib $deplibs" # used for prog,scan pass
8046189777a2SCristian Pallares	  fi
8047189777a2SCristian Pallares	  continue
8048189777a2SCristian Pallares	fi
8049189777a2SCristian Pallares
8050189777a2SCristian Pallares
8051*b3fce824SCristian Pallarés	if test prog = "$linkmode" && test link != "$pass"; then
8052189777a2SCristian Pallares	  func_append newlib_search_path " $ladir"
8053189777a2SCristian Pallares	  deplibs="$lib $deplibs"
8054189777a2SCristian Pallares
8055*b3fce824SCristian Pallarés	  linkalldeplibs=false
8056*b3fce824SCristian Pallarés	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
8057*b3fce824SCristian Pallarés	     test no = "$build_libtool_libs"; then
8058*b3fce824SCristian Pallarés	    linkalldeplibs=:
8059189777a2SCristian Pallares	  fi
8060189777a2SCristian Pallares
8061189777a2SCristian Pallares	  tmp_libs=
8062189777a2SCristian Pallares	  for deplib in $dependency_libs; do
8063189777a2SCristian Pallares	    case $deplib in
8064189777a2SCristian Pallares	    -L*) func_stripname '-L' '' "$deplib"
8065189777a2SCristian Pallares	         func_resolve_sysroot "$func_stripname_result"
8066189777a2SCristian Pallares	         func_append newlib_search_path " $func_resolve_sysroot_result"
8067189777a2SCristian Pallares		 ;;
8068189777a2SCristian Pallares	    esac
8069189777a2SCristian Pallares	    # Need to link against all dependency_libs?
8070*b3fce824SCristian Pallarés	    if $linkalldeplibs; then
8071189777a2SCristian Pallares	      deplibs="$deplib $deplibs"
8072189777a2SCristian Pallares	    else
8073189777a2SCristian Pallares	      # Need to hardcode shared library paths
8074189777a2SCristian Pallares	      # or/and link against static libraries
8075189777a2SCristian Pallares	      newdependency_libs="$deplib $newdependency_libs"
8076189777a2SCristian Pallares	    fi
8077189777a2SCristian Pallares	    if $opt_preserve_dup_deps; then
8078189777a2SCristian Pallares	      case "$tmp_libs " in
8079189777a2SCristian Pallares	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8080189777a2SCristian Pallares	      esac
8081189777a2SCristian Pallares	    fi
8082189777a2SCristian Pallares	    func_append tmp_libs " $deplib"
8083189777a2SCristian Pallares	  done # for deplib
8084189777a2SCristian Pallares	  continue
8085189777a2SCristian Pallares	fi # $linkmode = prog...
8086189777a2SCristian Pallares
8087*b3fce824SCristian Pallarés	if test prog,link = "$linkmode,$pass"; then
8088189777a2SCristian Pallares	  if test -n "$library_names" &&
8089*b3fce824SCristian Pallarés	     { { test no = "$prefer_static_libs" ||
8090*b3fce824SCristian Pallarés	         test built,yes = "$prefer_static_libs,$installed"; } ||
8091189777a2SCristian Pallares	       test -z "$old_library"; }; then
8092189777a2SCristian Pallares	    # We need to hardcode the library path
8093189777a2SCristian Pallares	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8094189777a2SCristian Pallares	      # Make sure the rpath contains only unique directories.
8095*b3fce824SCristian Pallarés	      case $temp_rpath: in
8096189777a2SCristian Pallares	      *"$absdir:"*) ;;
8097189777a2SCristian Pallares	      *) func_append temp_rpath "$absdir:" ;;
8098189777a2SCristian Pallares	      esac
8099189777a2SCristian Pallares	    fi
8100189777a2SCristian Pallares
8101189777a2SCristian Pallares	    # Hardcode the library path.
8102189777a2SCristian Pallares	    # Skip directories that are in the system default run-time
8103189777a2SCristian Pallares	    # search path.
8104189777a2SCristian Pallares	    case " $sys_lib_dlsearch_path " in
8105189777a2SCristian Pallares	    *" $absdir "*) ;;
8106189777a2SCristian Pallares	    *)
8107189777a2SCristian Pallares	      case "$compile_rpath " in
8108189777a2SCristian Pallares	      *" $absdir "*) ;;
8109189777a2SCristian Pallares	      *) func_append compile_rpath " $absdir" ;;
8110189777a2SCristian Pallares	      esac
8111189777a2SCristian Pallares	      ;;
8112189777a2SCristian Pallares	    esac
8113189777a2SCristian Pallares	    case " $sys_lib_dlsearch_path " in
8114189777a2SCristian Pallares	    *" $libdir "*) ;;
8115189777a2SCristian Pallares	    *)
8116189777a2SCristian Pallares	      case "$finalize_rpath " in
8117189777a2SCristian Pallares	      *" $libdir "*) ;;
8118189777a2SCristian Pallares	      *) func_append finalize_rpath " $libdir" ;;
8119189777a2SCristian Pallares	      esac
8120189777a2SCristian Pallares	      ;;
8121189777a2SCristian Pallares	    esac
8122189777a2SCristian Pallares	  fi # $linkmode,$pass = prog,link...
8123189777a2SCristian Pallares
8124*b3fce824SCristian Pallarés	  if $alldeplibs &&
8125*b3fce824SCristian Pallarés	     { test pass_all = "$deplibs_check_method" ||
8126*b3fce824SCristian Pallarés	       { test yes = "$build_libtool_libs" &&
8127189777a2SCristian Pallares		 test -n "$library_names"; }; }; then
8128189777a2SCristian Pallares	    # We only need to search for static libraries
8129189777a2SCristian Pallares	    continue
8130189777a2SCristian Pallares	  fi
8131189777a2SCristian Pallares	fi
8132189777a2SCristian Pallares
8133189777a2SCristian Pallares	link_static=no # Whether the deplib will be linked statically
8134189777a2SCristian Pallares	use_static_libs=$prefer_static_libs
8135*b3fce824SCristian Pallarés	if test built = "$use_static_libs" && test yes = "$installed"; then
8136189777a2SCristian Pallares	  use_static_libs=no
8137189777a2SCristian Pallares	fi
8138189777a2SCristian Pallares	if test -n "$library_names" &&
8139*b3fce824SCristian Pallarés	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8140189777a2SCristian Pallares	  case $host in
8141*b3fce824SCristian Pallarés	  *cygwin* | *mingw* | *cegcc* | *os2*)
8142189777a2SCristian Pallares	      # No point in relinking DLLs because paths are not encoded
8143189777a2SCristian Pallares	      func_append notinst_deplibs " $lib"
8144189777a2SCristian Pallares	      need_relink=no
8145189777a2SCristian Pallares	    ;;
8146189777a2SCristian Pallares	  *)
8147*b3fce824SCristian Pallarés	    if test no = "$installed"; then
8148189777a2SCristian Pallares	      func_append notinst_deplibs " $lib"
8149189777a2SCristian Pallares	      need_relink=yes
8150189777a2SCristian Pallares	    fi
8151189777a2SCristian Pallares	    ;;
8152189777a2SCristian Pallares	  esac
8153189777a2SCristian Pallares	  # This is a shared library
8154189777a2SCristian Pallares
8155189777a2SCristian Pallares	  # Warn about portability, can't link against -module's on some
8156189777a2SCristian Pallares	  # systems (darwin).  Don't bleat about dlopened modules though!
8157*b3fce824SCristian Pallarés	  dlopenmodule=
8158189777a2SCristian Pallares	  for dlpremoduletest in $dlprefiles; do
8159189777a2SCristian Pallares	    if test "X$dlpremoduletest" = "X$lib"; then
8160*b3fce824SCristian Pallarés	      dlopenmodule=$dlpremoduletest
8161189777a2SCristian Pallares	      break
8162189777a2SCristian Pallares	    fi
8163189777a2SCristian Pallares	  done
8164*b3fce824SCristian Pallarés	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8165189777a2SCristian Pallares	    echo
8166*b3fce824SCristian Pallarés	    if test prog = "$linkmode"; then
8167189777a2SCristian Pallares	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8168189777a2SCristian Pallares	    else
8169189777a2SCristian Pallares	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8170189777a2SCristian Pallares	    fi
8171189777a2SCristian Pallares	    $ECHO "*** $linklib is not portable!"
8172189777a2SCristian Pallares	  fi
8173*b3fce824SCristian Pallarés	  if test lib = "$linkmode" &&
8174*b3fce824SCristian Pallarés	     test yes = "$hardcode_into_libs"; then
8175189777a2SCristian Pallares	    # Hardcode the library path.
8176189777a2SCristian Pallares	    # Skip directories that are in the system default run-time
8177189777a2SCristian Pallares	    # search path.
8178189777a2SCristian Pallares	    case " $sys_lib_dlsearch_path " in
8179189777a2SCristian Pallares	    *" $absdir "*) ;;
8180189777a2SCristian Pallares	    *)
8181189777a2SCristian Pallares	      case "$compile_rpath " in
8182189777a2SCristian Pallares	      *" $absdir "*) ;;
8183189777a2SCristian Pallares	      *) func_append compile_rpath " $absdir" ;;
8184189777a2SCristian Pallares	      esac
8185189777a2SCristian Pallares	      ;;
8186189777a2SCristian Pallares	    esac
8187189777a2SCristian Pallares	    case " $sys_lib_dlsearch_path " in
8188189777a2SCristian Pallares	    *" $libdir "*) ;;
8189189777a2SCristian Pallares	    *)
8190189777a2SCristian Pallares	      case "$finalize_rpath " in
8191189777a2SCristian Pallares	      *" $libdir "*) ;;
8192189777a2SCristian Pallares	      *) func_append finalize_rpath " $libdir" ;;
8193189777a2SCristian Pallares	      esac
8194189777a2SCristian Pallares	      ;;
8195189777a2SCristian Pallares	    esac
8196189777a2SCristian Pallares	  fi
8197189777a2SCristian Pallares
8198189777a2SCristian Pallares	  if test -n "$old_archive_from_expsyms_cmds"; then
8199189777a2SCristian Pallares	    # figure out the soname
8200189777a2SCristian Pallares	    set dummy $library_names
8201189777a2SCristian Pallares	    shift
8202*b3fce824SCristian Pallarés	    realname=$1
8203189777a2SCristian Pallares	    shift
8204189777a2SCristian Pallares	    libname=`eval "\\$ECHO \"$libname_spec\""`
8205189777a2SCristian Pallares	    # use dlname if we got it. it's perfectly good, no?
8206189777a2SCristian Pallares	    if test -n "$dlname"; then
8207*b3fce824SCristian Pallarés	      soname=$dlname
8208189777a2SCristian Pallares	    elif test -n "$soname_spec"; then
8209189777a2SCristian Pallares	      # bleh windows
8210189777a2SCristian Pallares	      case $host in
8211*b3fce824SCristian Pallarés	      *cygwin* | mingw* | *cegcc* | *os2*)
8212189777a2SCristian Pallares	        func_arith $current - $age
8213189777a2SCristian Pallares		major=$func_arith_result
8214*b3fce824SCristian Pallarés		versuffix=-$major
8215189777a2SCristian Pallares		;;
8216189777a2SCristian Pallares	      esac
8217189777a2SCristian Pallares	      eval soname=\"$soname_spec\"
8218189777a2SCristian Pallares	    else
8219*b3fce824SCristian Pallarés	      soname=$realname
8220189777a2SCristian Pallares	    fi
8221189777a2SCristian Pallares
8222189777a2SCristian Pallares	    # Make a new name for the extract_expsyms_cmds to use
8223*b3fce824SCristian Pallarés	    soroot=$soname
8224189777a2SCristian Pallares	    func_basename "$soroot"
8225*b3fce824SCristian Pallarés	    soname=$func_basename_result
8226189777a2SCristian Pallares	    func_stripname 'lib' '.dll' "$soname"
8227189777a2SCristian Pallares	    newlib=libimp-$func_stripname_result.a
8228189777a2SCristian Pallares
8229189777a2SCristian Pallares	    # If the library has no export list, then create one now
8230189777a2SCristian Pallares	    if test -f "$output_objdir/$soname-def"; then :
8231189777a2SCristian Pallares	    else
8232*b3fce824SCristian Pallarés	      func_verbose "extracting exported symbol list from '$soname'"
8233189777a2SCristian Pallares	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8234189777a2SCristian Pallares	    fi
8235189777a2SCristian Pallares
8236189777a2SCristian Pallares	    # Create $newlib
8237189777a2SCristian Pallares	    if test -f "$output_objdir/$newlib"; then :; else
8238*b3fce824SCristian Pallarés	      func_verbose "generating import library for '$soname'"
8239189777a2SCristian Pallares	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8240189777a2SCristian Pallares	    fi
8241189777a2SCristian Pallares	    # make sure the library variables are pointing to the new library
8242189777a2SCristian Pallares	    dir=$output_objdir
8243189777a2SCristian Pallares	    linklib=$newlib
8244189777a2SCristian Pallares	  fi # test -n "$old_archive_from_expsyms_cmds"
8245189777a2SCristian Pallares
8246*b3fce824SCristian Pallarés	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8247189777a2SCristian Pallares	    add_shlibpath=
8248189777a2SCristian Pallares	    add_dir=
8249189777a2SCristian Pallares	    add=
8250189777a2SCristian Pallares	    lib_linked=yes
8251189777a2SCristian Pallares	    case $hardcode_action in
8252189777a2SCristian Pallares	    immediate | unsupported)
8253*b3fce824SCristian Pallarés	      if test no = "$hardcode_direct"; then
8254*b3fce824SCristian Pallarés		add=$dir/$linklib
8255189777a2SCristian Pallares		case $host in
8256*b3fce824SCristian Pallarés		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8257*b3fce824SCristian Pallarés		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8258189777a2SCristian Pallares		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8259*b3fce824SCristian Pallarés		    *-*-unixware7*) add_dir=-L$dir ;;
8260189777a2SCristian Pallares		  *-*-darwin* )
8261189777a2SCristian Pallares		    # if the lib is a (non-dlopened) module then we cannot
8262189777a2SCristian Pallares		    # link against it, someone is ignoring the earlier warnings
8263189777a2SCristian Pallares		    if /usr/bin/file -L $add 2> /dev/null |
8264189777a2SCristian Pallares			 $GREP ": [^:]* bundle" >/dev/null; then
8265189777a2SCristian Pallares		      if test "X$dlopenmodule" != "X$lib"; then
8266189777a2SCristian Pallares			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
8267189777a2SCristian Pallares			if test -z "$old_library"; then
8268189777a2SCristian Pallares			  echo
8269189777a2SCristian Pallares			  echo "*** And there doesn't seem to be a static archive available"
8270189777a2SCristian Pallares			  echo "*** The link will probably fail, sorry"
8271189777a2SCristian Pallares			else
8272*b3fce824SCristian Pallarés			  add=$dir/$old_library
8273189777a2SCristian Pallares			fi
8274189777a2SCristian Pallares		      elif test -n "$old_library"; then
8275*b3fce824SCristian Pallarés			add=$dir/$old_library
8276189777a2SCristian Pallares		      fi
8277189777a2SCristian Pallares		    fi
8278189777a2SCristian Pallares		esac
8279*b3fce824SCristian Pallarés	      elif test no = "$hardcode_minus_L"; then
8280189777a2SCristian Pallares		case $host in
8281*b3fce824SCristian Pallarés		*-*-sunos*) add_shlibpath=$dir ;;
8282189777a2SCristian Pallares		esac
8283*b3fce824SCristian Pallarés		add_dir=-L$dir
8284*b3fce824SCristian Pallarés		add=-l$name
8285*b3fce824SCristian Pallarés	      elif test no = "$hardcode_shlibpath_var"; then
8286*b3fce824SCristian Pallarés		add_shlibpath=$dir
8287*b3fce824SCristian Pallarés		add=-l$name
8288189777a2SCristian Pallares	      else
8289189777a2SCristian Pallares		lib_linked=no
8290189777a2SCristian Pallares	      fi
8291189777a2SCristian Pallares	      ;;
8292189777a2SCristian Pallares	    relink)
8293*b3fce824SCristian Pallarés	      if test yes = "$hardcode_direct" &&
8294*b3fce824SCristian Pallarés	         test no = "$hardcode_direct_absolute"; then
8295*b3fce824SCristian Pallarés		add=$dir/$linklib
8296*b3fce824SCristian Pallarés	      elif test yes = "$hardcode_minus_L"; then
8297*b3fce824SCristian Pallarés		add_dir=-L$absdir
8298189777a2SCristian Pallares		# Try looking first in the location we're being installed to.
8299189777a2SCristian Pallares		if test -n "$inst_prefix_dir"; then
8300189777a2SCristian Pallares		  case $libdir in
8301189777a2SCristian Pallares		    [\\/]*)
8302189777a2SCristian Pallares		      func_append add_dir " -L$inst_prefix_dir$libdir"
8303189777a2SCristian Pallares		      ;;
8304189777a2SCristian Pallares		  esac
8305189777a2SCristian Pallares		fi
8306*b3fce824SCristian Pallarés		add=-l$name
8307*b3fce824SCristian Pallarés	      elif test yes = "$hardcode_shlibpath_var"; then
8308*b3fce824SCristian Pallarés		add_shlibpath=$dir
8309*b3fce824SCristian Pallarés		add=-l$name
8310189777a2SCristian Pallares	      else
8311189777a2SCristian Pallares		lib_linked=no
8312189777a2SCristian Pallares	      fi
8313189777a2SCristian Pallares	      ;;
8314189777a2SCristian Pallares	    *) lib_linked=no ;;
8315189777a2SCristian Pallares	    esac
8316189777a2SCristian Pallares
8317*b3fce824SCristian Pallarés	    if test yes != "$lib_linked"; then
8318189777a2SCristian Pallares	      func_fatal_configuration "unsupported hardcode properties"
8319189777a2SCristian Pallares	    fi
8320189777a2SCristian Pallares
8321189777a2SCristian Pallares	    if test -n "$add_shlibpath"; then
8322189777a2SCristian Pallares	      case :$compile_shlibpath: in
8323189777a2SCristian Pallares	      *":$add_shlibpath:"*) ;;
8324189777a2SCristian Pallares	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8325189777a2SCristian Pallares	      esac
8326189777a2SCristian Pallares	    fi
8327*b3fce824SCristian Pallarés	    if test prog = "$linkmode"; then
8328189777a2SCristian Pallares	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8329189777a2SCristian Pallares	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8330189777a2SCristian Pallares	    else
8331189777a2SCristian Pallares	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8332189777a2SCristian Pallares	      test -n "$add" && deplibs="$add $deplibs"
8333*b3fce824SCristian Pallarés	      if test yes != "$hardcode_direct" &&
8334*b3fce824SCristian Pallarés		 test yes != "$hardcode_minus_L" &&
8335*b3fce824SCristian Pallarés		 test yes = "$hardcode_shlibpath_var"; then
8336189777a2SCristian Pallares		case :$finalize_shlibpath: in
8337189777a2SCristian Pallares		*":$libdir:"*) ;;
8338189777a2SCristian Pallares		*) func_append finalize_shlibpath "$libdir:" ;;
8339189777a2SCristian Pallares		esac
8340189777a2SCristian Pallares	      fi
8341189777a2SCristian Pallares	    fi
8342189777a2SCristian Pallares	  fi
8343189777a2SCristian Pallares
8344*b3fce824SCristian Pallarés	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8345189777a2SCristian Pallares	    add_shlibpath=
8346189777a2SCristian Pallares	    add_dir=
8347189777a2SCristian Pallares	    add=
8348189777a2SCristian Pallares	    # Finalize command for both is simple: just hardcode it.
8349*b3fce824SCristian Pallarés	    if test yes = "$hardcode_direct" &&
8350*b3fce824SCristian Pallarés	       test no = "$hardcode_direct_absolute"; then
8351*b3fce824SCristian Pallarés	      add=$libdir/$linklib
8352*b3fce824SCristian Pallarés	    elif test yes = "$hardcode_minus_L"; then
8353*b3fce824SCristian Pallarés	      add_dir=-L$libdir
8354*b3fce824SCristian Pallarés	      add=-l$name
8355*b3fce824SCristian Pallarés	    elif test yes = "$hardcode_shlibpath_var"; then
8356189777a2SCristian Pallares	      case :$finalize_shlibpath: in
8357189777a2SCristian Pallares	      *":$libdir:"*) ;;
8358189777a2SCristian Pallares	      *) func_append finalize_shlibpath "$libdir:" ;;
8359189777a2SCristian Pallares	      esac
8360*b3fce824SCristian Pallarés	      add=-l$name
8361*b3fce824SCristian Pallarés	    elif test yes = "$hardcode_automatic"; then
8362189777a2SCristian Pallares	      if test -n "$inst_prefix_dir" &&
8363189777a2SCristian Pallares		 test -f "$inst_prefix_dir$libdir/$linklib"; then
8364*b3fce824SCristian Pallarés		add=$inst_prefix_dir$libdir/$linklib
8365189777a2SCristian Pallares	      else
8366*b3fce824SCristian Pallarés		add=$libdir/$linklib
8367189777a2SCristian Pallares	      fi
8368189777a2SCristian Pallares	    else
8369189777a2SCristian Pallares	      # We cannot seem to hardcode it, guess we'll fake it.
8370*b3fce824SCristian Pallarés	      add_dir=-L$libdir
8371189777a2SCristian Pallares	      # Try looking first in the location we're being installed to.
8372189777a2SCristian Pallares	      if test -n "$inst_prefix_dir"; then
8373189777a2SCristian Pallares		case $libdir in
8374189777a2SCristian Pallares		  [\\/]*)
8375189777a2SCristian Pallares		    func_append add_dir " -L$inst_prefix_dir$libdir"
8376189777a2SCristian Pallares		    ;;
8377189777a2SCristian Pallares		esac
8378189777a2SCristian Pallares	      fi
8379*b3fce824SCristian Pallarés	      add=-l$name
8380189777a2SCristian Pallares	    fi
8381189777a2SCristian Pallares
8382*b3fce824SCristian Pallarés	    if test prog = "$linkmode"; then
8383189777a2SCristian Pallares	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8384189777a2SCristian Pallares	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8385189777a2SCristian Pallares	    else
8386189777a2SCristian Pallares	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8387189777a2SCristian Pallares	      test -n "$add" && deplibs="$add $deplibs"
8388189777a2SCristian Pallares	    fi
8389189777a2SCristian Pallares	  fi
8390*b3fce824SCristian Pallarés	elif test prog = "$linkmode"; then
8391189777a2SCristian Pallares	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8392189777a2SCristian Pallares	  # is not unsupported.  This is valid on all known static and
8393189777a2SCristian Pallares	  # shared platforms.
8394*b3fce824SCristian Pallarés	  if test unsupported != "$hardcode_direct"; then
8395*b3fce824SCristian Pallarés	    test -n "$old_library" && linklib=$old_library
8396189777a2SCristian Pallares	    compile_deplibs="$dir/$linklib $compile_deplibs"
8397189777a2SCristian Pallares	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8398189777a2SCristian Pallares	  else
8399189777a2SCristian Pallares	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8400189777a2SCristian Pallares	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8401189777a2SCristian Pallares	  fi
8402*b3fce824SCristian Pallarés	elif test yes = "$build_libtool_libs"; then
8403189777a2SCristian Pallares	  # Not a shared library
8404*b3fce824SCristian Pallarés	  if test pass_all != "$deplibs_check_method"; then
8405189777a2SCristian Pallares	    # We're trying link a shared library against a static one
8406189777a2SCristian Pallares	    # but the system doesn't support it.
8407189777a2SCristian Pallares
8408189777a2SCristian Pallares	    # Just print a warning and add the library to dependency_libs so
8409189777a2SCristian Pallares	    # that the program can be linked against the static library.
8410189777a2SCristian Pallares	    echo
8411189777a2SCristian Pallares	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8412189777a2SCristian Pallares	    echo "*** I have the capability to make that library automatically link in when"
8413189777a2SCristian Pallares	    echo "*** you link to this library.  But I can only do this if you have a"
8414189777a2SCristian Pallares	    echo "*** shared version of the library, which you do not appear to have."
8415*b3fce824SCristian Pallarés	    if test yes = "$module"; then
8416189777a2SCristian Pallares	      echo "*** But as you try to build a module library, libtool will still create "
8417189777a2SCristian Pallares	      echo "*** a static module, that should work as long as the dlopening application"
8418189777a2SCristian Pallares	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8419189777a2SCristian Pallares	      if test -z "$global_symbol_pipe"; then
8420189777a2SCristian Pallares		echo
8421189777a2SCristian Pallares		echo "*** However, this would only work if libtool was able to extract symbol"
8422*b3fce824SCristian Pallarés		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8423189777a2SCristian Pallares		echo "*** not find such a program.  So, this module is probably useless."
8424*b3fce824SCristian Pallarés		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8425189777a2SCristian Pallares	      fi
8426*b3fce824SCristian Pallarés	      if test no = "$build_old_libs"; then
8427189777a2SCristian Pallares		build_libtool_libs=module
8428189777a2SCristian Pallares		build_old_libs=yes
8429189777a2SCristian Pallares	      else
8430189777a2SCristian Pallares		build_libtool_libs=no
8431189777a2SCristian Pallares	      fi
8432189777a2SCristian Pallares	    fi
8433189777a2SCristian Pallares	  else
8434189777a2SCristian Pallares	    deplibs="$dir/$old_library $deplibs"
8435189777a2SCristian Pallares	    link_static=yes
8436189777a2SCristian Pallares	  fi
8437189777a2SCristian Pallares	fi # link shared/static library?
8438189777a2SCristian Pallares
8439*b3fce824SCristian Pallarés	if test lib = "$linkmode"; then
8440189777a2SCristian Pallares	  if test -n "$dependency_libs" &&
8441*b3fce824SCristian Pallarés	     { test yes != "$hardcode_into_libs" ||
8442*b3fce824SCristian Pallarés	       test yes = "$build_old_libs" ||
8443*b3fce824SCristian Pallarés	       test yes = "$link_static"; }; then
8444189777a2SCristian Pallares	    # Extract -R from dependency_libs
8445189777a2SCristian Pallares	    temp_deplibs=
8446189777a2SCristian Pallares	    for libdir in $dependency_libs; do
8447189777a2SCristian Pallares	      case $libdir in
8448189777a2SCristian Pallares	      -R*) func_stripname '-R' '' "$libdir"
8449189777a2SCristian Pallares	           temp_xrpath=$func_stripname_result
8450189777a2SCristian Pallares		   case " $xrpath " in
8451189777a2SCristian Pallares		   *" $temp_xrpath "*) ;;
8452189777a2SCristian Pallares		   *) func_append xrpath " $temp_xrpath";;
8453189777a2SCristian Pallares		   esac;;
8454189777a2SCristian Pallares	      *) func_append temp_deplibs " $libdir";;
8455189777a2SCristian Pallares	      esac
8456189777a2SCristian Pallares	    done
8457*b3fce824SCristian Pallarés	    dependency_libs=$temp_deplibs
8458189777a2SCristian Pallares	  fi
8459189777a2SCristian Pallares
8460189777a2SCristian Pallares	  func_append newlib_search_path " $absdir"
8461189777a2SCristian Pallares	  # Link against this library
8462*b3fce824SCristian Pallarés	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8463189777a2SCristian Pallares	  # ... and its dependency_libs
8464189777a2SCristian Pallares	  tmp_libs=
8465189777a2SCristian Pallares	  for deplib in $dependency_libs; do
8466189777a2SCristian Pallares	    newdependency_libs="$deplib $newdependency_libs"
8467189777a2SCristian Pallares	    case $deplib in
8468189777a2SCristian Pallares              -L*) func_stripname '-L' '' "$deplib"
8469189777a2SCristian Pallares                   func_resolve_sysroot "$func_stripname_result";;
8470189777a2SCristian Pallares              *) func_resolve_sysroot "$deplib" ;;
8471189777a2SCristian Pallares            esac
8472189777a2SCristian Pallares	    if $opt_preserve_dup_deps; then
8473189777a2SCristian Pallares	      case "$tmp_libs " in
8474189777a2SCristian Pallares	      *" $func_resolve_sysroot_result "*)
8475189777a2SCristian Pallares                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8476189777a2SCristian Pallares	      esac
8477189777a2SCristian Pallares	    fi
8478189777a2SCristian Pallares	    func_append tmp_libs " $func_resolve_sysroot_result"
8479189777a2SCristian Pallares	  done
8480189777a2SCristian Pallares
8481*b3fce824SCristian Pallarés	  if test no != "$link_all_deplibs"; then
8482189777a2SCristian Pallares	    # Add the search paths of all dependency libraries
8483189777a2SCristian Pallares	    for deplib in $dependency_libs; do
8484189777a2SCristian Pallares	      path=
8485189777a2SCristian Pallares	      case $deplib in
8486*b3fce824SCristian Pallarés	      -L*) path=$deplib ;;
8487189777a2SCristian Pallares	      *.la)
8488189777a2SCristian Pallares	        func_resolve_sysroot "$deplib"
8489189777a2SCristian Pallares	        deplib=$func_resolve_sysroot_result
8490189777a2SCristian Pallares	        func_dirname "$deplib" "" "."
8491189777a2SCristian Pallares		dir=$func_dirname_result
8492189777a2SCristian Pallares		# We need an absolute path.
8493189777a2SCristian Pallares		case $dir in
8494*b3fce824SCristian Pallarés		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8495189777a2SCristian Pallares		*)
8496189777a2SCristian Pallares		  absdir=`cd "$dir" && pwd`
8497189777a2SCristian Pallares		  if test -z "$absdir"; then
8498*b3fce824SCristian Pallarés		    func_warning "cannot determine absolute directory name of '$dir'"
8499*b3fce824SCristian Pallarés		    absdir=$dir
8500189777a2SCristian Pallares		  fi
8501189777a2SCristian Pallares		  ;;
8502189777a2SCristian Pallares		esac
8503189777a2SCristian Pallares		if $GREP "^installed=no" $deplib > /dev/null; then
8504189777a2SCristian Pallares		case $host in
8505189777a2SCristian Pallares		*-*-darwin*)
8506189777a2SCristian Pallares		  depdepl=
8507*b3fce824SCristian Pallarés		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8508189777a2SCristian Pallares		  if test -n "$deplibrary_names"; then
8509189777a2SCristian Pallares		    for tmp in $deplibrary_names; do
8510189777a2SCristian Pallares		      depdepl=$tmp
8511189777a2SCristian Pallares		    done
8512189777a2SCristian Pallares		    if test -f "$absdir/$objdir/$depdepl"; then
8513*b3fce824SCristian Pallarés		      depdepl=$absdir/$objdir/$depdepl
8514*b3fce824SCristian Pallarés		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8515189777a2SCristian Pallares                      if test -z "$darwin_install_name"; then
8516*b3fce824SCristian Pallarés                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8517189777a2SCristian Pallares                      fi
8518*b3fce824SCristian Pallarés		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8519*b3fce824SCristian Pallarés		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8520189777a2SCristian Pallares		      path=
8521189777a2SCristian Pallares		    fi
8522189777a2SCristian Pallares		  fi
8523189777a2SCristian Pallares		  ;;
8524189777a2SCristian Pallares		*)
8525*b3fce824SCristian Pallarés		  path=-L$absdir/$objdir
8526189777a2SCristian Pallares		  ;;
8527189777a2SCristian Pallares		esac
8528189777a2SCristian Pallares		else
8529*b3fce824SCristian Pallarés		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8530189777a2SCristian Pallares		  test -z "$libdir" && \
8531*b3fce824SCristian Pallarés		    func_fatal_error "'$deplib' is not a valid libtool archive"
8532189777a2SCristian Pallares		  test "$absdir" != "$libdir" && \
8533*b3fce824SCristian Pallarés		    func_warning "'$deplib' seems to be moved"
8534189777a2SCristian Pallares
8535*b3fce824SCristian Pallarés		  path=-L$absdir
8536189777a2SCristian Pallares		fi
8537189777a2SCristian Pallares		;;
8538189777a2SCristian Pallares	      esac
8539189777a2SCristian Pallares	      case " $deplibs " in
8540189777a2SCristian Pallares	      *" $path "*) ;;
8541189777a2SCristian Pallares	      *) deplibs="$path $deplibs" ;;
8542189777a2SCristian Pallares	      esac
8543189777a2SCristian Pallares	    done
8544189777a2SCristian Pallares	  fi # link_all_deplibs != no
8545189777a2SCristian Pallares	fi # linkmode = lib
8546189777a2SCristian Pallares      done # for deplib in $libs
8547*b3fce824SCristian Pallarés      if test link = "$pass"; then
8548*b3fce824SCristian Pallarés	if test prog = "$linkmode"; then
8549189777a2SCristian Pallares	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8550189777a2SCristian Pallares	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8551189777a2SCristian Pallares	else
8552189777a2SCristian Pallares	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8553189777a2SCristian Pallares	fi
8554189777a2SCristian Pallares      fi
8555*b3fce824SCristian Pallarés      dependency_libs=$newdependency_libs
8556*b3fce824SCristian Pallarés      if test dlpreopen = "$pass"; then
8557189777a2SCristian Pallares	# Link the dlpreopened libraries before other libraries
8558189777a2SCristian Pallares	for deplib in $save_deplibs; do
8559189777a2SCristian Pallares	  deplibs="$deplib $deplibs"
8560189777a2SCristian Pallares	done
8561189777a2SCristian Pallares      fi
8562*b3fce824SCristian Pallarés      if test dlopen != "$pass"; then
8563*b3fce824SCristian Pallarés	test conv = "$pass" || {
8564189777a2SCristian Pallares	  # Make sure lib_search_path contains only unique directories.
8565189777a2SCristian Pallares	  lib_search_path=
8566189777a2SCristian Pallares	  for dir in $newlib_search_path; do
8567189777a2SCristian Pallares	    case "$lib_search_path " in
8568189777a2SCristian Pallares	    *" $dir "*) ;;
8569189777a2SCristian Pallares	    *) func_append lib_search_path " $dir" ;;
8570189777a2SCristian Pallares	    esac
8571189777a2SCristian Pallares	  done
8572189777a2SCristian Pallares	  newlib_search_path=
8573*b3fce824SCristian Pallarés	}
8574189777a2SCristian Pallares
8575*b3fce824SCristian Pallarés	if test prog,link = "$linkmode,$pass"; then
8576189777a2SCristian Pallares	  vars="compile_deplibs finalize_deplibs"
8577*b3fce824SCristian Pallarés	else
8578*b3fce824SCristian Pallarés	  vars=deplibs
8579189777a2SCristian Pallares	fi
8580189777a2SCristian Pallares	for var in $vars dependency_libs; do
8581189777a2SCristian Pallares	  # Add libraries to $var in reverse order
8582189777a2SCristian Pallares	  eval tmp_libs=\"\$$var\"
8583189777a2SCristian Pallares	  new_libs=
8584189777a2SCristian Pallares	  for deplib in $tmp_libs; do
8585189777a2SCristian Pallares	    # FIXME: Pedantically, this is the right thing to do, so
8586189777a2SCristian Pallares	    #        that some nasty dependency loop isn't accidentally
8587189777a2SCristian Pallares	    #        broken:
8588189777a2SCristian Pallares	    #new_libs="$deplib $new_libs"
8589189777a2SCristian Pallares	    # Pragmatically, this seems to cause very few problems in
8590189777a2SCristian Pallares	    # practice:
8591189777a2SCristian Pallares	    case $deplib in
8592189777a2SCristian Pallares	    -L*) new_libs="$deplib $new_libs" ;;
8593189777a2SCristian Pallares	    -R*) ;;
8594189777a2SCristian Pallares	    *)
8595189777a2SCristian Pallares	      # And here is the reason: when a library appears more
8596189777a2SCristian Pallares	      # than once as an explicit dependence of a library, or
8597189777a2SCristian Pallares	      # is implicitly linked in more than once by the
8598189777a2SCristian Pallares	      # compiler, it is considered special, and multiple
8599189777a2SCristian Pallares	      # occurrences thereof are not removed.  Compare this
8600189777a2SCristian Pallares	      # with having the same library being listed as a
8601189777a2SCristian Pallares	      # dependency of multiple other libraries: in this case,
8602189777a2SCristian Pallares	      # we know (pedantically, we assume) the library does not
8603189777a2SCristian Pallares	      # need to be listed more than once, so we keep only the
8604189777a2SCristian Pallares	      # last copy.  This is not always right, but it is rare
8605189777a2SCristian Pallares	      # enough that we require users that really mean to play
8606189777a2SCristian Pallares	      # such unportable linking tricks to link the library
8607189777a2SCristian Pallares	      # using -Wl,-lname, so that libtool does not consider it
8608189777a2SCristian Pallares	      # for duplicate removal.
8609189777a2SCristian Pallares	      case " $specialdeplibs " in
8610189777a2SCristian Pallares	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8611189777a2SCristian Pallares	      *)
8612189777a2SCristian Pallares		case " $new_libs " in
8613189777a2SCristian Pallares		*" $deplib "*) ;;
8614189777a2SCristian Pallares		*) new_libs="$deplib $new_libs" ;;
8615189777a2SCristian Pallares		esac
8616189777a2SCristian Pallares		;;
8617189777a2SCristian Pallares	      esac
8618189777a2SCristian Pallares	      ;;
8619189777a2SCristian Pallares	    esac
8620189777a2SCristian Pallares	  done
8621189777a2SCristian Pallares	  tmp_libs=
8622189777a2SCristian Pallares	  for deplib in $new_libs; do
8623189777a2SCristian Pallares	    case $deplib in
8624189777a2SCristian Pallares	    -L*)
8625189777a2SCristian Pallares	      case " $tmp_libs " in
8626189777a2SCristian Pallares	      *" $deplib "*) ;;
8627189777a2SCristian Pallares	      *) func_append tmp_libs " $deplib" ;;
8628189777a2SCristian Pallares	      esac
8629189777a2SCristian Pallares	      ;;
8630189777a2SCristian Pallares	    *) func_append tmp_libs " $deplib" ;;
8631189777a2SCristian Pallares	    esac
8632189777a2SCristian Pallares	  done
8633189777a2SCristian Pallares	  eval $var=\"$tmp_libs\"
8634189777a2SCristian Pallares	done # for var
8635189777a2SCristian Pallares      fi
8636*b3fce824SCristian Pallarés
8637*b3fce824SCristian Pallarés      # Add Sun CC postdeps if required:
8638*b3fce824SCristian Pallarés      test CXX = "$tagname" && {
8639*b3fce824SCristian Pallarés        case $host_os in
8640*b3fce824SCristian Pallarés        linux*)
8641*b3fce824SCristian Pallarés          case `$CC -V 2>&1 | sed 5q` in
8642*b3fce824SCristian Pallarés          *Sun\ C*) # Sun C++ 5.9
8643*b3fce824SCristian Pallarés            func_suncc_cstd_abi
8644*b3fce824SCristian Pallarés
8645*b3fce824SCristian Pallarés            if test no != "$suncc_use_cstd_abi"; then
8646*b3fce824SCristian Pallarés              func_append postdeps ' -library=Cstd -library=Crun'
8647*b3fce824SCristian Pallarés            fi
8648*b3fce824SCristian Pallarés            ;;
8649*b3fce824SCristian Pallarés          esac
8650*b3fce824SCristian Pallarés          ;;
8651*b3fce824SCristian Pallarés
8652*b3fce824SCristian Pallarés        solaris*)
8653*b3fce824SCristian Pallarés          func_cc_basename "$CC"
8654*b3fce824SCristian Pallarés          case $func_cc_basename_result in
8655*b3fce824SCristian Pallarés          CC* | sunCC*)
8656*b3fce824SCristian Pallarés            func_suncc_cstd_abi
8657*b3fce824SCristian Pallarés
8658*b3fce824SCristian Pallarés            if test no != "$suncc_use_cstd_abi"; then
8659*b3fce824SCristian Pallarés              func_append postdeps ' -library=Cstd -library=Crun'
8660*b3fce824SCristian Pallarés            fi
8661*b3fce824SCristian Pallarés            ;;
8662*b3fce824SCristian Pallarés          esac
8663*b3fce824SCristian Pallarés          ;;
8664*b3fce824SCristian Pallarés        esac
8665*b3fce824SCristian Pallarés      }
8666*b3fce824SCristian Pallarés
8667189777a2SCristian Pallares      # Last step: remove runtime libs from dependency_libs
8668189777a2SCristian Pallares      # (they stay in deplibs)
8669189777a2SCristian Pallares      tmp_libs=
8670189777a2SCristian Pallares      for i in $dependency_libs; do
8671189777a2SCristian Pallares	case " $predeps $postdeps $compiler_lib_search_path " in
8672189777a2SCristian Pallares	*" $i "*)
8673*b3fce824SCristian Pallarés	  i=
8674189777a2SCristian Pallares	  ;;
8675189777a2SCristian Pallares	esac
8676189777a2SCristian Pallares	if test -n "$i"; then
8677189777a2SCristian Pallares	  func_append tmp_libs " $i"
8678189777a2SCristian Pallares	fi
8679189777a2SCristian Pallares      done
8680189777a2SCristian Pallares      dependency_libs=$tmp_libs
8681189777a2SCristian Pallares    done # for pass
8682*b3fce824SCristian Pallarés    if test prog = "$linkmode"; then
8683*b3fce824SCristian Pallarés      dlfiles=$newdlfiles
8684189777a2SCristian Pallares    fi
8685*b3fce824SCristian Pallarés    if test prog = "$linkmode" || test lib = "$linkmode"; then
8686*b3fce824SCristian Pallarés      dlprefiles=$newdlprefiles
8687189777a2SCristian Pallares    fi
8688189777a2SCristian Pallares
8689189777a2SCristian Pallares    case $linkmode in
8690189777a2SCristian Pallares    oldlib)
8691*b3fce824SCristian Pallarés      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
8692*b3fce824SCristian Pallarés	func_warning "'-dlopen' is ignored for archives"
8693189777a2SCristian Pallares      fi
8694189777a2SCristian Pallares
8695189777a2SCristian Pallares      case " $deplibs" in
8696189777a2SCristian Pallares      *\ -l* | *\ -L*)
8697*b3fce824SCristian Pallarés	func_warning "'-l' and '-L' are ignored for archives" ;;
8698189777a2SCristian Pallares      esac
8699189777a2SCristian Pallares
8700189777a2SCristian Pallares      test -n "$rpath" && \
8701*b3fce824SCristian Pallarés	func_warning "'-rpath' is ignored for archives"
8702189777a2SCristian Pallares
8703189777a2SCristian Pallares      test -n "$xrpath" && \
8704*b3fce824SCristian Pallarés	func_warning "'-R' is ignored for archives"
8705189777a2SCristian Pallares
8706189777a2SCristian Pallares      test -n "$vinfo" && \
8707*b3fce824SCristian Pallarés	func_warning "'-version-info/-version-number' is ignored for archives"
8708189777a2SCristian Pallares
8709189777a2SCristian Pallares      test -n "$release" && \
8710*b3fce824SCristian Pallarés	func_warning "'-release' is ignored for archives"
8711189777a2SCristian Pallares
8712189777a2SCristian Pallares      test -n "$export_symbols$export_symbols_regex" && \
8713*b3fce824SCristian Pallarés	func_warning "'-export-symbols' is ignored for archives"
8714189777a2SCristian Pallares
8715189777a2SCristian Pallares      # Now set the variables for building old libraries.
8716189777a2SCristian Pallares      build_libtool_libs=no
8717*b3fce824SCristian Pallarés      oldlibs=$output
8718189777a2SCristian Pallares      func_append objs "$old_deplibs"
8719189777a2SCristian Pallares      ;;
8720189777a2SCristian Pallares
8721189777a2SCristian Pallares    lib)
8722*b3fce824SCristian Pallarés      # Make sure we only generate libraries of the form 'libNAME.la'.
8723189777a2SCristian Pallares      case $outputname in
8724189777a2SCristian Pallares      lib*)
8725189777a2SCristian Pallares	func_stripname 'lib' '.la' "$outputname"
8726189777a2SCristian Pallares	name=$func_stripname_result
8727189777a2SCristian Pallares	eval shared_ext=\"$shrext_cmds\"
8728189777a2SCristian Pallares	eval libname=\"$libname_spec\"
8729189777a2SCristian Pallares	;;
8730189777a2SCristian Pallares      *)
8731*b3fce824SCristian Pallarés	test no = "$module" \
8732*b3fce824SCristian Pallarés	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
8733189777a2SCristian Pallares
8734*b3fce824SCristian Pallarés	if test no != "$need_lib_prefix"; then
8735189777a2SCristian Pallares	  # Add the "lib" prefix for modules if required
8736189777a2SCristian Pallares	  func_stripname '' '.la' "$outputname"
8737189777a2SCristian Pallares	  name=$func_stripname_result
8738189777a2SCristian Pallares	  eval shared_ext=\"$shrext_cmds\"
8739189777a2SCristian Pallares	  eval libname=\"$libname_spec\"
8740189777a2SCristian Pallares	else
8741189777a2SCristian Pallares	  func_stripname '' '.la' "$outputname"
8742189777a2SCristian Pallares	  libname=$func_stripname_result
8743189777a2SCristian Pallares	fi
8744189777a2SCristian Pallares	;;
8745189777a2SCristian Pallares      esac
8746189777a2SCristian Pallares
8747189777a2SCristian Pallares      if test -n "$objs"; then
8748*b3fce824SCristian Pallarés	if test pass_all != "$deplibs_check_method"; then
8749*b3fce824SCristian Pallarés	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8750189777a2SCristian Pallares	else
8751189777a2SCristian Pallares	  echo
8752189777a2SCristian Pallares	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8753189777a2SCristian Pallares	  $ECHO "*** objects $objs is not portable!"
8754189777a2SCristian Pallares	  func_append libobjs " $objs"
8755189777a2SCristian Pallares	fi
8756189777a2SCristian Pallares      fi
8757189777a2SCristian Pallares
8758*b3fce824SCristian Pallarés      test no = "$dlself" \
8759*b3fce824SCristian Pallarés	|| func_warning "'-dlopen self' is ignored for libtool libraries"
8760189777a2SCristian Pallares
8761189777a2SCristian Pallares      set dummy $rpath
8762189777a2SCristian Pallares      shift
8763*b3fce824SCristian Pallarés      test 1 -lt "$#" \
8764*b3fce824SCristian Pallarés	&& func_warning "ignoring multiple '-rpath's for a libtool library"
8765189777a2SCristian Pallares
8766*b3fce824SCristian Pallarés      install_libdir=$1
8767189777a2SCristian Pallares
8768189777a2SCristian Pallares      oldlibs=
8769189777a2SCristian Pallares      if test -z "$rpath"; then
8770*b3fce824SCristian Pallarés	if test yes = "$build_libtool_libs"; then
8771189777a2SCristian Pallares	  # Building a libtool convenience library.
8772*b3fce824SCristian Pallarés	  # Some compilers have problems with a '.al' extension so
8773189777a2SCristian Pallares	  # convenience libraries should have the same extension an
8774189777a2SCristian Pallares	  # archive normally would.
8775189777a2SCristian Pallares	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
8776189777a2SCristian Pallares	  build_libtool_libs=convenience
8777189777a2SCristian Pallares	  build_old_libs=yes
8778189777a2SCristian Pallares	fi
8779189777a2SCristian Pallares
8780189777a2SCristian Pallares	test -n "$vinfo" && \
8781*b3fce824SCristian Pallarés	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8782189777a2SCristian Pallares
8783189777a2SCristian Pallares	test -n "$release" && \
8784*b3fce824SCristian Pallarés	  func_warning "'-release' is ignored for convenience libraries"
8785189777a2SCristian Pallares      else
8786189777a2SCristian Pallares
8787189777a2SCristian Pallares	# Parse the version information argument.
8788*b3fce824SCristian Pallarés	save_ifs=$IFS; IFS=:
8789189777a2SCristian Pallares	set dummy $vinfo 0 0 0
8790189777a2SCristian Pallares	shift
8791*b3fce824SCristian Pallarés	IFS=$save_ifs
8792189777a2SCristian Pallares
8793189777a2SCristian Pallares	test -n "$7" && \
8794*b3fce824SCristian Pallarés	  func_fatal_help "too many parameters to '-version-info'"
8795189777a2SCristian Pallares
8796189777a2SCristian Pallares	# convert absolute version numbers to libtool ages
8797189777a2SCristian Pallares	# this retains compatibility with .la files and attempts
8798189777a2SCristian Pallares	# to make the code below a bit more comprehensible
8799189777a2SCristian Pallares
8800189777a2SCristian Pallares	case $vinfo_number in
8801189777a2SCristian Pallares	yes)
8802*b3fce824SCristian Pallarés	  number_major=$1
8803*b3fce824SCristian Pallarés	  number_minor=$2
8804*b3fce824SCristian Pallarés	  number_revision=$3
8805189777a2SCristian Pallares	  #
8806189777a2SCristian Pallares	  # There are really only two kinds -- those that
8807189777a2SCristian Pallares	  # use the current revision as the major version
8808189777a2SCristian Pallares	  # and those that subtract age and use age as
8809189777a2SCristian Pallares	  # a minor version.  But, then there is irix
8810*b3fce824SCristian Pallarés	  # that has an extra 1 added just for fun
8811189777a2SCristian Pallares	  #
8812189777a2SCristian Pallares	  case $version_type in
8813189777a2SCristian Pallares	  # correct linux to gnu/linux during the next big refactor
8814*b3fce824SCristian Pallarés	  darwin|freebsd-elf|linux|osf|windows|none)
8815189777a2SCristian Pallares	    func_arith $number_major + $number_minor
8816189777a2SCristian Pallares	    current=$func_arith_result
8817*b3fce824SCristian Pallarés	    age=$number_minor
8818*b3fce824SCristian Pallarés	    revision=$number_revision
8819189777a2SCristian Pallares	    ;;
8820*b3fce824SCristian Pallarés	  freebsd-aout|qnx|sunos)
8821*b3fce824SCristian Pallarés	    current=$number_major
8822*b3fce824SCristian Pallarés	    revision=$number_minor
8823*b3fce824SCristian Pallarés	    age=0
8824189777a2SCristian Pallares	    ;;
8825189777a2SCristian Pallares	  irix|nonstopux)
8826189777a2SCristian Pallares	    func_arith $number_major + $number_minor
8827189777a2SCristian Pallares	    current=$func_arith_result
8828*b3fce824SCristian Pallarés	    age=$number_minor
8829*b3fce824SCristian Pallarés	    revision=$number_minor
8830189777a2SCristian Pallares	    lt_irix_increment=no
8831189777a2SCristian Pallares	    ;;
8832189777a2SCristian Pallares	  *)
8833*b3fce824SCristian Pallarés	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
8834189777a2SCristian Pallares	    ;;
8835189777a2SCristian Pallares	  esac
8836189777a2SCristian Pallares	  ;;
8837189777a2SCristian Pallares	no)
8838*b3fce824SCristian Pallarés	  current=$1
8839*b3fce824SCristian Pallarés	  revision=$2
8840*b3fce824SCristian Pallarés	  age=$3
8841189777a2SCristian Pallares	  ;;
8842189777a2SCristian Pallares	esac
8843189777a2SCristian Pallares
8844189777a2SCristian Pallares	# Check that each of the things are valid numbers.
8845189777a2SCristian Pallares	case $current in
8846189777a2SCristian Pallares	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
8847189777a2SCristian Pallares	*)
8848*b3fce824SCristian Pallarés	  func_error "CURRENT '$current' must be a nonnegative integer"
8849*b3fce824SCristian Pallarés	  func_fatal_error "'$vinfo' is not valid version information"
8850189777a2SCristian Pallares	  ;;
8851189777a2SCristian Pallares	esac
8852189777a2SCristian Pallares
8853189777a2SCristian Pallares	case $revision in
8854189777a2SCristian Pallares	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
8855189777a2SCristian Pallares	*)
8856*b3fce824SCristian Pallarés	  func_error "REVISION '$revision' must be a nonnegative integer"
8857*b3fce824SCristian Pallarés	  func_fatal_error "'$vinfo' is not valid version information"
8858189777a2SCristian Pallares	  ;;
8859189777a2SCristian Pallares	esac
8860189777a2SCristian Pallares
8861189777a2SCristian Pallares	case $age in
8862189777a2SCristian Pallares	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
8863189777a2SCristian Pallares	*)
8864*b3fce824SCristian Pallarés	  func_error "AGE '$age' must be a nonnegative integer"
8865*b3fce824SCristian Pallarés	  func_fatal_error "'$vinfo' is not valid version information"
8866189777a2SCristian Pallares	  ;;
8867189777a2SCristian Pallares	esac
8868189777a2SCristian Pallares
8869189777a2SCristian Pallares	if test "$age" -gt "$current"; then
8870*b3fce824SCristian Pallarés	  func_error "AGE '$age' is greater than the current interface number '$current'"
8871*b3fce824SCristian Pallarés	  func_fatal_error "'$vinfo' is not valid version information"
8872189777a2SCristian Pallares	fi
8873189777a2SCristian Pallares
8874189777a2SCristian Pallares	# Calculate the version variables.
8875189777a2SCristian Pallares	major=
8876189777a2SCristian Pallares	versuffix=
8877189777a2SCristian Pallares	verstring=
8878189777a2SCristian Pallares	case $version_type in
8879189777a2SCristian Pallares	none) ;;
8880189777a2SCristian Pallares
8881189777a2SCristian Pallares	darwin)
8882189777a2SCristian Pallares	  # Like Linux, but with the current version available in
8883189777a2SCristian Pallares	  # verstring for coding it into the library header
8884189777a2SCristian Pallares	  func_arith $current - $age
8885189777a2SCristian Pallares	  major=.$func_arith_result
8886*b3fce824SCristian Pallarés	  versuffix=$major.$age.$revision
8887189777a2SCristian Pallares	  # Darwin ld doesn't like 0 for these options...
8888189777a2SCristian Pallares	  func_arith $current + 1
8889189777a2SCristian Pallares	  minor_current=$func_arith_result
8890*b3fce824SCristian Pallarés	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8891189777a2SCristian Pallares	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8892*b3fce824SCristian Pallarés          # On Darwin other compilers
8893*b3fce824SCristian Pallarés          case $CC in
8894*b3fce824SCristian Pallarés              nagfor*)
8895*b3fce824SCristian Pallarés                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8896*b3fce824SCristian Pallarés                  ;;
8897*b3fce824SCristian Pallarés              *)
8898*b3fce824SCristian Pallarés                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8899*b3fce824SCristian Pallarés                  ;;
8900*b3fce824SCristian Pallarés          esac
8901189777a2SCristian Pallares	  ;;
8902189777a2SCristian Pallares
8903189777a2SCristian Pallares	freebsd-aout)
8904*b3fce824SCristian Pallarés	  major=.$current
8905*b3fce824SCristian Pallarés	  versuffix=.$current.$revision
8906189777a2SCristian Pallares	  ;;
8907189777a2SCristian Pallares
8908189777a2SCristian Pallares	freebsd-elf)
8909*b3fce824SCristian Pallarés	  func_arith $current - $age
8910*b3fce824SCristian Pallarés	  major=.$func_arith_result
8911*b3fce824SCristian Pallarés	  versuffix=$major.$age.$revision
8912189777a2SCristian Pallares	  ;;
8913189777a2SCristian Pallares
8914189777a2SCristian Pallares	irix | nonstopux)
8915*b3fce824SCristian Pallarés	  if test no = "$lt_irix_increment"; then
8916189777a2SCristian Pallares	    func_arith $current - $age
8917189777a2SCristian Pallares	  else
8918189777a2SCristian Pallares	    func_arith $current - $age + 1
8919189777a2SCristian Pallares	  fi
8920189777a2SCristian Pallares	  major=$func_arith_result
8921189777a2SCristian Pallares
8922189777a2SCristian Pallares	  case $version_type in
8923189777a2SCristian Pallares	    nonstopux) verstring_prefix=nonstopux ;;
8924189777a2SCristian Pallares	    *)         verstring_prefix=sgi ;;
8925189777a2SCristian Pallares	  esac
8926*b3fce824SCristian Pallarés	  verstring=$verstring_prefix$major.$revision
8927189777a2SCristian Pallares
8928189777a2SCristian Pallares	  # Add in all the interfaces that we are compatible with.
8929189777a2SCristian Pallares	  loop=$revision
8930*b3fce824SCristian Pallarés	  while test 0 -ne "$loop"; do
8931189777a2SCristian Pallares	    func_arith $revision - $loop
8932189777a2SCristian Pallares	    iface=$func_arith_result
8933189777a2SCristian Pallares	    func_arith $loop - 1
8934189777a2SCristian Pallares	    loop=$func_arith_result
8935*b3fce824SCristian Pallarés	    verstring=$verstring_prefix$major.$iface:$verstring
8936189777a2SCristian Pallares	  done
8937189777a2SCristian Pallares
8938*b3fce824SCristian Pallarés	  # Before this point, $major must not contain '.'.
8939189777a2SCristian Pallares	  major=.$major
8940*b3fce824SCristian Pallarés	  versuffix=$major.$revision
8941189777a2SCristian Pallares	  ;;
8942189777a2SCristian Pallares
8943189777a2SCristian Pallares	linux) # correct to gnu/linux during the next big refactor
8944189777a2SCristian Pallares	  func_arith $current - $age
8945189777a2SCristian Pallares	  major=.$func_arith_result
8946*b3fce824SCristian Pallarés	  versuffix=$major.$age.$revision
8947189777a2SCristian Pallares	  ;;
8948189777a2SCristian Pallares
8949189777a2SCristian Pallares	osf)
8950189777a2SCristian Pallares	  func_arith $current - $age
8951189777a2SCristian Pallares	  major=.$func_arith_result
8952*b3fce824SCristian Pallarés	  versuffix=.$current.$age.$revision
8953*b3fce824SCristian Pallarés	  verstring=$current.$age.$revision
8954189777a2SCristian Pallares
8955189777a2SCristian Pallares	  # Add in all the interfaces that we are compatible with.
8956189777a2SCristian Pallares	  loop=$age
8957*b3fce824SCristian Pallarés	  while test 0 -ne "$loop"; do
8958189777a2SCristian Pallares	    func_arith $current - $loop
8959189777a2SCristian Pallares	    iface=$func_arith_result
8960189777a2SCristian Pallares	    func_arith $loop - 1
8961189777a2SCristian Pallares	    loop=$func_arith_result
8962*b3fce824SCristian Pallarés	    verstring=$verstring:$iface.0
8963189777a2SCristian Pallares	  done
8964189777a2SCristian Pallares
8965189777a2SCristian Pallares	  # Make executables depend on our current version.
8966*b3fce824SCristian Pallarés	  func_append verstring ":$current.0"
8967189777a2SCristian Pallares	  ;;
8968189777a2SCristian Pallares
8969189777a2SCristian Pallares	qnx)
8970*b3fce824SCristian Pallarés	  major=.$current
8971*b3fce824SCristian Pallarés	  versuffix=.$current
8972*b3fce824SCristian Pallarés	  ;;
8973*b3fce824SCristian Pallarés
8974*b3fce824SCristian Pallarés	sco)
8975*b3fce824SCristian Pallarés	  major=.$current
8976*b3fce824SCristian Pallarés	  versuffix=.$current
8977189777a2SCristian Pallares	  ;;
8978189777a2SCristian Pallares
8979189777a2SCristian Pallares	sunos)
8980*b3fce824SCristian Pallarés	  major=.$current
8981*b3fce824SCristian Pallarés	  versuffix=.$current.$revision
8982189777a2SCristian Pallares	  ;;
8983189777a2SCristian Pallares
8984189777a2SCristian Pallares	windows)
8985189777a2SCristian Pallares	  # Use '-' rather than '.', since we only want one
8986189777a2SCristian Pallares	  # extension on DOS 8.3 file systems.
8987189777a2SCristian Pallares	  func_arith $current - $age
8988189777a2SCristian Pallares	  major=$func_arith_result
8989*b3fce824SCristian Pallarés	  versuffix=-$major
8990189777a2SCristian Pallares	  ;;
8991189777a2SCristian Pallares
8992189777a2SCristian Pallares	*)
8993*b3fce824SCristian Pallarés	  func_fatal_configuration "unknown library version type '$version_type'"
8994189777a2SCristian Pallares	  ;;
8995189777a2SCristian Pallares	esac
8996189777a2SCristian Pallares
8997189777a2SCristian Pallares	# Clear the version info if we defaulted, and they specified a release.
8998189777a2SCristian Pallares	if test -z "$vinfo" && test -n "$release"; then
8999189777a2SCristian Pallares	  major=
9000189777a2SCristian Pallares	  case $version_type in
9001189777a2SCristian Pallares	  darwin)
9002189777a2SCristian Pallares	    # we can't check for "0.0" in archive_cmds due to quoting
9003189777a2SCristian Pallares	    # problems, so we reset it completely
9004189777a2SCristian Pallares	    verstring=
9005189777a2SCristian Pallares	    ;;
9006189777a2SCristian Pallares	  *)
9007*b3fce824SCristian Pallarés	    verstring=0.0
9008189777a2SCristian Pallares	    ;;
9009189777a2SCristian Pallares	  esac
9010*b3fce824SCristian Pallarés	  if test no = "$need_version"; then
9011189777a2SCristian Pallares	    versuffix=
9012189777a2SCristian Pallares	  else
9013*b3fce824SCristian Pallarés	    versuffix=.0.0
9014189777a2SCristian Pallares	  fi
9015189777a2SCristian Pallares	fi
9016189777a2SCristian Pallares
9017189777a2SCristian Pallares	# Remove version info from name if versioning should be avoided
9018*b3fce824SCristian Pallarés	if test yes,no = "$avoid_version,$need_version"; then
9019189777a2SCristian Pallares	  major=
9020189777a2SCristian Pallares	  versuffix=
9021*b3fce824SCristian Pallarés	  verstring=
9022189777a2SCristian Pallares	fi
9023189777a2SCristian Pallares
9024189777a2SCristian Pallares	# Check to see if the archive will have undefined symbols.
9025*b3fce824SCristian Pallarés	if test yes = "$allow_undefined"; then
9026*b3fce824SCristian Pallarés	  if test unsupported = "$allow_undefined_flag"; then
9027*b3fce824SCristian Pallarés	    if test yes = "$build_old_libs"; then
9028*b3fce824SCristian Pallarés	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9029189777a2SCristian Pallares	      build_libtool_libs=no
9030*b3fce824SCristian Pallarés	    else
9031*b3fce824SCristian Pallarés	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9032*b3fce824SCristian Pallarés	    fi
9033189777a2SCristian Pallares	  fi
9034189777a2SCristian Pallares	else
9035189777a2SCristian Pallares	  # Don't allow undefined symbols.
9036*b3fce824SCristian Pallarés	  allow_undefined_flag=$no_undefined_flag
9037189777a2SCristian Pallares	fi
9038189777a2SCristian Pallares
9039189777a2SCristian Pallares      fi
9040189777a2SCristian Pallares
9041*b3fce824SCristian Pallarés      func_generate_dlsyms "$libname" "$libname" :
9042189777a2SCristian Pallares      func_append libobjs " $symfileobj"
9043*b3fce824SCristian Pallarés      test " " = "$libobjs" && libobjs=
9044189777a2SCristian Pallares
9045*b3fce824SCristian Pallarés      if test relink != "$opt_mode"; then
9046189777a2SCristian Pallares	# Remove our outputs, but don't remove object files since they
9047189777a2SCristian Pallares	# may have been created when compiling PIC objects.
9048189777a2SCristian Pallares	removelist=
9049189777a2SCristian Pallares	tempremovelist=`$ECHO "$output_objdir/*"`
9050189777a2SCristian Pallares	for p in $tempremovelist; do
9051189777a2SCristian Pallares	  case $p in
9052189777a2SCristian Pallares	    *.$objext | *.gcno)
9053189777a2SCristian Pallares	       ;;
9054*b3fce824SCristian Pallarés	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9055*b3fce824SCristian Pallarés	       if test -n "$precious_files_regex"; then
9056189777a2SCristian Pallares		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9057189777a2SCristian Pallares		 then
9058189777a2SCristian Pallares		   continue
9059189777a2SCristian Pallares		 fi
9060189777a2SCristian Pallares	       fi
9061189777a2SCristian Pallares	       func_append removelist " $p"
9062189777a2SCristian Pallares	       ;;
9063189777a2SCristian Pallares	    *) ;;
9064189777a2SCristian Pallares	  esac
9065189777a2SCristian Pallares	done
9066189777a2SCristian Pallares	test -n "$removelist" && \
9067189777a2SCristian Pallares	  func_show_eval "${RM}r \$removelist"
9068189777a2SCristian Pallares      fi
9069189777a2SCristian Pallares
9070189777a2SCristian Pallares      # Now set the variables for building old libraries.
9071*b3fce824SCristian Pallarés      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9072189777a2SCristian Pallares	func_append oldlibs " $output_objdir/$libname.$libext"
9073189777a2SCristian Pallares
9074189777a2SCristian Pallares	# Transform .lo files to .o files.
9075*b3fce824SCristian Pallarés	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9076189777a2SCristian Pallares      fi
9077189777a2SCristian Pallares
9078189777a2SCristian Pallares      # Eliminate all temporary directories.
9079189777a2SCristian Pallares      #for path in $notinst_path; do
9080189777a2SCristian Pallares      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9081189777a2SCristian Pallares      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9082189777a2SCristian Pallares      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9083189777a2SCristian Pallares      #done
9084189777a2SCristian Pallares
9085189777a2SCristian Pallares      if test -n "$xrpath"; then
9086189777a2SCristian Pallares	# If the user specified any rpath flags, then add them.
9087189777a2SCristian Pallares	temp_xrpath=
9088189777a2SCristian Pallares	for libdir in $xrpath; do
9089189777a2SCristian Pallares	  func_replace_sysroot "$libdir"
9090189777a2SCristian Pallares	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9091189777a2SCristian Pallares	  case "$finalize_rpath " in
9092189777a2SCristian Pallares	  *" $libdir "*) ;;
9093189777a2SCristian Pallares	  *) func_append finalize_rpath " $libdir" ;;
9094189777a2SCristian Pallares	  esac
9095189777a2SCristian Pallares	done
9096*b3fce824SCristian Pallarés	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9097189777a2SCristian Pallares	  dependency_libs="$temp_xrpath $dependency_libs"
9098189777a2SCristian Pallares	fi
9099189777a2SCristian Pallares      fi
9100189777a2SCristian Pallares
9101189777a2SCristian Pallares      # Make sure dlfiles contains only unique files that won't be dlpreopened
9102*b3fce824SCristian Pallarés      old_dlfiles=$dlfiles
9103189777a2SCristian Pallares      dlfiles=
9104189777a2SCristian Pallares      for lib in $old_dlfiles; do
9105189777a2SCristian Pallares	case " $dlprefiles $dlfiles " in
9106189777a2SCristian Pallares	*" $lib "*) ;;
9107189777a2SCristian Pallares	*) func_append dlfiles " $lib" ;;
9108189777a2SCristian Pallares	esac
9109189777a2SCristian Pallares      done
9110189777a2SCristian Pallares
9111189777a2SCristian Pallares      # Make sure dlprefiles contains only unique files
9112*b3fce824SCristian Pallarés      old_dlprefiles=$dlprefiles
9113189777a2SCristian Pallares      dlprefiles=
9114189777a2SCristian Pallares      for lib in $old_dlprefiles; do
9115189777a2SCristian Pallares	case "$dlprefiles " in
9116189777a2SCristian Pallares	*" $lib "*) ;;
9117189777a2SCristian Pallares	*) func_append dlprefiles " $lib" ;;
9118189777a2SCristian Pallares	esac
9119189777a2SCristian Pallares      done
9120189777a2SCristian Pallares
9121*b3fce824SCristian Pallarés      if test yes = "$build_libtool_libs"; then
9122189777a2SCristian Pallares	if test -n "$rpath"; then
9123189777a2SCristian Pallares	  case $host in
9124189777a2SCristian Pallares	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9125189777a2SCristian Pallares	    # these systems don't actually have a c library (as such)!
9126189777a2SCristian Pallares	    ;;
9127189777a2SCristian Pallares	  *-*-rhapsody* | *-*-darwin1.[012])
9128189777a2SCristian Pallares	    # Rhapsody C library is in the System framework
9129189777a2SCristian Pallares	    func_append deplibs " System.ltframework"
9130189777a2SCristian Pallares	    ;;
9131189777a2SCristian Pallares	  *-*-netbsd*)
9132189777a2SCristian Pallares	    # Don't link with libc until the a.out ld.so is fixed.
9133189777a2SCristian Pallares	    ;;
9134189777a2SCristian Pallares	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9135189777a2SCristian Pallares	    # Do not include libc due to us having libc/libc_r.
9136189777a2SCristian Pallares	    ;;
9137189777a2SCristian Pallares	  *-*-sco3.2v5* | *-*-sco5v6*)
9138189777a2SCristian Pallares	    # Causes problems with __ctype
9139189777a2SCristian Pallares	    ;;
9140189777a2SCristian Pallares	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9141189777a2SCristian Pallares	    # Compiler inserts libc in the correct place for threads to work
9142189777a2SCristian Pallares	    ;;
9143189777a2SCristian Pallares	  *)
9144189777a2SCristian Pallares	    # Add libc to deplibs on all other systems if necessary.
9145*b3fce824SCristian Pallarés	    if test yes = "$build_libtool_need_lc"; then
9146189777a2SCristian Pallares	      func_append deplibs " -lc"
9147189777a2SCristian Pallares	    fi
9148189777a2SCristian Pallares	    ;;
9149189777a2SCristian Pallares	  esac
9150189777a2SCristian Pallares	fi
9151189777a2SCristian Pallares
9152189777a2SCristian Pallares	# Transform deplibs into only deplibs that can be linked in shared.
9153189777a2SCristian Pallares	name_save=$name
9154189777a2SCristian Pallares	libname_save=$libname
9155189777a2SCristian Pallares	release_save=$release
9156189777a2SCristian Pallares	versuffix_save=$versuffix
9157189777a2SCristian Pallares	major_save=$major
9158189777a2SCristian Pallares	# I'm not sure if I'm treating the release correctly.  I think
9159189777a2SCristian Pallares	# release should show up in the -l (ie -lgmp5) so we don't want to
9160189777a2SCristian Pallares	# add it in twice.  Is that correct?
9161*b3fce824SCristian Pallarés	release=
9162*b3fce824SCristian Pallarés	versuffix=
9163*b3fce824SCristian Pallarés	major=
9164189777a2SCristian Pallares	newdeplibs=
9165189777a2SCristian Pallares	droppeddeps=no
9166189777a2SCristian Pallares	case $deplibs_check_method in
9167189777a2SCristian Pallares	pass_all)
9168189777a2SCristian Pallares	  # Don't check for shared/static.  Everything works.
9169189777a2SCristian Pallares	  # This might be a little naive.  We might want to check
9170189777a2SCristian Pallares	  # whether the library exists or not.  But this is on
9171189777a2SCristian Pallares	  # osf3 & osf4 and I'm not really sure... Just
9172189777a2SCristian Pallares	  # implementing what was already the behavior.
9173189777a2SCristian Pallares	  newdeplibs=$deplibs
9174189777a2SCristian Pallares	  ;;
9175189777a2SCristian Pallares	test_compile)
9176189777a2SCristian Pallares	  # This code stresses the "libraries are programs" paradigm to its
9177189777a2SCristian Pallares	  # limits. Maybe even breaks it.  We compile a program, linking it
9178189777a2SCristian Pallares	  # against the deplibs as a proxy for the library.  Then we can check
9179189777a2SCristian Pallares	  # whether they linked in statically or dynamically with ldd.
9180189777a2SCristian Pallares	  $opt_dry_run || $RM conftest.c
9181189777a2SCristian Pallares	  cat > conftest.c <<EOF
9182189777a2SCristian Pallares	  int main() { return 0; }
9183189777a2SCristian PallaresEOF
9184189777a2SCristian Pallares	  $opt_dry_run || $RM conftest
9185189777a2SCristian Pallares	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9186189777a2SCristian Pallares	    ldd_output=`ldd conftest`
9187189777a2SCristian Pallares	    for i in $deplibs; do
9188189777a2SCristian Pallares	      case $i in
9189189777a2SCristian Pallares	      -l*)
9190189777a2SCristian Pallares		func_stripname -l '' "$i"
9191189777a2SCristian Pallares		name=$func_stripname_result
9192*b3fce824SCristian Pallarés		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9193189777a2SCristian Pallares		  case " $predeps $postdeps " in
9194189777a2SCristian Pallares		  *" $i "*)
9195189777a2SCristian Pallares		    func_append newdeplibs " $i"
9196*b3fce824SCristian Pallarés		    i=
9197189777a2SCristian Pallares		    ;;
9198189777a2SCristian Pallares		  esac
9199189777a2SCristian Pallares		fi
9200189777a2SCristian Pallares		if test -n "$i"; then
9201189777a2SCristian Pallares		  libname=`eval "\\$ECHO \"$libname_spec\""`
9202189777a2SCristian Pallares		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9203189777a2SCristian Pallares		  set dummy $deplib_matches; shift
9204189777a2SCristian Pallares		  deplib_match=$1
9205189777a2SCristian Pallares		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9206189777a2SCristian Pallares		    func_append newdeplibs " $i"
9207189777a2SCristian Pallares		  else
9208189777a2SCristian Pallares		    droppeddeps=yes
9209189777a2SCristian Pallares		    echo
9210189777a2SCristian Pallares		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9211189777a2SCristian Pallares		    echo "*** I have the capability to make that library automatically link in when"
9212189777a2SCristian Pallares		    echo "*** you link to this library.  But I can only do this if you have a"
9213189777a2SCristian Pallares		    echo "*** shared version of the library, which I believe you do not have"
9214189777a2SCristian Pallares		    echo "*** because a test_compile did reveal that the linker did not use it for"
9215189777a2SCristian Pallares		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9216189777a2SCristian Pallares		  fi
9217189777a2SCristian Pallares		fi
9218189777a2SCristian Pallares		;;
9219189777a2SCristian Pallares	      *)
9220189777a2SCristian Pallares		func_append newdeplibs " $i"
9221189777a2SCristian Pallares		;;
9222189777a2SCristian Pallares	      esac
9223189777a2SCristian Pallares	    done
9224189777a2SCristian Pallares	  else
9225189777a2SCristian Pallares	    # Error occurred in the first compile.  Let's try to salvage
9226189777a2SCristian Pallares	    # the situation: Compile a separate program for each library.
9227189777a2SCristian Pallares	    for i in $deplibs; do
9228189777a2SCristian Pallares	      case $i in
9229189777a2SCristian Pallares	      -l*)
9230189777a2SCristian Pallares		func_stripname -l '' "$i"
9231189777a2SCristian Pallares		name=$func_stripname_result
9232189777a2SCristian Pallares		$opt_dry_run || $RM conftest
9233189777a2SCristian Pallares		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9234189777a2SCristian Pallares		  ldd_output=`ldd conftest`
9235*b3fce824SCristian Pallarés		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9236189777a2SCristian Pallares		    case " $predeps $postdeps " in
9237189777a2SCristian Pallares		    *" $i "*)
9238189777a2SCristian Pallares		      func_append newdeplibs " $i"
9239*b3fce824SCristian Pallarés		      i=
9240189777a2SCristian Pallares		      ;;
9241189777a2SCristian Pallares		    esac
9242189777a2SCristian Pallares		  fi
9243189777a2SCristian Pallares		  if test -n "$i"; then
9244189777a2SCristian Pallares		    libname=`eval "\\$ECHO \"$libname_spec\""`
9245189777a2SCristian Pallares		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9246189777a2SCristian Pallares		    set dummy $deplib_matches; shift
9247189777a2SCristian Pallares		    deplib_match=$1
9248189777a2SCristian Pallares		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9249189777a2SCristian Pallares		      func_append newdeplibs " $i"
9250189777a2SCristian Pallares		    else
9251189777a2SCristian Pallares		      droppeddeps=yes
9252189777a2SCristian Pallares		      echo
9253189777a2SCristian Pallares		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9254189777a2SCristian Pallares		      echo "*** I have the capability to make that library automatically link in when"
9255189777a2SCristian Pallares		      echo "*** you link to this library.  But I can only do this if you have a"
9256189777a2SCristian Pallares		      echo "*** shared version of the library, which you do not appear to have"
9257189777a2SCristian Pallares		      echo "*** because a test_compile did reveal that the linker did not use this one"
9258189777a2SCristian Pallares		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9259189777a2SCristian Pallares		    fi
9260189777a2SCristian Pallares		  fi
9261189777a2SCristian Pallares		else
9262189777a2SCristian Pallares		  droppeddeps=yes
9263189777a2SCristian Pallares		  echo
9264189777a2SCristian Pallares		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
9265189777a2SCristian Pallares		  echo "*** make it link in!  You will probably need to install it or some"
9266189777a2SCristian Pallares		  echo "*** library that it depends on before this library will be fully"
9267189777a2SCristian Pallares		  echo "*** functional.  Installing it before continuing would be even better."
9268189777a2SCristian Pallares		fi
9269189777a2SCristian Pallares		;;
9270189777a2SCristian Pallares	      *)
9271189777a2SCristian Pallares		func_append newdeplibs " $i"
9272189777a2SCristian Pallares		;;
9273189777a2SCristian Pallares	      esac
9274189777a2SCristian Pallares	    done
9275189777a2SCristian Pallares	  fi
9276189777a2SCristian Pallares	  ;;
9277189777a2SCristian Pallares	file_magic*)
9278189777a2SCristian Pallares	  set dummy $deplibs_check_method; shift
9279189777a2SCristian Pallares	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9280189777a2SCristian Pallares	  for a_deplib in $deplibs; do
9281189777a2SCristian Pallares	    case $a_deplib in
9282189777a2SCristian Pallares	    -l*)
9283189777a2SCristian Pallares	      func_stripname -l '' "$a_deplib"
9284189777a2SCristian Pallares	      name=$func_stripname_result
9285*b3fce824SCristian Pallarés	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9286189777a2SCristian Pallares		case " $predeps $postdeps " in
9287189777a2SCristian Pallares		*" $a_deplib "*)
9288189777a2SCristian Pallares		  func_append newdeplibs " $a_deplib"
9289*b3fce824SCristian Pallarés		  a_deplib=
9290189777a2SCristian Pallares		  ;;
9291189777a2SCristian Pallares		esac
9292189777a2SCristian Pallares	      fi
9293189777a2SCristian Pallares	      if test -n "$a_deplib"; then
9294189777a2SCristian Pallares		libname=`eval "\\$ECHO \"$libname_spec\""`
9295189777a2SCristian Pallares		if test -n "$file_magic_glob"; then
9296189777a2SCristian Pallares		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9297189777a2SCristian Pallares		else
9298189777a2SCristian Pallares		  libnameglob=$libname
9299189777a2SCristian Pallares		fi
9300*b3fce824SCristian Pallarés		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9301189777a2SCristian Pallares		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9302*b3fce824SCristian Pallarés		  if test yes = "$want_nocaseglob"; then
9303189777a2SCristian Pallares		    shopt -s nocaseglob
9304189777a2SCristian Pallares		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9305189777a2SCristian Pallares		    $nocaseglob
9306189777a2SCristian Pallares		  else
9307189777a2SCristian Pallares		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9308189777a2SCristian Pallares		  fi
9309189777a2SCristian Pallares		  for potent_lib in $potential_libs; do
9310189777a2SCristian Pallares		      # Follow soft links.
9311189777a2SCristian Pallares		      if ls -lLd "$potent_lib" 2>/dev/null |
9312189777a2SCristian Pallares			 $GREP " -> " >/dev/null; then
9313189777a2SCristian Pallares			continue
9314189777a2SCristian Pallares		      fi
9315189777a2SCristian Pallares		      # The statement above tries to avoid entering an
9316189777a2SCristian Pallares		      # endless loop below, in case of cyclic links.
9317189777a2SCristian Pallares		      # We might still enter an endless loop, since a link
9318189777a2SCristian Pallares		      # loop can be closed while we follow links,
9319189777a2SCristian Pallares		      # but so what?
9320*b3fce824SCristian Pallarés		      potlib=$potent_lib
9321189777a2SCristian Pallares		      while test -h "$potlib" 2>/dev/null; do
9322*b3fce824SCristian Pallarés			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9323189777a2SCristian Pallares			case $potliblink in
9324*b3fce824SCristian Pallarés			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9325*b3fce824SCristian Pallarés			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9326189777a2SCristian Pallares			esac
9327189777a2SCristian Pallares		      done
9328189777a2SCristian Pallares		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9329189777a2SCristian Pallares			 $SED -e 10q |
9330189777a2SCristian Pallares			 $EGREP "$file_magic_regex" > /dev/null; then
9331189777a2SCristian Pallares			func_append newdeplibs " $a_deplib"
9332*b3fce824SCristian Pallarés			a_deplib=
9333189777a2SCristian Pallares			break 2
9334189777a2SCristian Pallares		      fi
9335189777a2SCristian Pallares		  done
9336189777a2SCristian Pallares		done
9337189777a2SCristian Pallares	      fi
9338189777a2SCristian Pallares	      if test -n "$a_deplib"; then
9339189777a2SCristian Pallares		droppeddeps=yes
9340189777a2SCristian Pallares		echo
9341189777a2SCristian Pallares		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9342189777a2SCristian Pallares		echo "*** I have the capability to make that library automatically link in when"
9343189777a2SCristian Pallares		echo "*** you link to this library.  But I can only do this if you have a"
9344189777a2SCristian Pallares		echo "*** shared version of the library, which you do not appear to have"
9345189777a2SCristian Pallares		echo "*** because I did check the linker path looking for a file starting"
9346189777a2SCristian Pallares		if test -z "$potlib"; then
9347189777a2SCristian Pallares		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9348189777a2SCristian Pallares		else
9349189777a2SCristian Pallares		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9350189777a2SCristian Pallares		  $ECHO "*** using a file magic. Last file checked: $potlib"
9351189777a2SCristian Pallares		fi
9352189777a2SCristian Pallares	      fi
9353189777a2SCristian Pallares	      ;;
9354189777a2SCristian Pallares	    *)
9355189777a2SCristian Pallares	      # Add a -L argument.
9356189777a2SCristian Pallares	      func_append newdeplibs " $a_deplib"
9357189777a2SCristian Pallares	      ;;
9358189777a2SCristian Pallares	    esac
9359189777a2SCristian Pallares	  done # Gone through all deplibs.
9360189777a2SCristian Pallares	  ;;
9361189777a2SCristian Pallares	match_pattern*)
9362189777a2SCristian Pallares	  set dummy $deplibs_check_method; shift
9363189777a2SCristian Pallares	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9364189777a2SCristian Pallares	  for a_deplib in $deplibs; do
9365189777a2SCristian Pallares	    case $a_deplib in
9366189777a2SCristian Pallares	    -l*)
9367189777a2SCristian Pallares	      func_stripname -l '' "$a_deplib"
9368189777a2SCristian Pallares	      name=$func_stripname_result
9369*b3fce824SCristian Pallarés	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9370189777a2SCristian Pallares		case " $predeps $postdeps " in
9371189777a2SCristian Pallares		*" $a_deplib "*)
9372189777a2SCristian Pallares		  func_append newdeplibs " $a_deplib"
9373*b3fce824SCristian Pallarés		  a_deplib=
9374189777a2SCristian Pallares		  ;;
9375189777a2SCristian Pallares		esac
9376189777a2SCristian Pallares	      fi
9377189777a2SCristian Pallares	      if test -n "$a_deplib"; then
9378189777a2SCristian Pallares		libname=`eval "\\$ECHO \"$libname_spec\""`
9379189777a2SCristian Pallares		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9380189777a2SCristian Pallares		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9381189777a2SCristian Pallares		  for potent_lib in $potential_libs; do
9382*b3fce824SCristian Pallarés		    potlib=$potent_lib # see symlink-check above in file_magic test
9383189777a2SCristian Pallares		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9384189777a2SCristian Pallares		       $EGREP "$match_pattern_regex" > /dev/null; then
9385189777a2SCristian Pallares		      func_append newdeplibs " $a_deplib"
9386*b3fce824SCristian Pallarés		      a_deplib=
9387189777a2SCristian Pallares		      break 2
9388189777a2SCristian Pallares		    fi
9389189777a2SCristian Pallares		  done
9390189777a2SCristian Pallares		done
9391189777a2SCristian Pallares	      fi
9392189777a2SCristian Pallares	      if test -n "$a_deplib"; then
9393189777a2SCristian Pallares		droppeddeps=yes
9394189777a2SCristian Pallares		echo
9395189777a2SCristian Pallares		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9396189777a2SCristian Pallares		echo "*** I have the capability to make that library automatically link in when"
9397189777a2SCristian Pallares		echo "*** you link to this library.  But I can only do this if you have a"
9398189777a2SCristian Pallares		echo "*** shared version of the library, which you do not appear to have"
9399189777a2SCristian Pallares		echo "*** because I did check the linker path looking for a file starting"
9400189777a2SCristian Pallares		if test -z "$potlib"; then
9401189777a2SCristian Pallares		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9402189777a2SCristian Pallares		else
9403189777a2SCristian Pallares		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9404189777a2SCristian Pallares		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9405189777a2SCristian Pallares		fi
9406189777a2SCristian Pallares	      fi
9407189777a2SCristian Pallares	      ;;
9408189777a2SCristian Pallares	    *)
9409189777a2SCristian Pallares	      # Add a -L argument.
9410189777a2SCristian Pallares	      func_append newdeplibs " $a_deplib"
9411189777a2SCristian Pallares	      ;;
9412189777a2SCristian Pallares	    esac
9413189777a2SCristian Pallares	  done # Gone through all deplibs.
9414189777a2SCristian Pallares	  ;;
9415189777a2SCristian Pallares	none | unknown | *)
9416*b3fce824SCristian Pallarés	  newdeplibs=
9417189777a2SCristian Pallares	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9418*b3fce824SCristian Pallarés	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9419189777a2SCristian Pallares	    for i in $predeps $postdeps; do
9420189777a2SCristian Pallares	      # can't use Xsed below, because $i might contain '/'
9421*b3fce824SCristian Pallarés	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9422189777a2SCristian Pallares	    done
9423189777a2SCristian Pallares	  fi
9424189777a2SCristian Pallares	  case $tmp_deplibs in
9425189777a2SCristian Pallares	  *[!\	\ ]*)
9426189777a2SCristian Pallares	    echo
9427*b3fce824SCristian Pallarés	    if test none = "$deplibs_check_method"; then
9428189777a2SCristian Pallares	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9429189777a2SCristian Pallares	    else
9430189777a2SCristian Pallares	      echo "*** Warning: inter-library dependencies are not known to be supported."
9431189777a2SCristian Pallares	    fi
9432189777a2SCristian Pallares	    echo "*** All declared inter-library dependencies are being dropped."
9433189777a2SCristian Pallares	    droppeddeps=yes
9434189777a2SCristian Pallares	    ;;
9435189777a2SCristian Pallares	  esac
9436189777a2SCristian Pallares	  ;;
9437189777a2SCristian Pallares	esac
9438189777a2SCristian Pallares	versuffix=$versuffix_save
9439189777a2SCristian Pallares	major=$major_save
9440189777a2SCristian Pallares	release=$release_save
9441189777a2SCristian Pallares	libname=$libname_save
9442189777a2SCristian Pallares	name=$name_save
9443189777a2SCristian Pallares
9444189777a2SCristian Pallares	case $host in
9445189777a2SCristian Pallares	*-*-rhapsody* | *-*-darwin1.[012])
9446189777a2SCristian Pallares	  # On Rhapsody replace the C library with the System framework
9447189777a2SCristian Pallares	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9448189777a2SCristian Pallares	  ;;
9449189777a2SCristian Pallares	esac
9450189777a2SCristian Pallares
9451*b3fce824SCristian Pallarés	if test yes = "$droppeddeps"; then
9452*b3fce824SCristian Pallarés	  if test yes = "$module"; then
9453189777a2SCristian Pallares	    echo
9454189777a2SCristian Pallares	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9455189777a2SCristian Pallares	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
9456189777a2SCristian Pallares	    echo "*** a static module, that should work as long as the dlopening"
9457189777a2SCristian Pallares	    echo "*** application is linked with the -dlopen flag."
9458189777a2SCristian Pallares	    if test -z "$global_symbol_pipe"; then
9459189777a2SCristian Pallares	      echo
9460189777a2SCristian Pallares	      echo "*** However, this would only work if libtool was able to extract symbol"
9461*b3fce824SCristian Pallarés	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9462189777a2SCristian Pallares	      echo "*** not find such a program.  So, this module is probably useless."
9463*b3fce824SCristian Pallarés	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9464189777a2SCristian Pallares	    fi
9465*b3fce824SCristian Pallarés	    if test no = "$build_old_libs"; then
9466*b3fce824SCristian Pallarés	      oldlibs=$output_objdir/$libname.$libext
9467189777a2SCristian Pallares	      build_libtool_libs=module
9468189777a2SCristian Pallares	      build_old_libs=yes
9469189777a2SCristian Pallares	    else
9470189777a2SCristian Pallares	      build_libtool_libs=no
9471189777a2SCristian Pallares	    fi
9472189777a2SCristian Pallares	  else
9473189777a2SCristian Pallares	    echo "*** The inter-library dependencies that have been dropped here will be"
9474189777a2SCristian Pallares	    echo "*** automatically added whenever a program is linked with this library"
9475189777a2SCristian Pallares	    echo "*** or is declared to -dlopen it."
9476189777a2SCristian Pallares
9477*b3fce824SCristian Pallarés	    if test no = "$allow_undefined"; then
9478189777a2SCristian Pallares	      echo
9479189777a2SCristian Pallares	      echo "*** Since this library must not contain undefined symbols,"
9480189777a2SCristian Pallares	      echo "*** because either the platform does not support them or"
9481189777a2SCristian Pallares	      echo "*** it was explicitly requested with -no-undefined,"
9482189777a2SCristian Pallares	      echo "*** libtool will only create a static version of it."
9483*b3fce824SCristian Pallarés	      if test no = "$build_old_libs"; then
9484*b3fce824SCristian Pallarés		oldlibs=$output_objdir/$libname.$libext
9485189777a2SCristian Pallares		build_libtool_libs=module
9486189777a2SCristian Pallares		build_old_libs=yes
9487189777a2SCristian Pallares	      else
9488189777a2SCristian Pallares		build_libtool_libs=no
9489189777a2SCristian Pallares	      fi
9490189777a2SCristian Pallares	    fi
9491189777a2SCristian Pallares	  fi
9492189777a2SCristian Pallares	fi
9493189777a2SCristian Pallares	# Done checking deplibs!
9494189777a2SCristian Pallares	deplibs=$newdeplibs
9495189777a2SCristian Pallares      fi
9496189777a2SCristian Pallares      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9497189777a2SCristian Pallares      case $host in
9498189777a2SCristian Pallares	*-*-darwin*)
9499189777a2SCristian Pallares	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9500189777a2SCristian Pallares	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9501189777a2SCristian Pallares	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9502189777a2SCristian Pallares	  ;;
9503189777a2SCristian Pallares      esac
9504189777a2SCristian Pallares
9505189777a2SCristian Pallares      # move library search paths that coincide with paths to not yet
9506189777a2SCristian Pallares      # installed libraries to the beginning of the library search list
9507189777a2SCristian Pallares      new_libs=
9508189777a2SCristian Pallares      for path in $notinst_path; do
9509189777a2SCristian Pallares	case " $new_libs " in
9510189777a2SCristian Pallares	*" -L$path/$objdir "*) ;;
9511189777a2SCristian Pallares	*)
9512189777a2SCristian Pallares	  case " $deplibs " in
9513189777a2SCristian Pallares	  *" -L$path/$objdir "*)
9514189777a2SCristian Pallares	    func_append new_libs " -L$path/$objdir" ;;
9515189777a2SCristian Pallares	  esac
9516189777a2SCristian Pallares	  ;;
9517189777a2SCristian Pallares	esac
9518189777a2SCristian Pallares      done
9519189777a2SCristian Pallares      for deplib in $deplibs; do
9520189777a2SCristian Pallares	case $deplib in
9521189777a2SCristian Pallares	-L*)
9522189777a2SCristian Pallares	  case " $new_libs " in
9523189777a2SCristian Pallares	  *" $deplib "*) ;;
9524189777a2SCristian Pallares	  *) func_append new_libs " $deplib" ;;
9525189777a2SCristian Pallares	  esac
9526189777a2SCristian Pallares	  ;;
9527189777a2SCristian Pallares	*) func_append new_libs " $deplib" ;;
9528189777a2SCristian Pallares	esac
9529189777a2SCristian Pallares      done
9530*b3fce824SCristian Pallarés      deplibs=$new_libs
9531189777a2SCristian Pallares
9532189777a2SCristian Pallares      # All the library-specific variables (install_libdir is set above).
9533189777a2SCristian Pallares      library_names=
9534189777a2SCristian Pallares      old_library=
9535189777a2SCristian Pallares      dlname=
9536189777a2SCristian Pallares
9537189777a2SCristian Pallares      # Test again, we may have decided not to build it any more
9538*b3fce824SCristian Pallarés      if test yes = "$build_libtool_libs"; then
9539*b3fce824SCristian Pallarés	# Remove $wl instances when linking with ld.
9540189777a2SCristian Pallares	# FIXME: should test the right _cmds variable.
9541189777a2SCristian Pallares	case $archive_cmds in
9542189777a2SCristian Pallares	  *\$LD\ *) wl= ;;
9543189777a2SCristian Pallares        esac
9544*b3fce824SCristian Pallarés	if test yes = "$hardcode_into_libs"; then
9545189777a2SCristian Pallares	  # Hardcode the library paths
9546189777a2SCristian Pallares	  hardcode_libdirs=
9547189777a2SCristian Pallares	  dep_rpath=
9548*b3fce824SCristian Pallarés	  rpath=$finalize_rpath
9549*b3fce824SCristian Pallarés	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9550189777a2SCristian Pallares	  for libdir in $rpath; do
9551189777a2SCristian Pallares	    if test -n "$hardcode_libdir_flag_spec"; then
9552189777a2SCristian Pallares	      if test -n "$hardcode_libdir_separator"; then
9553189777a2SCristian Pallares		func_replace_sysroot "$libdir"
9554189777a2SCristian Pallares		libdir=$func_replace_sysroot_result
9555189777a2SCristian Pallares		if test -z "$hardcode_libdirs"; then
9556*b3fce824SCristian Pallarés		  hardcode_libdirs=$libdir
9557189777a2SCristian Pallares		else
9558189777a2SCristian Pallares		  # Just accumulate the unique libdirs.
9559189777a2SCristian Pallares		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9560189777a2SCristian Pallares		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9561189777a2SCristian Pallares		    ;;
9562189777a2SCristian Pallares		  *)
9563189777a2SCristian Pallares		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9564189777a2SCristian Pallares		    ;;
9565189777a2SCristian Pallares		  esac
9566189777a2SCristian Pallares		fi
9567189777a2SCristian Pallares	      else
9568189777a2SCristian Pallares		eval flag=\"$hardcode_libdir_flag_spec\"
9569189777a2SCristian Pallares		func_append dep_rpath " $flag"
9570189777a2SCristian Pallares	      fi
9571189777a2SCristian Pallares	    elif test -n "$runpath_var"; then
9572189777a2SCristian Pallares	      case "$perm_rpath " in
9573189777a2SCristian Pallares	      *" $libdir "*) ;;
9574189777a2SCristian Pallares	      *) func_append perm_rpath " $libdir" ;;
9575189777a2SCristian Pallares	      esac
9576189777a2SCristian Pallares	    fi
9577189777a2SCristian Pallares	  done
9578189777a2SCristian Pallares	  # Substitute the hardcoded libdirs into the rpath.
9579189777a2SCristian Pallares	  if test -n "$hardcode_libdir_separator" &&
9580189777a2SCristian Pallares	     test -n "$hardcode_libdirs"; then
9581*b3fce824SCristian Pallarés	    libdir=$hardcode_libdirs
9582189777a2SCristian Pallares	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9583189777a2SCristian Pallares	  fi
9584189777a2SCristian Pallares	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9585189777a2SCristian Pallares	    # We should set the runpath_var.
9586189777a2SCristian Pallares	    rpath=
9587189777a2SCristian Pallares	    for dir in $perm_rpath; do
9588189777a2SCristian Pallares	      func_append rpath "$dir:"
9589189777a2SCristian Pallares	    done
9590189777a2SCristian Pallares	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9591189777a2SCristian Pallares	  fi
9592189777a2SCristian Pallares	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9593189777a2SCristian Pallares	fi
9594189777a2SCristian Pallares
9595*b3fce824SCristian Pallarés	shlibpath=$finalize_shlibpath
9596*b3fce824SCristian Pallarés	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9597189777a2SCristian Pallares	if test -n "$shlibpath"; then
9598189777a2SCristian Pallares	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9599189777a2SCristian Pallares	fi
9600189777a2SCristian Pallares
9601189777a2SCristian Pallares	# Get the real and link names of the library.
9602189777a2SCristian Pallares	eval shared_ext=\"$shrext_cmds\"
9603189777a2SCristian Pallares	eval library_names=\"$library_names_spec\"
9604189777a2SCristian Pallares	set dummy $library_names
9605189777a2SCristian Pallares	shift
9606*b3fce824SCristian Pallarés	realname=$1
9607189777a2SCristian Pallares	shift
9608189777a2SCristian Pallares
9609189777a2SCristian Pallares	if test -n "$soname_spec"; then
9610189777a2SCristian Pallares	  eval soname=\"$soname_spec\"
9611189777a2SCristian Pallares	else
9612*b3fce824SCristian Pallarés	  soname=$realname
9613189777a2SCristian Pallares	fi
9614189777a2SCristian Pallares	if test -z "$dlname"; then
9615189777a2SCristian Pallares	  dlname=$soname
9616189777a2SCristian Pallares	fi
9617189777a2SCristian Pallares
9618*b3fce824SCristian Pallarés	lib=$output_objdir/$realname
9619189777a2SCristian Pallares	linknames=
9620189777a2SCristian Pallares	for link
9621189777a2SCristian Pallares	do
9622189777a2SCristian Pallares	  func_append linknames " $link"
9623189777a2SCristian Pallares	done
9624189777a2SCristian Pallares
9625189777a2SCristian Pallares	# Use standard objects if they are pic
9626189777a2SCristian Pallares	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9627189777a2SCristian Pallares	test "X$libobjs" = "X " && libobjs=
9628189777a2SCristian Pallares
9629189777a2SCristian Pallares	delfiles=
9630189777a2SCristian Pallares	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9631189777a2SCristian Pallares	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9632*b3fce824SCristian Pallarés	  export_symbols=$output_objdir/$libname.uexp
9633189777a2SCristian Pallares	  func_append delfiles " $export_symbols"
9634189777a2SCristian Pallares	fi
9635189777a2SCristian Pallares
9636189777a2SCristian Pallares	orig_export_symbols=
9637189777a2SCristian Pallares	case $host_os in
9638189777a2SCristian Pallares	cygwin* | mingw* | cegcc*)
9639189777a2SCristian Pallares	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9640189777a2SCristian Pallares	    # exporting using user supplied symfile
9641*b3fce824SCristian Pallarés	    func_dll_def_p "$export_symbols" || {
9642189777a2SCristian Pallares	      # and it's NOT already a .def file. Must figure out
9643189777a2SCristian Pallares	      # which of the given symbols are data symbols and tag
9644189777a2SCristian Pallares	      # them as such. So, trigger use of export_symbols_cmds.
9645189777a2SCristian Pallares	      # export_symbols gets reassigned inside the "prepare
9646189777a2SCristian Pallares	      # the list of exported symbols" if statement, so the
9647189777a2SCristian Pallares	      # include_expsyms logic still works.
9648*b3fce824SCristian Pallarés	      orig_export_symbols=$export_symbols
9649189777a2SCristian Pallares	      export_symbols=
9650189777a2SCristian Pallares	      always_export_symbols=yes
9651*b3fce824SCristian Pallarés	    }
9652189777a2SCristian Pallares	  fi
9653189777a2SCristian Pallares	  ;;
9654189777a2SCristian Pallares	esac
9655189777a2SCristian Pallares
9656189777a2SCristian Pallares	# Prepare the list of exported symbols
9657189777a2SCristian Pallares	if test -z "$export_symbols"; then
9658*b3fce824SCristian Pallarés	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
9659*b3fce824SCristian Pallarés	    func_verbose "generating symbol list for '$libname.la'"
9660*b3fce824SCristian Pallarés	    export_symbols=$output_objdir/$libname.exp
9661189777a2SCristian Pallares	    $opt_dry_run || $RM $export_symbols
9662189777a2SCristian Pallares	    cmds=$export_symbols_cmds
9663*b3fce824SCristian Pallarés	    save_ifs=$IFS; IFS='~'
9664189777a2SCristian Pallares	    for cmd1 in $cmds; do
9665*b3fce824SCristian Pallarés	      IFS=$save_ifs
9666189777a2SCristian Pallares	      # Take the normal branch if the nm_file_list_spec branch
9667189777a2SCristian Pallares	      # doesn't work or if tool conversion is not needed.
9668189777a2SCristian Pallares	      case $nm_file_list_spec~$to_tool_file_cmd in
9669189777a2SCristian Pallares		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9670189777a2SCristian Pallares		  try_normal_branch=yes
9671189777a2SCristian Pallares		  eval cmd=\"$cmd1\"
9672189777a2SCristian Pallares		  func_len " $cmd"
9673189777a2SCristian Pallares		  len=$func_len_result
9674189777a2SCristian Pallares		  ;;
9675189777a2SCristian Pallares		*)
9676189777a2SCristian Pallares		  try_normal_branch=no
9677189777a2SCristian Pallares		  ;;
9678189777a2SCristian Pallares	      esac
9679*b3fce824SCristian Pallarés	      if test yes = "$try_normal_branch" \
9680189777a2SCristian Pallares		 && { test "$len" -lt "$max_cmd_len" \
9681189777a2SCristian Pallares		      || test "$max_cmd_len" -le -1; }
9682189777a2SCristian Pallares	      then
9683189777a2SCristian Pallares		func_show_eval "$cmd" 'exit $?'
9684189777a2SCristian Pallares		skipped_export=false
9685189777a2SCristian Pallares	      elif test -n "$nm_file_list_spec"; then
9686189777a2SCristian Pallares		func_basename "$output"
9687189777a2SCristian Pallares		output_la=$func_basename_result
9688189777a2SCristian Pallares		save_libobjs=$libobjs
9689189777a2SCristian Pallares		save_output=$output
9690*b3fce824SCristian Pallarés		output=$output_objdir/$output_la.nm
9691189777a2SCristian Pallares		func_to_tool_file "$output"
9692189777a2SCristian Pallares		libobjs=$nm_file_list_spec$func_to_tool_file_result
9693189777a2SCristian Pallares		func_append delfiles " $output"
9694189777a2SCristian Pallares		func_verbose "creating $NM input file list: $output"
9695189777a2SCristian Pallares		for obj in $save_libobjs; do
9696189777a2SCristian Pallares		  func_to_tool_file "$obj"
9697189777a2SCristian Pallares		  $ECHO "$func_to_tool_file_result"
9698189777a2SCristian Pallares		done > "$output"
9699189777a2SCristian Pallares		eval cmd=\"$cmd1\"
9700189777a2SCristian Pallares		func_show_eval "$cmd" 'exit $?'
9701189777a2SCristian Pallares		output=$save_output
9702189777a2SCristian Pallares		libobjs=$save_libobjs
9703189777a2SCristian Pallares		skipped_export=false
9704189777a2SCristian Pallares	      else
9705189777a2SCristian Pallares		# The command line is too long to execute in one step.
9706189777a2SCristian Pallares		func_verbose "using reloadable object file for export list..."
9707189777a2SCristian Pallares		skipped_export=:
9708189777a2SCristian Pallares		# Break out early, otherwise skipped_export may be
9709189777a2SCristian Pallares		# set to false by a later but shorter cmd.
9710189777a2SCristian Pallares		break
9711189777a2SCristian Pallares	      fi
9712189777a2SCristian Pallares	    done
9713*b3fce824SCristian Pallarés	    IFS=$save_ifs
9714*b3fce824SCristian Pallarés	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9715189777a2SCristian Pallares	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9716189777a2SCristian Pallares	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9717189777a2SCristian Pallares	    fi
9718189777a2SCristian Pallares	  fi
9719189777a2SCristian Pallares	fi
9720189777a2SCristian Pallares
9721189777a2SCristian Pallares	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9722*b3fce824SCristian Pallarés	  tmp_export_symbols=$export_symbols
9723*b3fce824SCristian Pallarés	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9724189777a2SCristian Pallares	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9725189777a2SCristian Pallares	fi
9726189777a2SCristian Pallares
9727*b3fce824SCristian Pallarés	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9728189777a2SCristian Pallares	  # The given exports_symbols file has to be filtered, so filter it.
9729*b3fce824SCristian Pallarés	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9730189777a2SCristian Pallares	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
9731*b3fce824SCristian Pallarés	  # 's' commands, which not all seds can handle. GNU sed should be fine
9732189777a2SCristian Pallares	  # though. Also, the filter scales superlinearly with the number of
9733189777a2SCristian Pallares	  # global variables. join(1) would be nice here, but unfortunately
9734189777a2SCristian Pallares	  # isn't a blessed tool.
9735189777a2SCristian Pallares	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9736189777a2SCristian Pallares	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9737189777a2SCristian Pallares	  export_symbols=$output_objdir/$libname.def
9738189777a2SCristian Pallares	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9739189777a2SCristian Pallares	fi
9740189777a2SCristian Pallares
9741189777a2SCristian Pallares	tmp_deplibs=
9742189777a2SCristian Pallares	for test_deplib in $deplibs; do
9743189777a2SCristian Pallares	  case " $convenience " in
9744189777a2SCristian Pallares	  *" $test_deplib "*) ;;
9745189777a2SCristian Pallares	  *)
9746189777a2SCristian Pallares	    func_append tmp_deplibs " $test_deplib"
9747189777a2SCristian Pallares	    ;;
9748189777a2SCristian Pallares	  esac
9749189777a2SCristian Pallares	done
9750*b3fce824SCristian Pallarés	deplibs=$tmp_deplibs
9751189777a2SCristian Pallares
9752189777a2SCristian Pallares	if test -n "$convenience"; then
9753189777a2SCristian Pallares	  if test -n "$whole_archive_flag_spec" &&
9754*b3fce824SCristian Pallarés	    test yes = "$compiler_needs_object" &&
9755189777a2SCristian Pallares	    test -z "$libobjs"; then
9756189777a2SCristian Pallares	    # extract the archives, so we have objects to list.
9757189777a2SCristian Pallares	    # TODO: could optimize this to just extract one archive.
9758189777a2SCristian Pallares	    whole_archive_flag_spec=
9759189777a2SCristian Pallares	  fi
9760189777a2SCristian Pallares	  if test -n "$whole_archive_flag_spec"; then
9761189777a2SCristian Pallares	    save_libobjs=$libobjs
9762189777a2SCristian Pallares	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9763189777a2SCristian Pallares	    test "X$libobjs" = "X " && libobjs=
9764189777a2SCristian Pallares	  else
9765*b3fce824SCristian Pallarés	    gentop=$output_objdir/${outputname}x
9766189777a2SCristian Pallares	    func_append generated " $gentop"
9767189777a2SCristian Pallares
9768189777a2SCristian Pallares	    func_extract_archives $gentop $convenience
9769189777a2SCristian Pallares	    func_append libobjs " $func_extract_archives_result"
9770189777a2SCristian Pallares	    test "X$libobjs" = "X " && libobjs=
9771189777a2SCristian Pallares	  fi
9772189777a2SCristian Pallares	fi
9773189777a2SCristian Pallares
9774*b3fce824SCristian Pallarés	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9775189777a2SCristian Pallares	  eval flag=\"$thread_safe_flag_spec\"
9776189777a2SCristian Pallares	  func_append linker_flags " $flag"
9777189777a2SCristian Pallares	fi
9778189777a2SCristian Pallares
9779189777a2SCristian Pallares	# Make a backup of the uninstalled library when relinking
9780*b3fce824SCristian Pallarés	if test relink = "$opt_mode"; then
9781189777a2SCristian Pallares	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9782189777a2SCristian Pallares	fi
9783189777a2SCristian Pallares
9784189777a2SCristian Pallares	# Do each of the archive commands.
9785*b3fce824SCristian Pallarés	if test yes = "$module" && test -n "$module_cmds"; then
9786189777a2SCristian Pallares	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9787189777a2SCristian Pallares	    eval test_cmds=\"$module_expsym_cmds\"
9788189777a2SCristian Pallares	    cmds=$module_expsym_cmds
9789189777a2SCristian Pallares	  else
9790189777a2SCristian Pallares	    eval test_cmds=\"$module_cmds\"
9791189777a2SCristian Pallares	    cmds=$module_cmds
9792189777a2SCristian Pallares	  fi
9793189777a2SCristian Pallares	else
9794189777a2SCristian Pallares	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9795189777a2SCristian Pallares	    eval test_cmds=\"$archive_expsym_cmds\"
9796189777a2SCristian Pallares	    cmds=$archive_expsym_cmds
9797189777a2SCristian Pallares	  else
9798189777a2SCristian Pallares	    eval test_cmds=\"$archive_cmds\"
9799189777a2SCristian Pallares	    cmds=$archive_cmds
9800189777a2SCristian Pallares	  fi
9801189777a2SCristian Pallares	fi
9802189777a2SCristian Pallares
9803*b3fce824SCristian Pallarés	if test : != "$skipped_export" &&
9804189777a2SCristian Pallares	   func_len " $test_cmds" &&
9805189777a2SCristian Pallares	   len=$func_len_result &&
9806189777a2SCristian Pallares	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9807189777a2SCristian Pallares	  :
9808189777a2SCristian Pallares	else
9809189777a2SCristian Pallares	  # The command line is too long to link in one step, link piecewise
9810189777a2SCristian Pallares	  # or, if using GNU ld and skipped_export is not :, use a linker
9811189777a2SCristian Pallares	  # script.
9812189777a2SCristian Pallares
9813189777a2SCristian Pallares	  # Save the value of $output and $libobjs because we want to
9814189777a2SCristian Pallares	  # use them later.  If we have whole_archive_flag_spec, we
9815189777a2SCristian Pallares	  # want to use save_libobjs as it was before
9816189777a2SCristian Pallares	  # whole_archive_flag_spec was expanded, because we can't
9817189777a2SCristian Pallares	  # assume the linker understands whole_archive_flag_spec.
9818189777a2SCristian Pallares	  # This may have to be revisited, in case too many
9819189777a2SCristian Pallares	  # convenience libraries get linked in and end up exceeding
9820189777a2SCristian Pallares	  # the spec.
9821189777a2SCristian Pallares	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9822189777a2SCristian Pallares	    save_libobjs=$libobjs
9823189777a2SCristian Pallares	  fi
9824189777a2SCristian Pallares	  save_output=$output
9825189777a2SCristian Pallares	  func_basename "$output"
9826189777a2SCristian Pallares	  output_la=$func_basename_result
9827189777a2SCristian Pallares
9828189777a2SCristian Pallares	  # Clear the reloadable object creation command queue and
9829189777a2SCristian Pallares	  # initialize k to one.
9830189777a2SCristian Pallares	  test_cmds=
9831189777a2SCristian Pallares	  concat_cmds=
9832189777a2SCristian Pallares	  objlist=
9833189777a2SCristian Pallares	  last_robj=
9834189777a2SCristian Pallares	  k=1
9835189777a2SCristian Pallares
9836*b3fce824SCristian Pallarés	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
9837*b3fce824SCristian Pallarés	    output=$output_objdir/$output_la.lnkscript
9838189777a2SCristian Pallares	    func_verbose "creating GNU ld script: $output"
9839189777a2SCristian Pallares	    echo 'INPUT (' > $output
9840189777a2SCristian Pallares	    for obj in $save_libobjs
9841189777a2SCristian Pallares	    do
9842189777a2SCristian Pallares	      func_to_tool_file "$obj"
9843189777a2SCristian Pallares	      $ECHO "$func_to_tool_file_result" >> $output
9844189777a2SCristian Pallares	    done
9845189777a2SCristian Pallares	    echo ')' >> $output
9846189777a2SCristian Pallares	    func_append delfiles " $output"
9847189777a2SCristian Pallares	    func_to_tool_file "$output"
9848189777a2SCristian Pallares	    output=$func_to_tool_file_result
9849*b3fce824SCristian Pallarés	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
9850*b3fce824SCristian Pallarés	    output=$output_objdir/$output_la.lnk
9851189777a2SCristian Pallares	    func_verbose "creating linker input file list: $output"
9852189777a2SCristian Pallares	    : > $output
9853189777a2SCristian Pallares	    set x $save_libobjs
9854189777a2SCristian Pallares	    shift
9855189777a2SCristian Pallares	    firstobj=
9856*b3fce824SCristian Pallarés	    if test yes = "$compiler_needs_object"; then
9857189777a2SCristian Pallares	      firstobj="$1 "
9858189777a2SCristian Pallares	      shift
9859189777a2SCristian Pallares	    fi
9860189777a2SCristian Pallares	    for obj
9861189777a2SCristian Pallares	    do
9862189777a2SCristian Pallares	      func_to_tool_file "$obj"
9863189777a2SCristian Pallares	      $ECHO "$func_to_tool_file_result" >> $output
9864189777a2SCristian Pallares	    done
9865189777a2SCristian Pallares	    func_append delfiles " $output"
9866189777a2SCristian Pallares	    func_to_tool_file "$output"
9867189777a2SCristian Pallares	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9868189777a2SCristian Pallares	  else
9869189777a2SCristian Pallares	    if test -n "$save_libobjs"; then
9870189777a2SCristian Pallares	      func_verbose "creating reloadable object files..."
9871*b3fce824SCristian Pallarés	      output=$output_objdir/$output_la-$k.$objext
9872189777a2SCristian Pallares	      eval test_cmds=\"$reload_cmds\"
9873189777a2SCristian Pallares	      func_len " $test_cmds"
9874189777a2SCristian Pallares	      len0=$func_len_result
9875189777a2SCristian Pallares	      len=$len0
9876189777a2SCristian Pallares
9877189777a2SCristian Pallares	      # Loop over the list of objects to be linked.
9878189777a2SCristian Pallares	      for obj in $save_libobjs
9879189777a2SCristian Pallares	      do
9880189777a2SCristian Pallares		func_len " $obj"
9881189777a2SCristian Pallares		func_arith $len + $func_len_result
9882189777a2SCristian Pallares		len=$func_arith_result
9883*b3fce824SCristian Pallarés		if test -z "$objlist" ||
9884189777a2SCristian Pallares		   test "$len" -lt "$max_cmd_len"; then
9885189777a2SCristian Pallares		  func_append objlist " $obj"
9886189777a2SCristian Pallares		else
9887189777a2SCristian Pallares		  # The command $test_cmds is almost too long, add a
9888189777a2SCristian Pallares		  # command to the queue.
9889*b3fce824SCristian Pallarés		  if test 1 -eq "$k"; then
9890189777a2SCristian Pallares		    # The first file doesn't have a previous command to add.
9891189777a2SCristian Pallares		    reload_objs=$objlist
9892189777a2SCristian Pallares		    eval concat_cmds=\"$reload_cmds\"
9893189777a2SCristian Pallares		  else
9894189777a2SCristian Pallares		    # All subsequent reloadable object files will link in
9895189777a2SCristian Pallares		    # the last one created.
9896189777a2SCristian Pallares		    reload_objs="$objlist $last_robj"
9897189777a2SCristian Pallares		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9898189777a2SCristian Pallares		  fi
9899*b3fce824SCristian Pallarés		  last_robj=$output_objdir/$output_la-$k.$objext
9900189777a2SCristian Pallares		  func_arith $k + 1
9901189777a2SCristian Pallares		  k=$func_arith_result
9902*b3fce824SCristian Pallarés		  output=$output_objdir/$output_la-$k.$objext
9903189777a2SCristian Pallares		  objlist=" $obj"
9904189777a2SCristian Pallares		  func_len " $last_robj"
9905189777a2SCristian Pallares		  func_arith $len0 + $func_len_result
9906189777a2SCristian Pallares		  len=$func_arith_result
9907189777a2SCristian Pallares		fi
9908189777a2SCristian Pallares	      done
9909189777a2SCristian Pallares	      # Handle the remaining objects by creating one last
9910189777a2SCristian Pallares	      # reloadable object file.  All subsequent reloadable object
9911189777a2SCristian Pallares	      # files will link in the last one created.
9912189777a2SCristian Pallares	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9913189777a2SCristian Pallares	      reload_objs="$objlist $last_robj"
9914*b3fce824SCristian Pallarés	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9915189777a2SCristian Pallares	      if test -n "$last_robj"; then
9916*b3fce824SCristian Pallarés	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9917189777a2SCristian Pallares	      fi
9918189777a2SCristian Pallares	      func_append delfiles " $output"
9919189777a2SCristian Pallares
9920189777a2SCristian Pallares	    else
9921189777a2SCristian Pallares	      output=
9922189777a2SCristian Pallares	    fi
9923189777a2SCristian Pallares
9924*b3fce824SCristian Pallarés	    ${skipped_export-false} && {
9925*b3fce824SCristian Pallarés	      func_verbose "generating symbol list for '$libname.la'"
9926*b3fce824SCristian Pallarés	      export_symbols=$output_objdir/$libname.exp
9927189777a2SCristian Pallares	      $opt_dry_run || $RM $export_symbols
9928189777a2SCristian Pallares	      libobjs=$output
9929189777a2SCristian Pallares	      # Append the command to create the export file.
9930189777a2SCristian Pallares	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9931189777a2SCristian Pallares	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9932189777a2SCristian Pallares	      if test -n "$last_robj"; then
9933189777a2SCristian Pallares		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9934189777a2SCristian Pallares	      fi
9935*b3fce824SCristian Pallarés	    }
9936189777a2SCristian Pallares
9937189777a2SCristian Pallares	    test -n "$save_libobjs" &&
9938189777a2SCristian Pallares	      func_verbose "creating a temporary reloadable object file: $output"
9939189777a2SCristian Pallares
9940189777a2SCristian Pallares	    # Loop through the commands generated above and execute them.
9941*b3fce824SCristian Pallarés	    save_ifs=$IFS; IFS='~'
9942189777a2SCristian Pallares	    for cmd in $concat_cmds; do
9943*b3fce824SCristian Pallarés	      IFS=$save_ifs
9944*b3fce824SCristian Pallarés	      $opt_quiet || {
9945189777a2SCristian Pallares		  func_quote_for_expand "$cmd"
9946189777a2SCristian Pallares		  eval "func_echo $func_quote_for_expand_result"
9947189777a2SCristian Pallares	      }
9948189777a2SCristian Pallares	      $opt_dry_run || eval "$cmd" || {
9949189777a2SCristian Pallares		lt_exit=$?
9950189777a2SCristian Pallares
9951189777a2SCristian Pallares		# Restore the uninstalled library and exit
9952*b3fce824SCristian Pallarés		if test relink = "$opt_mode"; then
9953189777a2SCristian Pallares		  ( cd "$output_objdir" && \
9954189777a2SCristian Pallares		    $RM "${realname}T" && \
9955189777a2SCristian Pallares		    $MV "${realname}U" "$realname" )
9956189777a2SCristian Pallares		fi
9957189777a2SCristian Pallares
9958189777a2SCristian Pallares		exit $lt_exit
9959189777a2SCristian Pallares	      }
9960189777a2SCristian Pallares	    done
9961*b3fce824SCristian Pallarés	    IFS=$save_ifs
9962189777a2SCristian Pallares
9963189777a2SCristian Pallares	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
9964189777a2SCristian Pallares	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9965189777a2SCristian Pallares	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9966189777a2SCristian Pallares	    fi
9967189777a2SCristian Pallares	  fi
9968189777a2SCristian Pallares
9969*b3fce824SCristian Pallarés          ${skipped_export-false} && {
9970189777a2SCristian Pallares	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
9971*b3fce824SCristian Pallarés	      tmp_export_symbols=$export_symbols
9972*b3fce824SCristian Pallarés	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9973189777a2SCristian Pallares	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9974189777a2SCristian Pallares	    fi
9975189777a2SCristian Pallares
9976189777a2SCristian Pallares	    if test -n "$orig_export_symbols"; then
9977189777a2SCristian Pallares	      # The given exports_symbols file has to be filtered, so filter it.
9978*b3fce824SCristian Pallarés	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9979189777a2SCristian Pallares	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
9980*b3fce824SCristian Pallarés	      # 's' commands, which not all seds can handle. GNU sed should be fine
9981189777a2SCristian Pallares	      # though. Also, the filter scales superlinearly with the number of
9982189777a2SCristian Pallares	      # global variables. join(1) would be nice here, but unfortunately
9983189777a2SCristian Pallares	      # isn't a blessed tool.
9984189777a2SCristian Pallares	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9985189777a2SCristian Pallares	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9986189777a2SCristian Pallares	      export_symbols=$output_objdir/$libname.def
9987189777a2SCristian Pallares	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9988189777a2SCristian Pallares	    fi
9989*b3fce824SCristian Pallarés	  }
9990189777a2SCristian Pallares
9991189777a2SCristian Pallares	  libobjs=$output
9992189777a2SCristian Pallares	  # Restore the value of output.
9993189777a2SCristian Pallares	  output=$save_output
9994189777a2SCristian Pallares
9995189777a2SCristian Pallares	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
9996189777a2SCristian Pallares	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9997189777a2SCristian Pallares	    test "X$libobjs" = "X " && libobjs=
9998189777a2SCristian Pallares	  fi
9999189777a2SCristian Pallares	  # Expand the library linking commands again to reset the
10000189777a2SCristian Pallares	  # value of $libobjs for piecewise linking.
10001189777a2SCristian Pallares
10002189777a2SCristian Pallares	  # Do each of the archive commands.
10003*b3fce824SCristian Pallarés	  if test yes = "$module" && test -n "$module_cmds"; then
10004189777a2SCristian Pallares	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10005189777a2SCristian Pallares	      cmds=$module_expsym_cmds
10006189777a2SCristian Pallares	    else
10007189777a2SCristian Pallares	      cmds=$module_cmds
10008189777a2SCristian Pallares	    fi
10009189777a2SCristian Pallares	  else
10010189777a2SCristian Pallares	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10011189777a2SCristian Pallares	      cmds=$archive_expsym_cmds
10012189777a2SCristian Pallares	    else
10013189777a2SCristian Pallares	      cmds=$archive_cmds
10014189777a2SCristian Pallares	    fi
10015189777a2SCristian Pallares	  fi
10016189777a2SCristian Pallares	fi
10017189777a2SCristian Pallares
10018189777a2SCristian Pallares	if test -n "$delfiles"; then
10019189777a2SCristian Pallares	  # Append the command to remove temporary files to $cmds.
10020189777a2SCristian Pallares	  eval cmds=\"\$cmds~\$RM $delfiles\"
10021189777a2SCristian Pallares	fi
10022189777a2SCristian Pallares
10023189777a2SCristian Pallares	# Add any objects from preloaded convenience libraries
10024189777a2SCristian Pallares	if test -n "$dlprefiles"; then
10025*b3fce824SCristian Pallarés	  gentop=$output_objdir/${outputname}x
10026189777a2SCristian Pallares	  func_append generated " $gentop"
10027189777a2SCristian Pallares
10028189777a2SCristian Pallares	  func_extract_archives $gentop $dlprefiles
10029189777a2SCristian Pallares	  func_append libobjs " $func_extract_archives_result"
10030189777a2SCristian Pallares	  test "X$libobjs" = "X " && libobjs=
10031189777a2SCristian Pallares	fi
10032189777a2SCristian Pallares
10033*b3fce824SCristian Pallarés	save_ifs=$IFS; IFS='~'
10034189777a2SCristian Pallares	for cmd in $cmds; do
10035*b3fce824SCristian Pallarés	  IFS=$sp$nl
10036189777a2SCristian Pallares	  eval cmd=\"$cmd\"
10037*b3fce824SCristian Pallarés	  IFS=$save_ifs
10038*b3fce824SCristian Pallarés	  $opt_quiet || {
10039189777a2SCristian Pallares	    func_quote_for_expand "$cmd"
10040189777a2SCristian Pallares	    eval "func_echo $func_quote_for_expand_result"
10041189777a2SCristian Pallares	  }
10042189777a2SCristian Pallares	  $opt_dry_run || eval "$cmd" || {
10043189777a2SCristian Pallares	    lt_exit=$?
10044189777a2SCristian Pallares
10045189777a2SCristian Pallares	    # Restore the uninstalled library and exit
10046*b3fce824SCristian Pallarés	    if test relink = "$opt_mode"; then
10047189777a2SCristian Pallares	      ( cd "$output_objdir" && \
10048189777a2SCristian Pallares	        $RM "${realname}T" && \
10049189777a2SCristian Pallares		$MV "${realname}U" "$realname" )
10050189777a2SCristian Pallares	    fi
10051189777a2SCristian Pallares
10052189777a2SCristian Pallares	    exit $lt_exit
10053189777a2SCristian Pallares	  }
10054189777a2SCristian Pallares	done
10055*b3fce824SCristian Pallarés	IFS=$save_ifs
10056189777a2SCristian Pallares
10057189777a2SCristian Pallares	# Restore the uninstalled library and exit
10058*b3fce824SCristian Pallarés	if test relink = "$opt_mode"; then
10059189777a2SCristian Pallares	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10060189777a2SCristian Pallares
10061189777a2SCristian Pallares	  if test -n "$convenience"; then
10062189777a2SCristian Pallares	    if test -z "$whole_archive_flag_spec"; then
10063189777a2SCristian Pallares	      func_show_eval '${RM}r "$gentop"'
10064189777a2SCristian Pallares	    fi
10065189777a2SCristian Pallares	  fi
10066189777a2SCristian Pallares
10067189777a2SCristian Pallares	  exit $EXIT_SUCCESS
10068189777a2SCristian Pallares	fi
10069189777a2SCristian Pallares
10070189777a2SCristian Pallares	# Create links to the real library.
10071189777a2SCristian Pallares	for linkname in $linknames; do
10072189777a2SCristian Pallares	  if test "$realname" != "$linkname"; then
10073189777a2SCristian Pallares	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10074189777a2SCristian Pallares	  fi
10075189777a2SCristian Pallares	done
10076189777a2SCristian Pallares
10077189777a2SCristian Pallares	# If -module or -export-dynamic was specified, set the dlname.
10078*b3fce824SCristian Pallarés	if test yes = "$module" || test yes = "$export_dynamic"; then
10079189777a2SCristian Pallares	  # On all known operating systems, these are identical.
10080*b3fce824SCristian Pallarés	  dlname=$soname
10081189777a2SCristian Pallares	fi
10082189777a2SCristian Pallares      fi
10083189777a2SCristian Pallares      ;;
10084189777a2SCristian Pallares
10085189777a2SCristian Pallares    obj)
10086*b3fce824SCristian Pallarés      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10087*b3fce824SCristian Pallarés	func_warning "'-dlopen' is ignored for objects"
10088189777a2SCristian Pallares      fi
10089189777a2SCristian Pallares
10090189777a2SCristian Pallares      case " $deplibs" in
10091189777a2SCristian Pallares      *\ -l* | *\ -L*)
10092*b3fce824SCristian Pallarés	func_warning "'-l' and '-L' are ignored for objects" ;;
10093189777a2SCristian Pallares      esac
10094189777a2SCristian Pallares
10095189777a2SCristian Pallares      test -n "$rpath" && \
10096*b3fce824SCristian Pallarés	func_warning "'-rpath' is ignored for objects"
10097189777a2SCristian Pallares
10098189777a2SCristian Pallares      test -n "$xrpath" && \
10099*b3fce824SCristian Pallarés	func_warning "'-R' is ignored for objects"
10100189777a2SCristian Pallares
10101189777a2SCristian Pallares      test -n "$vinfo" && \
10102*b3fce824SCristian Pallarés	func_warning "'-version-info' is ignored for objects"
10103189777a2SCristian Pallares
10104189777a2SCristian Pallares      test -n "$release" && \
10105*b3fce824SCristian Pallarés	func_warning "'-release' is ignored for objects"
10106189777a2SCristian Pallares
10107189777a2SCristian Pallares      case $output in
10108189777a2SCristian Pallares      *.lo)
10109189777a2SCristian Pallares	test -n "$objs$old_deplibs" && \
10110*b3fce824SCristian Pallarés	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10111189777a2SCristian Pallares
10112189777a2SCristian Pallares	libobj=$output
10113189777a2SCristian Pallares	func_lo2o "$libobj"
10114189777a2SCristian Pallares	obj=$func_lo2o_result
10115189777a2SCristian Pallares	;;
10116189777a2SCristian Pallares      *)
10117189777a2SCristian Pallares	libobj=
10118*b3fce824SCristian Pallarés	obj=$output
10119189777a2SCristian Pallares	;;
10120189777a2SCristian Pallares      esac
10121189777a2SCristian Pallares
10122189777a2SCristian Pallares      # Delete the old objects.
10123189777a2SCristian Pallares      $opt_dry_run || $RM $obj $libobj
10124189777a2SCristian Pallares
10125189777a2SCristian Pallares      # Objects from convenience libraries.  This assumes
10126189777a2SCristian Pallares      # single-version convenience libraries.  Whenever we create
10127189777a2SCristian Pallares      # different ones for PIC/non-PIC, this we'll have to duplicate
10128189777a2SCristian Pallares      # the extraction.
10129189777a2SCristian Pallares      reload_conv_objs=
10130189777a2SCristian Pallares      gentop=
10131*b3fce824SCristian Pallarés      # if reload_cmds runs $LD directly, get rid of -Wl from
10132*b3fce824SCristian Pallarés      # whole_archive_flag_spec and hope we can get by with turning comma
10133*b3fce824SCristian Pallarés      # into space.
10134*b3fce824SCristian Pallarés      case $reload_cmds in
10135*b3fce824SCristian Pallarés        *\$LD[\ \$]*) wl= ;;
10136*b3fce824SCristian Pallarés      esac
10137189777a2SCristian Pallares      if test -n "$convenience"; then
10138189777a2SCristian Pallares	if test -n "$whole_archive_flag_spec"; then
10139189777a2SCristian Pallares	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10140*b3fce824SCristian Pallarés	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10141*b3fce824SCristian Pallarés	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10142189777a2SCristian Pallares	else
10143*b3fce824SCristian Pallarés	  gentop=$output_objdir/${obj}x
10144189777a2SCristian Pallares	  func_append generated " $gentop"
10145189777a2SCristian Pallares
10146189777a2SCristian Pallares	  func_extract_archives $gentop $convenience
10147189777a2SCristian Pallares	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10148189777a2SCristian Pallares	fi
10149189777a2SCristian Pallares      fi
10150189777a2SCristian Pallares
10151189777a2SCristian Pallares      # If we're not building shared, we need to use non_pic_objs
10152*b3fce824SCristian Pallarés      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10153189777a2SCristian Pallares
10154189777a2SCristian Pallares      # Create the old-style object.
10155*b3fce824SCristian Pallarés      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10156189777a2SCristian Pallares
10157*b3fce824SCristian Pallarés      output=$obj
10158189777a2SCristian Pallares      func_execute_cmds "$reload_cmds" 'exit $?'
10159189777a2SCristian Pallares
10160189777a2SCristian Pallares      # Exit if we aren't doing a library object file.
10161189777a2SCristian Pallares      if test -z "$libobj"; then
10162189777a2SCristian Pallares	if test -n "$gentop"; then
10163189777a2SCristian Pallares	  func_show_eval '${RM}r "$gentop"'
10164189777a2SCristian Pallares	fi
10165189777a2SCristian Pallares
10166189777a2SCristian Pallares	exit $EXIT_SUCCESS
10167189777a2SCristian Pallares      fi
10168189777a2SCristian Pallares
10169*b3fce824SCristian Pallarés      test yes = "$build_libtool_libs" || {
10170189777a2SCristian Pallares	if test -n "$gentop"; then
10171189777a2SCristian Pallares	  func_show_eval '${RM}r "$gentop"'
10172189777a2SCristian Pallares	fi
10173189777a2SCristian Pallares
10174189777a2SCristian Pallares	# Create an invalid libtool object if no PIC, so that we don't
10175189777a2SCristian Pallares	# accidentally link it into a program.
10176189777a2SCristian Pallares	# $show "echo timestamp > $libobj"
10177189777a2SCristian Pallares	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10178189777a2SCristian Pallares	exit $EXIT_SUCCESS
10179*b3fce824SCristian Pallarés      }
10180189777a2SCristian Pallares
10181*b3fce824SCristian Pallarés      if test -n "$pic_flag" || test default != "$pic_mode"; then
10182189777a2SCristian Pallares	# Only do commands if we really have different PIC objects.
10183189777a2SCristian Pallares	reload_objs="$libobjs $reload_conv_objs"
10184*b3fce824SCristian Pallarés	output=$libobj
10185189777a2SCristian Pallares	func_execute_cmds "$reload_cmds" 'exit $?'
10186189777a2SCristian Pallares      fi
10187189777a2SCristian Pallares
10188189777a2SCristian Pallares      if test -n "$gentop"; then
10189189777a2SCristian Pallares	func_show_eval '${RM}r "$gentop"'
10190189777a2SCristian Pallares      fi
10191189777a2SCristian Pallares
10192189777a2SCristian Pallares      exit $EXIT_SUCCESS
10193189777a2SCristian Pallares      ;;
10194189777a2SCristian Pallares
10195189777a2SCristian Pallares    prog)
10196189777a2SCristian Pallares      case $host in
10197189777a2SCristian Pallares	*cygwin*) func_stripname '' '.exe' "$output"
10198189777a2SCristian Pallares	          output=$func_stripname_result.exe;;
10199189777a2SCristian Pallares      esac
10200189777a2SCristian Pallares      test -n "$vinfo" && \
10201*b3fce824SCristian Pallarés	func_warning "'-version-info' is ignored for programs"
10202189777a2SCristian Pallares
10203189777a2SCristian Pallares      test -n "$release" && \
10204*b3fce824SCristian Pallarés	func_warning "'-release' is ignored for programs"
10205189777a2SCristian Pallares
10206*b3fce824SCristian Pallarés      $preload \
10207*b3fce824SCristian Pallarés	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10208*b3fce824SCristian Pallarés	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10209189777a2SCristian Pallares
10210189777a2SCristian Pallares      case $host in
10211189777a2SCristian Pallares      *-*-rhapsody* | *-*-darwin1.[012])
10212189777a2SCristian Pallares	# On Rhapsody replace the C library is the System framework
10213189777a2SCristian Pallares	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10214189777a2SCristian Pallares	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10215189777a2SCristian Pallares	;;
10216189777a2SCristian Pallares      esac
10217189777a2SCristian Pallares
10218189777a2SCristian Pallares      case $host in
10219189777a2SCristian Pallares      *-*-darwin*)
10220189777a2SCristian Pallares	# Don't allow lazy linking, it breaks C++ global constructors
10221189777a2SCristian Pallares	# But is supposedly fixed on 10.4 or later (yay!).
10222*b3fce824SCristian Pallarés	if test CXX = "$tagname"; then
10223189777a2SCristian Pallares	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10224189777a2SCristian Pallares	    10.[0123])
10225*b3fce824SCristian Pallarés	      func_append compile_command " $wl-bind_at_load"
10226*b3fce824SCristian Pallarés	      func_append finalize_command " $wl-bind_at_load"
10227189777a2SCristian Pallares	    ;;
10228189777a2SCristian Pallares	  esac
10229189777a2SCristian Pallares	fi
10230189777a2SCristian Pallares	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10231189777a2SCristian Pallares	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10232189777a2SCristian Pallares	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10233189777a2SCristian Pallares	;;
10234189777a2SCristian Pallares      esac
10235189777a2SCristian Pallares
10236189777a2SCristian Pallares
10237189777a2SCristian Pallares      # move library search paths that coincide with paths to not yet
10238189777a2SCristian Pallares      # installed libraries to the beginning of the library search list
10239189777a2SCristian Pallares      new_libs=
10240189777a2SCristian Pallares      for path in $notinst_path; do
10241189777a2SCristian Pallares	case " $new_libs " in
10242189777a2SCristian Pallares	*" -L$path/$objdir "*) ;;
10243189777a2SCristian Pallares	*)
10244189777a2SCristian Pallares	  case " $compile_deplibs " in
10245189777a2SCristian Pallares	  *" -L$path/$objdir "*)
10246189777a2SCristian Pallares	    func_append new_libs " -L$path/$objdir" ;;
10247189777a2SCristian Pallares	  esac
10248189777a2SCristian Pallares	  ;;
10249189777a2SCristian Pallares	esac
10250189777a2SCristian Pallares      done
10251189777a2SCristian Pallares      for deplib in $compile_deplibs; do
10252189777a2SCristian Pallares	case $deplib in
10253189777a2SCristian Pallares	-L*)
10254189777a2SCristian Pallares	  case " $new_libs " in
10255189777a2SCristian Pallares	  *" $deplib "*) ;;
10256189777a2SCristian Pallares	  *) func_append new_libs " $deplib" ;;
10257189777a2SCristian Pallares	  esac
10258189777a2SCristian Pallares	  ;;
10259189777a2SCristian Pallares	*) func_append new_libs " $deplib" ;;
10260189777a2SCristian Pallares	esac
10261189777a2SCristian Pallares      done
10262*b3fce824SCristian Pallarés      compile_deplibs=$new_libs
10263189777a2SCristian Pallares
10264189777a2SCristian Pallares
10265189777a2SCristian Pallares      func_append compile_command " $compile_deplibs"
10266189777a2SCristian Pallares      func_append finalize_command " $finalize_deplibs"
10267189777a2SCristian Pallares
10268189777a2SCristian Pallares      if test -n "$rpath$xrpath"; then
10269189777a2SCristian Pallares	# If the user specified any rpath flags, then add them.
10270189777a2SCristian Pallares	for libdir in $rpath $xrpath; do
10271189777a2SCristian Pallares	  # This is the magic to use -rpath.
10272189777a2SCristian Pallares	  case "$finalize_rpath " in
10273189777a2SCristian Pallares	  *" $libdir "*) ;;
10274189777a2SCristian Pallares	  *) func_append finalize_rpath " $libdir" ;;
10275189777a2SCristian Pallares	  esac
10276189777a2SCristian Pallares	done
10277189777a2SCristian Pallares      fi
10278189777a2SCristian Pallares
10279189777a2SCristian Pallares      # Now hardcode the library paths
10280189777a2SCristian Pallares      rpath=
10281189777a2SCristian Pallares      hardcode_libdirs=
10282189777a2SCristian Pallares      for libdir in $compile_rpath $finalize_rpath; do
10283189777a2SCristian Pallares	if test -n "$hardcode_libdir_flag_spec"; then
10284189777a2SCristian Pallares	  if test -n "$hardcode_libdir_separator"; then
10285189777a2SCristian Pallares	    if test -z "$hardcode_libdirs"; then
10286*b3fce824SCristian Pallarés	      hardcode_libdirs=$libdir
10287189777a2SCristian Pallares	    else
10288189777a2SCristian Pallares	      # Just accumulate the unique libdirs.
10289189777a2SCristian Pallares	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10290189777a2SCristian Pallares	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10291189777a2SCristian Pallares		;;
10292189777a2SCristian Pallares	      *)
10293189777a2SCristian Pallares		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10294189777a2SCristian Pallares		;;
10295189777a2SCristian Pallares	      esac
10296189777a2SCristian Pallares	    fi
10297189777a2SCristian Pallares	  else
10298189777a2SCristian Pallares	    eval flag=\"$hardcode_libdir_flag_spec\"
10299189777a2SCristian Pallares	    func_append rpath " $flag"
10300189777a2SCristian Pallares	  fi
10301189777a2SCristian Pallares	elif test -n "$runpath_var"; then
10302189777a2SCristian Pallares	  case "$perm_rpath " in
10303189777a2SCristian Pallares	  *" $libdir "*) ;;
10304189777a2SCristian Pallares	  *) func_append perm_rpath " $libdir" ;;
10305189777a2SCristian Pallares	  esac
10306189777a2SCristian Pallares	fi
10307189777a2SCristian Pallares	case $host in
10308189777a2SCristian Pallares	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
10309*b3fce824SCristian Pallarés	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10310189777a2SCristian Pallares	  case :$dllsearchpath: in
10311189777a2SCristian Pallares	  *":$libdir:"*) ;;
10312189777a2SCristian Pallares	  ::) dllsearchpath=$libdir;;
10313189777a2SCristian Pallares	  *) func_append dllsearchpath ":$libdir";;
10314189777a2SCristian Pallares	  esac
10315189777a2SCristian Pallares	  case :$dllsearchpath: in
10316189777a2SCristian Pallares	  *":$testbindir:"*) ;;
10317189777a2SCristian Pallares	  ::) dllsearchpath=$testbindir;;
10318189777a2SCristian Pallares	  *) func_append dllsearchpath ":$testbindir";;
10319189777a2SCristian Pallares	  esac
10320189777a2SCristian Pallares	  ;;
10321189777a2SCristian Pallares	esac
10322189777a2SCristian Pallares      done
10323189777a2SCristian Pallares      # Substitute the hardcoded libdirs into the rpath.
10324189777a2SCristian Pallares      if test -n "$hardcode_libdir_separator" &&
10325189777a2SCristian Pallares	 test -n "$hardcode_libdirs"; then
10326*b3fce824SCristian Pallarés	libdir=$hardcode_libdirs
10327189777a2SCristian Pallares	eval rpath=\" $hardcode_libdir_flag_spec\"
10328189777a2SCristian Pallares      fi
10329*b3fce824SCristian Pallarés      compile_rpath=$rpath
10330189777a2SCristian Pallares
10331189777a2SCristian Pallares      rpath=
10332189777a2SCristian Pallares      hardcode_libdirs=
10333189777a2SCristian Pallares      for libdir in $finalize_rpath; do
10334189777a2SCristian Pallares	if test -n "$hardcode_libdir_flag_spec"; then
10335189777a2SCristian Pallares	  if test -n "$hardcode_libdir_separator"; then
10336189777a2SCristian Pallares	    if test -z "$hardcode_libdirs"; then
10337*b3fce824SCristian Pallarés	      hardcode_libdirs=$libdir
10338189777a2SCristian Pallares	    else
10339189777a2SCristian Pallares	      # Just accumulate the unique libdirs.
10340189777a2SCristian Pallares	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10341189777a2SCristian Pallares	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10342189777a2SCristian Pallares		;;
10343189777a2SCristian Pallares	      *)
10344189777a2SCristian Pallares		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10345189777a2SCristian Pallares		;;
10346189777a2SCristian Pallares	      esac
10347189777a2SCristian Pallares	    fi
10348189777a2SCristian Pallares	  else
10349189777a2SCristian Pallares	    eval flag=\"$hardcode_libdir_flag_spec\"
10350189777a2SCristian Pallares	    func_append rpath " $flag"
10351189777a2SCristian Pallares	  fi
10352189777a2SCristian Pallares	elif test -n "$runpath_var"; then
10353189777a2SCristian Pallares	  case "$finalize_perm_rpath " in
10354189777a2SCristian Pallares	  *" $libdir "*) ;;
10355189777a2SCristian Pallares	  *) func_append finalize_perm_rpath " $libdir" ;;
10356189777a2SCristian Pallares	  esac
10357189777a2SCristian Pallares	fi
10358189777a2SCristian Pallares      done
10359189777a2SCristian Pallares      # Substitute the hardcoded libdirs into the rpath.
10360189777a2SCristian Pallares      if test -n "$hardcode_libdir_separator" &&
10361189777a2SCristian Pallares	 test -n "$hardcode_libdirs"; then
10362*b3fce824SCristian Pallarés	libdir=$hardcode_libdirs
10363189777a2SCristian Pallares	eval rpath=\" $hardcode_libdir_flag_spec\"
10364189777a2SCristian Pallares      fi
10365*b3fce824SCristian Pallarés      finalize_rpath=$rpath
10366189777a2SCristian Pallares
10367*b3fce824SCristian Pallarés      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10368189777a2SCristian Pallares	# Transform all the library objects into standard objects.
10369189777a2SCristian Pallares	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10370189777a2SCristian Pallares	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10371189777a2SCristian Pallares      fi
10372189777a2SCristian Pallares
10373*b3fce824SCristian Pallarés      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10374189777a2SCristian Pallares
10375189777a2SCristian Pallares      # template prelinking step
10376189777a2SCristian Pallares      if test -n "$prelink_cmds"; then
10377189777a2SCristian Pallares	func_execute_cmds "$prelink_cmds" 'exit $?'
10378189777a2SCristian Pallares      fi
10379189777a2SCristian Pallares
10380*b3fce824SCristian Pallarés      wrappers_required=:
10381189777a2SCristian Pallares      case $host in
10382189777a2SCristian Pallares      *cegcc* | *mingw32ce*)
10383189777a2SCristian Pallares        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10384*b3fce824SCristian Pallarés        wrappers_required=false
10385189777a2SCristian Pallares        ;;
10386189777a2SCristian Pallares      *cygwin* | *mingw* )
10387*b3fce824SCristian Pallarés        test yes = "$build_libtool_libs" || wrappers_required=false
10388189777a2SCristian Pallares        ;;
10389189777a2SCristian Pallares      *)
10390*b3fce824SCristian Pallarés        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10391*b3fce824SCristian Pallarés          wrappers_required=false
10392189777a2SCristian Pallares        fi
10393189777a2SCristian Pallares        ;;
10394189777a2SCristian Pallares      esac
10395*b3fce824SCristian Pallarés      $wrappers_required || {
10396189777a2SCristian Pallares	# Replace the output file specification.
10397189777a2SCristian Pallares	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10398*b3fce824SCristian Pallarés	link_command=$compile_command$compile_rpath
10399189777a2SCristian Pallares
10400189777a2SCristian Pallares	# We have no uninstalled library dependencies, so finalize right now.
10401189777a2SCristian Pallares	exit_status=0
10402189777a2SCristian Pallares	func_show_eval "$link_command" 'exit_status=$?'
10403189777a2SCristian Pallares
10404189777a2SCristian Pallares	if test -n "$postlink_cmds"; then
10405189777a2SCristian Pallares	  func_to_tool_file "$output"
10406189777a2SCristian Pallares	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10407189777a2SCristian Pallares	  func_execute_cmds "$postlink_cmds" 'exit $?'
10408189777a2SCristian Pallares	fi
10409189777a2SCristian Pallares
10410189777a2SCristian Pallares	# Delete the generated files.
10411*b3fce824SCristian Pallarés	if test -f "$output_objdir/${outputname}S.$objext"; then
10412*b3fce824SCristian Pallarés	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10413189777a2SCristian Pallares	fi
10414189777a2SCristian Pallares
10415189777a2SCristian Pallares	exit $exit_status
10416*b3fce824SCristian Pallarés      }
10417189777a2SCristian Pallares
10418189777a2SCristian Pallares      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10419189777a2SCristian Pallares	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10420189777a2SCristian Pallares      fi
10421189777a2SCristian Pallares      if test -n "$finalize_shlibpath"; then
10422189777a2SCristian Pallares	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10423189777a2SCristian Pallares      fi
10424189777a2SCristian Pallares
10425189777a2SCristian Pallares      compile_var=
10426189777a2SCristian Pallares      finalize_var=
10427189777a2SCristian Pallares      if test -n "$runpath_var"; then
10428189777a2SCristian Pallares	if test -n "$perm_rpath"; then
10429189777a2SCristian Pallares	  # We should set the runpath_var.
10430189777a2SCristian Pallares	  rpath=
10431189777a2SCristian Pallares	  for dir in $perm_rpath; do
10432189777a2SCristian Pallares	    func_append rpath "$dir:"
10433189777a2SCristian Pallares	  done
10434189777a2SCristian Pallares	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10435189777a2SCristian Pallares	fi
10436189777a2SCristian Pallares	if test -n "$finalize_perm_rpath"; then
10437189777a2SCristian Pallares	  # We should set the runpath_var.
10438189777a2SCristian Pallares	  rpath=
10439189777a2SCristian Pallares	  for dir in $finalize_perm_rpath; do
10440189777a2SCristian Pallares	    func_append rpath "$dir:"
10441189777a2SCristian Pallares	  done
10442189777a2SCristian Pallares	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10443189777a2SCristian Pallares	fi
10444189777a2SCristian Pallares      fi
10445189777a2SCristian Pallares
10446*b3fce824SCristian Pallarés      if test yes = "$no_install"; then
10447189777a2SCristian Pallares	# We don't need to create a wrapper script.
10448*b3fce824SCristian Pallarés	link_command=$compile_var$compile_command$compile_rpath
10449189777a2SCristian Pallares	# Replace the output file specification.
10450189777a2SCristian Pallares	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10451189777a2SCristian Pallares	# Delete the old output file.
10452189777a2SCristian Pallares	$opt_dry_run || $RM $output
10453189777a2SCristian Pallares	# Link the executable and exit
10454189777a2SCristian Pallares	func_show_eval "$link_command" 'exit $?'
10455189777a2SCristian Pallares
10456189777a2SCristian Pallares	if test -n "$postlink_cmds"; then
10457189777a2SCristian Pallares	  func_to_tool_file "$output"
10458189777a2SCristian Pallares	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10459189777a2SCristian Pallares	  func_execute_cmds "$postlink_cmds" 'exit $?'
10460189777a2SCristian Pallares	fi
10461189777a2SCristian Pallares
10462189777a2SCristian Pallares	exit $EXIT_SUCCESS
10463189777a2SCristian Pallares      fi
10464189777a2SCristian Pallares
10465*b3fce824SCristian Pallarés      case $hardcode_action,$fast_install in
10466*b3fce824SCristian Pallarés        relink,*)
10467189777a2SCristian Pallares	  # Fast installation is not supported
10468*b3fce824SCristian Pallarés	  link_command=$compile_var$compile_command$compile_rpath
10469*b3fce824SCristian Pallarés	  relink_command=$finalize_var$finalize_command$finalize_rpath
10470189777a2SCristian Pallares
10471189777a2SCristian Pallares	  func_warning "this platform does not like uninstalled shared libraries"
10472*b3fce824SCristian Pallarés	  func_warning "'$output' will be relinked during installation"
10473*b3fce824SCristian Pallarés	  ;;
10474*b3fce824SCristian Pallarés        *,yes)
10475*b3fce824SCristian Pallarés	  link_command=$finalize_var$compile_command$finalize_rpath
10476189777a2SCristian Pallares	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10477*b3fce824SCristian Pallarés          ;;
10478*b3fce824SCristian Pallarés	*,no)
10479*b3fce824SCristian Pallarés	  link_command=$compile_var$compile_command$compile_rpath
10480*b3fce824SCristian Pallarés	  relink_command=$finalize_var$finalize_command$finalize_rpath
10481*b3fce824SCristian Pallarés          ;;
10482*b3fce824SCristian Pallarés	*,needless)
10483*b3fce824SCristian Pallarés	  link_command=$finalize_var$compile_command$finalize_rpath
10484189777a2SCristian Pallares	  relink_command=
10485*b3fce824SCristian Pallarés          ;;
10486*b3fce824SCristian Pallarés      esac
10487189777a2SCristian Pallares
10488189777a2SCristian Pallares      # Replace the output file specification.
10489189777a2SCristian Pallares      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10490189777a2SCristian Pallares
10491189777a2SCristian Pallares      # Delete the old output files.
10492189777a2SCristian Pallares      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10493189777a2SCristian Pallares
10494189777a2SCristian Pallares      func_show_eval "$link_command" 'exit $?'
10495189777a2SCristian Pallares
10496189777a2SCristian Pallares      if test -n "$postlink_cmds"; then
10497189777a2SCristian Pallares	func_to_tool_file "$output_objdir/$outputname"
10498189777a2SCristian Pallares	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10499189777a2SCristian Pallares	func_execute_cmds "$postlink_cmds" 'exit $?'
10500189777a2SCristian Pallares      fi
10501189777a2SCristian Pallares
10502189777a2SCristian Pallares      # Now create the wrapper script.
10503189777a2SCristian Pallares      func_verbose "creating $output"
10504189777a2SCristian Pallares
10505189777a2SCristian Pallares      # Quote the relink command for shipping.
10506189777a2SCristian Pallares      if test -n "$relink_command"; then
10507189777a2SCristian Pallares	# Preserve any variables that may affect compiler behavior
10508189777a2SCristian Pallares	for var in $variables_saved_for_relink; do
10509189777a2SCristian Pallares	  if eval test -z \"\${$var+set}\"; then
10510189777a2SCristian Pallares	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10511189777a2SCristian Pallares	  elif eval var_value=\$$var; test -z "$var_value"; then
10512189777a2SCristian Pallares	    relink_command="$var=; export $var; $relink_command"
10513189777a2SCristian Pallares	  else
10514189777a2SCristian Pallares	    func_quote_for_eval "$var_value"
10515189777a2SCristian Pallares	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10516189777a2SCristian Pallares	  fi
10517189777a2SCristian Pallares	done
10518189777a2SCristian Pallares	relink_command="(cd `pwd`; $relink_command)"
10519189777a2SCristian Pallares	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10520189777a2SCristian Pallares      fi
10521189777a2SCristian Pallares
10522189777a2SCristian Pallares      # Only actually do things if not in dry run mode.
10523189777a2SCristian Pallares      $opt_dry_run || {
10524189777a2SCristian Pallares	# win32 will think the script is a binary if it has
10525189777a2SCristian Pallares	# a .exe suffix, so we strip it off here.
10526189777a2SCristian Pallares	case $output in
10527189777a2SCristian Pallares	  *.exe) func_stripname '' '.exe' "$output"
10528189777a2SCristian Pallares	         output=$func_stripname_result ;;
10529189777a2SCristian Pallares	esac
10530189777a2SCristian Pallares	# test for cygwin because mv fails w/o .exe extensions
10531189777a2SCristian Pallares	case $host in
10532189777a2SCristian Pallares	  *cygwin*)
10533189777a2SCristian Pallares	    exeext=.exe
10534189777a2SCristian Pallares	    func_stripname '' '.exe' "$outputname"
10535189777a2SCristian Pallares	    outputname=$func_stripname_result ;;
10536189777a2SCristian Pallares	  *) exeext= ;;
10537189777a2SCristian Pallares	esac
10538189777a2SCristian Pallares	case $host in
10539189777a2SCristian Pallares	  *cygwin* | *mingw* )
10540189777a2SCristian Pallares	    func_dirname_and_basename "$output" "" "."
10541189777a2SCristian Pallares	    output_name=$func_basename_result
10542189777a2SCristian Pallares	    output_path=$func_dirname_result
10543*b3fce824SCristian Pallarés	    cwrappersource=$output_path/$objdir/lt-$output_name.c
10544*b3fce824SCristian Pallarés	    cwrapper=$output_path/$output_name.exe
10545189777a2SCristian Pallares	    $RM $cwrappersource $cwrapper
10546189777a2SCristian Pallares	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10547189777a2SCristian Pallares
10548189777a2SCristian Pallares	    func_emit_cwrapperexe_src > $cwrappersource
10549189777a2SCristian Pallares
10550189777a2SCristian Pallares	    # The wrapper executable is built using the $host compiler,
10551189777a2SCristian Pallares	    # because it contains $host paths and files. If cross-
10552189777a2SCristian Pallares	    # compiling, it, like the target executable, must be
10553189777a2SCristian Pallares	    # executed on the $host or under an emulation environment.
10554189777a2SCristian Pallares	    $opt_dry_run || {
10555189777a2SCristian Pallares	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10556189777a2SCristian Pallares	      $STRIP $cwrapper
10557189777a2SCristian Pallares	    }
10558189777a2SCristian Pallares
10559189777a2SCristian Pallares	    # Now, create the wrapper script for func_source use:
10560189777a2SCristian Pallares	    func_ltwrapper_scriptname $cwrapper
10561189777a2SCristian Pallares	    $RM $func_ltwrapper_scriptname_result
10562189777a2SCristian Pallares	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10563189777a2SCristian Pallares	    $opt_dry_run || {
10564189777a2SCristian Pallares	      # note: this script will not be executed, so do not chmod.
10565189777a2SCristian Pallares	      if test "x$build" = "x$host"; then
10566189777a2SCristian Pallares		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10567189777a2SCristian Pallares	      else
10568189777a2SCristian Pallares		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10569189777a2SCristian Pallares	      fi
10570189777a2SCristian Pallares	    }
10571189777a2SCristian Pallares	  ;;
10572189777a2SCristian Pallares	  * )
10573189777a2SCristian Pallares	    $RM $output
10574189777a2SCristian Pallares	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10575189777a2SCristian Pallares
10576189777a2SCristian Pallares	    func_emit_wrapper no > $output
10577189777a2SCristian Pallares	    chmod +x $output
10578189777a2SCristian Pallares	  ;;
10579189777a2SCristian Pallares	esac
10580189777a2SCristian Pallares      }
10581189777a2SCristian Pallares      exit $EXIT_SUCCESS
10582189777a2SCristian Pallares      ;;
10583189777a2SCristian Pallares    esac
10584189777a2SCristian Pallares
10585189777a2SCristian Pallares    # See if we need to build an old-fashioned archive.
10586189777a2SCristian Pallares    for oldlib in $oldlibs; do
10587189777a2SCristian Pallares
10588*b3fce824SCristian Pallarés      case $build_libtool_libs in
10589*b3fce824SCristian Pallarés        convenience)
10590189777a2SCristian Pallares	  oldobjs="$libobjs_save $symfileobj"
10591*b3fce824SCristian Pallarés	  addlibs=$convenience
10592189777a2SCristian Pallares	  build_libtool_libs=no
10593*b3fce824SCristian Pallarés	  ;;
10594*b3fce824SCristian Pallarés	module)
10595*b3fce824SCristian Pallarés	  oldobjs=$libobjs_save
10596*b3fce824SCristian Pallarés	  addlibs=$old_convenience
10597189777a2SCristian Pallares	  build_libtool_libs=no
10598*b3fce824SCristian Pallarés          ;;
10599*b3fce824SCristian Pallarés	*)
10600189777a2SCristian Pallares	  oldobjs="$old_deplibs $non_pic_objects"
10601*b3fce824SCristian Pallarés	  $preload && test -f "$symfileobj" \
10602*b3fce824SCristian Pallarés	    && func_append oldobjs " $symfileobj"
10603*b3fce824SCristian Pallarés	  addlibs=$old_convenience
10604*b3fce824SCristian Pallarés	  ;;
10605*b3fce824SCristian Pallarés      esac
10606189777a2SCristian Pallares
10607189777a2SCristian Pallares      if test -n "$addlibs"; then
10608*b3fce824SCristian Pallarés	gentop=$output_objdir/${outputname}x
10609189777a2SCristian Pallares	func_append generated " $gentop"
10610189777a2SCristian Pallares
10611189777a2SCristian Pallares	func_extract_archives $gentop $addlibs
10612189777a2SCristian Pallares	func_append oldobjs " $func_extract_archives_result"
10613189777a2SCristian Pallares      fi
10614189777a2SCristian Pallares
10615189777a2SCristian Pallares      # Do each command in the archive commands.
10616*b3fce824SCristian Pallarés      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10617189777a2SCristian Pallares	cmds=$old_archive_from_new_cmds
10618189777a2SCristian Pallares      else
10619189777a2SCristian Pallares
10620189777a2SCristian Pallares	# Add any objects from preloaded convenience libraries
10621189777a2SCristian Pallares	if test -n "$dlprefiles"; then
10622*b3fce824SCristian Pallarés	  gentop=$output_objdir/${outputname}x
10623189777a2SCristian Pallares	  func_append generated " $gentop"
10624189777a2SCristian Pallares
10625189777a2SCristian Pallares	  func_extract_archives $gentop $dlprefiles
10626189777a2SCristian Pallares	  func_append oldobjs " $func_extract_archives_result"
10627189777a2SCristian Pallares	fi
10628189777a2SCristian Pallares
10629189777a2SCristian Pallares	# POSIX demands no paths to be encoded in archives.  We have
10630189777a2SCristian Pallares	# to avoid creating archives with duplicate basenames if we
10631189777a2SCristian Pallares	# might have to extract them afterwards, e.g., when creating a
10632189777a2SCristian Pallares	# static archive out of a convenience library, or when linking
10633189777a2SCristian Pallares	# the entirety of a libtool archive into another (currently
10634189777a2SCristian Pallares	# not supported by libtool).
10635189777a2SCristian Pallares	if (for obj in $oldobjs
10636189777a2SCristian Pallares	    do
10637189777a2SCristian Pallares	      func_basename "$obj"
10638189777a2SCristian Pallares	      $ECHO "$func_basename_result"
10639189777a2SCristian Pallares	    done | sort | sort -uc >/dev/null 2>&1); then
10640189777a2SCristian Pallares	  :
10641189777a2SCristian Pallares	else
10642189777a2SCristian Pallares	  echo "copying selected object files to avoid basename conflicts..."
10643*b3fce824SCristian Pallarés	  gentop=$output_objdir/${outputname}x
10644189777a2SCristian Pallares	  func_append generated " $gentop"
10645189777a2SCristian Pallares	  func_mkdir_p "$gentop"
10646189777a2SCristian Pallares	  save_oldobjs=$oldobjs
10647189777a2SCristian Pallares	  oldobjs=
10648189777a2SCristian Pallares	  counter=1
10649189777a2SCristian Pallares	  for obj in $save_oldobjs
10650189777a2SCristian Pallares	  do
10651189777a2SCristian Pallares	    func_basename "$obj"
10652*b3fce824SCristian Pallarés	    objbase=$func_basename_result
10653189777a2SCristian Pallares	    case " $oldobjs " in
10654189777a2SCristian Pallares	    " ") oldobjs=$obj ;;
10655189777a2SCristian Pallares	    *[\ /]"$objbase "*)
10656189777a2SCristian Pallares	      while :; do
10657189777a2SCristian Pallares		# Make sure we don't pick an alternate name that also
10658189777a2SCristian Pallares		# overlaps.
10659189777a2SCristian Pallares		newobj=lt$counter-$objbase
10660189777a2SCristian Pallares		func_arith $counter + 1
10661189777a2SCristian Pallares		counter=$func_arith_result
10662189777a2SCristian Pallares		case " $oldobjs " in
10663189777a2SCristian Pallares		*[\ /]"$newobj "*) ;;
10664189777a2SCristian Pallares		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10665189777a2SCristian Pallares		esac
10666189777a2SCristian Pallares	      done
10667189777a2SCristian Pallares	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10668189777a2SCristian Pallares	      func_append oldobjs " $gentop/$newobj"
10669189777a2SCristian Pallares	      ;;
10670189777a2SCristian Pallares	    *) func_append oldobjs " $obj" ;;
10671189777a2SCristian Pallares	    esac
10672189777a2SCristian Pallares	  done
10673189777a2SCristian Pallares	fi
10674189777a2SCristian Pallares	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10675189777a2SCristian Pallares	tool_oldlib=$func_to_tool_file_result
10676189777a2SCristian Pallares	eval cmds=\"$old_archive_cmds\"
10677189777a2SCristian Pallares
10678189777a2SCristian Pallares	func_len " $cmds"
10679189777a2SCristian Pallares	len=$func_len_result
10680189777a2SCristian Pallares	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10681189777a2SCristian Pallares	  cmds=$old_archive_cmds
10682189777a2SCristian Pallares	elif test -n "$archiver_list_spec"; then
10683189777a2SCristian Pallares	  func_verbose "using command file archive linking..."
10684189777a2SCristian Pallares	  for obj in $oldobjs
10685189777a2SCristian Pallares	  do
10686189777a2SCristian Pallares	    func_to_tool_file "$obj"
10687189777a2SCristian Pallares	    $ECHO "$func_to_tool_file_result"
10688189777a2SCristian Pallares	  done > $output_objdir/$libname.libcmd
10689189777a2SCristian Pallares	  func_to_tool_file "$output_objdir/$libname.libcmd"
10690189777a2SCristian Pallares	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10691189777a2SCristian Pallares	  cmds=$old_archive_cmds
10692189777a2SCristian Pallares	else
10693189777a2SCristian Pallares	  # the command line is too long to link in one step, link in parts
10694189777a2SCristian Pallares	  func_verbose "using piecewise archive linking..."
10695189777a2SCristian Pallares	  save_RANLIB=$RANLIB
10696189777a2SCristian Pallares	  RANLIB=:
10697189777a2SCristian Pallares	  objlist=
10698189777a2SCristian Pallares	  concat_cmds=
10699189777a2SCristian Pallares	  save_oldobjs=$oldobjs
10700189777a2SCristian Pallares	  oldobjs=
10701189777a2SCristian Pallares	  # Is there a better way of finding the last object in the list?
10702189777a2SCristian Pallares	  for obj in $save_oldobjs
10703189777a2SCristian Pallares	  do
10704189777a2SCristian Pallares	    last_oldobj=$obj
10705189777a2SCristian Pallares	  done
10706189777a2SCristian Pallares	  eval test_cmds=\"$old_archive_cmds\"
10707189777a2SCristian Pallares	  func_len " $test_cmds"
10708189777a2SCristian Pallares	  len0=$func_len_result
10709189777a2SCristian Pallares	  len=$len0
10710189777a2SCristian Pallares	  for obj in $save_oldobjs
10711189777a2SCristian Pallares	  do
10712189777a2SCristian Pallares	    func_len " $obj"
10713189777a2SCristian Pallares	    func_arith $len + $func_len_result
10714189777a2SCristian Pallares	    len=$func_arith_result
10715189777a2SCristian Pallares	    func_append objlist " $obj"
10716189777a2SCristian Pallares	    if test "$len" -lt "$max_cmd_len"; then
10717189777a2SCristian Pallares	      :
10718189777a2SCristian Pallares	    else
10719189777a2SCristian Pallares	      # the above command should be used before it gets too long
10720189777a2SCristian Pallares	      oldobjs=$objlist
10721189777a2SCristian Pallares	      if test "$obj" = "$last_oldobj"; then
10722189777a2SCristian Pallares		RANLIB=$save_RANLIB
10723189777a2SCristian Pallares	      fi
10724189777a2SCristian Pallares	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10725*b3fce824SCristian Pallarés	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10726189777a2SCristian Pallares	      objlist=
10727189777a2SCristian Pallares	      len=$len0
10728189777a2SCristian Pallares	    fi
10729189777a2SCristian Pallares	  done
10730189777a2SCristian Pallares	  RANLIB=$save_RANLIB
10731189777a2SCristian Pallares	  oldobjs=$objlist
10732*b3fce824SCristian Pallarés	  if test -z "$oldobjs"; then
10733189777a2SCristian Pallares	    eval cmds=\"\$concat_cmds\"
10734189777a2SCristian Pallares	  else
10735189777a2SCristian Pallares	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10736189777a2SCristian Pallares	  fi
10737189777a2SCristian Pallares	fi
10738189777a2SCristian Pallares      fi
10739189777a2SCristian Pallares      func_execute_cmds "$cmds" 'exit $?'
10740189777a2SCristian Pallares    done
10741189777a2SCristian Pallares
10742189777a2SCristian Pallares    test -n "$generated" && \
10743189777a2SCristian Pallares      func_show_eval "${RM}r$generated"
10744189777a2SCristian Pallares
10745189777a2SCristian Pallares    # Now create the libtool archive.
10746189777a2SCristian Pallares    case $output in
10747189777a2SCristian Pallares    *.la)
10748189777a2SCristian Pallares      old_library=
10749*b3fce824SCristian Pallarés      test yes = "$build_old_libs" && old_library=$libname.$libext
10750189777a2SCristian Pallares      func_verbose "creating $output"
10751189777a2SCristian Pallares
10752189777a2SCristian Pallares      # Preserve any variables that may affect compiler behavior
10753189777a2SCristian Pallares      for var in $variables_saved_for_relink; do
10754189777a2SCristian Pallares	if eval test -z \"\${$var+set}\"; then
10755189777a2SCristian Pallares	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10756189777a2SCristian Pallares	elif eval var_value=\$$var; test -z "$var_value"; then
10757189777a2SCristian Pallares	  relink_command="$var=; export $var; $relink_command"
10758189777a2SCristian Pallares	else
10759189777a2SCristian Pallares	  func_quote_for_eval "$var_value"
10760189777a2SCristian Pallares	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10761189777a2SCristian Pallares	fi
10762189777a2SCristian Pallares      done
10763189777a2SCristian Pallares      # Quote the link command for shipping.
10764*b3fce824SCristian Pallarés      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10765189777a2SCristian Pallares      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10766*b3fce824SCristian Pallarés      if test yes = "$hardcode_automatic"; then
10767189777a2SCristian Pallares	relink_command=
10768189777a2SCristian Pallares      fi
10769189777a2SCristian Pallares
10770189777a2SCristian Pallares      # Only create the output if not a dry run.
10771189777a2SCristian Pallares      $opt_dry_run || {
10772189777a2SCristian Pallares	for installed in no yes; do
10773*b3fce824SCristian Pallarés	  if test yes = "$installed"; then
10774189777a2SCristian Pallares	    if test -z "$install_libdir"; then
10775189777a2SCristian Pallares	      break
10776189777a2SCristian Pallares	    fi
10777*b3fce824SCristian Pallarés	    output=$output_objdir/${outputname}i
10778189777a2SCristian Pallares	    # Replace all uninstalled libtool libraries with the installed ones
10779189777a2SCristian Pallares	    newdependency_libs=
10780189777a2SCristian Pallares	    for deplib in $dependency_libs; do
10781189777a2SCristian Pallares	      case $deplib in
10782189777a2SCristian Pallares	      *.la)
10783189777a2SCristian Pallares		func_basename "$deplib"
10784*b3fce824SCristian Pallarés		name=$func_basename_result
10785189777a2SCristian Pallares		func_resolve_sysroot "$deplib"
10786*b3fce824SCristian Pallarés		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10787189777a2SCristian Pallares		test -z "$libdir" && \
10788*b3fce824SCristian Pallarés		  func_fatal_error "'$deplib' is not a valid libtool archive"
10789189777a2SCristian Pallares		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10790189777a2SCristian Pallares		;;
10791189777a2SCristian Pallares	      -L*)
10792189777a2SCristian Pallares		func_stripname -L '' "$deplib"
10793189777a2SCristian Pallares		func_replace_sysroot "$func_stripname_result"
10794189777a2SCristian Pallares		func_append newdependency_libs " -L$func_replace_sysroot_result"
10795189777a2SCristian Pallares		;;
10796189777a2SCristian Pallares	      -R*)
10797189777a2SCristian Pallares		func_stripname -R '' "$deplib"
10798189777a2SCristian Pallares		func_replace_sysroot "$func_stripname_result"
10799189777a2SCristian Pallares		func_append newdependency_libs " -R$func_replace_sysroot_result"
10800189777a2SCristian Pallares		;;
10801189777a2SCristian Pallares	      *) func_append newdependency_libs " $deplib" ;;
10802189777a2SCristian Pallares	      esac
10803189777a2SCristian Pallares	    done
10804*b3fce824SCristian Pallarés	    dependency_libs=$newdependency_libs
10805189777a2SCristian Pallares	    newdlfiles=
10806189777a2SCristian Pallares
10807189777a2SCristian Pallares	    for lib in $dlfiles; do
10808189777a2SCristian Pallares	      case $lib in
10809189777a2SCristian Pallares	      *.la)
10810189777a2SCristian Pallares	        func_basename "$lib"
10811*b3fce824SCristian Pallarés		name=$func_basename_result
10812*b3fce824SCristian Pallarés		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10813189777a2SCristian Pallares		test -z "$libdir" && \
10814*b3fce824SCristian Pallarés		  func_fatal_error "'$lib' is not a valid libtool archive"
10815189777a2SCristian Pallares		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10816189777a2SCristian Pallares		;;
10817189777a2SCristian Pallares	      *) func_append newdlfiles " $lib" ;;
10818189777a2SCristian Pallares	      esac
10819189777a2SCristian Pallares	    done
10820*b3fce824SCristian Pallarés	    dlfiles=$newdlfiles
10821189777a2SCristian Pallares	    newdlprefiles=
10822189777a2SCristian Pallares	    for lib in $dlprefiles; do
10823189777a2SCristian Pallares	      case $lib in
10824189777a2SCristian Pallares	      *.la)
10825189777a2SCristian Pallares		# Only pass preopened files to the pseudo-archive (for
10826189777a2SCristian Pallares		# eventual linking with the app. that links it) if we
10827189777a2SCristian Pallares		# didn't already link the preopened objects directly into
10828189777a2SCristian Pallares		# the library:
10829189777a2SCristian Pallares		func_basename "$lib"
10830*b3fce824SCristian Pallarés		name=$func_basename_result
10831*b3fce824SCristian Pallarés		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10832189777a2SCristian Pallares		test -z "$libdir" && \
10833*b3fce824SCristian Pallarés		  func_fatal_error "'$lib' is not a valid libtool archive"
10834189777a2SCristian Pallares		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10835189777a2SCristian Pallares		;;
10836189777a2SCristian Pallares	      esac
10837189777a2SCristian Pallares	    done
10838*b3fce824SCristian Pallarés	    dlprefiles=$newdlprefiles
10839189777a2SCristian Pallares	  else
10840189777a2SCristian Pallares	    newdlfiles=
10841189777a2SCristian Pallares	    for lib in $dlfiles; do
10842189777a2SCristian Pallares	      case $lib in
10843*b3fce824SCristian Pallarés		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10844189777a2SCristian Pallares		*) abs=`pwd`"/$lib" ;;
10845189777a2SCristian Pallares	      esac
10846189777a2SCristian Pallares	      func_append newdlfiles " $abs"
10847189777a2SCristian Pallares	    done
10848*b3fce824SCristian Pallarés	    dlfiles=$newdlfiles
10849189777a2SCristian Pallares	    newdlprefiles=
10850189777a2SCristian Pallares	    for lib in $dlprefiles; do
10851189777a2SCristian Pallares	      case $lib in
10852*b3fce824SCristian Pallarés		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10853189777a2SCristian Pallares		*) abs=`pwd`"/$lib" ;;
10854189777a2SCristian Pallares	      esac
10855189777a2SCristian Pallares	      func_append newdlprefiles " $abs"
10856189777a2SCristian Pallares	    done
10857*b3fce824SCristian Pallarés	    dlprefiles=$newdlprefiles
10858189777a2SCristian Pallares	  fi
10859189777a2SCristian Pallares	  $RM $output
10860189777a2SCristian Pallares	  # place dlname in correct position for cygwin
10861189777a2SCristian Pallares	  # In fact, it would be nice if we could use this code for all target
10862189777a2SCristian Pallares	  # systems that can't hard-code library paths into their executables
10863189777a2SCristian Pallares	  # and that have no shared library path variable independent of PATH,
10864189777a2SCristian Pallares	  # but it turns out we can't easily determine that from inspecting
10865189777a2SCristian Pallares	  # libtool variables, so we have to hard-code the OSs to which it
10866189777a2SCristian Pallares	  # applies here; at the moment, that means platforms that use the PE
10867189777a2SCristian Pallares	  # object format with DLL files.  See the long comment at the top of
10868189777a2SCristian Pallares	  # tests/bindir.at for full details.
10869189777a2SCristian Pallares	  tdlname=$dlname
10870189777a2SCristian Pallares	  case $host,$output,$installed,$module,$dlname in
10871189777a2SCristian Pallares	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
10872189777a2SCristian Pallares	      # If a -bindir argument was supplied, place the dll there.
10873*b3fce824SCristian Pallarés	      if test -n "$bindir"; then
10874189777a2SCristian Pallares		func_relative_path "$install_libdir" "$bindir"
10875*b3fce824SCristian Pallarés		tdlname=$func_relative_path_result/$dlname
10876189777a2SCristian Pallares	      else
10877189777a2SCristian Pallares		# Otherwise fall back on heuristic.
10878189777a2SCristian Pallares		tdlname=../bin/$dlname
10879189777a2SCristian Pallares	      fi
10880189777a2SCristian Pallares	      ;;
10881189777a2SCristian Pallares	  esac
10882189777a2SCristian Pallares	  $ECHO > $output "\
10883189777a2SCristian Pallares# $outputname - a libtool library file
10884*b3fce824SCristian Pallarés# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10885189777a2SCristian Pallares#
10886189777a2SCristian Pallares# Please DO NOT delete this file!
10887189777a2SCristian Pallares# It is necessary for linking the library.
10888189777a2SCristian Pallares
10889189777a2SCristian Pallares# The name that we can dlopen(3).
10890189777a2SCristian Pallaresdlname='$tdlname'
10891189777a2SCristian Pallares
10892189777a2SCristian Pallares# Names of this library.
10893189777a2SCristian Pallareslibrary_names='$library_names'
10894189777a2SCristian Pallares
10895189777a2SCristian Pallares# The name of the static archive.
10896189777a2SCristian Pallaresold_library='$old_library'
10897189777a2SCristian Pallares
10898189777a2SCristian Pallares# Linker flags that cannot go in dependency_libs.
10899189777a2SCristian Pallaresinherited_linker_flags='$new_inherited_linker_flags'
10900189777a2SCristian Pallares
10901189777a2SCristian Pallares# Libraries that this one depends upon.
10902189777a2SCristian Pallaresdependency_libs='$dependency_libs'
10903189777a2SCristian Pallares
10904189777a2SCristian Pallares# Names of additional weak libraries provided by this library
10905189777a2SCristian Pallaresweak_library_names='$weak_libs'
10906189777a2SCristian Pallares
10907189777a2SCristian Pallares# Version information for $libname.
10908189777a2SCristian Pallarescurrent=$current
10909189777a2SCristian Pallaresage=$age
10910189777a2SCristian Pallaresrevision=$revision
10911189777a2SCristian Pallares
10912189777a2SCristian Pallares# Is this an already installed library?
10913189777a2SCristian Pallaresinstalled=$installed
10914189777a2SCristian Pallares
10915189777a2SCristian Pallares# Should we warn about portability when linking against -modules?
10916189777a2SCristian Pallaresshouldnotlink=$module
10917189777a2SCristian Pallares
10918189777a2SCristian Pallares# Files to dlopen/dlpreopen
10919189777a2SCristian Pallaresdlopen='$dlfiles'
10920189777a2SCristian Pallaresdlpreopen='$dlprefiles'
10921189777a2SCristian Pallares
10922189777a2SCristian Pallares# Directory that this library needs to be installed in:
10923189777a2SCristian Pallareslibdir='$install_libdir'"
10924*b3fce824SCristian Pallarés	  if test no,yes = "$installed,$need_relink"; then
10925189777a2SCristian Pallares	    $ECHO >> $output "\
10926189777a2SCristian Pallaresrelink_command=\"$relink_command\""
10927189777a2SCristian Pallares	  fi
10928189777a2SCristian Pallares	done
10929189777a2SCristian Pallares      }
10930189777a2SCristian Pallares
10931189777a2SCristian Pallares      # Do a symbolic link so that the libtool archive can be found in
10932189777a2SCristian Pallares      # LD_LIBRARY_PATH before the program is installed.
10933189777a2SCristian Pallares      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10934189777a2SCristian Pallares      ;;
10935189777a2SCristian Pallares    esac
10936189777a2SCristian Pallares    exit $EXIT_SUCCESS
10937189777a2SCristian Pallares}
10938189777a2SCristian Pallares
10939*b3fce824SCristian Pallarésif test link = "$opt_mode" || test relink = "$opt_mode"; then
10940189777a2SCristian Pallares  func_mode_link ${1+"$@"}
10941*b3fce824SCristian Pallarésfi
10942189777a2SCristian Pallares
10943189777a2SCristian Pallares
10944189777a2SCristian Pallares# func_mode_uninstall arg...
10945189777a2SCristian Pallaresfunc_mode_uninstall ()
10946189777a2SCristian Pallares{
10947*b3fce824SCristian Pallarés    $debug_cmd
10948*b3fce824SCristian Pallarés
10949*b3fce824SCristian Pallarés    RM=$nonopt
10950189777a2SCristian Pallares    files=
10951*b3fce824SCristian Pallarés    rmforce=false
10952189777a2SCristian Pallares    exit_status=0
10953189777a2SCristian Pallares
10954189777a2SCristian Pallares    # This variable tells wrapper scripts just to set variables rather
10955189777a2SCristian Pallares    # than running their programs.
10956*b3fce824SCristian Pallarés    libtool_install_magic=$magic
10957189777a2SCristian Pallares
10958189777a2SCristian Pallares    for arg
10959189777a2SCristian Pallares    do
10960189777a2SCristian Pallares      case $arg in
10961*b3fce824SCristian Pallarés      -f) func_append RM " $arg"; rmforce=: ;;
10962189777a2SCristian Pallares      -*) func_append RM " $arg" ;;
10963189777a2SCristian Pallares      *) func_append files " $arg" ;;
10964189777a2SCristian Pallares      esac
10965189777a2SCristian Pallares    done
10966189777a2SCristian Pallares
10967189777a2SCristian Pallares    test -z "$RM" && \
10968189777a2SCristian Pallares      func_fatal_help "you must specify an RM program"
10969189777a2SCristian Pallares
10970189777a2SCristian Pallares    rmdirs=
10971189777a2SCristian Pallares
10972189777a2SCristian Pallares    for file in $files; do
10973189777a2SCristian Pallares      func_dirname "$file" "" "."
10974*b3fce824SCristian Pallarés      dir=$func_dirname_result
10975*b3fce824SCristian Pallarés      if test . = "$dir"; then
10976*b3fce824SCristian Pallarés	odir=$objdir
10977189777a2SCristian Pallares      else
10978*b3fce824SCristian Pallarés	odir=$dir/$objdir
10979189777a2SCristian Pallares      fi
10980189777a2SCristian Pallares      func_basename "$file"
10981*b3fce824SCristian Pallarés      name=$func_basename_result
10982*b3fce824SCristian Pallarés      test uninstall = "$opt_mode" && odir=$dir
10983189777a2SCristian Pallares
10984189777a2SCristian Pallares      # Remember odir for removal later, being careful to avoid duplicates
10985*b3fce824SCristian Pallarés      if test clean = "$opt_mode"; then
10986189777a2SCristian Pallares	case " $rmdirs " in
10987189777a2SCristian Pallares	  *" $odir "*) ;;
10988189777a2SCristian Pallares	  *) func_append rmdirs " $odir" ;;
10989189777a2SCristian Pallares	esac
10990189777a2SCristian Pallares      fi
10991189777a2SCristian Pallares
10992189777a2SCristian Pallares      # Don't error if the file doesn't exist and rm -f was used.
10993189777a2SCristian Pallares      if { test -L "$file"; } >/dev/null 2>&1 ||
10994189777a2SCristian Pallares	 { test -h "$file"; } >/dev/null 2>&1 ||
10995189777a2SCristian Pallares	 test -f "$file"; then
10996189777a2SCristian Pallares	:
10997189777a2SCristian Pallares      elif test -d "$file"; then
10998189777a2SCristian Pallares	exit_status=1
10999189777a2SCristian Pallares	continue
11000*b3fce824SCristian Pallarés      elif $rmforce; then
11001189777a2SCristian Pallares	continue
11002189777a2SCristian Pallares      fi
11003189777a2SCristian Pallares
11004*b3fce824SCristian Pallarés      rmfiles=$file
11005189777a2SCristian Pallares
11006189777a2SCristian Pallares      case $name in
11007189777a2SCristian Pallares      *.la)
11008189777a2SCristian Pallares	# Possibly a libtool archive, so verify it.
11009189777a2SCristian Pallares	if func_lalib_p "$file"; then
11010189777a2SCristian Pallares	  func_source $dir/$name
11011189777a2SCristian Pallares
11012189777a2SCristian Pallares	  # Delete the libtool libraries and symlinks.
11013189777a2SCristian Pallares	  for n in $library_names; do
11014189777a2SCristian Pallares	    func_append rmfiles " $odir/$n"
11015189777a2SCristian Pallares	  done
11016189777a2SCristian Pallares	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11017189777a2SCristian Pallares
11018*b3fce824SCristian Pallarés	  case $opt_mode in
11019189777a2SCristian Pallares	  clean)
11020189777a2SCristian Pallares	    case " $library_names " in
11021189777a2SCristian Pallares	    *" $dlname "*) ;;
11022189777a2SCristian Pallares	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11023189777a2SCristian Pallares	    esac
11024189777a2SCristian Pallares	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11025189777a2SCristian Pallares	    ;;
11026189777a2SCristian Pallares	  uninstall)
11027189777a2SCristian Pallares	    if test -n "$library_names"; then
11028189777a2SCristian Pallares	      # Do each command in the postuninstall commands.
11029*b3fce824SCristian Pallarés	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11030189777a2SCristian Pallares	    fi
11031189777a2SCristian Pallares
11032189777a2SCristian Pallares	    if test -n "$old_library"; then
11033189777a2SCristian Pallares	      # Do each command in the old_postuninstall commands.
11034*b3fce824SCristian Pallarés	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11035189777a2SCristian Pallares	    fi
11036189777a2SCristian Pallares	    # FIXME: should reinstall the best remaining shared library.
11037189777a2SCristian Pallares	    ;;
11038189777a2SCristian Pallares	  esac
11039189777a2SCristian Pallares	fi
11040189777a2SCristian Pallares	;;
11041189777a2SCristian Pallares
11042189777a2SCristian Pallares      *.lo)
11043189777a2SCristian Pallares	# Possibly a libtool object, so verify it.
11044189777a2SCristian Pallares	if func_lalib_p "$file"; then
11045189777a2SCristian Pallares
11046189777a2SCristian Pallares	  # Read the .lo file
11047189777a2SCristian Pallares	  func_source $dir/$name
11048189777a2SCristian Pallares
11049189777a2SCristian Pallares	  # Add PIC object to the list of files to remove.
11050*b3fce824SCristian Pallarés	  if test -n "$pic_object" && test none != "$pic_object"; then
11051189777a2SCristian Pallares	    func_append rmfiles " $dir/$pic_object"
11052189777a2SCristian Pallares	  fi
11053189777a2SCristian Pallares
11054189777a2SCristian Pallares	  # Add non-PIC object to the list of files to remove.
11055*b3fce824SCristian Pallarés	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11056189777a2SCristian Pallares	    func_append rmfiles " $dir/$non_pic_object"
11057189777a2SCristian Pallares	  fi
11058189777a2SCristian Pallares	fi
11059189777a2SCristian Pallares	;;
11060189777a2SCristian Pallares
11061189777a2SCristian Pallares      *)
11062*b3fce824SCristian Pallarés	if test clean = "$opt_mode"; then
11063189777a2SCristian Pallares	  noexename=$name
11064189777a2SCristian Pallares	  case $file in
11065189777a2SCristian Pallares	  *.exe)
11066189777a2SCristian Pallares	    func_stripname '' '.exe' "$file"
11067189777a2SCristian Pallares	    file=$func_stripname_result
11068189777a2SCristian Pallares	    func_stripname '' '.exe' "$name"
11069189777a2SCristian Pallares	    noexename=$func_stripname_result
11070189777a2SCristian Pallares	    # $file with .exe has already been added to rmfiles,
11071189777a2SCristian Pallares	    # add $file without .exe
11072189777a2SCristian Pallares	    func_append rmfiles " $file"
11073189777a2SCristian Pallares	    ;;
11074189777a2SCristian Pallares	  esac
11075189777a2SCristian Pallares	  # Do a test to see if this is a libtool program.
11076189777a2SCristian Pallares	  if func_ltwrapper_p "$file"; then
11077189777a2SCristian Pallares	    if func_ltwrapper_executable_p "$file"; then
11078189777a2SCristian Pallares	      func_ltwrapper_scriptname "$file"
11079189777a2SCristian Pallares	      relink_command=
11080189777a2SCristian Pallares	      func_source $func_ltwrapper_scriptname_result
11081189777a2SCristian Pallares	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11082189777a2SCristian Pallares	    else
11083189777a2SCristian Pallares	      relink_command=
11084189777a2SCristian Pallares	      func_source $dir/$noexename
11085189777a2SCristian Pallares	    fi
11086189777a2SCristian Pallares
11087189777a2SCristian Pallares	    # note $name still contains .exe if it was in $file originally
11088189777a2SCristian Pallares	    # as does the version of $file that was added into $rmfiles
11089*b3fce824SCristian Pallarés	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11090*b3fce824SCristian Pallarés	    if test yes = "$fast_install" && test -n "$relink_command"; then
11091189777a2SCristian Pallares	      func_append rmfiles " $odir/lt-$name"
11092189777a2SCristian Pallares	    fi
11093189777a2SCristian Pallares	    if test "X$noexename" != "X$name"; then
11094*b3fce824SCristian Pallarés	      func_append rmfiles " $odir/lt-$noexename.c"
11095189777a2SCristian Pallares	    fi
11096189777a2SCristian Pallares	  fi
11097189777a2SCristian Pallares	fi
11098189777a2SCristian Pallares	;;
11099189777a2SCristian Pallares      esac
11100189777a2SCristian Pallares      func_show_eval "$RM $rmfiles" 'exit_status=1'
11101189777a2SCristian Pallares    done
11102189777a2SCristian Pallares
11103*b3fce824SCristian Pallarés    # Try to remove the $objdir's in the directories where we deleted files
11104189777a2SCristian Pallares    for dir in $rmdirs; do
11105189777a2SCristian Pallares      if test -d "$dir"; then
11106189777a2SCristian Pallares	func_show_eval "rmdir $dir >/dev/null 2>&1"
11107189777a2SCristian Pallares      fi
11108189777a2SCristian Pallares    done
11109189777a2SCristian Pallares
11110189777a2SCristian Pallares    exit $exit_status
11111189777a2SCristian Pallares}
11112189777a2SCristian Pallares
11113*b3fce824SCristian Pallarésif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11114189777a2SCristian Pallares  func_mode_uninstall ${1+"$@"}
11115*b3fce824SCristian Pallarésfi
11116189777a2SCristian Pallares
11117189777a2SCristian Pallarestest -z "$opt_mode" && {
11118*b3fce824SCristian Pallarés  help=$generic_help
11119189777a2SCristian Pallares  func_fatal_help "you must specify a MODE"
11120189777a2SCristian Pallares}
11121189777a2SCristian Pallares
11122189777a2SCristian Pallarestest -z "$exec_cmd" && \
11123*b3fce824SCristian Pallarés  func_fatal_help "invalid operation mode '$opt_mode'"
11124189777a2SCristian Pallares
11125189777a2SCristian Pallaresif test -n "$exec_cmd"; then
11126189777a2SCristian Pallares  eval exec "$exec_cmd"
11127189777a2SCristian Pallares  exit $EXIT_FAILURE
11128189777a2SCristian Pallaresfi
11129189777a2SCristian Pallares
11130189777a2SCristian Pallaresexit $exit_status
11131189777a2SCristian Pallares
11132189777a2SCristian Pallares
11133189777a2SCristian Pallares# The TAGs below are defined such that we never get into a situation
11134*b3fce824SCristian Pallarés# where we disable both kinds of libraries.  Given conflicting
11135189777a2SCristian Pallares# choices, we go for a static library, that is the most portable,
11136189777a2SCristian Pallares# since we can't tell whether shared libraries were disabled because
11137189777a2SCristian Pallares# the user asked for that or because the platform doesn't support
11138189777a2SCristian Pallares# them.  This is particularly important on AIX, because we don't
11139189777a2SCristian Pallares# support having both static and shared libraries enabled at the same
11140189777a2SCristian Pallares# time on that platform, so we default to a shared-only configuration.
11141189777a2SCristian Pallares# If a disable-shared tag is given, we'll fallback to a static-only
11142189777a2SCristian Pallares# configuration.  But we'll never go from static-only to shared-only.
11143189777a2SCristian Pallares
11144189777a2SCristian Pallares# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11145189777a2SCristian Pallaresbuild_libtool_libs=no
11146189777a2SCristian Pallaresbuild_old_libs=yes
11147189777a2SCristian Pallares# ### END LIBTOOL TAG CONFIG: disable-shared
11148189777a2SCristian Pallares
11149189777a2SCristian Pallares# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11150189777a2SCristian Pallaresbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11151189777a2SCristian Pallares# ### END LIBTOOL TAG CONFIG: disable-static
11152189777a2SCristian Pallares
11153189777a2SCristian Pallares# Local Variables:
11154189777a2SCristian Pallares# mode:shell-script
11155189777a2SCristian Pallares# sh-indentation:2
11156189777a2SCristian Pallares# End:
11157