ltmain.sh revision dc99b369
1dc99b369Smrg
2dc99b369Smrg# libtool (GNU libtool) 2.4
3dc99b369Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4dc99b369Smrg
562ab96baSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
6dc99b369Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
7dc99b369Smrg# This is free software; see the source for copying conditions.  There is NO
8dc99b369Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9dc99b369Smrg
10dc99b369Smrg# GNU Libtool is free software; you can redistribute it and/or modify
115eefee25Smacallan# it under the terms of the GNU General Public License as published by
125eefee25Smacallan# the Free Software Foundation; either version 2 of the License, or
135eefee25Smacallan# (at your option) any later version.
145eefee25Smacallan#
15dc99b369Smrg# As a special exception to the GNU General Public License,
16dc99b369Smrg# if you distribute this file as part of a program or library that
17dc99b369Smrg# is built using GNU Libtool, you may include this file under the
18dc99b369Smrg# same distribution terms that you use for the rest of that program.
19dc99b369Smrg#
20dc99b369Smrg# GNU Libtool is distributed in the hope that it will be useful, but
215eefee25Smacallan# WITHOUT ANY WARRANTY; without even the implied warranty of
225eefee25Smacallan# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
235eefee25Smacallan# General Public License for more details.
245eefee25Smacallan#
255eefee25Smacallan# You should have received a copy of the GNU General Public License
26dc99b369Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27dc99b369Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28dc99b369Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29dc99b369Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
305eefee25Smacallan
31dc99b369Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32dc99b369Smrg#
33dc99b369Smrg# Provide generalized library-building support services.
34dc99b369Smrg#
35dc99b369Smrg#       --config             show all configuration variables
36dc99b369Smrg#       --debug              enable verbose shell tracing
37dc99b369Smrg#   -n, --dry-run            display commands without modifying any files
38dc99b369Smrg#       --features           display basic configuration information and exit
39dc99b369Smrg#       --mode=MODE          use operation mode MODE
40dc99b369Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
41dc99b369Smrg#       --quiet, --silent    don't print informational messages
42dc99b369Smrg#       --no-quiet, --no-silent
43dc99b369Smrg#                            print informational messages (default)
44dc99b369Smrg#       --tag=TAG            use configuration variables from tag TAG
45dc99b369Smrg#   -v, --verbose            print more informational messages than default
46dc99b369Smrg#       --no-verbose         don't print the extra informational messages
47dc99b369Smrg#       --version            print version information
48dc99b369Smrg#   -h, --help, --help-all   print short, long, or detailed help message
49dc99b369Smrg#
50dc99b369Smrg# MODE must be one of the following:
51dc99b369Smrg#
52dc99b369Smrg#         clean              remove files from the build directory
53dc99b369Smrg#         compile            compile a source file into a libtool object
54dc99b369Smrg#         execute            automatically set library path, then run a program
55dc99b369Smrg#         finish             complete the installation of libtool libraries
56dc99b369Smrg#         install            install libraries or executables
57dc99b369Smrg#         link               create a library or an executable
58dc99b369Smrg#         uninstall          remove libraries from an installed directory
59dc99b369Smrg#
60dc99b369Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
61dc99b369Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
62dc99b369Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
63dc99b369Smrg#
64dc99b369Smrg# When reporting a bug, please describe a test case to reproduce it and
65dc99b369Smrg# include the following information:
66dc99b369Smrg#
67dc99b369Smrg#         host-triplet:	$host
68dc99b369Smrg#         shell:		$SHELL
69dc99b369Smrg#         compiler:		$LTCC
70dc99b369Smrg#         compiler flags:		$LTCFLAGS
71dc99b369Smrg#         linker:		$LD (gnu? $with_gnu_ld)
72dc99b369Smrg#         $progname:	(GNU libtool) 2.4
73dc99b369Smrg#         automake:	$automake_version
74dc99b369Smrg#         autoconf:	$autoconf_version
75dc99b369Smrg#
76dc99b369Smrg# Report bugs to <bug-libtool@gnu.org>.
77dc99b369Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
78dc99b369Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
795eefee25Smacallan
80dc99b369SmrgPROGRAM=libtool
815eefee25SmacallanPACKAGE=libtool
82dc99b369SmrgVERSION=2.4
83dc99b369SmrgTIMESTAMP=""
84dc99b369Smrgpackage_revision=1.3293
8562ab96baSmrg
86dc99b369Smrg# Be Bourne compatible
8762ab96baSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8862ab96baSmrg  emulate sh
8962ab96baSmrg  NULLCMD=:
9062ab96baSmrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
9162ab96baSmrg  # is contrary to our usage.  Disable this feature.
9262ab96baSmrg  alias -g '${1+"$@"}'='"$@"'
935eefee25Smacallan  setopt NO_GLOB_SUBST
9462ab96baSmrgelse
9562ab96baSmrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
965eefee25Smacallanfi
9762ab96baSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9862ab96baSmrgDUALCASE=1; export DUALCASE # for MKS sh
995eefee25Smacallan
100dc99b369Smrg# A function that is used when there is no print builtin or printf.
101dc99b369Smrgfunc_fallback_echo ()
102dc99b369Smrg{
103dc99b369Smrg  eval 'cat <<_LTECHO_EOF
104dc99b369Smrg$1
105dc99b369Smrg_LTECHO_EOF'
106dc99b369Smrg}
1075eefee25Smacallan
108dc99b369Smrg# NLS nuisances: We save the old values to restore during execute mode.
109dc99b369Smrglt_user_locale=
110dc99b369Smrglt_safe_locale=
11162ab96baSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
11262ab96baSmrgdo
11362ab96baSmrg  eval "if test \"\${$lt_var+set}\" = set; then
114dc99b369Smrg          save_$lt_var=\$$lt_var
115dc99b369Smrg          $lt_var=C
11662ab96baSmrg	  export $lt_var
117dc99b369Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
118dc99b369Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
11962ab96baSmrg	fi"
12062ab96baSmrgdone
121dc99b369SmrgLC_ALL=C
122dc99b369SmrgLANGUAGE=C
123dc99b369Smrgexport LANGUAGE LC_ALL
124dc99b369Smrg
125dc99b369Smrg$lt_unset CDPATH
12662ab96baSmrg
127dc99b369Smrg
128dc99b369Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
129dc99b369Smrg# is ksh but when the shell is invoked as "sh" and the current value of
130dc99b369Smrg# the _XPG environment variable is not equal to 1 (one), the special
131dc99b369Smrg# positional parameter $0, within a function call, is the name of the
132dc99b369Smrg# function.
133dc99b369Smrgprogpath="$0"
134dc99b369Smrg
135dc99b369Smrg
136dc99b369Smrg
137dc99b369Smrg: ${CP="cp -f"}
138dc99b369Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
139dc99b369Smrg: ${EGREP="grep -E"}
140dc99b369Smrg: ${FGREP="grep -F"}
141dc99b369Smrg: ${GREP="grep"}
142dc99b369Smrg: ${LN_S="ln -s"}
143dc99b369Smrg: ${MAKE="make"}
144dc99b369Smrg: ${MKDIR="mkdir"}
145dc99b369Smrg: ${MV="mv -f"}
146dc99b369Smrg: ${RM="rm -f"}
147dc99b369Smrg: ${SED="sed"}
148dc99b369Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
149dc99b369Smrg: ${Xsed="$SED -e 1s/^X//"}
150dc99b369Smrg
151dc99b369Smrg# Global variables:
152dc99b369SmrgEXIT_SUCCESS=0
153dc99b369SmrgEXIT_FAILURE=1
154dc99b369SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
155dc99b369SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
156dc99b369Smrg
157dc99b369Smrgexit_status=$EXIT_SUCCESS
1585eefee25Smacallan
1595eefee25Smacallan# Make sure IFS has a sensible default
1605eefee25Smacallanlt_nl='
1615eefee25Smacallan'
1625eefee25SmacallanIFS=" 	$lt_nl"
1635eefee25Smacallan
164dc99b369Smrgdirname="s,/[^/]*$,,"
165dc99b369Smrgbasename="s,^.*/,,"
1665eefee25Smacallan
167dc99b369Smrg# func_dirname file append nondir_replacement
168dc99b369Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
169dc99b369Smrg# otherwise set result to NONDIR_REPLACEMENT.
170dc99b369Smrgfunc_dirname ()
171dc99b369Smrg{
172dc99b369Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
173dc99b369Smrg    if test "X$func_dirname_result" = "X${1}"; then
174dc99b369Smrg      func_dirname_result="${3}"
175dc99b369Smrg    else
176dc99b369Smrg      func_dirname_result="$func_dirname_result${2}"
177dc99b369Smrg    fi
178dc99b369Smrg} # func_dirname may be replaced by extended shell implementation
179dc99b369Smrg
180dc99b369Smrg
181dc99b369Smrg# func_basename file
182dc99b369Smrgfunc_basename ()
183dc99b369Smrg{
184dc99b369Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
185dc99b369Smrg} # func_basename may be replaced by extended shell implementation
186dc99b369Smrg
187dc99b369Smrg
188dc99b369Smrg# func_dirname_and_basename file append nondir_replacement
189dc99b369Smrg# perform func_basename and func_dirname in a single function
190dc99b369Smrg# call:
191dc99b369Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
192dc99b369Smrg#             add APPEND to the result, otherwise set result
193dc99b369Smrg#             to NONDIR_REPLACEMENT.
194dc99b369Smrg#             value returned in "$func_dirname_result"
195dc99b369Smrg#   basename: Compute filename of FILE.
196dc99b369Smrg#             value retuned in "$func_basename_result"
197dc99b369Smrg# Implementation must be kept synchronized with func_dirname
198dc99b369Smrg# and func_basename. For efficiency, we do not delegate to
199dc99b369Smrg# those functions but instead duplicate the functionality here.
200dc99b369Smrgfunc_dirname_and_basename ()
201dc99b369Smrg{
202dc99b369Smrg    # Extract subdirectory from the argument.
203dc99b369Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
204dc99b369Smrg    if test "X$func_dirname_result" = "X${1}"; then
205dc99b369Smrg      func_dirname_result="${3}"
206dc99b369Smrg    else
207dc99b369Smrg      func_dirname_result="$func_dirname_result${2}"
208dc99b369Smrg    fi
209dc99b369Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
210dc99b369Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
211dc99b369Smrg
212dc99b369Smrg
213dc99b369Smrg# func_stripname prefix suffix name
214dc99b369Smrg# strip PREFIX and SUFFIX off of NAME.
215dc99b369Smrg# PREFIX and SUFFIX must not contain globbing or regex special
216dc99b369Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
217dc99b369Smrg# dot (in which case that matches only a dot).
218dc99b369Smrg# func_strip_suffix prefix name
219dc99b369Smrgfunc_stripname ()
220dc99b369Smrg{
221dc99b369Smrg    case ${2} in
222dc99b369Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
223dc99b369Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
224dc99b369Smrg    esac
225dc99b369Smrg} # func_stripname may be replaced by extended shell implementation
226dc99b369Smrg
227dc99b369Smrg
228dc99b369Smrg# These SED scripts presuppose an absolute path with a trailing slash.
229dc99b369Smrgpathcar='s,^/\([^/]*\).*$,\1,'
230dc99b369Smrgpathcdr='s,^/[^/]*,,'
231dc99b369Smrgremovedotparts=':dotsl
232dc99b369Smrg		s@/\./@/@g
233dc99b369Smrg		t dotsl
234dc99b369Smrg		s,/\.$,/,'
235dc99b369Smrgcollapseslashes='s@/\{1,\}@/@g'
236dc99b369Smrgfinalslash='s,/*$,/,'
237dc99b369Smrg
238dc99b369Smrg# func_normal_abspath PATH
239dc99b369Smrg# Remove doubled-up and trailing slashes, "." path components,
240dc99b369Smrg# and cancel out any ".." path components in PATH after making
241dc99b369Smrg# it an absolute path.
242dc99b369Smrg#             value returned in "$func_normal_abspath_result"
243dc99b369Smrgfunc_normal_abspath ()
244dc99b369Smrg{
245dc99b369Smrg  # Start from root dir and reassemble the path.
246dc99b369Smrg  func_normal_abspath_result=
247dc99b369Smrg  func_normal_abspath_tpath=$1
248dc99b369Smrg  func_normal_abspath_altnamespace=
249dc99b369Smrg  case $func_normal_abspath_tpath in
250dc99b369Smrg    "")
251dc99b369Smrg      # Empty path, that just means $cwd.
252dc99b369Smrg      func_stripname '' '/' "`pwd`"
253dc99b369Smrg      func_normal_abspath_result=$func_stripname_result
254dc99b369Smrg      return
255dc99b369Smrg    ;;
256dc99b369Smrg    # The next three entries are used to spot a run of precisely
257dc99b369Smrg    # two leading slashes without using negated character classes;
258dc99b369Smrg    # we take advantage of case's first-match behaviour.
259dc99b369Smrg    ///*)
260dc99b369Smrg      # Unusual form of absolute path, do nothing.
261dc99b369Smrg    ;;
262dc99b369Smrg    //*)
263dc99b369Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
264dc99b369Smrg      # and for example Cygwin uses it to access remote file shares
265dc99b369Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
266dc99b369Smrg      func_normal_abspath_altnamespace=/
267dc99b369Smrg    ;;
268dc99b369Smrg    /*)
269dc99b369Smrg      # Absolute path, do nothing.
270dc99b369Smrg    ;;
271dc99b369Smrg    *)
272dc99b369Smrg      # Relative path, prepend $cwd.
273dc99b369Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
274dc99b369Smrg    ;;
275dc99b369Smrg  esac
276dc99b369Smrg  # Cancel out all the simple stuff to save iterations.  We also want
277dc99b369Smrg  # the path to end with a slash for ease of parsing, so make sure
278dc99b369Smrg  # there is one (and only one) here.
279dc99b369Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
280dc99b369Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
281dc99b369Smrg  while :; do
282dc99b369Smrg    # Processed it all yet?
283dc99b369Smrg    if test "$func_normal_abspath_tpath" = / ; then
284dc99b369Smrg      # If we ascended to the root using ".." the result may be empty now.
285dc99b369Smrg      if test -z "$func_normal_abspath_result" ; then
286dc99b369Smrg        func_normal_abspath_result=/
287dc99b369Smrg      fi
288dc99b369Smrg      break
289dc99b369Smrg    fi
290dc99b369Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
291dc99b369Smrg        -e "$pathcar"`
292dc99b369Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
293dc99b369Smrg        -e "$pathcdr"`
294dc99b369Smrg    # Figure out what to do with it
295dc99b369Smrg    case $func_normal_abspath_tcomponent in
296dc99b369Smrg      "")
297dc99b369Smrg        # Trailing empty path component, ignore it.
298dc99b369Smrg      ;;
299dc99b369Smrg      ..)
300dc99b369Smrg        # Parent dir; strip last assembled component from result.
301dc99b369Smrg        func_dirname "$func_normal_abspath_result"
302dc99b369Smrg        func_normal_abspath_result=$func_dirname_result
303dc99b369Smrg      ;;
304dc99b369Smrg      *)
305dc99b369Smrg        # Actual path component, append it.
306dc99b369Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
307dc99b369Smrg      ;;
308dc99b369Smrg    esac
309dc99b369Smrg  done
310dc99b369Smrg  # Restore leading double-slash if one was found on entry.
311dc99b369Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
312dc99b369Smrg}
313dc99b369Smrg
314dc99b369Smrg# func_relative_path SRCDIR DSTDIR
315dc99b369Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
316dc99b369Smrg# slash if non-empty, suitable for immediately appending a filename
317dc99b369Smrg# without needing to append a separator.
318dc99b369Smrg#             value returned in "$func_relative_path_result"
319dc99b369Smrgfunc_relative_path ()
320dc99b369Smrg{
321dc99b369Smrg  func_relative_path_result=
322dc99b369Smrg  func_normal_abspath "$1"
323dc99b369Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
324dc99b369Smrg  func_normal_abspath "$2"
325dc99b369Smrg  func_relative_path_tbindir=$func_normal_abspath_result
326dc99b369Smrg
327dc99b369Smrg  # Ascend the tree starting from libdir
328dc99b369Smrg  while :; do
329dc99b369Smrg    # check if we have found a prefix of bindir
330dc99b369Smrg    case $func_relative_path_tbindir in
331dc99b369Smrg      $func_relative_path_tlibdir)
332dc99b369Smrg        # found an exact match
333dc99b369Smrg        func_relative_path_tcancelled=
334dc99b369Smrg        break
335dc99b369Smrg        ;;
336dc99b369Smrg      $func_relative_path_tlibdir*)
337dc99b369Smrg        # found a matching prefix
338dc99b369Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
339dc99b369Smrg        func_relative_path_tcancelled=$func_stripname_result
340dc99b369Smrg        if test -z "$func_relative_path_result"; then
341dc99b369Smrg          func_relative_path_result=.
342dc99b369Smrg        fi
343dc99b369Smrg        break
344dc99b369Smrg        ;;
345dc99b369Smrg      *)
346dc99b369Smrg        func_dirname $func_relative_path_tlibdir
347dc99b369Smrg        func_relative_path_tlibdir=${func_dirname_result}
348dc99b369Smrg        if test "x$func_relative_path_tlibdir" = x ; then
349dc99b369Smrg          # Have to descend all the way to the root!
350dc99b369Smrg          func_relative_path_result=../$func_relative_path_result
351dc99b369Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
352dc99b369Smrg          break
353dc99b369Smrg        fi
354dc99b369Smrg        func_relative_path_result=../$func_relative_path_result
355dc99b369Smrg        ;;
356dc99b369Smrg    esac
357dc99b369Smrg  done
358dc99b369Smrg
359dc99b369Smrg  # Now calculate path; take care to avoid doubling-up slashes.
360dc99b369Smrg  func_stripname '' '/' "$func_relative_path_result"
361dc99b369Smrg  func_relative_path_result=$func_stripname_result
362dc99b369Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
363dc99b369Smrg  if test "x$func_stripname_result" != x ; then
364dc99b369Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
365dc99b369Smrg  fi
366dc99b369Smrg
367dc99b369Smrg  # Normalisation. If bindir is libdir, return empty string,
368dc99b369Smrg  # else relative path ending with a slash; either way, target
369dc99b369Smrg  # file name can be directly appended.
370dc99b369Smrg  if test ! -z "$func_relative_path_result"; then
371dc99b369Smrg    func_stripname './' '' "$func_relative_path_result/"
372dc99b369Smrg    func_relative_path_result=$func_stripname_result
373dc99b369Smrg  fi
374dc99b369Smrg}
375dc99b369Smrg
376dc99b369Smrg# The name of this program:
377dc99b369Smrgfunc_dirname_and_basename "$progpath"
378dc99b369Smrgprogname=$func_basename_result
379dc99b369Smrg
380dc99b369Smrg# Make sure we have an absolute path for reexecution:
381dc99b369Smrgcase $progpath in
382dc99b369Smrg  [\\/]*|[A-Za-z]:\\*) ;;
383dc99b369Smrg  *[\\/]*)
384dc99b369Smrg     progdir=$func_dirname_result
385dc99b369Smrg     progdir=`cd "$progdir" && pwd`
386dc99b369Smrg     progpath="$progdir/$progname"
387dc99b369Smrg     ;;
388dc99b369Smrg  *)
389dc99b369Smrg     save_IFS="$IFS"
390dc99b369Smrg     IFS=:
391dc99b369Smrg     for progdir in $PATH; do
392dc99b369Smrg       IFS="$save_IFS"
393dc99b369Smrg       test -x "$progdir/$progname" && break
394dc99b369Smrg     done
395dc99b369Smrg     IFS="$save_IFS"
396dc99b369Smrg     test -n "$progdir" || progdir=`pwd`
397dc99b369Smrg     progpath="$progdir/$progname"
398dc99b369Smrg     ;;
399dc99b369Smrgesac
400dc99b369Smrg
401dc99b369Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
402dc99b369Smrg# metacharacters that are still active within double-quoted strings.
403dc99b369SmrgXsed="${SED}"' -e 1s/^X//'
404dc99b369Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
405dc99b369Smrg
406dc99b369Smrg# Same as above, but do not quote variable references.
407dc99b369Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
408dc99b369Smrg
409dc99b369Smrg# Sed substitution that turns a string into a regex matching for the
410dc99b369Smrg# string literally.
411dc99b369Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
412dc99b369Smrg
413dc99b369Smrg# Sed substitution that converts a w32 file name or path
414dc99b369Smrg# which contains forward slashes, into one that contains
415dc99b369Smrg# (escaped) backslashes.  A very naive implementation.
416dc99b369Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
417dc99b369Smrg
418dc99b369Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
419dc99b369Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
420dc99b369Smrg# in input to double_quote_subst, that '$' was protected from expansion.
421dc99b369Smrg# Since each input `\' is now two `\'s, look for any number of runs of
422dc99b369Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
423dc99b369Smrgbs='\\'
424dc99b369Smrgbs2='\\\\'
425dc99b369Smrgbs4='\\\\\\\\'
426dc99b369Smrgdollar='\$'
427dc99b369Smrgsed_double_backslash="\
428dc99b369Smrg  s/$bs4/&\\
429dc99b369Smrg/g
430dc99b369Smrg  s/^$bs2$dollar/$bs&/
431dc99b369Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
432dc99b369Smrg  s/\n//g"
433dc99b369Smrg
434dc99b369Smrg# Standard options:
435dc99b369Smrgopt_dry_run=false
436dc99b369Smrgopt_help=false
437dc99b369Smrgopt_quiet=false
438dc99b369Smrgopt_verbose=false
439dc99b369Smrgopt_warning=:
440dc99b369Smrg
441dc99b369Smrg# func_echo arg...
442dc99b369Smrg# Echo program name prefixed message, along with the current mode
443dc99b369Smrg# name if it has been set yet.
444dc99b369Smrgfunc_echo ()
445dc99b369Smrg{
446dc99b369Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
447dc99b369Smrg}
448dc99b369Smrg
449dc99b369Smrg# func_verbose arg...
450dc99b369Smrg# Echo program name prefixed message in verbose mode only.
451dc99b369Smrgfunc_verbose ()
452dc99b369Smrg{
453dc99b369Smrg    $opt_verbose && func_echo ${1+"$@"}
454dc99b369Smrg
455dc99b369Smrg    # A bug in bash halts the script if the last line of a function
456dc99b369Smrg    # fails when set -e is in force, so we need another command to
457dc99b369Smrg    # work around that:
458dc99b369Smrg    :
459dc99b369Smrg}
460dc99b369Smrg
461dc99b369Smrg# func_echo_all arg...
462dc99b369Smrg# Invoke $ECHO with all args, space-separated.
463dc99b369Smrgfunc_echo_all ()
464dc99b369Smrg{
465dc99b369Smrg    $ECHO "$*"
466dc99b369Smrg}
467dc99b369Smrg
468dc99b369Smrg# func_error arg...
469dc99b369Smrg# Echo program name prefixed message to standard error.
470dc99b369Smrgfunc_error ()
471dc99b369Smrg{
472dc99b369Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
473dc99b369Smrg}
474dc99b369Smrg
475dc99b369Smrg# func_warning arg...
476dc99b369Smrg# Echo program name prefixed warning message to standard error.
477dc99b369Smrgfunc_warning ()
478dc99b369Smrg{
479dc99b369Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
480dc99b369Smrg
481dc99b369Smrg    # bash bug again:
482dc99b369Smrg    :
483dc99b369Smrg}
484dc99b369Smrg
485dc99b369Smrg# func_fatal_error arg...
486dc99b369Smrg# Echo program name prefixed message to standard error, and exit.
487dc99b369Smrgfunc_fatal_error ()
488dc99b369Smrg{
489dc99b369Smrg    func_error ${1+"$@"}
490dc99b369Smrg    exit $EXIT_FAILURE
491dc99b369Smrg}
492dc99b369Smrg
493dc99b369Smrg# func_fatal_help arg...
494dc99b369Smrg# Echo program name prefixed message to standard error, followed by
495dc99b369Smrg# a help hint, and exit.
496dc99b369Smrgfunc_fatal_help ()
497dc99b369Smrg{
498dc99b369Smrg    func_error ${1+"$@"}
499dc99b369Smrg    func_fatal_error "$help"
500dc99b369Smrg}
501dc99b369Smrghelp="Try \`$progname --help' for more information."  ## default
502dc99b369Smrg
503dc99b369Smrg
504dc99b369Smrg# func_grep expression filename
505dc99b369Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
506dc99b369Smrgfunc_grep ()
507dc99b369Smrg{
508dc99b369Smrg    $GREP "$1" "$2" >/dev/null 2>&1
509dc99b369Smrg}
510dc99b369Smrg
511dc99b369Smrg
512dc99b369Smrg# func_mkdir_p directory-path
513dc99b369Smrg# Make sure the entire path to DIRECTORY-PATH is available.
514dc99b369Smrgfunc_mkdir_p ()
515dc99b369Smrg{
516dc99b369Smrg    my_directory_path="$1"
517dc99b369Smrg    my_dir_list=
518dc99b369Smrg
519dc99b369Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
520dc99b369Smrg
521dc99b369Smrg      # Protect directory names starting with `-'
522dc99b369Smrg      case $my_directory_path in
523dc99b369Smrg        -*) my_directory_path="./$my_directory_path" ;;
524dc99b369Smrg      esac
525dc99b369Smrg
526dc99b369Smrg      # While some portion of DIR does not yet exist...
527dc99b369Smrg      while test ! -d "$my_directory_path"; do
528dc99b369Smrg        # ...make a list in topmost first order.  Use a colon delimited
529dc99b369Smrg	# list incase some portion of path contains whitespace.
530dc99b369Smrg        my_dir_list="$my_directory_path:$my_dir_list"
531dc99b369Smrg
532dc99b369Smrg        # If the last portion added has no slash in it, the list is done
533dc99b369Smrg        case $my_directory_path in */*) ;; *) break ;; esac
534dc99b369Smrg
535dc99b369Smrg        # ...otherwise throw away the child directory and loop
536dc99b369Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
537dc99b369Smrg      done
538dc99b369Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
539dc99b369Smrg
540dc99b369Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
541dc99b369Smrg      for my_dir in $my_dir_list; do
542dc99b369Smrg	IFS="$save_mkdir_p_IFS"
543dc99b369Smrg        # mkdir can fail with a `File exist' error if two processes
544dc99b369Smrg        # try to create one of the directories concurrently.  Don't
545dc99b369Smrg        # stop in that case!
546dc99b369Smrg        $MKDIR "$my_dir" 2>/dev/null || :
547dc99b369Smrg      done
548dc99b369Smrg      IFS="$save_mkdir_p_IFS"
549dc99b369Smrg
550dc99b369Smrg      # Bail out if we (or some other process) failed to create a directory.
551dc99b369Smrg      test -d "$my_directory_path" || \
552dc99b369Smrg        func_fatal_error "Failed to create \`$1'"
553dc99b369Smrg    fi
554dc99b369Smrg}
5555eefee25Smacallan
5565eefee25Smacallan
5575eefee25Smacallan# func_mktempdir [string]
5585eefee25Smacallan# Make a temporary directory that won't clash with other running
5595eefee25Smacallan# libtool processes, and avoids race conditions if possible.  If
5605eefee25Smacallan# given, STRING is the basename for that directory.
5615eefee25Smacallanfunc_mktempdir ()
5625eefee25Smacallan{
5635eefee25Smacallan    my_template="${TMPDIR-/tmp}/${1-$progname}"
5645eefee25Smacallan
565dc99b369Smrg    if test "$opt_dry_run" = ":"; then
5665eefee25Smacallan      # Return a directory name, but don't create it in dry-run mode
5675eefee25Smacallan      my_tmpdir="${my_template}-$$"
5685eefee25Smacallan    else
5695eefee25Smacallan
5705eefee25Smacallan      # If mktemp works, use that first and foremost
5715eefee25Smacallan      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
5725eefee25Smacallan
5735eefee25Smacallan      if test ! -d "$my_tmpdir"; then
574dc99b369Smrg        # Failing that, at least try and use $RANDOM to avoid a race
575dc99b369Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
5765eefee25Smacallan
577dc99b369Smrg        save_mktempdir_umask=`umask`
578dc99b369Smrg        umask 0077
579dc99b369Smrg        $MKDIR "$my_tmpdir"
580dc99b369Smrg        umask $save_mktempdir_umask
5815eefee25Smacallan      fi
5825eefee25Smacallan
5835eefee25Smacallan      # If we're not in dry-run mode, bomb out on failure
584dc99b369Smrg      test -d "$my_tmpdir" || \
585dc99b369Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
5865eefee25Smacallan    fi
5875eefee25Smacallan
588dc99b369Smrg    $ECHO "$my_tmpdir"
5895eefee25Smacallan}
5905eefee25Smacallan
5915eefee25Smacallan
592dc99b369Smrg# func_quote_for_eval arg
593dc99b369Smrg# Aesthetically quote ARG to be evaled later.
594dc99b369Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
595dc99b369Smrg# is double-quoted, suitable for a subsequent eval, whereas
596dc99b369Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
597dc99b369Smrg# which are still active within double quotes backslashified.
598dc99b369Smrgfunc_quote_for_eval ()
5995eefee25Smacallan{
600dc99b369Smrg    case $1 in
601dc99b369Smrg      *[\\\`\"\$]*)
602dc99b369Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
603dc99b369Smrg      *)
604dc99b369Smrg        func_quote_for_eval_unquoted_result="$1" ;;
605dc99b369Smrg    esac
606dc99b369Smrg
607dc99b369Smrg    case $func_quote_for_eval_unquoted_result in
608dc99b369Smrg      # Double-quote args containing shell metacharacters to delay
609dc99b369Smrg      # word splitting, command substitution and and variable
610dc99b369Smrg      # expansion for a subsequent eval.
611dc99b369Smrg      # Many Bourne shells cannot handle close brackets correctly
612dc99b369Smrg      # in scan sets, so we specify it separately.
613dc99b369Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
614dc99b369Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
615dc99b369Smrg        ;;
616dc99b369Smrg      *)
617dc99b369Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
618dc99b369Smrg    esac
619dc99b369Smrg}
620dc99b369Smrg
621dc99b369Smrg
622dc99b369Smrg# func_quote_for_expand arg
623dc99b369Smrg# Aesthetically quote ARG to be evaled later; same as above,
624dc99b369Smrg# but do not quote variable references.
625dc99b369Smrgfunc_quote_for_expand ()
626dc99b369Smrg{
627dc99b369Smrg    case $1 in
628dc99b369Smrg      *[\\\`\"]*)
629dc99b369Smrg	my_arg=`$ECHO "$1" | $SED \
630dc99b369Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
631dc99b369Smrg      *)
632dc99b369Smrg        my_arg="$1" ;;
633dc99b369Smrg    esac
634dc99b369Smrg
635dc99b369Smrg    case $my_arg in
636dc99b369Smrg      # Double-quote args containing shell metacharacters to delay
637dc99b369Smrg      # word splitting and command substitution for a subsequent eval.
638dc99b369Smrg      # Many Bourne shells cannot handle close brackets correctly
639dc99b369Smrg      # in scan sets, so we specify it separately.
640dc99b369Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
641dc99b369Smrg        my_arg="\"$my_arg\""
642dc99b369Smrg        ;;
643dc99b369Smrg    esac
644dc99b369Smrg
645dc99b369Smrg    func_quote_for_expand_result="$my_arg"
646dc99b369Smrg}
647dc99b369Smrg
648dc99b369Smrg
649dc99b369Smrg# func_show_eval cmd [fail_exp]
650dc99b369Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
651dc99b369Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
652dc99b369Smrg# is given, then evaluate it.
653dc99b369Smrgfunc_show_eval ()
654dc99b369Smrg{
655dc99b369Smrg    my_cmd="$1"
656dc99b369Smrg    my_fail_exp="${2-:}"
657dc99b369Smrg
658dc99b369Smrg    ${opt_silent-false} || {
659dc99b369Smrg      func_quote_for_expand "$my_cmd"
660dc99b369Smrg      eval "func_echo $func_quote_for_expand_result"
661dc99b369Smrg    }
662dc99b369Smrg
663dc99b369Smrg    if ${opt_dry_run-false}; then :; else
664dc99b369Smrg      eval "$my_cmd"
665dc99b369Smrg      my_status=$?
666dc99b369Smrg      if test "$my_status" -eq 0; then :; else
667dc99b369Smrg	eval "(exit $my_status); $my_fail_exp"
668dc99b369Smrg      fi
6695eefee25Smacallan    fi
670dc99b369Smrg}
671dc99b369Smrg
672dc99b369Smrg
673dc99b369Smrg# func_show_eval_locale cmd [fail_exp]
674dc99b369Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
675dc99b369Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
676dc99b369Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
677dc99b369Smrgfunc_show_eval_locale ()
678dc99b369Smrg{
679dc99b369Smrg    my_cmd="$1"
680dc99b369Smrg    my_fail_exp="${2-:}"
681dc99b369Smrg
682dc99b369Smrg    ${opt_silent-false} || {
683dc99b369Smrg      func_quote_for_expand "$my_cmd"
684dc99b369Smrg      eval "func_echo $func_quote_for_expand_result"
685dc99b369Smrg    }
686dc99b369Smrg
687dc99b369Smrg    if ${opt_dry_run-false}; then :; else
688dc99b369Smrg      eval "$lt_user_locale
689dc99b369Smrg	    $my_cmd"
690dc99b369Smrg      my_status=$?
691dc99b369Smrg      eval "$lt_safe_locale"
692dc99b369Smrg      if test "$my_status" -eq 0; then :; else
693dc99b369Smrg	eval "(exit $my_status); $my_fail_exp"
694dc99b369Smrg      fi
695dc99b369Smrg    fi
696dc99b369Smrg}
697dc99b369Smrg
698dc99b369Smrg# func_tr_sh
699dc99b369Smrg# Turn $1 into a string suitable for a shell variable name.
700dc99b369Smrg# Result is stored in $func_tr_sh_result.  All characters
701dc99b369Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
702dc99b369Smrg# if $1 begins with a digit, a '_' is prepended as well.
703dc99b369Smrgfunc_tr_sh ()
704dc99b369Smrg{
705dc99b369Smrg  case $1 in
706dc99b369Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
707dc99b369Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7085eefee25Smacallan    ;;
709dc99b369Smrg  * )
710dc99b369Smrg    func_tr_sh_result=$1
7115eefee25Smacallan    ;;
7125eefee25Smacallan  esac
7135eefee25Smacallan}
7145eefee25Smacallan
7155eefee25Smacallan
716dc99b369Smrg# func_version
717dc99b369Smrg# Echo version message to standard output and exit.
718dc99b369Smrgfunc_version ()
7195eefee25Smacallan{
720dc99b369Smrg    $opt_debug
721dc99b369Smrg
722dc99b369Smrg    $SED -n '/(C)/!b go
723dc99b369Smrg	:more
724dc99b369Smrg	/\./!{
725dc99b369Smrg	  N
726dc99b369Smrg	  s/\n# / /
727dc99b369Smrg	  b more
728dc99b369Smrg	}
729dc99b369Smrg	:go
730dc99b369Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
731dc99b369Smrg        s/^# //
732dc99b369Smrg	s/^# *$//
733dc99b369Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
734dc99b369Smrg        p
735dc99b369Smrg     }' < "$progpath"
736dc99b369Smrg     exit $?
7375eefee25Smacallan}
7385eefee25Smacallan
739dc99b369Smrg# func_usage
740dc99b369Smrg# Echo short help message to standard output and exit.
741dc99b369Smrgfunc_usage ()
7425eefee25Smacallan{
743dc99b369Smrg    $opt_debug
744dc99b369Smrg
745dc99b369Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
746dc99b369Smrg        s/^# //
747dc99b369Smrg	s/^# *$//
748dc99b369Smrg	s/\$progname/'$progname'/
749dc99b369Smrg	p
750dc99b369Smrg    }' < "$progpath"
751dc99b369Smrg    echo
752dc99b369Smrg    $ECHO "run \`$progname --help | more' for full usage"
753dc99b369Smrg    exit $?
7545eefee25Smacallan}
7555eefee25Smacallan
756dc99b369Smrg# func_help [NOEXIT]
757dc99b369Smrg# Echo long help message to standard output and exit,
758dc99b369Smrg# unless 'noexit' is passed as argument.
759dc99b369Smrgfunc_help ()
7605eefee25Smacallan{
761dc99b369Smrg    $opt_debug
762dc99b369Smrg
763dc99b369Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
764dc99b369Smrg	:print
765dc99b369Smrg        s/^# //
766dc99b369Smrg	s/^# *$//
767dc99b369Smrg	s*\$progname*'$progname'*
768dc99b369Smrg	s*\$host*'"$host"'*
769dc99b369Smrg	s*\$SHELL*'"$SHELL"'*
770dc99b369Smrg	s*\$LTCC*'"$LTCC"'*
771dc99b369Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
772dc99b369Smrg	s*\$LD*'"$LD"'*
773dc99b369Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
774dc99b369Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
775dc99b369Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
776dc99b369Smrg	p
777dc99b369Smrg	d
778dc99b369Smrg     }
779dc99b369Smrg     /^# .* home page:/b print
780dc99b369Smrg     /^# General help using/b print
781dc99b369Smrg     ' < "$progpath"
782dc99b369Smrg    ret=$?
783dc99b369Smrg    if test -z "$1"; then
784dc99b369Smrg      exit $ret
7855eefee25Smacallan    fi
786dc99b369Smrg}
7875eefee25Smacallan
788dc99b369Smrg# func_missing_arg argname
789dc99b369Smrg# Echo program name prefixed message to standard error and set global
790dc99b369Smrg# exit_cmd.
791dc99b369Smrgfunc_missing_arg ()
792dc99b369Smrg{
793dc99b369Smrg    $opt_debug
7945eefee25Smacallan
795dc99b369Smrg    func_error "missing argument for $1."
796dc99b369Smrg    exit_cmd=exit
7975eefee25Smacallan}
7985eefee25Smacallan
7995eefee25Smacallan
800dc99b369Smrg# func_split_short_opt shortopt
801dc99b369Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
802dc99b369Smrg# variables after splitting SHORTOPT after the 2nd character.
803dc99b369Smrgfunc_split_short_opt ()
804dc99b369Smrg{
805dc99b369Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
806dc99b369Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
807dc99b369Smrg
808dc99b369Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
809dc99b369Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
810dc99b369Smrg} # func_split_short_opt may be replaced by extended shell implementation
8115eefee25Smacallan
8125eefee25Smacallan
813dc99b369Smrg# func_split_long_opt longopt
814dc99b369Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
815dc99b369Smrg# variables after splitting LONGOPT at the `=' sign.
816dc99b369Smrgfunc_split_long_opt ()
817dc99b369Smrg{
818dc99b369Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
819dc99b369Smrg    my_sed_long_arg='1s/^--[^=]*=//'
8205eefee25Smacallan
821dc99b369Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
822dc99b369Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
823dc99b369Smrg} # func_split_long_opt may be replaced by extended shell implementation
8245eefee25Smacallan
825dc99b369Smrgexit_cmd=:
8265eefee25Smacallan
8275eefee25Smacallan
8285eefee25Smacallan
82962ab96baSmrg
8305eefee25Smacallan
831dc99b369Smrgmagic="%%%MAGIC variable%%%"
832dc99b369Smrgmagic_exe="%%%MAGIC EXE variable%%%"
833dc99b369Smrg
834dc99b369Smrg# Global variables.
835dc99b369Smrgnonopt=
836dc99b369Smrgpreserve_args=
837dc99b369Smrglo2o="s/\\.lo\$/.${objext}/"
838dc99b369Smrgo2lo="s/\\.${objext}\$/.lo/"
839dc99b369Smrgextracted_archives=
840dc99b369Smrgextracted_serial=0
841dc99b369Smrg
842dc99b369Smrg# If this variable is set in any of the actions, the command in it
843dc99b369Smrg# will be execed at the end.  This prevents here-documents from being
844dc99b369Smrg# left over by shells.
845dc99b369Smrgexec_cmd=
846dc99b369Smrg
847dc99b369Smrg# func_append var value
848dc99b369Smrg# Append VALUE to the end of shell variable VAR.
849dc99b369Smrgfunc_append ()
850dc99b369Smrg{
851dc99b369Smrg    eval "${1}=\$${1}\${2}"
852dc99b369Smrg} # func_append may be replaced by extended shell implementation
853dc99b369Smrg
854dc99b369Smrg# func_append_quoted var value
855dc99b369Smrg# Quote VALUE and append to the end of shell variable VAR, separated
856dc99b369Smrg# by a space.
857dc99b369Smrgfunc_append_quoted ()
858dc99b369Smrg{
859dc99b369Smrg    func_quote_for_eval "${2}"
860dc99b369Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
861dc99b369Smrg} # func_append_quoted may be replaced by extended shell implementation
862dc99b369Smrg
863dc99b369Smrg
864dc99b369Smrg# func_arith arithmetic-term...
865dc99b369Smrgfunc_arith ()
866dc99b369Smrg{
867dc99b369Smrg    func_arith_result=`expr "${@}"`
868dc99b369Smrg} # func_arith may be replaced by extended shell implementation
869dc99b369Smrg
870dc99b369Smrg
871dc99b369Smrg# func_len string
872dc99b369Smrg# STRING may not start with a hyphen.
873dc99b369Smrgfunc_len ()
874dc99b369Smrg{
875dc99b369Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
876dc99b369Smrg} # func_len may be replaced by extended shell implementation
877dc99b369Smrg
878dc99b369Smrg
879dc99b369Smrg# func_lo2o object
880dc99b369Smrgfunc_lo2o ()
881dc99b369Smrg{
882dc99b369Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
883dc99b369Smrg} # func_lo2o may be replaced by extended shell implementation
884dc99b369Smrg
885dc99b369Smrg
886dc99b369Smrg# func_xform libobj-or-source
887dc99b369Smrgfunc_xform ()
888dc99b369Smrg{
889dc99b369Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
890dc99b369Smrg} # func_xform may be replaced by extended shell implementation
891dc99b369Smrg
892dc99b369Smrg
893dc99b369Smrg# func_fatal_configuration arg...
894dc99b369Smrg# Echo program name prefixed message to standard error, followed by
895dc99b369Smrg# a configuration failure hint, and exit.
896dc99b369Smrgfunc_fatal_configuration ()
897dc99b369Smrg{
898dc99b369Smrg    func_error ${1+"$@"}
899dc99b369Smrg    func_error "See the $PACKAGE documentation for more information."
900dc99b369Smrg    func_fatal_error "Fatal configuration error."
901dc99b369Smrg}
902dc99b369Smrg
903dc99b369Smrg
904dc99b369Smrg# func_config
905dc99b369Smrg# Display the configuration for all the tags in this script.
906dc99b369Smrgfunc_config ()
907dc99b369Smrg{
908dc99b369Smrg    re_begincf='^# ### BEGIN LIBTOOL'
909dc99b369Smrg    re_endcf='^# ### END LIBTOOL'
910dc99b369Smrg
911dc99b369Smrg    # Default configuration.
912dc99b369Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
913dc99b369Smrg
9145eefee25Smacallan    # Now print the configurations for the tags.
9155eefee25Smacallan    for tagname in $taglist; do
916dc99b369Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
9175eefee25Smacallan    done
9185eefee25Smacallan
919dc99b369Smrg    exit $?
920dc99b369Smrg}
9215eefee25Smacallan
922dc99b369Smrg# func_features
923dc99b369Smrg# Display the features supported by this script.
924dc99b369Smrgfunc_features ()
925dc99b369Smrg{
926dc99b369Smrg    echo "host: $host"
9275eefee25Smacallan    if test "$build_libtool_libs" = yes; then
928dc99b369Smrg      echo "enable shared libraries"
9295eefee25Smacallan    else
930dc99b369Smrg      echo "disable shared libraries"
9315eefee25Smacallan    fi
9325eefee25Smacallan    if test "$build_old_libs" = yes; then
933dc99b369Smrg      echo "enable static libraries"
9345eefee25Smacallan    else
935dc99b369Smrg      echo "disable static libraries"
9365eefee25Smacallan    fi
9375eefee25Smacallan
938dc99b369Smrg    exit $?
939dc99b369Smrg}
9405eefee25Smacallan
941dc99b369Smrg# func_enable_tag tagname
942dc99b369Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
943dc99b369Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
944dc99b369Smrg# variable here.
945dc99b369Smrgfunc_enable_tag ()
946dc99b369Smrg{
947dc99b369Smrg  # Global variable:
948dc99b369Smrg  tagname="$1"
9495eefee25Smacallan
950dc99b369Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
951dc99b369Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
952dc99b369Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
9535eefee25Smacallan
954dc99b369Smrg  # Validate tagname.
955dc99b369Smrg  case $tagname in
956dc99b369Smrg    *[!-_A-Za-z0-9,/]*)
957dc99b369Smrg      func_fatal_error "invalid tag name: $tagname"
958dc99b369Smrg      ;;
959dc99b369Smrg  esac
9605eefee25Smacallan
961dc99b369Smrg  # Don't test for the "default" C tag, as we know it's
962dc99b369Smrg  # there but not specially marked.
963dc99b369Smrg  case $tagname in
964dc99b369Smrg    CC) ;;
965dc99b369Smrg    *)
966dc99b369Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
967dc99b369Smrg	taglist="$taglist $tagname"
968dc99b369Smrg
969dc99b369Smrg	# Evaluate the configuration.  Be careful to quote the path
970dc99b369Smrg	# and the sed script, to avoid splitting on whitespace, but
971dc99b369Smrg	# also don't use non-portable quotes within backquotes within
972dc99b369Smrg	# quotes we have to do it in 2 steps:
973dc99b369Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
974dc99b369Smrg	eval "$extractedcf"
975dc99b369Smrg      else
976dc99b369Smrg	func_error "ignoring unknown tag $tagname"
977dc99b369Smrg      fi
978dc99b369Smrg      ;;
979dc99b369Smrg  esac
980dc99b369Smrg}
9815eefee25Smacallan
982dc99b369Smrg# func_check_version_match
983dc99b369Smrg# Ensure that we are using m4 macros, and libtool script from the same
984dc99b369Smrg# release of libtool.
985dc99b369Smrgfunc_check_version_match ()
986dc99b369Smrg{
987dc99b369Smrg  if test "$package_revision" != "$macro_revision"; then
988dc99b369Smrg    if test "$VERSION" != "$macro_version"; then
989dc99b369Smrg      if test -z "$macro_version"; then
990dc99b369Smrg        cat >&2 <<_LT_EOF
991dc99b369Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
992dc99b369Smrg$progname: definition of this LT_INIT comes from an older release.
993dc99b369Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
994dc99b369Smrg$progname: and run autoconf again.
995dc99b369Smrg_LT_EOF
996dc99b369Smrg      else
997dc99b369Smrg        cat >&2 <<_LT_EOF
998dc99b369Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
999dc99b369Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
1000dc99b369Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
1001dc99b369Smrg$progname: and run autoconf again.
1002dc99b369Smrg_LT_EOF
1003dc99b369Smrg      fi
1004dc99b369Smrg    else
1005dc99b369Smrg      cat >&2 <<_LT_EOF
1006dc99b369Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1007dc99b369Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1008dc99b369Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1009dc99b369Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
1010dc99b369Smrg_LT_EOF
1011dc99b369Smrg    fi
10125eefee25Smacallan
1013dc99b369Smrg    exit $EXIT_MISMATCH
1014dc99b369Smrg  fi
1015dc99b369Smrg}
10165eefee25Smacallan
10175eefee25Smacallan
1018dc99b369Smrg# Shorthand for --mode=foo, only valid as the first argument
1019dc99b369Smrgcase $1 in
1020dc99b369Smrgclean|clea|cle|cl)
1021dc99b369Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
1022dc99b369Smrg  ;;
1023dc99b369Smrgcompile|compil|compi|comp|com|co|c)
1024dc99b369Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
1025dc99b369Smrg  ;;
1026dc99b369Smrgexecute|execut|execu|exec|exe|ex|e)
1027dc99b369Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
1028dc99b369Smrg  ;;
1029dc99b369Smrgfinish|finis|fini|fin|fi|f)
1030dc99b369Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
10315eefee25Smacallan  ;;
1032dc99b369Smrginstall|instal|insta|inst|ins|in|i)
1033dc99b369Smrg  shift; set dummy --mode install ${1+"$@"}; shift
10345eefee25Smacallan  ;;
1035dc99b369Smrglink|lin|li|l)
1036dc99b369Smrg  shift; set dummy --mode link ${1+"$@"}; shift
1037dc99b369Smrg  ;;
1038dc99b369Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
1039dc99b369Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10405eefee25Smacallan  ;;
10415eefee25Smacallanesac
10425eefee25Smacallan
10435eefee25Smacallan
10445eefee25Smacallan
1045dc99b369Smrg# Option defaults:
1046dc99b369Smrgopt_debug=:
1047dc99b369Smrgopt_dry_run=false
1048dc99b369Smrgopt_config=false
1049dc99b369Smrgopt_preserve_dup_deps=false
1050dc99b369Smrgopt_features=false
1051dc99b369Smrgopt_finish=false
1052dc99b369Smrgopt_help=false
1053dc99b369Smrgopt_help_all=false
1054dc99b369Smrgopt_silent=:
1055dc99b369Smrgopt_verbose=:
1056dc99b369Smrgopt_silent=false
1057dc99b369Smrgopt_verbose=false
10585eefee25Smacallan
1059dc99b369Smrg
1060dc99b369Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
1061dc99b369Smrg# script to make things like `--version' happen as quickly as we can.
1062dc99b369Smrg{
1063dc99b369Smrg  # this just eases exit handling
1064dc99b369Smrg  while test $# -gt 0; do
1065dc99b369Smrg    opt="$1"
1066dc99b369Smrg    shift
1067dc99b369Smrg    case $opt in
1068dc99b369Smrg      --debug|-x)	opt_debug='set -x'
1069dc99b369Smrg			func_echo "enabling shell trace mode"
1070dc99b369Smrg			$opt_debug
1071dc99b369Smrg			;;
1072dc99b369Smrg      --dry-run|--dryrun|-n)
1073dc99b369Smrg			opt_dry_run=:
1074dc99b369Smrg			;;
1075dc99b369Smrg      --config)
1076dc99b369Smrg			opt_config=:
1077dc99b369Smrgfunc_config
1078dc99b369Smrg			;;
1079dc99b369Smrg      --dlopen|-dlopen)
1080dc99b369Smrg			optarg="$1"
1081dc99b369Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
1082dc99b369Smrg}$optarg"
1083dc99b369Smrg			shift
1084dc99b369Smrg			;;
1085dc99b369Smrg      --preserve-dup-deps)
1086dc99b369Smrg			opt_preserve_dup_deps=:
1087dc99b369Smrg			;;
1088dc99b369Smrg      --features)
1089dc99b369Smrg			opt_features=:
1090dc99b369Smrgfunc_features
1091dc99b369Smrg			;;
1092dc99b369Smrg      --finish)
1093dc99b369Smrg			opt_finish=:
1094dc99b369Smrgset dummy --mode finish ${1+"$@"}; shift
1095dc99b369Smrg			;;
1096dc99b369Smrg      --help)
1097dc99b369Smrg			opt_help=:
1098dc99b369Smrg			;;
1099dc99b369Smrg      --help-all)
1100dc99b369Smrg			opt_help_all=:
1101dc99b369Smrgopt_help=': help-all'
1102dc99b369Smrg			;;
1103dc99b369Smrg      --mode)
1104dc99b369Smrg			test $# = 0 && func_missing_arg $opt && break
1105dc99b369Smrg			optarg="$1"
1106dc99b369Smrg			opt_mode="$optarg"
1107dc99b369Smrgcase $optarg in
1108dc99b369Smrg  # Valid mode arguments:
1109dc99b369Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
1110dc99b369Smrg
1111dc99b369Smrg  # Catch anything else as an error
1112dc99b369Smrg  *) func_error "invalid argument for $opt"
1113dc99b369Smrg     exit_cmd=exit
1114dc99b369Smrg     break
1115dc99b369Smrg     ;;
1116dc99b369Smrgesac
1117dc99b369Smrg			shift
1118dc99b369Smrg			;;
1119dc99b369Smrg      --no-silent|--no-quiet)
1120dc99b369Smrg			opt_silent=false
1121dc99b369Smrgfunc_append preserve_args " $opt"
1122dc99b369Smrg			;;
1123dc99b369Smrg      --no-verbose)
1124dc99b369Smrg			opt_verbose=false
1125dc99b369Smrgfunc_append preserve_args " $opt"
1126dc99b369Smrg			;;
1127dc99b369Smrg      --silent|--quiet)
1128dc99b369Smrg			opt_silent=:
1129dc99b369Smrgfunc_append preserve_args " $opt"
1130dc99b369Smrg        opt_verbose=false
1131dc99b369Smrg			;;
1132dc99b369Smrg      --verbose|-v)
1133dc99b369Smrg			opt_verbose=:
1134dc99b369Smrgfunc_append preserve_args " $opt"
1135dc99b369Smrgopt_silent=false
1136dc99b369Smrg			;;
1137dc99b369Smrg      --tag)
1138dc99b369Smrg			test $# = 0 && func_missing_arg $opt && break
1139dc99b369Smrg			optarg="$1"
1140dc99b369Smrg			opt_tag="$optarg"
1141dc99b369Smrgfunc_append preserve_args " $opt $optarg"
1142dc99b369Smrgfunc_enable_tag "$optarg"
1143dc99b369Smrg			shift
1144dc99b369Smrg			;;
1145dc99b369Smrg
1146dc99b369Smrg      -\?|-h)		func_usage				;;
1147dc99b369Smrg      --help)		func_help				;;
1148dc99b369Smrg      --version)	func_version				;;
1149dc99b369Smrg
1150dc99b369Smrg      # Separate optargs to long options:
1151dc99b369Smrg      --*=*)
1152dc99b369Smrg			func_split_long_opt "$opt"
1153dc99b369Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1154dc99b369Smrg			shift
1155dc99b369Smrg			;;
1156dc99b369Smrg
1157dc99b369Smrg      # Separate non-argument short options:
1158dc99b369Smrg      -\?*|-h*|-n*|-v*)
1159dc99b369Smrg			func_split_short_opt "$opt"
1160dc99b369Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
1161dc99b369Smrg			shift
1162dc99b369Smrg			;;
1163dc99b369Smrg
1164dc99b369Smrg      --)		break					;;
1165dc99b369Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
1166dc99b369Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
11675eefee25Smacallan    esac
1168dc99b369Smrg  done
11695eefee25Smacallan
1170dc99b369Smrg  # Validate options:
1171dc99b369Smrg
1172dc99b369Smrg  # save first non-option argument
1173dc99b369Smrg  if test "$#" -gt 0; then
1174dc99b369Smrg    nonopt="$opt"
1175dc99b369Smrg    shift
11765eefee25Smacallan  fi
11775eefee25Smacallan
1178dc99b369Smrg  # preserve --debug
1179dc99b369Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
11805eefee25Smacallan
1181dc99b369Smrg  case $host in
1182dc99b369Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1183dc99b369Smrg      # don't eliminate duplications in $postdeps and $predeps
1184dc99b369Smrg      opt_duplicate_compiler_generated_deps=:
1185dc99b369Smrg      ;;
1186dc99b369Smrg    *)
1187dc99b369Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1188dc99b369Smrg      ;;
1189dc99b369Smrg  esac
11905eefee25Smacallan
1191dc99b369Smrg  $opt_help || {
1192dc99b369Smrg    # Sanity checks first:
1193dc99b369Smrg    func_check_version_match
11945eefee25Smacallan
1195dc99b369Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1196dc99b369Smrg      func_fatal_configuration "not configured to build any kind of library"
1197dc99b369Smrg    fi
11985eefee25Smacallan
1199dc99b369Smrg    # Darwin sucks
1200dc99b369Smrg    eval std_shrext=\"$shrext_cmds\"
12015eefee25Smacallan
1202dc99b369Smrg    # Only execute mode is allowed to have -dlopen flags.
1203dc99b369Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
1204dc99b369Smrg      func_error "unrecognized option \`-dlopen'"
1205dc99b369Smrg      $ECHO "$help" 1>&2
1206dc99b369Smrg      exit $EXIT_FAILURE
1207dc99b369Smrg    fi
12085eefee25Smacallan
1209dc99b369Smrg    # Change the help message to a mode-specific one.
1210dc99b369Smrg    generic_help="$help"
1211dc99b369Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
1212dc99b369Smrg  }
12135eefee25Smacallan
12145eefee25Smacallan
1215dc99b369Smrg  # Bail if the options were screwed
1216dc99b369Smrg  $exit_cmd $EXIT_FAILURE
1217dc99b369Smrg}
12185eefee25Smacallan
12195eefee25Smacallan
12205eefee25Smacallan
12215eefee25Smacallan
1222dc99b369Smrg## ----------- ##
1223dc99b369Smrg##    Main.    ##
1224dc99b369Smrg## ----------- ##
12255eefee25Smacallan
1226dc99b369Smrg# func_lalib_p file
1227dc99b369Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1228dc99b369Smrg# This function is only a basic sanity check; it will hardly flush out
1229dc99b369Smrg# determined imposters.
1230dc99b369Smrgfunc_lalib_p ()
1231dc99b369Smrg{
1232dc99b369Smrg    test -f "$1" &&
1233dc99b369Smrg      $SED -e 4q "$1" 2>/dev/null \
1234dc99b369Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1235dc99b369Smrg}
12365eefee25Smacallan
1237dc99b369Smrg# func_lalib_unsafe_p file
1238dc99b369Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1239dc99b369Smrg# This function implements the same check as func_lalib_p without
1240dc99b369Smrg# resorting to external programs.  To this end, it redirects stdin and
1241dc99b369Smrg# closes it afterwards, without saving the original file descriptor.
1242dc99b369Smrg# As a safety measure, use it only where a negative result would be
1243dc99b369Smrg# fatal anyway.  Works if `file' does not exist.
1244dc99b369Smrgfunc_lalib_unsafe_p ()
1245dc99b369Smrg{
1246dc99b369Smrg    lalib_p=no
1247dc99b369Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1248dc99b369Smrg	for lalib_p_l in 1 2 3 4
1249dc99b369Smrg	do
1250dc99b369Smrg	    read lalib_p_line
1251dc99b369Smrg	    case "$lalib_p_line" in
1252dc99b369Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1253dc99b369Smrg	    esac
1254dc99b369Smrg	done
1255dc99b369Smrg	exec 0<&5 5<&-
1256dc99b369Smrg    fi
1257dc99b369Smrg    test "$lalib_p" = yes
1258dc99b369Smrg}
12595eefee25Smacallan
1260dc99b369Smrg# func_ltwrapper_script_p file
1261dc99b369Smrg# True iff FILE is a libtool wrapper script
1262dc99b369Smrg# This function is only a basic sanity check; it will hardly flush out
1263dc99b369Smrg# determined imposters.
1264dc99b369Smrgfunc_ltwrapper_script_p ()
1265dc99b369Smrg{
1266dc99b369Smrg    func_lalib_p "$1"
1267dc99b369Smrg}
12685eefee25Smacallan
1269dc99b369Smrg# func_ltwrapper_executable_p file
1270dc99b369Smrg# True iff FILE is a libtool wrapper executable
1271dc99b369Smrg# This function is only a basic sanity check; it will hardly flush out
1272dc99b369Smrg# determined imposters.
1273dc99b369Smrgfunc_ltwrapper_executable_p ()
1274dc99b369Smrg{
1275dc99b369Smrg    func_ltwrapper_exec_suffix=
1276dc99b369Smrg    case $1 in
1277dc99b369Smrg    *.exe) ;;
1278dc99b369Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
12795eefee25Smacallan    esac
1280dc99b369Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1281dc99b369Smrg}
12825eefee25Smacallan
1283dc99b369Smrg# func_ltwrapper_scriptname file
1284dc99b369Smrg# Assumes file is an ltwrapper_executable
1285dc99b369Smrg# uses $file to determine the appropriate filename for a
1286dc99b369Smrg# temporary ltwrapper_script.
1287dc99b369Smrgfunc_ltwrapper_scriptname ()
1288dc99b369Smrg{
1289dc99b369Smrg    func_dirname_and_basename "$1" "" "."
1290dc99b369Smrg    func_stripname '' '.exe' "$func_basename_result"
1291dc99b369Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1292dc99b369Smrg}
12935eefee25Smacallan
1294dc99b369Smrg# func_ltwrapper_p file
1295dc99b369Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1296dc99b369Smrg# This function is only a basic sanity check; it will hardly flush out
1297dc99b369Smrg# determined imposters.
1298dc99b369Smrgfunc_ltwrapper_p ()
1299dc99b369Smrg{
1300dc99b369Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1301dc99b369Smrg}
13025eefee25Smacallan
13035eefee25Smacallan
1304dc99b369Smrg# func_execute_cmds commands fail_cmd
1305dc99b369Smrg# Execute tilde-delimited COMMANDS.
1306dc99b369Smrg# If FAIL_CMD is given, eval that upon failure.
1307dc99b369Smrg# FAIL_CMD may read-access the current command in variable CMD!
1308dc99b369Smrgfunc_execute_cmds ()
1309dc99b369Smrg{
1310dc99b369Smrg    $opt_debug
1311dc99b369Smrg    save_ifs=$IFS; IFS='~'
1312dc99b369Smrg    for cmd in $1; do
1313dc99b369Smrg      IFS=$save_ifs
1314dc99b369Smrg      eval cmd=\"$cmd\"
1315dc99b369Smrg      func_show_eval "$cmd" "${2-:}"
13165eefee25Smacallan    done
1317dc99b369Smrg    IFS=$save_ifs
1318dc99b369Smrg}
13195eefee25Smacallan
13205eefee25Smacallan
1321dc99b369Smrg# func_source file
1322dc99b369Smrg# Source FILE, adding directory component if necessary.
1323dc99b369Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1324dc99b369Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1325dc99b369Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1326dc99b369Smrg# `FILE.' does not work on cygwin managed mounts.
1327dc99b369Smrgfunc_source ()
1328dc99b369Smrg{
1329dc99b369Smrg    $opt_debug
1330dc99b369Smrg    case $1 in
1331dc99b369Smrg    */* | *\\*)	. "$1" ;;
1332dc99b369Smrg    *)		. "./$1" ;;
1333dc99b369Smrg    esac
1334dc99b369Smrg}
13355eefee25Smacallan
13365eefee25Smacallan
1337dc99b369Smrg# func_resolve_sysroot PATH
1338dc99b369Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
1339dc99b369Smrg# func_resolve_sysroot_result
1340dc99b369Smrgfunc_resolve_sysroot ()
1341dc99b369Smrg{
1342dc99b369Smrg  func_resolve_sysroot_result=$1
1343dc99b369Smrg  case $func_resolve_sysroot_result in
1344dc99b369Smrg  =*)
1345dc99b369Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
1346dc99b369Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1347dc99b369Smrg    ;;
1348dc99b369Smrg  esac
1349dc99b369Smrg}
13505eefee25Smacallan
1351dc99b369Smrg# func_replace_sysroot PATH
1352dc99b369Smrg# If PATH begins with the sysroot, replace it with = and
1353dc99b369Smrg# store the result into func_replace_sysroot_result.
1354dc99b369Smrgfunc_replace_sysroot ()
1355dc99b369Smrg{
1356dc99b369Smrg  case "$lt_sysroot:$1" in
1357dc99b369Smrg  ?*:"$lt_sysroot"*)
1358dc99b369Smrg    func_stripname "$lt_sysroot" '' "$1"
1359dc99b369Smrg    func_replace_sysroot_result="=$func_stripname_result"
1360dc99b369Smrg    ;;
1361dc99b369Smrg  *)
1362dc99b369Smrg    # Including no sysroot.
1363dc99b369Smrg    func_replace_sysroot_result=$1
1364dc99b369Smrg    ;;
1365dc99b369Smrg  esac
1366dc99b369Smrg}
13675eefee25Smacallan
1368dc99b369Smrg# func_infer_tag arg
1369dc99b369Smrg# Infer tagged configuration to use if any are available and
1370dc99b369Smrg# if one wasn't chosen via the "--tag" command line option.
1371dc99b369Smrg# Only attempt this if the compiler in the base compile
1372dc99b369Smrg# command doesn't match the default compiler.
1373dc99b369Smrg# arg is usually of the form 'gcc ...'
1374dc99b369Smrgfunc_infer_tag ()
1375dc99b369Smrg{
1376dc99b369Smrg    $opt_debug
1377dc99b369Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1378dc99b369Smrg      CC_quoted=
1379dc99b369Smrg      for arg in $CC; do
1380dc99b369Smrg	func_append_quoted CC_quoted "$arg"
1381dc99b369Smrg      done
1382dc99b369Smrg      CC_expanded=`func_echo_all $CC`
1383dc99b369Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1384dc99b369Smrg      case $@ in
1385dc99b369Smrg      # Blanks in the command may have been stripped by the calling shell,
1386dc99b369Smrg      # but not from the CC environment variable when configure was run.
1387dc99b369Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1388dc99b369Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1389dc99b369Smrg      # Blanks at the start of $base_compile will cause this to fail
1390dc99b369Smrg      # if we don't check for them as well.
1391dc99b369Smrg      *)
1392dc99b369Smrg	for z in $available_tags; do
1393dc99b369Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1394dc99b369Smrg	    # Evaluate the configuration.
1395dc99b369Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1396dc99b369Smrg	    CC_quoted=
1397dc99b369Smrg	    for arg in $CC; do
1398dc99b369Smrg	      # Double-quote args containing other shell metacharacters.
1399dc99b369Smrg	      func_append_quoted CC_quoted "$arg"
1400dc99b369Smrg	    done
1401dc99b369Smrg	    CC_expanded=`func_echo_all $CC`
1402dc99b369Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1403dc99b369Smrg	    case "$@ " in
1404dc99b369Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1405dc99b369Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1406dc99b369Smrg	      # The compiler in the base compile command matches
1407dc99b369Smrg	      # the one in the tagged configuration.
1408dc99b369Smrg	      # Assume this is the tagged configuration we want.
1409dc99b369Smrg	      tagname=$z
1410dc99b369Smrg	      break
1411dc99b369Smrg	      ;;
1412dc99b369Smrg	    esac
1413dc99b369Smrg	  fi
1414dc99b369Smrg	done
1415dc99b369Smrg	# If $tagname still isn't set, then no tagged configuration
1416dc99b369Smrg	# was found and let the user know that the "--tag" command
1417dc99b369Smrg	# line option must be used.
1418dc99b369Smrg	if test -z "$tagname"; then
1419dc99b369Smrg	  func_echo "unable to infer tagged configuration"
1420dc99b369Smrg	  func_fatal_error "specify a tag with \`--tag'"
1421dc99b369Smrg#	else
1422dc99b369Smrg#	  func_verbose "using $tagname tagged configuration"
1423dc99b369Smrg	fi
1424dc99b369Smrg	;;
1425dc99b369Smrg      esac
14265eefee25Smacallan    fi
1427dc99b369Smrg}
14285eefee25Smacallan
14295eefee25Smacallan
14305eefee25Smacallan
1431dc99b369Smrg# func_write_libtool_object output_name pic_name nonpic_name
1432dc99b369Smrg# Create a libtool object file (analogous to a ".la" file),
1433dc99b369Smrg# but don't create it if we're doing a dry run.
1434dc99b369Smrgfunc_write_libtool_object ()
1435dc99b369Smrg{
1436dc99b369Smrg    write_libobj=${1}
1437dc99b369Smrg    if test "$build_libtool_libs" = yes; then
1438dc99b369Smrg      write_lobj=\'${2}\'
1439dc99b369Smrg    else
1440dc99b369Smrg      write_lobj=none
14415eefee25Smacallan    fi
14425eefee25Smacallan
1443dc99b369Smrg    if test "$build_old_libs" = yes; then
1444dc99b369Smrg      write_oldobj=\'${3}\'
1445dc99b369Smrg    else
1446dc99b369Smrg      write_oldobj=none
14475eefee25Smacallan    fi
14485eefee25Smacallan
1449dc99b369Smrg    $opt_dry_run || {
1450dc99b369Smrg      cat >${write_libobj}T <<EOF
1451dc99b369Smrg# $write_libobj - a libtool object file
1452dc99b369Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
14535eefee25Smacallan#
14545eefee25Smacallan# Please DO NOT delete this file!
14555eefee25Smacallan# It is necessary for linking the library.
14565eefee25Smacallan
14575eefee25Smacallan# Name of the PIC object.
1458dc99b369Smrgpic_object=$write_lobj
14595eefee25Smacallan
1460dc99b369Smrg# Name of the non-PIC object
1461dc99b369Smrgnon_pic_object=$write_oldobj
14625eefee25Smacallan
1463dc99b369SmrgEOF
1464dc99b369Smrg      $MV "${write_libobj}T" "${write_libobj}"
1465dc99b369Smrg    }
1466dc99b369Smrg}
14675eefee25Smacallan
14685eefee25Smacallan
1469dc99b369Smrg##################################################
1470dc99b369Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1471dc99b369Smrg##################################################
14725eefee25Smacallan
1473dc99b369Smrg# func_convert_core_file_wine_to_w32 ARG
1474dc99b369Smrg# Helper function used by file name conversion functions when $build is *nix,
1475dc99b369Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1476dc99b369Smrg# correctly configured wine environment available, with the winepath program
1477dc99b369Smrg# in $build's $PATH.
1478dc99b369Smrg#
1479dc99b369Smrg# ARG is the $build file name to be converted to w32 format.
1480dc99b369Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1481dc99b369Smrg# be empty on error (or when ARG is empty)
1482dc99b369Smrgfunc_convert_core_file_wine_to_w32 ()
1483dc99b369Smrg{
1484dc99b369Smrg  $opt_debug
1485dc99b369Smrg  func_convert_core_file_wine_to_w32_result="$1"
1486dc99b369Smrg  if test -n "$1"; then
1487dc99b369Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
1488dc99b369Smrg    # are forced to check the contents of stdout. On the other hand, if the
1489dc99b369Smrg    # command is not found, the shell will set an exit code of 127 and print
1490dc99b369Smrg    # *an error message* to stdout. So we must check for both error code of
1491dc99b369Smrg    # zero AND non-empty stdout, which explains the odd construction:
1492dc99b369Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
1493dc99b369Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1494dc99b369Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
1495dc99b369Smrg        $SED -e "$lt_sed_naive_backslashify"`
1496dc99b369Smrg    else
1497dc99b369Smrg      func_convert_core_file_wine_to_w32_result=
1498dc99b369Smrg    fi
1499dc99b369Smrg  fi
1500dc99b369Smrg}
1501dc99b369Smrg# end: func_convert_core_file_wine_to_w32
15025eefee25Smacallan
1503dc99b369Smrg
1504dc99b369Smrg# func_convert_core_path_wine_to_w32 ARG
1505dc99b369Smrg# Helper function used by path conversion functions when $build is *nix, and
1506dc99b369Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1507dc99b369Smrg# configured wine environment available, with the winepath program in $build's
1508dc99b369Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
1509dc99b369Smrg#
1510dc99b369Smrg# ARG is path to be converted from $build format to win32.
1511dc99b369Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
1512dc99b369Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
1513dc99b369Smrg# are convertible, then the result may be empty.
1514dc99b369Smrgfunc_convert_core_path_wine_to_w32 ()
1515dc99b369Smrg{
1516dc99b369Smrg  $opt_debug
1517dc99b369Smrg  # unfortunately, winepath doesn't convert paths, only file names
1518dc99b369Smrg  func_convert_core_path_wine_to_w32_result=""
1519dc99b369Smrg  if test -n "$1"; then
1520dc99b369Smrg    oldIFS=$IFS
1521dc99b369Smrg    IFS=:
1522dc99b369Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
1523dc99b369Smrg      IFS=$oldIFS
1524dc99b369Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
1525dc99b369Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1526dc99b369Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
1527dc99b369Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1528dc99b369Smrg        else
1529dc99b369Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1530dc99b369Smrg        fi
15315eefee25Smacallan      fi
1532dc99b369Smrg    done
1533dc99b369Smrg    IFS=$oldIFS
1534dc99b369Smrg  fi
1535dc99b369Smrg}
1536dc99b369Smrg# end: func_convert_core_path_wine_to_w32
1537dc99b369Smrg
1538dc99b369Smrg
1539dc99b369Smrg# func_cygpath ARGS...
1540dc99b369Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1541dc99b369Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1542dc99b369Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1543dc99b369Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
1544dc99b369Smrg# file name or path is assumed to be in w32 format, as previously converted
1545dc99b369Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1546dc99b369Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
1547dc99b369Smrg# Cygwin format). Returns an empty string on error.
1548dc99b369Smrg#
1549dc99b369Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
1550dc99b369Smrg# be converted.
1551dc99b369Smrg#
1552dc99b369Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1553dc99b369Smrg# environment variable; do not put it in $PATH.
1554dc99b369Smrgfunc_cygpath ()
1555dc99b369Smrg{
1556dc99b369Smrg  $opt_debug
1557dc99b369Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1558dc99b369Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1559dc99b369Smrg    if test "$?" -ne 0; then
1560dc99b369Smrg      # on failure, ensure result is empty
1561dc99b369Smrg      func_cygpath_result=
1562dc99b369Smrg    fi
1563dc99b369Smrg  else
1564dc99b369Smrg    func_cygpath_result=
1565dc99b369Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1566dc99b369Smrg  fi
1567dc99b369Smrg}
1568dc99b369Smrg#end: func_cygpath
15695eefee25Smacallan
15705eefee25Smacallan
1571dc99b369Smrg# func_convert_core_msys_to_w32 ARG
1572dc99b369Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
1573dc99b369Smrg# result in func_convert_core_msys_to_w32_result.
1574dc99b369Smrgfunc_convert_core_msys_to_w32 ()
1575dc99b369Smrg{
1576dc99b369Smrg  $opt_debug
1577dc99b369Smrg  # awkward: cmd appends spaces to result
1578dc99b369Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
1579dc99b369Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1580dc99b369Smrg}
1581dc99b369Smrg#end: func_convert_core_msys_to_w32
15825eefee25Smacallan
15835eefee25Smacallan
1584dc99b369Smrg# func_convert_file_check ARG1 ARG2
1585dc99b369Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
1586dc99b369Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
1587dc99b369Smrg# func_to_host_file_result to ARG1).
1588dc99b369Smrgfunc_convert_file_check ()
1589dc99b369Smrg{
1590dc99b369Smrg  $opt_debug
1591dc99b369Smrg  if test -z "$2" && test -n "$1" ; then
1592dc99b369Smrg    func_error "Could not determine host file name corresponding to"
1593dc99b369Smrg    func_error "  \`$1'"
1594dc99b369Smrg    func_error "Continuing, but uninstalled executables may not work."
1595dc99b369Smrg    # Fallback:
1596dc99b369Smrg    func_to_host_file_result="$1"
1597dc99b369Smrg  fi
1598dc99b369Smrg}
1599dc99b369Smrg# end func_convert_file_check
16005eefee25Smacallan
16015eefee25Smacallan
1602dc99b369Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1603dc99b369Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
1604dc99b369Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1605dc99b369Smrg# func_to_host_file_result to a simplistic fallback value (see below).
1606dc99b369Smrgfunc_convert_path_check ()
1607dc99b369Smrg{
1608dc99b369Smrg  $opt_debug
1609dc99b369Smrg  if test -z "$4" && test -n "$3"; then
1610dc99b369Smrg    func_error "Could not determine the host path corresponding to"
1611dc99b369Smrg    func_error "  \`$3'"
1612dc99b369Smrg    func_error "Continuing, but uninstalled executables may not work."
1613dc99b369Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
1614dc99b369Smrg    # should not be "improved".  See libtool.info.
1615dc99b369Smrg    if test "x$1" != "x$2"; then
1616dc99b369Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
1617dc99b369Smrg      func_to_host_path_result=`echo "$3" |
1618dc99b369Smrg        $SED -e "$lt_replace_pathsep_chars"`
1619dc99b369Smrg    else
1620dc99b369Smrg      func_to_host_path_result="$3"
1621dc99b369Smrg    fi
1622dc99b369Smrg  fi
1623dc99b369Smrg}
1624dc99b369Smrg# end func_convert_path_check
16255eefee25Smacallan
16265eefee25Smacallan
1627dc99b369Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1628dc99b369Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1629dc99b369Smrg# and appending REPL if ORIG matches BACKPAT.
1630dc99b369Smrgfunc_convert_path_front_back_pathsep ()
1631dc99b369Smrg{
1632dc99b369Smrg  $opt_debug
1633dc99b369Smrg  case $4 in
1634dc99b369Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1635dc99b369Smrg    ;;
1636dc99b369Smrg  esac
1637dc99b369Smrg  case $4 in
1638dc99b369Smrg  $2 ) func_append func_to_host_path_result "$3"
1639dc99b369Smrg    ;;
1640dc99b369Smrg  esac
1641dc99b369Smrg}
1642dc99b369Smrg# end func_convert_path_front_back_pathsep
16435eefee25Smacallan
16445eefee25Smacallan
1645dc99b369Smrg##################################################
1646dc99b369Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
1647dc99b369Smrg##################################################
1648dc99b369Smrg# invoked via `$to_host_file_cmd ARG'
1649dc99b369Smrg#
1650dc99b369Smrg# In each case, ARG is the path to be converted from $build to $host format.
1651dc99b369Smrg# Result will be available in $func_to_host_file_result.
16525eefee25Smacallan
16535eefee25Smacallan
1654dc99b369Smrg# func_to_host_file ARG
1655dc99b369Smrg# Converts the file name ARG from $build format to $host format. Return result
1656dc99b369Smrg# in func_to_host_file_result.
1657dc99b369Smrgfunc_to_host_file ()
1658dc99b369Smrg{
1659dc99b369Smrg  $opt_debug
1660dc99b369Smrg  $to_host_file_cmd "$1"
1661dc99b369Smrg}
1662dc99b369Smrg# end func_to_host_file
16635eefee25Smacallan
16645eefee25Smacallan
1665dc99b369Smrg# func_to_tool_file ARG LAZY
1666dc99b369Smrg# converts the file name ARG from $build format to toolchain format. Return
1667dc99b369Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
1668dc99b369Smrg# in (the comma separated) LAZY, no conversion takes place.
1669dc99b369Smrgfunc_to_tool_file ()
1670dc99b369Smrg{
1671dc99b369Smrg  $opt_debug
1672dc99b369Smrg  case ,$2, in
1673dc99b369Smrg    *,"$to_tool_file_cmd",*)
1674dc99b369Smrg      func_to_tool_file_result=$1
1675dc99b369Smrg      ;;
1676dc99b369Smrg    *)
1677dc99b369Smrg      $to_tool_file_cmd "$1"
1678dc99b369Smrg      func_to_tool_file_result=$func_to_host_file_result
1679dc99b369Smrg      ;;
1680dc99b369Smrg  esac
1681dc99b369Smrg}
1682dc99b369Smrg# end func_to_tool_file
16835eefee25Smacallan
16845eefee25Smacallan
1685dc99b369Smrg# func_convert_file_noop ARG
1686dc99b369Smrg# Copy ARG to func_to_host_file_result.
1687dc99b369Smrgfunc_convert_file_noop ()
1688dc99b369Smrg{
1689dc99b369Smrg  func_to_host_file_result="$1"
1690dc99b369Smrg}
1691dc99b369Smrg# end func_convert_file_noop
16925eefee25Smacallan
16935eefee25Smacallan
1694dc99b369Smrg# func_convert_file_msys_to_w32 ARG
1695dc99b369Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1696dc99b369Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1697dc99b369Smrg# func_to_host_file_result.
1698dc99b369Smrgfunc_convert_file_msys_to_w32 ()
1699dc99b369Smrg{
1700dc99b369Smrg  $opt_debug
1701dc99b369Smrg  func_to_host_file_result="$1"
1702dc99b369Smrg  if test -n "$1"; then
1703dc99b369Smrg    func_convert_core_msys_to_w32 "$1"
1704dc99b369Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1705dc99b369Smrg  fi
1706dc99b369Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1707dc99b369Smrg}
1708dc99b369Smrg# end func_convert_file_msys_to_w32
17095eefee25Smacallan
17105eefee25Smacallan
1711dc99b369Smrg# func_convert_file_cygwin_to_w32 ARG
1712dc99b369Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
1713dc99b369Smrg# func_to_host_file_result.
1714dc99b369Smrgfunc_convert_file_cygwin_to_w32 ()
1715dc99b369Smrg{
1716dc99b369Smrg  $opt_debug
1717dc99b369Smrg  func_to_host_file_result="$1"
1718dc99b369Smrg  if test -n "$1"; then
1719dc99b369Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1720dc99b369Smrg    # LT_CYGPATH in this case.
1721dc99b369Smrg    func_to_host_file_result=`cygpath -m "$1"`
1722dc99b369Smrg  fi
1723dc99b369Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1724dc99b369Smrg}
1725dc99b369Smrg# end func_convert_file_cygwin_to_w32
17265eefee25Smacallan
17275eefee25Smacallan
1728dc99b369Smrg# func_convert_file_nix_to_w32 ARG
1729dc99b369Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1730dc99b369Smrg# and a working winepath. Returns result in func_to_host_file_result.
1731dc99b369Smrgfunc_convert_file_nix_to_w32 ()
1732dc99b369Smrg{
1733dc99b369Smrg  $opt_debug
1734dc99b369Smrg  func_to_host_file_result="$1"
1735dc99b369Smrg  if test -n "$1"; then
1736dc99b369Smrg    func_convert_core_file_wine_to_w32 "$1"
1737dc99b369Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1738dc99b369Smrg  fi
1739dc99b369Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1740dc99b369Smrg}
1741dc99b369Smrg# end func_convert_file_nix_to_w32
17425eefee25Smacallan
17435eefee25Smacallan
1744dc99b369Smrg# func_convert_file_msys_to_cygwin ARG
1745dc99b369Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1746dc99b369Smrg# Returns result in func_to_host_file_result.
1747dc99b369Smrgfunc_convert_file_msys_to_cygwin ()
1748dc99b369Smrg{
1749dc99b369Smrg  $opt_debug
1750dc99b369Smrg  func_to_host_file_result="$1"
1751dc99b369Smrg  if test -n "$1"; then
1752dc99b369Smrg    func_convert_core_msys_to_w32 "$1"
1753dc99b369Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
1754dc99b369Smrg    func_to_host_file_result="$func_cygpath_result"
1755dc99b369Smrg  fi
1756dc99b369Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1757dc99b369Smrg}
1758dc99b369Smrg# end func_convert_file_msys_to_cygwin
17595eefee25Smacallan
17605eefee25Smacallan
1761dc99b369Smrg# func_convert_file_nix_to_cygwin ARG
1762dc99b369Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1763dc99b369Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1764dc99b369Smrg# in func_to_host_file_result.
1765dc99b369Smrgfunc_convert_file_nix_to_cygwin ()
1766dc99b369Smrg{
1767dc99b369Smrg  $opt_debug
1768dc99b369Smrg  func_to_host_file_result="$1"
1769dc99b369Smrg  if test -n "$1"; then
1770dc99b369Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1771dc99b369Smrg    func_convert_core_file_wine_to_w32 "$1"
1772dc99b369Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
1773dc99b369Smrg    func_to_host_file_result="$func_cygpath_result"
1774dc99b369Smrg  fi
1775dc99b369Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1776dc99b369Smrg}
1777dc99b369Smrg# end func_convert_file_nix_to_cygwin
17785eefee25Smacallan
17795eefee25Smacallan
1780dc99b369Smrg#############################################
1781dc99b369Smrg# $build to $host PATH CONVERSION FUNCTIONS #
1782dc99b369Smrg#############################################
1783dc99b369Smrg# invoked via `$to_host_path_cmd ARG'
1784dc99b369Smrg#
1785dc99b369Smrg# In each case, ARG is the path to be converted from $build to $host format.
1786dc99b369Smrg# The result will be available in $func_to_host_path_result.
1787dc99b369Smrg#
1788dc99b369Smrg# Path separators are also converted from $build format to $host format.  If
1789dc99b369Smrg# ARG begins or ends with a path separator character, it is preserved (but
1790dc99b369Smrg# converted to $host format) on output.
1791dc99b369Smrg#
1792dc99b369Smrg# All path conversion functions are named using the following convention:
1793dc99b369Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
1794dc99b369Smrg#   path conversion function         : func_convert_path_X_to_Y ()
1795dc99b369Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
1796dc99b369Smrg# same.  If conversion functions are added for new $build/$host combinations,
1797dc99b369Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1798dc99b369Smrg# will break.
1799dc99b369Smrg
1800dc99b369Smrg
1801dc99b369Smrg# func_init_to_host_path_cmd
1802dc99b369Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1803dc99b369Smrg# appropriate value, based on the value of $to_host_file_cmd.
1804dc99b369Smrgto_host_path_cmd=
1805dc99b369Smrgfunc_init_to_host_path_cmd ()
1806dc99b369Smrg{
1807dc99b369Smrg  $opt_debug
1808dc99b369Smrg  if test -z "$to_host_path_cmd"; then
1809dc99b369Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
1810dc99b369Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1811dc99b369Smrg  fi
1812dc99b369Smrg}
18135eefee25Smacallan
18145eefee25Smacallan
1815dc99b369Smrg# func_to_host_path ARG
1816dc99b369Smrg# Converts the path ARG from $build format to $host format. Return result
1817dc99b369Smrg# in func_to_host_path_result.
1818dc99b369Smrgfunc_to_host_path ()
1819dc99b369Smrg{
1820dc99b369Smrg  $opt_debug
1821dc99b369Smrg  func_init_to_host_path_cmd
1822dc99b369Smrg  $to_host_path_cmd "$1"
1823dc99b369Smrg}
1824dc99b369Smrg# end func_to_host_path
18255eefee25Smacallan
18265eefee25Smacallan
1827dc99b369Smrg# func_convert_path_noop ARG
1828dc99b369Smrg# Copy ARG to func_to_host_path_result.
1829dc99b369Smrgfunc_convert_path_noop ()
1830dc99b369Smrg{
1831dc99b369Smrg  func_to_host_path_result="$1"
1832dc99b369Smrg}
1833dc99b369Smrg# end func_convert_path_noop
18345eefee25Smacallan
18355eefee25Smacallan
1836dc99b369Smrg# func_convert_path_msys_to_w32 ARG
1837dc99b369Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1838dc99b369Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1839dc99b369Smrg# func_to_host_path_result.
1840dc99b369Smrgfunc_convert_path_msys_to_w32 ()
1841dc99b369Smrg{
1842dc99b369Smrg  $opt_debug
1843dc99b369Smrg  func_to_host_path_result="$1"
1844dc99b369Smrg  if test -n "$1"; then
1845dc99b369Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
1846dc99b369Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1847dc99b369Smrg    # and winepath ignores them completely.
1848dc99b369Smrg    func_stripname : : "$1"
1849dc99b369Smrg    func_to_host_path_tmp1=$func_stripname_result
1850dc99b369Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1851dc99b369Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1852dc99b369Smrg    func_convert_path_check : ";" \
1853dc99b369Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1854dc99b369Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1855dc99b369Smrg  fi
1856dc99b369Smrg}
1857dc99b369Smrg# end func_convert_path_msys_to_w32
18585eefee25Smacallan
18595eefee25Smacallan
1860dc99b369Smrg# func_convert_path_cygwin_to_w32 ARG
1861dc99b369Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
1862dc99b369Smrg# func_to_host_file_result.
1863dc99b369Smrgfunc_convert_path_cygwin_to_w32 ()
1864dc99b369Smrg{
1865dc99b369Smrg  $opt_debug
1866dc99b369Smrg  func_to_host_path_result="$1"
1867dc99b369Smrg  if test -n "$1"; then
1868dc99b369Smrg    # See func_convert_path_msys_to_w32:
1869dc99b369Smrg    func_stripname : : "$1"
1870dc99b369Smrg    func_to_host_path_tmp1=$func_stripname_result
1871dc99b369Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1872dc99b369Smrg    func_convert_path_check : ";" \
1873dc99b369Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1874dc99b369Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1875dc99b369Smrg  fi
1876dc99b369Smrg}
1877dc99b369Smrg# end func_convert_path_cygwin_to_w32
18785eefee25Smacallan
18795eefee25Smacallan
1880dc99b369Smrg# func_convert_path_nix_to_w32 ARG
1881dc99b369Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1882dc99b369Smrg# a working winepath.  Returns result in func_to_host_file_result.
1883dc99b369Smrgfunc_convert_path_nix_to_w32 ()
1884dc99b369Smrg{
1885dc99b369Smrg  $opt_debug
1886dc99b369Smrg  func_to_host_path_result="$1"
1887dc99b369Smrg  if test -n "$1"; then
1888dc99b369Smrg    # See func_convert_path_msys_to_w32:
1889dc99b369Smrg    func_stripname : : "$1"
1890dc99b369Smrg    func_to_host_path_tmp1=$func_stripname_result
1891dc99b369Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1892dc99b369Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1893dc99b369Smrg    func_convert_path_check : ";" \
1894dc99b369Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1895dc99b369Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1896dc99b369Smrg  fi
1897dc99b369Smrg}
1898dc99b369Smrg# end func_convert_path_nix_to_w32
18995eefee25Smacallan
19005eefee25Smacallan
1901dc99b369Smrg# func_convert_path_msys_to_cygwin ARG
1902dc99b369Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1903dc99b369Smrg# Returns result in func_to_host_file_result.
1904dc99b369Smrgfunc_convert_path_msys_to_cygwin ()
1905dc99b369Smrg{
1906dc99b369Smrg  $opt_debug
1907dc99b369Smrg  func_to_host_path_result="$1"
1908dc99b369Smrg  if test -n "$1"; then
1909dc99b369Smrg    # See func_convert_path_msys_to_w32:
1910dc99b369Smrg    func_stripname : : "$1"
1911dc99b369Smrg    func_to_host_path_tmp1=$func_stripname_result
1912dc99b369Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1913dc99b369Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
1914dc99b369Smrg    func_to_host_path_result="$func_cygpath_result"
1915dc99b369Smrg    func_convert_path_check : : \
1916dc99b369Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1917dc99b369Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1918dc99b369Smrg  fi
1919dc99b369Smrg}
1920dc99b369Smrg# end func_convert_path_msys_to_cygwin
19215eefee25Smacallan
19225eefee25Smacallan
1923dc99b369Smrg# func_convert_path_nix_to_cygwin ARG
1924dc99b369Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1925dc99b369Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1926dc99b369Smrg# func_to_host_file_result.
1927dc99b369Smrgfunc_convert_path_nix_to_cygwin ()
1928dc99b369Smrg{
1929dc99b369Smrg  $opt_debug
1930dc99b369Smrg  func_to_host_path_result="$1"
1931dc99b369Smrg  if test -n "$1"; then
1932dc99b369Smrg    # Remove leading and trailing path separator characters from
1933dc99b369Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
1934dc99b369Smrg    # into '.;' and ';.', and winepath ignores them completely.
1935dc99b369Smrg    func_stripname : : "$1"
1936dc99b369Smrg    func_to_host_path_tmp1=$func_stripname_result
1937dc99b369Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1938dc99b369Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
1939dc99b369Smrg    func_to_host_path_result="$func_cygpath_result"
1940dc99b369Smrg    func_convert_path_check : : \
1941dc99b369Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1942dc99b369Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1943dc99b369Smrg  fi
1944dc99b369Smrg}
1945dc99b369Smrg# end func_convert_path_nix_to_cygwin
19465eefee25Smacallan
19475eefee25Smacallan
1948dc99b369Smrg# func_mode_compile arg...
1949dc99b369Smrgfunc_mode_compile ()
1950dc99b369Smrg{
1951dc99b369Smrg    $opt_debug
1952dc99b369Smrg    # Get the compilation command and the source file.
1953dc99b369Smrg    base_compile=
1954dc99b369Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1955dc99b369Smrg    suppress_opt=yes
1956dc99b369Smrg    suppress_output=
1957dc99b369Smrg    arg_mode=normal
1958dc99b369Smrg    libobj=
1959dc99b369Smrg    later=
1960dc99b369Smrg    pie_flag=
1961dc99b369Smrg
1962dc99b369Smrg    for arg
1963dc99b369Smrg    do
1964dc99b369Smrg      case $arg_mode in
1965dc99b369Smrg      arg  )
1966dc99b369Smrg	# do not "continue".  Instead, add this to base_compile
1967dc99b369Smrg	lastarg="$arg"
1968dc99b369Smrg	arg_mode=normal
1969dc99b369Smrg	;;
1970dc99b369Smrg
1971dc99b369Smrg      target )
1972dc99b369Smrg	libobj="$arg"
1973dc99b369Smrg	arg_mode=normal
1974dc99b369Smrg	continue
1975dc99b369Smrg	;;
1976dc99b369Smrg
1977dc99b369Smrg      normal )
1978dc99b369Smrg	# Accept any command-line options.
1979dc99b369Smrg	case $arg in
1980dc99b369Smrg	-o)
1981dc99b369Smrg	  test -n "$libobj" && \
1982dc99b369Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1983dc99b369Smrg	  arg_mode=target
19845eefee25Smacallan	  continue
19855eefee25Smacallan	  ;;
1986dc99b369Smrg
1987dc99b369Smrg	-pie | -fpie | -fPIE)
1988dc99b369Smrg          func_append pie_flag " $arg"
19895eefee25Smacallan	  continue
19905eefee25Smacallan	  ;;
1991dc99b369Smrg
1992dc99b369Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1993dc99b369Smrg	  func_append later " $arg"
19945eefee25Smacallan	  continue
19955eefee25Smacallan	  ;;
1996dc99b369Smrg
1997dc99b369Smrg	-no-suppress)
1998dc99b369Smrg	  suppress_opt=no
19995eefee25Smacallan	  continue
20005eefee25Smacallan	  ;;
20015eefee25Smacallan
2002dc99b369Smrg	-Xcompiler)
2003dc99b369Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2004dc99b369Smrg	  continue      #  The current "srcfile" will either be retained or
2005dc99b369Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
20065eefee25Smacallan
2007dc99b369Smrg	-Wc,*)
2008dc99b369Smrg	  func_stripname '-Wc,' '' "$arg"
2009dc99b369Smrg	  args=$func_stripname_result
2010dc99b369Smrg	  lastarg=
2011dc99b369Smrg	  save_ifs="$IFS"; IFS=','
2012dc99b369Smrg	  for arg in $args; do
2013dc99b369Smrg	    IFS="$save_ifs"
2014dc99b369Smrg	    func_append_quoted lastarg "$arg"
2015dc99b369Smrg	  done
2016dc99b369Smrg	  IFS="$save_ifs"
2017dc99b369Smrg	  func_stripname ' ' '' "$lastarg"
2018dc99b369Smrg	  lastarg=$func_stripname_result
20195eefee25Smacallan
2020dc99b369Smrg	  # Add the arguments to base_compile.
2021dc99b369Smrg	  func_append base_compile " $lastarg"
2022dc99b369Smrg	  continue
2023dc99b369Smrg	  ;;
20245eefee25Smacallan
2025dc99b369Smrg	*)
2026dc99b369Smrg	  # Accept the current argument as the source file.
2027dc99b369Smrg	  # The previous "srcfile" becomes the current argument.
2028dc99b369Smrg	  #
2029dc99b369Smrg	  lastarg="$srcfile"
2030dc99b369Smrg	  srcfile="$arg"
2031dc99b369Smrg	  ;;
2032dc99b369Smrg	esac  #  case $arg
20335eefee25Smacallan	;;
2034dc99b369Smrg      esac    #  case $arg_mode
20355eefee25Smacallan
2036dc99b369Smrg      # Aesthetically quote the previous argument.
2037dc99b369Smrg      func_append_quoted base_compile "$lastarg"
2038dc99b369Smrg    done # for arg
20395eefee25Smacallan
2040dc99b369Smrg    case $arg_mode in
2041dc99b369Smrg    arg)
2042dc99b369Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2043dc99b369Smrg      ;;
2044dc99b369Smrg    target)
2045dc99b369Smrg      func_fatal_error "you must specify a target with \`-o'"
2046dc99b369Smrg      ;;
2047dc99b369Smrg    *)
2048dc99b369Smrg      # Get the name of the library object.
2049dc99b369Smrg      test -z "$libobj" && {
2050dc99b369Smrg	func_basename "$srcfile"
2051dc99b369Smrg	libobj="$func_basename_result"
2052dc99b369Smrg      }
2053dc99b369Smrg      ;;
2054dc99b369Smrg    esac
20555eefee25Smacallan
2056dc99b369Smrg    # Recognize several different file suffixes.
2057dc99b369Smrg    # If the user specifies -o file.o, it is replaced with file.lo
2058dc99b369Smrg    case $libobj in
2059dc99b369Smrg    *.[cCFSifmso] | \
2060dc99b369Smrg    *.ada | *.adb | *.ads | *.asm | \
2061dc99b369Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2062dc99b369Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
2063dc99b369Smrg      func_xform "$libobj"
2064dc99b369Smrg      libobj=$func_xform_result
2065dc99b369Smrg      ;;
2066dc99b369Smrg    esac
20675eefee25Smacallan
2068dc99b369Smrg    case $libobj in
2069dc99b369Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2070dc99b369Smrg    *)
2071dc99b369Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2072dc99b369Smrg      ;;
2073dc99b369Smrg    esac
20745eefee25Smacallan
2075dc99b369Smrg    func_infer_tag $base_compile
20765eefee25Smacallan
2077dc99b369Smrg    for arg in $later; do
2078dc99b369Smrg      case $arg in
2079dc99b369Smrg      -shared)
2080dc99b369Smrg	test "$build_libtool_libs" != yes && \
2081dc99b369Smrg	  func_fatal_configuration "can not build a shared library"
2082dc99b369Smrg	build_old_libs=no
20835eefee25Smacallan	continue
20845eefee25Smacallan	;;
20855eefee25Smacallan
2086dc99b369Smrg      -static)
2087dc99b369Smrg	build_libtool_libs=no
2088dc99b369Smrg	build_old_libs=yes
20895eefee25Smacallan	continue
20905eefee25Smacallan	;;
20915eefee25Smacallan
2092dc99b369Smrg      -prefer-pic)
2093dc99b369Smrg	pic_mode=yes
20945eefee25Smacallan	continue
20955eefee25Smacallan	;;
20965eefee25Smacallan
2097dc99b369Smrg      -prefer-non-pic)
2098dc99b369Smrg	pic_mode=no
20995eefee25Smacallan	continue
21005eefee25Smacallan	;;
2101dc99b369Smrg      esac
2102dc99b369Smrg    done
21035eefee25Smacallan
2104dc99b369Smrg    func_quote_for_eval "$libobj"
2105dc99b369Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2106dc99b369Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2107dc99b369Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2108dc99b369Smrg    func_dirname_and_basename "$obj" "/" ""
2109dc99b369Smrg    objname="$func_basename_result"
2110dc99b369Smrg    xdir="$func_dirname_result"
2111dc99b369Smrg    lobj=${xdir}$objdir/$objname
21125eefee25Smacallan
2113dc99b369Smrg    test -z "$base_compile" && \
2114dc99b369Smrg      func_fatal_help "you must specify a compilation command"
21155eefee25Smacallan
2116dc99b369Smrg    # Delete any leftover library objects.
2117dc99b369Smrg    if test "$build_old_libs" = yes; then
2118dc99b369Smrg      removelist="$obj $lobj $libobj ${libobj}T"
2119dc99b369Smrg    else
2120dc99b369Smrg      removelist="$lobj $libobj ${libobj}T"
2121dc99b369Smrg    fi
212262ab96baSmrg
2123dc99b369Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2124dc99b369Smrg    case $host_os in
2125dc99b369Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2126dc99b369Smrg      pic_mode=default
2127dc99b369Smrg      ;;
2128dc99b369Smrg    esac
2129dc99b369Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2130dc99b369Smrg      # non-PIC code in shared libraries is not supported
2131dc99b369Smrg      pic_mode=default
2132dc99b369Smrg    fi
21335eefee25Smacallan
2134dc99b369Smrg    # Calculate the filename of the output object if compiler does
2135dc99b369Smrg    # not support -o with -c
2136dc99b369Smrg    if test "$compiler_c_o" = no; then
2137dc99b369Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2138dc99b369Smrg      lockfile="$output_obj.lock"
2139dc99b369Smrg    else
2140dc99b369Smrg      output_obj=
2141dc99b369Smrg      need_locks=no
2142dc99b369Smrg      lockfile=
2143dc99b369Smrg    fi
21445eefee25Smacallan
2145dc99b369Smrg    # Lock this critical section if it is needed
2146dc99b369Smrg    # We use this script file to make the link, it avoids creating a new file
2147dc99b369Smrg    if test "$need_locks" = yes; then
2148dc99b369Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2149dc99b369Smrg	func_echo "Waiting for $lockfile to be removed"
2150dc99b369Smrg	sleep 2
2151dc99b369Smrg      done
2152dc99b369Smrg    elif test "$need_locks" = warn; then
2153dc99b369Smrg      if test -f "$lockfile"; then
2154dc99b369Smrg	$ECHO "\
2155dc99b369Smrg*** ERROR, $lockfile exists and contains:
2156dc99b369Smrg`cat $lockfile 2>/dev/null`
21575eefee25Smacallan
2158dc99b369SmrgThis indicates that another process is trying to use the same
2159dc99b369Smrgtemporary object file, and libtool could not work around it because
2160dc99b369Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2161dc99b369Smrgrepeat this compilation, it may succeed, by chance, but you had better
2162dc99b369Smrgavoid parallel builds (make -j) in this platform, or get a better
2163dc99b369Smrgcompiler."
21645eefee25Smacallan
2165dc99b369Smrg	$opt_dry_run || $RM $removelist
2166dc99b369Smrg	exit $EXIT_FAILURE
2167dc99b369Smrg      fi
2168dc99b369Smrg      func_append removelist " $output_obj"
2169dc99b369Smrg      $ECHO "$srcfile" > "$lockfile"
2170dc99b369Smrg    fi
21715eefee25Smacallan
2172dc99b369Smrg    $opt_dry_run || $RM $removelist
2173dc99b369Smrg    func_append removelist " $lockfile"
2174dc99b369Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
21755eefee25Smacallan
2176dc99b369Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2177dc99b369Smrg    srcfile=$func_to_tool_file_result
2178dc99b369Smrg    func_quote_for_eval "$srcfile"
2179dc99b369Smrg    qsrcfile=$func_quote_for_eval_result
21805eefee25Smacallan
2181dc99b369Smrg    # Only build a PIC object if we are building libtool libraries.
2182dc99b369Smrg    if test "$build_libtool_libs" = yes; then
2183dc99b369Smrg      # Without this assignment, base_compile gets emptied.
2184dc99b369Smrg      fbsd_hideous_sh_bug=$base_compile
21855eefee25Smacallan
2186dc99b369Smrg      if test "$pic_mode" != no; then
2187dc99b369Smrg	command="$base_compile $qsrcfile $pic_flag"
2188dc99b369Smrg      else
2189dc99b369Smrg	# Don't build PIC code
2190dc99b369Smrg	command="$base_compile $qsrcfile"
2191dc99b369Smrg      fi
21925eefee25Smacallan
2193dc99b369Smrg      func_mkdir_p "$xdir$objdir"
21945eefee25Smacallan
2195dc99b369Smrg      if test -z "$output_obj"; then
2196dc99b369Smrg	# Place PIC objects in $objdir
2197dc99b369Smrg	func_append command " -o $lobj"
2198dc99b369Smrg      fi
21995eefee25Smacallan
2200dc99b369Smrg      func_show_eval_locale "$command"	\
2201dc99b369Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
22025eefee25Smacallan
2203dc99b369Smrg      if test "$need_locks" = warn &&
2204dc99b369Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2205dc99b369Smrg	$ECHO "\
2206dc99b369Smrg*** ERROR, $lockfile contains:
2207dc99b369Smrg`cat $lockfile 2>/dev/null`
22085eefee25Smacallan
2209dc99b369Smrgbut it should contain:
2210dc99b369Smrg$srcfile
22115eefee25Smacallan
2212dc99b369SmrgThis indicates that another process is trying to use the same
2213dc99b369Smrgtemporary object file, and libtool could not work around it because
2214dc99b369Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2215dc99b369Smrgrepeat this compilation, it may succeed, by chance, but you had better
2216dc99b369Smrgavoid parallel builds (make -j) in this platform, or get a better
2217dc99b369Smrgcompiler."
22185eefee25Smacallan
2219dc99b369Smrg	$opt_dry_run || $RM $removelist
2220dc99b369Smrg	exit $EXIT_FAILURE
2221dc99b369Smrg      fi
22225eefee25Smacallan
2223dc99b369Smrg      # Just move the object if needed, then go on to compile the next one
2224dc99b369Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2225dc99b369Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2226dc99b369Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2227dc99b369Smrg      fi
22285eefee25Smacallan
2229dc99b369Smrg      # Allow error messages only from the first compilation.
2230dc99b369Smrg      if test "$suppress_opt" = yes; then
2231dc99b369Smrg	suppress_output=' >/dev/null 2>&1'
2232dc99b369Smrg      fi
2233dc99b369Smrg    fi
22345eefee25Smacallan
2235dc99b369Smrg    # Only build a position-dependent object if we build old libraries.
2236dc99b369Smrg    if test "$build_old_libs" = yes; then
2237dc99b369Smrg      if test "$pic_mode" != yes; then
2238dc99b369Smrg	# Don't build PIC code
2239dc99b369Smrg	command="$base_compile $qsrcfile$pie_flag"
2240dc99b369Smrg      else
2241dc99b369Smrg	command="$base_compile $qsrcfile $pic_flag"
2242dc99b369Smrg      fi
2243dc99b369Smrg      if test "$compiler_c_o" = yes; then
2244dc99b369Smrg	func_append command " -o $obj"
2245dc99b369Smrg      fi
22465eefee25Smacallan
2247dc99b369Smrg      # Suppress compiler output if we already did a PIC compilation.
2248dc99b369Smrg      func_append command "$suppress_output"
2249dc99b369Smrg      func_show_eval_locale "$command" \
2250dc99b369Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
22515eefee25Smacallan
2252dc99b369Smrg      if test "$need_locks" = warn &&
2253dc99b369Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2254dc99b369Smrg	$ECHO "\
2255dc99b369Smrg*** ERROR, $lockfile contains:
2256dc99b369Smrg`cat $lockfile 2>/dev/null`
22575eefee25Smacallan
2258dc99b369Smrgbut it should contain:
2259dc99b369Smrg$srcfile
22605eefee25Smacallan
2261dc99b369SmrgThis indicates that another process is trying to use the same
2262dc99b369Smrgtemporary object file, and libtool could not work around it because
2263dc99b369Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2264dc99b369Smrgrepeat this compilation, it may succeed, by chance, but you had better
2265dc99b369Smrgavoid parallel builds (make -j) in this platform, or get a better
2266dc99b369Smrgcompiler."
22675eefee25Smacallan
2268dc99b369Smrg	$opt_dry_run || $RM $removelist
2269dc99b369Smrg	exit $EXIT_FAILURE
2270dc99b369Smrg      fi
22715eefee25Smacallan
2272dc99b369Smrg      # Just move the object if needed
2273dc99b369Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2274dc99b369Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2275dc99b369Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2276dc99b369Smrg      fi
2277dc99b369Smrg    fi
22785eefee25Smacallan
2279dc99b369Smrg    $opt_dry_run || {
2280dc99b369Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
22815eefee25Smacallan
2282dc99b369Smrg      # Unlock the critical section if it was locked
2283dc99b369Smrg      if test "$need_locks" != no; then
2284dc99b369Smrg	removelist=$lockfile
2285dc99b369Smrg        $RM "$lockfile"
2286dc99b369Smrg      fi
2287dc99b369Smrg    }
22885eefee25Smacallan
2289dc99b369Smrg    exit $EXIT_SUCCESS
2290dc99b369Smrg}
22915eefee25Smacallan
2292dc99b369Smrg$opt_help || {
2293dc99b369Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2294dc99b369Smrg}
22955eefee25Smacallan
2296dc99b369Smrgfunc_mode_help ()
2297dc99b369Smrg{
2298dc99b369Smrg    # We need to display help for each of the modes.
2299dc99b369Smrg    case $opt_mode in
2300dc99b369Smrg      "")
2301dc99b369Smrg        # Generic help is extracted from the usage comments
2302dc99b369Smrg        # at the start of this file.
2303dc99b369Smrg        func_help
2304dc99b369Smrg        ;;
23055eefee25Smacallan
2306dc99b369Smrg      clean)
2307dc99b369Smrg        $ECHO \
2308dc99b369Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
23095eefee25Smacallan
2310dc99b369SmrgRemove files from the build directory.
23115eefee25Smacallan
2312dc99b369SmrgRM is the name of the program to use to delete files associated with each FILE
2313dc99b369Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2314dc99b369Smrgto RM.
23155eefee25Smacallan
2316dc99b369SmrgIf FILE is a libtool library, object or program, all the files associated
2317dc99b369Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2318dc99b369Smrg        ;;
23195eefee25Smacallan
2320dc99b369Smrg      compile)
2321dc99b369Smrg      $ECHO \
2322dc99b369Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
23235eefee25Smacallan
2324dc99b369SmrgCompile a source file into a libtool library object.
23255eefee25Smacallan
2326dc99b369SmrgThis mode accepts the following additional options:
23275eefee25Smacallan
2328dc99b369Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2329dc99b369Smrg  -no-suppress      do not suppress compiler output for multiple passes
2330dc99b369Smrg  -prefer-pic       try to build PIC objects only
2331dc99b369Smrg  -prefer-non-pic   try to build non-PIC objects only
2332dc99b369Smrg  -shared           do not build a \`.o' file suitable for static linking
2333dc99b369Smrg  -static           only build a \`.o' file suitable for static linking
2334dc99b369Smrg  -Wc,FLAG          pass FLAG directly to the compiler
23355eefee25Smacallan
2336dc99b369SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2337dc99b369Smrgfrom the given SOURCEFILE.
23385eefee25Smacallan
2339dc99b369SmrgThe output file name is determined by removing the directory component from
2340dc99b369SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2341dc99b369Smrglibrary object suffix, \`.lo'."
2342dc99b369Smrg        ;;
23435eefee25Smacallan
2344dc99b369Smrg      execute)
2345dc99b369Smrg        $ECHO \
2346dc99b369Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
23475eefee25Smacallan
2348dc99b369SmrgAutomatically set library path, then run a program.
23495eefee25Smacallan
2350dc99b369SmrgThis mode accepts the following additional options:
23515eefee25Smacallan
2352dc99b369Smrg  -dlopen FILE      add the directory containing FILE to the library path
23535eefee25Smacallan
2354dc99b369SmrgThis mode sets the library path environment variable according to \`-dlopen'
2355dc99b369Smrgflags.
23565eefee25Smacallan
2357dc99b369SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2358dc99b369Smrginto their corresponding uninstalled binary, and any of their required library
2359dc99b369Smrgdirectories are added to the library path.
23605eefee25Smacallan
2361dc99b369SmrgThen, COMMAND is executed, with ARGS as arguments."
2362dc99b369Smrg        ;;
23635eefee25Smacallan
2364dc99b369Smrg      finish)
2365dc99b369Smrg        $ECHO \
2366dc99b369Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
23675eefee25Smacallan
2368dc99b369SmrgComplete the installation of libtool libraries.
2369dc99b369Smrg
2370dc99b369SmrgEach LIBDIR is a directory that contains libtool libraries.
2371dc99b369Smrg
2372dc99b369SmrgThe commands that this mode executes may require superuser privileges.  Use
2373dc99b369Smrgthe \`--dry-run' option if you just want to see what would be executed."
2374dc99b369Smrg        ;;
2375dc99b369Smrg
2376dc99b369Smrg      install)
2377dc99b369Smrg        $ECHO \
2378dc99b369Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2379dc99b369Smrg
2380dc99b369SmrgInstall executables or libraries.
2381dc99b369Smrg
2382dc99b369SmrgINSTALL-COMMAND is the installation command.  The first component should be
2383dc99b369Smrgeither the \`install' or \`cp' program.
2384dc99b369Smrg
2385dc99b369SmrgThe following components of INSTALL-COMMAND are treated specially:
2386dc99b369Smrg
2387dc99b369Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2388dc99b369Smrg
2389dc99b369SmrgThe rest of the components are interpreted as arguments to that command (only
2390dc99b369SmrgBSD-compatible install options are recognized)."
2391dc99b369Smrg        ;;
2392dc99b369Smrg
2393dc99b369Smrg      link)
2394dc99b369Smrg        $ECHO \
2395dc99b369Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2396dc99b369Smrg
2397dc99b369SmrgLink object files or libraries together to form another library, or to
2398dc99b369Smrgcreate an executable program.
2399dc99b369Smrg
2400dc99b369SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2401dc99b369Smrga program from several object files.
2402dc99b369Smrg
2403dc99b369SmrgThe following components of LINK-COMMAND are treated specially:
2404dc99b369Smrg
2405dc99b369Smrg  -all-static       do not do any dynamic linking at all
2406dc99b369Smrg  -avoid-version    do not add a version suffix if possible
2407dc99b369Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
2408dc99b369Smrg                    libraries must be found in the PATH setting at runtime)
2409dc99b369Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2410dc99b369Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2411dc99b369Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2412dc99b369Smrg  -export-symbols SYMFILE
2413dc99b369Smrg                    try to export only the symbols listed in SYMFILE
2414dc99b369Smrg  -export-symbols-regex REGEX
2415dc99b369Smrg                    try to export only the symbols matching REGEX
2416dc99b369Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2417dc99b369Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2418dc99b369Smrg  -module           build a library that can dlopened
2419dc99b369Smrg  -no-fast-install  disable the fast-install mode
2420dc99b369Smrg  -no-install       link a not-installable executable
2421dc99b369Smrg  -no-undefined     declare that a library does not refer to external symbols
2422dc99b369Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2423dc99b369Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2424dc99b369Smrg  -precious-files-regex REGEX
2425dc99b369Smrg                    don't remove output files matching REGEX
2426dc99b369Smrg  -release RELEASE  specify package release information
2427dc99b369Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2428dc99b369Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2429dc99b369Smrg  -shared           only do dynamic linking of libtool libraries
2430dc99b369Smrg  -shrext SUFFIX    override the standard shared library file extension
2431dc99b369Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2432dc99b369Smrg  -static-libtool-libs
2433dc99b369Smrg                    do not do any dynamic linking of libtool libraries
2434dc99b369Smrg  -version-info CURRENT[:REVISION[:AGE]]
2435dc99b369Smrg                    specify library version info [each variable defaults to 0]
2436dc99b369Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
2437dc99b369Smrg  -Wc,FLAG
2438dc99b369Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2439dc99b369Smrg  -Wl,FLAG
2440dc99b369Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2441dc99b369Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2442dc99b369Smrg
2443dc99b369SmrgAll other options (arguments beginning with \`-') are ignored.
2444dc99b369Smrg
2445dc99b369SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2446dc99b369Smrgtreated as uninstalled libtool libraries, other files are standard or library
2447dc99b369Smrgobject files.
2448dc99b369Smrg
2449dc99b369SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2450dc99b369Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2451dc99b369Smrgrequired, except when creating a convenience library.
2452dc99b369Smrg
2453dc99b369SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2454dc99b369Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2455dc99b369Smrg
2456dc99b369SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2457dc99b369Smrgis created, otherwise an executable program is created."
2458dc99b369Smrg        ;;
2459dc99b369Smrg
2460dc99b369Smrg      uninstall)
2461dc99b369Smrg        $ECHO \
2462dc99b369Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2463dc99b369Smrg
2464dc99b369SmrgRemove libraries from an installation directory.
2465dc99b369Smrg
2466dc99b369SmrgRM is the name of the program to use to delete files associated with each FILE
2467dc99b369Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2468dc99b369Smrgto RM.
2469dc99b369Smrg
2470dc99b369SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2471dc99b369SmrgOtherwise, only FILE itself is deleted using RM."
2472dc99b369Smrg        ;;
2473dc99b369Smrg
2474dc99b369Smrg      *)
2475dc99b369Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2476dc99b369Smrg        ;;
24775eefee25Smacallan    esac
24785eefee25Smacallan
2479dc99b369Smrg    echo
2480dc99b369Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
2481dc99b369Smrg}
24825eefee25Smacallan
2483dc99b369Smrg# Now that we've collected a possible --mode arg, show help if necessary
2484dc99b369Smrgif $opt_help; then
2485dc99b369Smrg  if test "$opt_help" = :; then
2486dc99b369Smrg    func_mode_help
2487dc99b369Smrg  else
2488dc99b369Smrg    {
2489dc99b369Smrg      func_help noexit
2490dc99b369Smrg      for opt_mode in compile link execute install finish uninstall clean; do
2491dc99b369Smrg	func_mode_help
2492dc99b369Smrg      done
2493dc99b369Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2494dc99b369Smrg    {
2495dc99b369Smrg      func_help noexit
2496dc99b369Smrg      for opt_mode in compile link execute install finish uninstall clean; do
2497dc99b369Smrg	echo
2498dc99b369Smrg	func_mode_help
2499dc99b369Smrg      done
2500dc99b369Smrg    } |
2501dc99b369Smrg    sed '1d
2502dc99b369Smrg      /^When reporting/,/^Report/{
2503dc99b369Smrg	H
2504dc99b369Smrg	d
2505dc99b369Smrg      }
2506dc99b369Smrg      $x
2507dc99b369Smrg      /information about other modes/d
2508dc99b369Smrg      /more detailed .*MODE/d
2509dc99b369Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2510dc99b369Smrg  fi
2511dc99b369Smrg  exit $?
2512dc99b369Smrgfi
25135eefee25Smacallan
25145eefee25Smacallan
2515dc99b369Smrg# func_mode_execute arg...
2516dc99b369Smrgfunc_mode_execute ()
2517dc99b369Smrg{
2518dc99b369Smrg    $opt_debug
2519dc99b369Smrg    # The first argument is the command name.
2520dc99b369Smrg    cmd="$nonopt"
2521dc99b369Smrg    test -z "$cmd" && \
2522dc99b369Smrg      func_fatal_help "you must specify a COMMAND"
2523dc99b369Smrg
2524dc99b369Smrg    # Handle -dlopen flags immediately.
2525dc99b369Smrg    for file in $opt_dlopen; do
2526dc99b369Smrg      test -f "$file" \
2527dc99b369Smrg	|| func_fatal_help "\`$file' is not a file"
2528dc99b369Smrg
2529dc99b369Smrg      dir=
2530dc99b369Smrg      case $file in
2531dc99b369Smrg      *.la)
2532dc99b369Smrg	func_resolve_sysroot "$file"
2533dc99b369Smrg	file=$func_resolve_sysroot_result
2534dc99b369Smrg
2535dc99b369Smrg	# Check to see that this really is a libtool archive.
2536dc99b369Smrg	func_lalib_unsafe_p "$file" \
2537dc99b369Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2538dc99b369Smrg
2539dc99b369Smrg	# Read the libtool library.
2540dc99b369Smrg	dlname=
2541dc99b369Smrg	library_names=
2542dc99b369Smrg	func_source "$file"
2543dc99b369Smrg
2544dc99b369Smrg	# Skip this library if it cannot be dlopened.
2545dc99b369Smrg	if test -z "$dlname"; then
2546dc99b369Smrg	  # Warn if it was a shared library.
2547dc99b369Smrg	  test -n "$library_names" && \
2548dc99b369Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2549dc99b369Smrg	  continue
2550dc99b369Smrg	fi
2551dc99b369Smrg
2552dc99b369Smrg	func_dirname "$file" "" "."
2553dc99b369Smrg	dir="$func_dirname_result"
2554dc99b369Smrg
2555dc99b369Smrg	if test -f "$dir/$objdir/$dlname"; then
2556dc99b369Smrg	  func_append dir "/$objdir"
2557dc99b369Smrg	else
2558dc99b369Smrg	  if test ! -f "$dir/$dlname"; then
2559dc99b369Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2560dc99b369Smrg	  fi
2561dc99b369Smrg	fi
25625eefee25Smacallan	;;
2563dc99b369Smrg
2564dc99b369Smrg      *.lo)
2565dc99b369Smrg	# Just add the directory containing the .lo file.
2566dc99b369Smrg	func_dirname "$file" "" "."
2567dc99b369Smrg	dir="$func_dirname_result"
25685eefee25Smacallan	;;
2569dc99b369Smrg
2570dc99b369Smrg      *)
2571dc99b369Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2572dc99b369Smrg	continue
25735eefee25Smacallan	;;
2574dc99b369Smrg      esac
2575dc99b369Smrg
2576dc99b369Smrg      # Get the absolute pathname.
2577dc99b369Smrg      absdir=`cd "$dir" && pwd`
2578dc99b369Smrg      test -n "$absdir" && dir="$absdir"
2579dc99b369Smrg
2580dc99b369Smrg      # Now add the directory to shlibpath_var.
2581dc99b369Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2582dc99b369Smrg	eval "$shlibpath_var=\"\$dir\""
2583dc99b369Smrg      else
2584dc99b369Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
25855eefee25Smacallan      fi
2586dc99b369Smrg    done
2587dc99b369Smrg
2588dc99b369Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2589dc99b369Smrg    # rather than running their programs.
2590dc99b369Smrg    libtool_execute_magic="$magic"
2591dc99b369Smrg
2592dc99b369Smrg    # Check if any of the arguments is a wrapper script.
2593dc99b369Smrg    args=
2594dc99b369Smrg    for file
2595dc99b369Smrg    do
2596dc99b369Smrg      case $file in
2597dc99b369Smrg      -* | *.la | *.lo ) ;;
2598dc99b369Smrg      *)
2599dc99b369Smrg	# Do a test to see if this is really a libtool program.
2600dc99b369Smrg	if func_ltwrapper_script_p "$file"; then
2601dc99b369Smrg	  func_source "$file"
2602dc99b369Smrg	  # Transform arg to wrapped name.
2603dc99b369Smrg	  file="$progdir/$program"
2604dc99b369Smrg	elif func_ltwrapper_executable_p "$file"; then
2605dc99b369Smrg	  func_ltwrapper_scriptname "$file"
2606dc99b369Smrg	  func_source "$func_ltwrapper_scriptname_result"
2607dc99b369Smrg	  # Transform arg to wrapped name.
2608dc99b369Smrg	  file="$progdir/$program"
2609dc99b369Smrg	fi
2610dc99b369Smrg	;;
2611dc99b369Smrg      esac
2612dc99b369Smrg      # Quote arguments (to preserve shell metacharacters).
2613dc99b369Smrg      func_append_quoted args "$file"
2614dc99b369Smrg    done
2615dc99b369Smrg
2616dc99b369Smrg    if test "X$opt_dry_run" = Xfalse; then
2617dc99b369Smrg      if test -n "$shlibpath_var"; then
2618dc99b369Smrg	# Export the shlibpath_var.
2619dc99b369Smrg	eval "export $shlibpath_var"
26205eefee25Smacallan      fi
2621dc99b369Smrg
2622dc99b369Smrg      # Restore saved environment variables
2623dc99b369Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2624dc99b369Smrg      do
2625dc99b369Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2626dc99b369Smrg                $lt_var=\$save_$lt_var; export $lt_var
2627dc99b369Smrg	      else
2628dc99b369Smrg		$lt_unset $lt_var
2629dc99b369Smrg	      fi"
2630dc99b369Smrg      done
2631dc99b369Smrg
2632dc99b369Smrg      # Now prepare to actually exec the command.
2633dc99b369Smrg      exec_cmd="\$cmd$args"
2634dc99b369Smrg    else
2635dc99b369Smrg      # Display what would be done.
2636dc99b369Smrg      if test -n "$shlibpath_var"; then
2637dc99b369Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
2638dc99b369Smrg	echo "export $shlibpath_var"
26395eefee25Smacallan      fi
2640dc99b369Smrg      $ECHO "$cmd$args"
2641dc99b369Smrg      exit $EXIT_SUCCESS
2642dc99b369Smrg    fi
2643dc99b369Smrg}
26445eefee25Smacallan
2645dc99b369Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
26465eefee25Smacallan
26475eefee25Smacallan
2648dc99b369Smrg# func_mode_finish arg...
2649dc99b369Smrgfunc_mode_finish ()
2650dc99b369Smrg{
2651dc99b369Smrg    $opt_debug
2652dc99b369Smrg    libs=
2653dc99b369Smrg    libdirs=
2654dc99b369Smrg    admincmds=
26555eefee25Smacallan
2656dc99b369Smrg    for opt in "$nonopt" ${1+"$@"}
2657dc99b369Smrg    do
2658dc99b369Smrg      if test -d "$opt"; then
2659dc99b369Smrg	func_append libdirs " $opt"
26605eefee25Smacallan
2661dc99b369Smrg      elif test -f "$opt"; then
2662dc99b369Smrg	if func_lalib_unsafe_p "$opt"; then
2663dc99b369Smrg	  func_append libs " $opt"
2664dc99b369Smrg	else
2665dc99b369Smrg	  func_warning "\`$opt' is not a valid libtool archive"
26665eefee25Smacallan	fi
26675eefee25Smacallan
2668dc99b369Smrg      else
2669dc99b369Smrg	func_fatal_error "invalid argument \`$opt'"
2670dc99b369Smrg      fi
2671dc99b369Smrg    done
26725eefee25Smacallan
2673dc99b369Smrg    if test -n "$libs"; then
2674dc99b369Smrg      if test -n "$lt_sysroot"; then
2675dc99b369Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2676dc99b369Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2677dc99b369Smrg      else
2678dc99b369Smrg        sysroot_cmd=
2679dc99b369Smrg      fi
26805eefee25Smacallan
2681dc99b369Smrg      # Remove sysroot references
2682dc99b369Smrg      if $opt_dry_run; then
2683dc99b369Smrg        for lib in $libs; do
2684dc99b369Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2685dc99b369Smrg        done
2686dc99b369Smrg      else
2687dc99b369Smrg        tmpdir=`func_mktempdir`
2688dc99b369Smrg        for lib in $libs; do
2689dc99b369Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2690dc99b369Smrg	    > $tmpdir/tmp-la
2691dc99b369Smrg	  mv -f $tmpdir/tmp-la $lib
26925eefee25Smacallan	done
2693dc99b369Smrg        ${RM}r "$tmpdir"
2694dc99b369Smrg      fi
2695dc99b369Smrg    fi
2696dc99b369Smrg
2697dc99b369Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2698dc99b369Smrg      for libdir in $libdirs; do
2699dc99b369Smrg	if test -n "$finish_cmds"; then
2700dc99b369Smrg	  # Do each command in the finish commands.
2701dc99b369Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2702dc99b369Smrg'"$cmd"'"'
27035eefee25Smacallan	fi
2704dc99b369Smrg	if test -n "$finish_eval"; then
2705dc99b369Smrg	  # Do the single finish_eval.
2706dc99b369Smrg	  eval cmds=\"$finish_eval\"
2707dc99b369Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2708dc99b369Smrg       $cmds"
2709dc99b369Smrg	fi
2710dc99b369Smrg      done
2711dc99b369Smrg    fi
27125eefee25Smacallan
2713dc99b369Smrg    # Exit here if they wanted silent mode.
2714dc99b369Smrg    $opt_silent && exit $EXIT_SUCCESS
27155eefee25Smacallan
2716dc99b369Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2717dc99b369Smrg      echo "----------------------------------------------------------------------"
2718dc99b369Smrg      echo "Libraries have been installed in:"
2719dc99b369Smrg      for libdir in $libdirs; do
2720dc99b369Smrg	$ECHO "   $libdir"
2721dc99b369Smrg      done
2722dc99b369Smrg      echo
2723dc99b369Smrg      echo "If you ever happen to want to link against installed libraries"
2724dc99b369Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
2725dc99b369Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2726dc99b369Smrg      echo "flag during linking and do at least one of the following:"
2727dc99b369Smrg      if test -n "$shlibpath_var"; then
2728dc99b369Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2729dc99b369Smrg	echo "     during execution"
2730dc99b369Smrg      fi
2731dc99b369Smrg      if test -n "$runpath_var"; then
2732dc99b369Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2733dc99b369Smrg	echo "     during linking"
2734dc99b369Smrg      fi
2735dc99b369Smrg      if test -n "$hardcode_libdir_flag_spec"; then
2736dc99b369Smrg	libdir=LIBDIR
2737dc99b369Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2738dc99b369Smrg
2739dc99b369Smrg	$ECHO "   - use the \`$flag' linker flag"
2740dc99b369Smrg      fi
2741dc99b369Smrg      if test -n "$admincmds"; then
2742dc99b369Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
2743dc99b369Smrg      fi
2744dc99b369Smrg      if test -f /etc/ld.so.conf; then
2745dc99b369Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2746dc99b369Smrg      fi
2747dc99b369Smrg      echo
2748dc99b369Smrg
2749dc99b369Smrg      echo "See any operating system documentation about shared libraries for"
2750dc99b369Smrg      case $host in
2751dc99b369Smrg	solaris2.[6789]|solaris2.1[0-9])
2752dc99b369Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2753dc99b369Smrg	  echo "pages."
2754dc99b369Smrg	  ;;
27555eefee25Smacallan	*)
2756dc99b369Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
27575eefee25Smacallan	  ;;
2758dc99b369Smrg      esac
2759dc99b369Smrg      echo "----------------------------------------------------------------------"
2760dc99b369Smrg    fi
2761dc99b369Smrg    exit $EXIT_SUCCESS
2762dc99b369Smrg}
27635eefee25Smacallan
2764dc99b369Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
27655eefee25Smacallan
2766dc99b369Smrg
2767dc99b369Smrg# func_mode_install arg...
2768dc99b369Smrgfunc_mode_install ()
2769dc99b369Smrg{
2770dc99b369Smrg    $opt_debug
2771dc99b369Smrg    # There may be an optional sh(1) argument at the beginning of
2772dc99b369Smrg    # install_prog (especially on Windows NT).
2773dc99b369Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2774dc99b369Smrg       # Allow the use of GNU shtool's install command.
2775dc99b369Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2776dc99b369Smrg      # Aesthetically quote it.
2777dc99b369Smrg      func_quote_for_eval "$nonopt"
2778dc99b369Smrg      install_prog="$func_quote_for_eval_result "
2779dc99b369Smrg      arg=$1
2780dc99b369Smrg      shift
2781dc99b369Smrg    else
2782dc99b369Smrg      install_prog=
2783dc99b369Smrg      arg=$nonopt
2784dc99b369Smrg    fi
2785dc99b369Smrg
2786dc99b369Smrg    # The real first argument should be the name of the installation program.
2787dc99b369Smrg    # Aesthetically quote it.
2788dc99b369Smrg    func_quote_for_eval "$arg"
2789dc99b369Smrg    func_append install_prog "$func_quote_for_eval_result"
2790dc99b369Smrg    install_shared_prog=$install_prog
2791dc99b369Smrg    case " $install_prog " in
2792dc99b369Smrg      *[\\\ /]cp\ *) install_cp=: ;;
2793dc99b369Smrg      *) install_cp=false ;;
2794dc99b369Smrg    esac
2795dc99b369Smrg
2796dc99b369Smrg    # We need to accept at least all the BSD install flags.
2797dc99b369Smrg    dest=
2798dc99b369Smrg    files=
2799dc99b369Smrg    opts=
2800dc99b369Smrg    prev=
2801dc99b369Smrg    install_type=
2802dc99b369Smrg    isdir=no
2803dc99b369Smrg    stripme=
2804dc99b369Smrg    no_mode=:
2805dc99b369Smrg    for arg
2806dc99b369Smrg    do
2807dc99b369Smrg      arg2=
2808dc99b369Smrg      if test -n "$dest"; then
2809dc99b369Smrg	func_append files " $dest"
2810dc99b369Smrg	dest=$arg
2811dc99b369Smrg	continue
2812dc99b369Smrg      fi
2813dc99b369Smrg
2814dc99b369Smrg      case $arg in
2815dc99b369Smrg      -d) isdir=yes ;;
2816dc99b369Smrg      -f)
2817dc99b369Smrg	if $install_cp; then :; else
2818dc99b369Smrg	  prev=$arg
2819dc99b369Smrg	fi
2820dc99b369Smrg	;;
2821dc99b369Smrg      -g | -m | -o)
2822dc99b369Smrg	prev=$arg
2823dc99b369Smrg	;;
2824dc99b369Smrg      -s)
2825dc99b369Smrg	stripme=" -s"
2826dc99b369Smrg	continue
2827dc99b369Smrg	;;
2828dc99b369Smrg      -*)
2829dc99b369Smrg	;;
2830dc99b369Smrg      *)
2831dc99b369Smrg	# If the previous option needed an argument, then skip it.
2832dc99b369Smrg	if test -n "$prev"; then
2833dc99b369Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2834dc99b369Smrg	    arg2=$install_override_mode
2835dc99b369Smrg	    no_mode=false
28365eefee25Smacallan	  fi
2837dc99b369Smrg	  prev=
2838dc99b369Smrg	else
2839dc99b369Smrg	  dest=$arg
28405eefee25Smacallan	  continue
28415eefee25Smacallan	fi
2842dc99b369Smrg	;;
2843dc99b369Smrg      esac
28445eefee25Smacallan
2845dc99b369Smrg      # Aesthetically quote the argument.
2846dc99b369Smrg      func_quote_for_eval "$arg"
2847dc99b369Smrg      func_append install_prog " $func_quote_for_eval_result"
2848dc99b369Smrg      if test -n "$arg2"; then
2849dc99b369Smrg	func_quote_for_eval "$arg2"
2850dc99b369Smrg      fi
2851dc99b369Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
2852dc99b369Smrg    done
28535eefee25Smacallan
2854dc99b369Smrg    test -z "$install_prog" && \
2855dc99b369Smrg      func_fatal_help "you must specify an install program"
28565eefee25Smacallan
2857dc99b369Smrg    test -n "$prev" && \
2858dc99b369Smrg      func_fatal_help "the \`$prev' option requires an argument"
28595eefee25Smacallan
2860dc99b369Smrg    if test -n "$install_override_mode" && $no_mode; then
2861dc99b369Smrg      if $install_cp; then :; else
2862dc99b369Smrg	func_quote_for_eval "$install_override_mode"
2863dc99b369Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
2864dc99b369Smrg      fi
2865dc99b369Smrg    fi
28665eefee25Smacallan
2867dc99b369Smrg    if test -z "$files"; then
2868dc99b369Smrg      if test -z "$dest"; then
2869dc99b369Smrg	func_fatal_help "no file or destination specified"
2870dc99b369Smrg      else
2871dc99b369Smrg	func_fatal_help "you must specify a destination"
2872dc99b369Smrg      fi
2873dc99b369Smrg    fi
28745eefee25Smacallan
2875dc99b369Smrg    # Strip any trailing slash from the destination.
2876dc99b369Smrg    func_stripname '' '/' "$dest"
2877dc99b369Smrg    dest=$func_stripname_result
28785eefee25Smacallan
2879dc99b369Smrg    # Check to see that the destination is a directory.
2880dc99b369Smrg    test -d "$dest" && isdir=yes
2881dc99b369Smrg    if test "$isdir" = yes; then
2882dc99b369Smrg      destdir="$dest"
2883dc99b369Smrg      destname=
2884dc99b369Smrg    else
2885dc99b369Smrg      func_dirname_and_basename "$dest" "" "."
2886dc99b369Smrg      destdir="$func_dirname_result"
2887dc99b369Smrg      destname="$func_basename_result"
28885eefee25Smacallan
2889dc99b369Smrg      # Not a directory, so check to see that there is only one file specified.
2890dc99b369Smrg      set dummy $files; shift
2891dc99b369Smrg      test "$#" -gt 1 && \
2892dc99b369Smrg	func_fatal_help "\`$dest' is not a directory"
2893dc99b369Smrg    fi
2894dc99b369Smrg    case $destdir in
2895dc99b369Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2896dc99b369Smrg    *)
2897dc99b369Smrg      for file in $files; do
2898dc99b369Smrg	case $file in
2899dc99b369Smrg	*.lo) ;;
2900dc99b369Smrg	*)
2901dc99b369Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2902dc99b369Smrg	  ;;
2903dc99b369Smrg	esac
2904dc99b369Smrg      done
2905dc99b369Smrg      ;;
2906dc99b369Smrg    esac
29075eefee25Smacallan
2908dc99b369Smrg    # This variable tells wrapper scripts just to set variables rather
2909dc99b369Smrg    # than running their programs.
2910dc99b369Smrg    libtool_install_magic="$magic"
29115eefee25Smacallan
2912dc99b369Smrg    staticlibs=
2913dc99b369Smrg    future_libdirs=
2914dc99b369Smrg    current_libdirs=
2915dc99b369Smrg    for file in $files; do
29165eefee25Smacallan
2917dc99b369Smrg      # Do each installation.
2918dc99b369Smrg      case $file in
2919dc99b369Smrg      *.$libext)
2920dc99b369Smrg	# Do the static libraries later.
2921dc99b369Smrg	func_append staticlibs " $file"
2922dc99b369Smrg	;;
29235eefee25Smacallan
2924dc99b369Smrg      *.la)
2925dc99b369Smrg	func_resolve_sysroot "$file"
2926dc99b369Smrg	file=$func_resolve_sysroot_result
29275eefee25Smacallan
2928dc99b369Smrg	# Check to see that this really is a libtool archive.
2929dc99b369Smrg	func_lalib_unsafe_p "$file" \
2930dc99b369Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
29315eefee25Smacallan
2932dc99b369Smrg	library_names=
2933dc99b369Smrg	old_library=
2934dc99b369Smrg	relink_command=
2935dc99b369Smrg	func_source "$file"
29365eefee25Smacallan
2937dc99b369Smrg	# Add the libdir to current_libdirs if it is the destination.
2938dc99b369Smrg	if test "X$destdir" = "X$libdir"; then
2939dc99b369Smrg	  case "$current_libdirs " in
2940dc99b369Smrg	  *" $libdir "*) ;;
2941dc99b369Smrg	  *) func_append current_libdirs " $libdir" ;;
2942dc99b369Smrg	  esac
2943dc99b369Smrg	else
2944dc99b369Smrg	  # Note the libdir as a future libdir.
2945dc99b369Smrg	  case "$future_libdirs " in
2946dc99b369Smrg	  *" $libdir "*) ;;
2947dc99b369Smrg	  *) func_append future_libdirs " $libdir" ;;
2948dc99b369Smrg	  esac
2949dc99b369Smrg	fi
29505eefee25Smacallan
2951dc99b369Smrg	func_dirname "$file" "/" ""
2952dc99b369Smrg	dir="$func_dirname_result"
2953dc99b369Smrg	func_append dir "$objdir"
29545eefee25Smacallan
2955dc99b369Smrg	if test -n "$relink_command"; then
2956dc99b369Smrg	  # Determine the prefix the user has applied to our future dir.
2957dc99b369Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
29585eefee25Smacallan
2959dc99b369Smrg	  # Don't allow the user to place us outside of our expected
2960dc99b369Smrg	  # location b/c this prevents finding dependent libraries that
2961dc99b369Smrg	  # are installed to the same prefix.
2962dc99b369Smrg	  # At present, this check doesn't affect windows .dll's that
2963dc99b369Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2964dc99b369Smrg	  # but it's something to keep an eye on.
2965dc99b369Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2966dc99b369Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2967dc99b369Smrg
2968dc99b369Smrg	  if test -n "$inst_prefix_dir"; then
2969dc99b369Smrg	    # Stick the inst_prefix_dir data into the link command.
2970dc99b369Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
29715eefee25Smacallan	  else
2972dc99b369Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
29735eefee25Smacallan	  fi
29745eefee25Smacallan
2975dc99b369Smrg	  func_warning "relinking \`$file'"
2976dc99b369Smrg	  func_show_eval "$relink_command" \
2977dc99b369Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2978dc99b369Smrg	fi
2979dc99b369Smrg
2980dc99b369Smrg	# See the names of the shared library.
2981dc99b369Smrg	set dummy $library_names; shift
2982dc99b369Smrg	if test -n "$1"; then
2983dc99b369Smrg	  realname="$1"
2984dc99b369Smrg	  shift
2985dc99b369Smrg
2986dc99b369Smrg	  srcname="$realname"
2987dc99b369Smrg	  test -n "$relink_command" && srcname="$realname"T
2988dc99b369Smrg
2989dc99b369Smrg	  # Install the shared library and build the symlinks.
2990dc99b369Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2991dc99b369Smrg	      'exit $?'
2992dc99b369Smrg	  tstripme="$stripme"
2993dc99b369Smrg	  case $host_os in
2994dc99b369Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2995dc99b369Smrg	    case $realname in
2996dc99b369Smrg	    *.dll.a)
2997dc99b369Smrg	      tstripme=""
2998dc99b369Smrg	      ;;
2999dc99b369Smrg	    esac
3000dc99b369Smrg	    ;;
3001dc99b369Smrg	  esac
3002dc99b369Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3003dc99b369Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
30045eefee25Smacallan	  fi
30055eefee25Smacallan
3006dc99b369Smrg	  if test "$#" -gt 0; then
3007dc99b369Smrg	    # Delete the old symlinks, and create new ones.
3008dc99b369Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3009dc99b369Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3010dc99b369Smrg	    # so we also need to try rm && ln -s.
3011dc99b369Smrg	    for linkname
3012dc99b369Smrg	    do
3013dc99b369Smrg	      test "$linkname" != "$realname" \
3014dc99b369Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
30155eefee25Smacallan	    done
30165eefee25Smacallan	  fi
30175eefee25Smacallan
3018dc99b369Smrg	  # Do each command in the postinstall commands.
3019dc99b369Smrg	  lib="$destdir/$realname"
3020dc99b369Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3021dc99b369Smrg	fi
30225eefee25Smacallan
3023dc99b369Smrg	# Install the pseudo-library for information purposes.
3024dc99b369Smrg	func_basename "$file"
3025dc99b369Smrg	name="$func_basename_result"
3026dc99b369Smrg	instname="$dir/$name"i
3027dc99b369Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
30285eefee25Smacallan
3029dc99b369Smrg	# Maybe install the static library, too.
3030dc99b369Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3031dc99b369Smrg	;;
3032dc99b369Smrg
3033dc99b369Smrg      *.lo)
3034dc99b369Smrg	# Install (i.e. copy) a libtool object.
3035dc99b369Smrg
3036dc99b369Smrg	# Figure out destination file name, if it wasn't already specified.
3037dc99b369Smrg	if test -n "$destname"; then
3038dc99b369Smrg	  destfile="$destdir/$destname"
30395eefee25Smacallan	else
3040dc99b369Smrg	  func_basename "$file"
3041dc99b369Smrg	  destfile="$func_basename_result"
3042dc99b369Smrg	  destfile="$destdir/$destfile"
30435eefee25Smacallan	fi
3044dc99b369Smrg
3045dc99b369Smrg	# Deduce the name of the destination old-style object file.
3046dc99b369Smrg	case $destfile in
3047dc99b369Smrg	*.lo)
3048dc99b369Smrg	  func_lo2o "$destfile"
3049dc99b369Smrg	  staticdest=$func_lo2o_result
3050dc99b369Smrg	  ;;
3051dc99b369Smrg	*.$objext)
3052dc99b369Smrg	  staticdest="$destfile"
3053dc99b369Smrg	  destfile=
3054dc99b369Smrg	  ;;
3055dc99b369Smrg	*)
3056dc99b369Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
30575eefee25Smacallan	  ;;
30585eefee25Smacallan	esac
30595eefee25Smacallan
3060dc99b369Smrg	# Install the libtool object if requested.
3061dc99b369Smrg	test -n "$destfile" && \
3062dc99b369Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
30635eefee25Smacallan
3064dc99b369Smrg	# Install the old object if enabled.
3065dc99b369Smrg	if test "$build_old_libs" = yes; then
3066dc99b369Smrg	  # Deduce the name of the old-style object file.
3067dc99b369Smrg	  func_lo2o "$file"
3068dc99b369Smrg	  staticobj=$func_lo2o_result
3069dc99b369Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3070dc99b369Smrg	fi
3071dc99b369Smrg	exit $EXIT_SUCCESS
3072dc99b369Smrg	;;
30735eefee25Smacallan
3074dc99b369Smrg      *)
3075dc99b369Smrg	# Figure out destination file name, if it wasn't already specified.
3076dc99b369Smrg	if test -n "$destname"; then
3077dc99b369Smrg	  destfile="$destdir/$destname"
3078dc99b369Smrg	else
3079dc99b369Smrg	  func_basename "$file"
3080dc99b369Smrg	  destfile="$func_basename_result"
3081dc99b369Smrg	  destfile="$destdir/$destfile"
3082dc99b369Smrg	fi
30835eefee25Smacallan
3084dc99b369Smrg	# If the file is missing, and there is a .exe on the end, strip it
3085dc99b369Smrg	# because it is most likely a libtool script we actually want to
3086dc99b369Smrg	# install
3087dc99b369Smrg	stripped_ext=""
3088dc99b369Smrg	case $file in
3089dc99b369Smrg	  *.exe)
3090dc99b369Smrg	    if test ! -f "$file"; then
3091dc99b369Smrg	      func_stripname '' '.exe' "$file"
3092dc99b369Smrg	      file=$func_stripname_result
3093dc99b369Smrg	      stripped_ext=".exe"
3094dc99b369Smrg	    fi
3095dc99b369Smrg	    ;;
3096dc99b369Smrg	esac
30975eefee25Smacallan
3098dc99b369Smrg	# Do a test to see if this is really a libtool program.
3099dc99b369Smrg	case $host in
3100dc99b369Smrg	*cygwin* | *mingw*)
3101dc99b369Smrg	    if func_ltwrapper_executable_p "$file"; then
3102dc99b369Smrg	      func_ltwrapper_scriptname "$file"
3103dc99b369Smrg	      wrapper=$func_ltwrapper_scriptname_result
3104dc99b369Smrg	    else
3105dc99b369Smrg	      func_stripname '' '.exe' "$file"
3106dc99b369Smrg	      wrapper=$func_stripname_result
3107dc99b369Smrg	    fi
3108dc99b369Smrg	    ;;
3109dc99b369Smrg	*)
3110dc99b369Smrg	    wrapper=$file
3111dc99b369Smrg	    ;;
3112dc99b369Smrg	esac
3113dc99b369Smrg	if func_ltwrapper_script_p "$wrapper"; then
3114dc99b369Smrg	  notinst_deplibs=
3115dc99b369Smrg	  relink_command=
31165eefee25Smacallan
3117dc99b369Smrg	  func_source "$wrapper"
31185eefee25Smacallan
3119dc99b369Smrg	  # Check the variables that should have been set.
3120dc99b369Smrg	  test -z "$generated_by_libtool_version" && \
3121dc99b369Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
31225eefee25Smacallan
3123dc99b369Smrg	  finalize=yes
3124dc99b369Smrg	  for lib in $notinst_deplibs; do
3125dc99b369Smrg	    # Check to see that each library is installed.
3126dc99b369Smrg	    libdir=
3127dc99b369Smrg	    if test -f "$lib"; then
3128dc99b369Smrg	      func_source "$lib"
3129dc99b369Smrg	    fi
3130dc99b369Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3131dc99b369Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3132dc99b369Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3133dc99b369Smrg	      finalize=no
3134dc99b369Smrg	    fi
3135dc99b369Smrg	  done
31365eefee25Smacallan
3137dc99b369Smrg	  relink_command=
3138dc99b369Smrg	  func_source "$wrapper"
3139dc99b369Smrg
3140dc99b369Smrg	  outputname=
3141dc99b369Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3142dc99b369Smrg	    $opt_dry_run || {
3143dc99b369Smrg	      if test "$finalize" = yes; then
3144dc99b369Smrg	        tmpdir=`func_mktempdir`
3145dc99b369Smrg		func_basename "$file$stripped_ext"
3146dc99b369Smrg		file="$func_basename_result"
3147dc99b369Smrg	        outputname="$tmpdir/$file"
3148dc99b369Smrg	        # Replace the output file specification.
3149dc99b369Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3150dc99b369Smrg
3151dc99b369Smrg	        $opt_silent || {
3152dc99b369Smrg	          func_quote_for_expand "$relink_command"
3153dc99b369Smrg		  eval "func_echo $func_quote_for_expand_result"
3154dc99b369Smrg	        }
3155dc99b369Smrg	        if eval "$relink_command"; then :
3156dc99b369Smrg	          else
3157dc99b369Smrg		  func_error "error: relink \`$file' with the above command before installing it"
3158dc99b369Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3159dc99b369Smrg		  continue
3160dc99b369Smrg	        fi
3161dc99b369Smrg	        file="$outputname"
3162dc99b369Smrg	      else
3163dc99b369Smrg	        func_warning "cannot relink \`$file'"
3164dc99b369Smrg	      fi
3165dc99b369Smrg	    }
3166dc99b369Smrg	  else
3167dc99b369Smrg	    # Install the binary that we compiled earlier.
3168dc99b369Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3169dc99b369Smrg	  fi
31705eefee25Smacallan	fi
3171dc99b369Smrg
3172dc99b369Smrg	# remove .exe since cygwin /usr/bin/install will append another
3173dc99b369Smrg	# one anyway
3174dc99b369Smrg	case $install_prog,$host in
3175dc99b369Smrg	*/usr/bin/install*,*cygwin*)
3176dc99b369Smrg	  case $file:$destfile in
3177dc99b369Smrg	  *.exe:*.exe)
3178dc99b369Smrg	    # this is ok
3179dc99b369Smrg	    ;;
3180dc99b369Smrg	  *.exe:*)
3181dc99b369Smrg	    destfile=$destfile.exe
3182dc99b369Smrg	    ;;
3183dc99b369Smrg	  *:*.exe)
3184dc99b369Smrg	    func_stripname '' '.exe' "$destfile"
3185dc99b369Smrg	    destfile=$func_stripname_result
3186dc99b369Smrg	    ;;
3187dc99b369Smrg	  esac
3188dc99b369Smrg	  ;;
3189dc99b369Smrg	esac
3190dc99b369Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3191dc99b369Smrg	$opt_dry_run || if test -n "$outputname"; then
3192dc99b369Smrg	  ${RM}r "$tmpdir"
31935eefee25Smacallan	fi
31945eefee25Smacallan	;;
31955eefee25Smacallan      esac
3196dc99b369Smrg    done
31975eefee25Smacallan
3198dc99b369Smrg    for file in $staticlibs; do
3199dc99b369Smrg      func_basename "$file"
3200dc99b369Smrg      name="$func_basename_result"
32015eefee25Smacallan
3202dc99b369Smrg      # Set up the ranlib parameters.
3203dc99b369Smrg      oldlib="$destdir/$name"
32045eefee25Smacallan
3205dc99b369Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3206dc99b369Smrg
3207dc99b369Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
3208dc99b369Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
32095eefee25Smacallan      fi
32105eefee25Smacallan
3211dc99b369Smrg      # Do each command in the postinstall commands.
3212dc99b369Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3213dc99b369Smrg    done
32145eefee25Smacallan
3215dc99b369Smrg    test -n "$future_libdirs" && \
3216dc99b369Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
32175eefee25Smacallan
3218dc99b369Smrg    if test -n "$current_libdirs"; then
3219dc99b369Smrg      # Maybe just do a dry run.
3220dc99b369Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3221dc99b369Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3222dc99b369Smrg    else
3223dc99b369Smrg      exit $EXIT_SUCCESS
3224dc99b369Smrg    fi
3225dc99b369Smrg}
32265eefee25Smacallan
3227dc99b369Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
32285eefee25Smacallan
32295eefee25Smacallan
3230dc99b369Smrg# func_generate_dlsyms outputname originator pic_p
3231dc99b369Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3232dc99b369Smrg# a dlpreopen symbol table.
3233dc99b369Smrgfunc_generate_dlsyms ()
3234dc99b369Smrg{
3235dc99b369Smrg    $opt_debug
3236dc99b369Smrg    my_outputname="$1"
3237dc99b369Smrg    my_originator="$2"
3238dc99b369Smrg    my_pic_p="${3-no}"
3239dc99b369Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3240dc99b369Smrg    my_dlsyms=
3241dc99b369Smrg
3242dc99b369Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3243dc99b369Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3244dc99b369Smrg	my_dlsyms="${my_outputname}S.c"
3245dc99b369Smrg      else
3246dc99b369Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3247dc99b369Smrg      fi
3248dc99b369Smrg    fi
32495eefee25Smacallan
3250dc99b369Smrg    if test -n "$my_dlsyms"; then
3251dc99b369Smrg      case $my_dlsyms in
3252dc99b369Smrg      "") ;;
3253dc99b369Smrg      *.c)
3254dc99b369Smrg	# Discover the nlist of each of the dlfiles.
3255dc99b369Smrg	nlist="$output_objdir/${my_outputname}.nm"
32565eefee25Smacallan
3257dc99b369Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
32585eefee25Smacallan
3259dc99b369Smrg	# Parse the name list into a source file.
3260dc99b369Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
32615eefee25Smacallan
3262dc99b369Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3263dc99b369Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3264dc99b369Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
32655eefee25Smacallan
3266dc99b369Smrg#ifdef __cplusplus
3267dc99b369Smrgextern \"C\" {
3268dc99b369Smrg#endif
32695eefee25Smacallan
3270dc99b369Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3271dc99b369Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3272dc99b369Smrg#endif
32735eefee25Smacallan
3274dc99b369Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
3275dc99b369Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
3276dc99b369Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
3277dc99b369Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3278dc99b369Smrg# define LT_DLSYM_CONST
3279dc99b369Smrg#elif defined(__osf__)
3280dc99b369Smrg/* This system does not cope well with relocations in const data.  */
3281dc99b369Smrg# define LT_DLSYM_CONST
3282dc99b369Smrg#else
3283dc99b369Smrg# define LT_DLSYM_CONST const
3284dc99b369Smrg#endif
32855eefee25Smacallan
3286dc99b369Smrg/* External symbol declarations for the compiler. */\
3287dc99b369Smrg"
32885eefee25Smacallan
3289dc99b369Smrg	if test "$dlself" = yes; then
3290dc99b369Smrg	  func_verbose "generating symbol list for \`$output'"
32915eefee25Smacallan
3292dc99b369Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
32935eefee25Smacallan
3294dc99b369Smrg	  # Add our own program objects to the symbol list.
3295dc99b369Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3296dc99b369Smrg	  for progfile in $progfiles; do
3297dc99b369Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
3298dc99b369Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3299dc99b369Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
33005eefee25Smacallan	  done
33015eefee25Smacallan
3302dc99b369Smrg	  if test -n "$exclude_expsyms"; then
3303dc99b369Smrg	    $opt_dry_run || {
3304dc99b369Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3305dc99b369Smrg	      eval '$MV "$nlist"T "$nlist"'
3306dc99b369Smrg	    }
3307dc99b369Smrg	  fi
33085eefee25Smacallan
3309dc99b369Smrg	  if test -n "$export_symbols_regex"; then
3310dc99b369Smrg	    $opt_dry_run || {
3311dc99b369Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3312dc99b369Smrg	      eval '$MV "$nlist"T "$nlist"'
3313dc99b369Smrg	    }
3314dc99b369Smrg	  fi
33155eefee25Smacallan
3316dc99b369Smrg	  # Prepare the list of exported symbols
3317dc99b369Smrg	  if test -z "$export_symbols"; then
3318dc99b369Smrg	    export_symbols="$output_objdir/$outputname.exp"
3319dc99b369Smrg	    $opt_dry_run || {
3320dc99b369Smrg	      $RM $export_symbols
3321dc99b369Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3322dc99b369Smrg	      case $host in
3323dc99b369Smrg	      *cygwin* | *mingw* | *cegcc* )
3324dc99b369Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3325dc99b369Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3326dc99b369Smrg	        ;;
3327dc99b369Smrg	      esac
3328dc99b369Smrg	    }
3329dc99b369Smrg	  else
3330dc99b369Smrg	    $opt_dry_run || {
3331dc99b369Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3332dc99b369Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3333dc99b369Smrg	      eval '$MV "$nlist"T "$nlist"'
3334dc99b369Smrg	      case $host in
3335dc99b369Smrg	        *cygwin* | *mingw* | *cegcc* )
3336dc99b369Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3337dc99b369Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3338dc99b369Smrg	          ;;
3339dc99b369Smrg	      esac
3340dc99b369Smrg	    }
3341dc99b369Smrg	  fi
3342dc99b369Smrg	fi
33435eefee25Smacallan
3344dc99b369Smrg	for dlprefile in $dlprefiles; do
3345dc99b369Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3346dc99b369Smrg	  func_basename "$dlprefile"
3347dc99b369Smrg	  name="$func_basename_result"
3348dc99b369Smrg          case $host in
3349dc99b369Smrg	    *cygwin* | *mingw* | *cegcc* )
3350dc99b369Smrg	      # if an import library, we need to obtain dlname
3351dc99b369Smrg	      if func_win32_import_lib_p "$dlprefile"; then
3352dc99b369Smrg	        func_tr_sh "$dlprefile"
3353dc99b369Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
3354dc99b369Smrg	        dlprefile_dlbasename=""
3355dc99b369Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3356dc99b369Smrg	          # Use subshell, to avoid clobbering current variable values
3357dc99b369Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
3358dc99b369Smrg	          if test -n "$dlprefile_dlname" ; then
3359dc99b369Smrg	            func_basename "$dlprefile_dlname"
3360dc99b369Smrg	            dlprefile_dlbasename="$func_basename_result"
3361dc99b369Smrg	          else
3362dc99b369Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
3363dc99b369Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
3364dc99b369Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3365dc99b369Smrg	          fi
3366dc99b369Smrg	        fi
3367dc99b369Smrg	        $opt_dry_run || {
3368dc99b369Smrg	          if test -n "$dlprefile_dlbasename" ; then
3369dc99b369Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3370dc99b369Smrg	          else
3371dc99b369Smrg	            func_warning "Could not compute DLL name from $name"
3372dc99b369Smrg	            eval '$ECHO ": $name " >> "$nlist"'
3373dc99b369Smrg	          fi
3374dc99b369Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3375dc99b369Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3376dc99b369Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3377dc99b369Smrg	        }
3378dc99b369Smrg	      else # not an import lib
3379dc99b369Smrg	        $opt_dry_run || {
3380dc99b369Smrg	          eval '$ECHO ": $name " >> "$nlist"'
3381dc99b369Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3382dc99b369Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3383dc99b369Smrg	        }
3384dc99b369Smrg	      fi
3385dc99b369Smrg	    ;;
3386dc99b369Smrg	    *)
3387dc99b369Smrg	      $opt_dry_run || {
3388dc99b369Smrg	        eval '$ECHO ": $name " >> "$nlist"'
3389dc99b369Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3390dc99b369Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3391dc99b369Smrg	      }
3392dc99b369Smrg	    ;;
3393dc99b369Smrg          esac
3394dc99b369Smrg	done
33955eefee25Smacallan
3396dc99b369Smrg	$opt_dry_run || {
3397dc99b369Smrg	  # Make sure we have at least an empty file.
3398dc99b369Smrg	  test -f "$nlist" || : > "$nlist"
33995eefee25Smacallan
3400dc99b369Smrg	  if test -n "$exclude_expsyms"; then
3401dc99b369Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3402dc99b369Smrg	    $MV "$nlist"T "$nlist"
3403dc99b369Smrg	  fi
34045eefee25Smacallan
3405dc99b369Smrg	  # Try sorting and uniquifying the output.
3406dc99b369Smrg	  if $GREP -v "^: " < "$nlist" |
3407dc99b369Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3408dc99b369Smrg		sort -k 3
3409dc99b369Smrg	      else
3410dc99b369Smrg		sort +2
3411dc99b369Smrg	      fi |
3412dc99b369Smrg	      uniq > "$nlist"S; then
3413dc99b369Smrg	    :
3414dc99b369Smrg	  else
3415dc99b369Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3416dc99b369Smrg	  fi
34175eefee25Smacallan
3418dc99b369Smrg	  if test -f "$nlist"S; then
3419dc99b369Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3420dc99b369Smrg	  else
3421dc99b369Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3422dc99b369Smrg	  fi
34235eefee25Smacallan
3424dc99b369Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3425dc99b369Smrg
3426dc99b369Smrg/* The mapping between symbol names and symbols.  */
3427dc99b369Smrgtypedef struct {
3428dc99b369Smrg  const char *name;
3429dc99b369Smrg  void *address;
3430dc99b369Smrg} lt_dlsymlist;
3431dc99b369Smrgextern LT_DLSYM_CONST lt_dlsymlist
3432dc99b369Smrglt_${my_prefix}_LTX_preloaded_symbols[];
3433dc99b369SmrgLT_DLSYM_CONST lt_dlsymlist
3434dc99b369Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
3435dc99b369Smrg{\
3436dc99b369Smrg  { \"$my_originator\", (void *) 0 },"
3437dc99b369Smrg
3438dc99b369Smrg	  case $need_lib_prefix in
3439dc99b369Smrg	  no)
3440dc99b369Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
34415eefee25Smacallan	    ;;
34425eefee25Smacallan	  *)
3443dc99b369Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
34445eefee25Smacallan	    ;;
34455eefee25Smacallan	  esac
3446dc99b369Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3447dc99b369Smrg  {0, (void *) 0}
3448dc99b369Smrg};
34495eefee25Smacallan
3450dc99b369Smrg/* This works around a problem in FreeBSD linker */
3451dc99b369Smrg#ifdef FREEBSD_WORKAROUND
3452dc99b369Smrgstatic const void *lt_preloaded_setup() {
3453dc99b369Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3454dc99b369Smrg}
3455dc99b369Smrg#endif
34565eefee25Smacallan
3457dc99b369Smrg#ifdef __cplusplus
3458dc99b369Smrg}
3459dc99b369Smrg#endif\
3460dc99b369Smrg"
3461dc99b369Smrg	} # !$opt_dry_run
34625eefee25Smacallan
3463dc99b369Smrg	pic_flag_for_symtable=
3464dc99b369Smrg	case "$compile_command " in
3465dc99b369Smrg	*" -static "*) ;;
3466dc99b369Smrg	*)
3467dc99b369Smrg	  case $host in
3468dc99b369Smrg	  # compiling the symbol table file with pic_flag works around
3469dc99b369Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3470dc99b369Smrg	  # linked before any other PIC object.  But we must not use
3471dc99b369Smrg	  # pic_flag when linking with -static.  The problem exists in
3472dc99b369Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3473dc99b369Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3474dc99b369Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3475dc99b369Smrg	  *-*-hpux*)
3476dc99b369Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3477dc99b369Smrg	  *)
3478dc99b369Smrg	    if test "X$my_pic_p" != Xno; then
3479dc99b369Smrg	      pic_flag_for_symtable=" $pic_flag"
3480dc99b369Smrg	    fi
3481dc99b369Smrg	    ;;
3482dc99b369Smrg	  esac
3483dc99b369Smrg	  ;;
3484dc99b369Smrg	esac
3485dc99b369Smrg	symtab_cflags=
3486dc99b369Smrg	for arg in $LTCFLAGS; do
3487dc99b369Smrg	  case $arg in
3488dc99b369Smrg	  -pie | -fpie | -fPIE) ;;
3489dc99b369Smrg	  *) func_append symtab_cflags " $arg" ;;
34905eefee25Smacallan	  esac
34915eefee25Smacallan	done
34925eefee25Smacallan
3493dc99b369Smrg	# Now compile the dynamic symbol file.
3494dc99b369Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
34955eefee25Smacallan
3496dc99b369Smrg	# Clean up the generated files.
3497dc99b369Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
34985eefee25Smacallan
3499dc99b369Smrg	# Transform the symbol file into the correct name.
3500dc99b369Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3501dc99b369Smrg	case $host in
3502dc99b369Smrg	*cygwin* | *mingw* | *cegcc* )
3503dc99b369Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
3504dc99b369Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3505dc99b369Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3506dc99b369Smrg	  else
3507dc99b369Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3508dc99b369Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3509dc99b369Smrg	  fi
3510dc99b369Smrg	  ;;
3511dc99b369Smrg	*)
3512dc99b369Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3513dc99b369Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3514dc99b369Smrg	  ;;
3515dc99b369Smrg	esac
3516dc99b369Smrg	;;
3517dc99b369Smrg      *)
3518dc99b369Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3519dc99b369Smrg	;;
3520dc99b369Smrg      esac
3521dc99b369Smrg    else
3522dc99b369Smrg      # We keep going just in case the user didn't refer to
3523dc99b369Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3524dc99b369Smrg      # really was required.
35255eefee25Smacallan
3526dc99b369Smrg      # Nullify the symbol file.
3527dc99b369Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3528dc99b369Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3529dc99b369Smrg    fi
3530dc99b369Smrg}
35315eefee25Smacallan
3532dc99b369Smrg# func_win32_libid arg
3533dc99b369Smrg# return the library type of file 'arg'
3534dc99b369Smrg#
3535dc99b369Smrg# Need a lot of goo to handle *both* DLLs and import libs
3536dc99b369Smrg# Has to be a shell function in order to 'eat' the argument
3537dc99b369Smrg# that is supplied when $file_magic_command is called.
3538dc99b369Smrg# Despite the name, also deal with 64 bit binaries.
3539dc99b369Smrgfunc_win32_libid ()
3540dc99b369Smrg{
3541dc99b369Smrg  $opt_debug
3542dc99b369Smrg  win32_libid_type="unknown"
3543dc99b369Smrg  win32_fileres=`file -L $1 2>/dev/null`
3544dc99b369Smrg  case $win32_fileres in
3545dc99b369Smrg  *ar\ archive\ import\ library*) # definitely import
3546dc99b369Smrg    win32_libid_type="x86 archive import"
3547dc99b369Smrg    ;;
3548dc99b369Smrg  *ar\ archive*) # could be an import, or static
3549dc99b369Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3550dc99b369Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3551dc99b369Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
3552dc99b369Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
3553dc99b369Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3554dc99b369Smrg	$SED -n -e '
3555dc99b369Smrg	    1,100{
3556dc99b369Smrg		/ I /{
3557dc99b369Smrg		    s,.*,import,
3558dc99b369Smrg		    p
3559dc99b369Smrg		    q
3560dc99b369Smrg		}
3561dc99b369Smrg	    }'`
3562dc99b369Smrg      case $win32_nmres in
3563dc99b369Smrg      import*)  win32_libid_type="x86 archive import";;
3564dc99b369Smrg      *)        win32_libid_type="x86 archive static";;
3565dc99b369Smrg      esac
3566dc99b369Smrg    fi
3567dc99b369Smrg    ;;
3568dc99b369Smrg  *DLL*)
3569dc99b369Smrg    win32_libid_type="x86 DLL"
3570dc99b369Smrg    ;;
3571dc99b369Smrg  *executable*) # but shell scripts are "executable" too...
3572dc99b369Smrg    case $win32_fileres in
3573dc99b369Smrg    *MS\ Windows\ PE\ Intel*)
3574dc99b369Smrg      win32_libid_type="x86 DLL"
3575dc99b369Smrg      ;;
3576dc99b369Smrg    esac
3577dc99b369Smrg    ;;
3578dc99b369Smrg  esac
3579dc99b369Smrg  $ECHO "$win32_libid_type"
3580dc99b369Smrg}
3581dc99b369Smrg
3582dc99b369Smrg# func_cygming_dll_for_implib ARG
3583dc99b369Smrg#
3584dc99b369Smrg# Platform-specific function to extract the
3585dc99b369Smrg# name of the DLL associated with the specified
3586dc99b369Smrg# import library ARG.
3587dc99b369Smrg# Invoked by eval'ing the libtool variable
3588dc99b369Smrg#    $sharedlib_from_linklib_cmd
3589dc99b369Smrg# Result is available in the variable
3590dc99b369Smrg#    $sharedlib_from_linklib_result
3591dc99b369Smrgfunc_cygming_dll_for_implib ()
3592dc99b369Smrg{
3593dc99b369Smrg  $opt_debug
3594dc99b369Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3595dc99b369Smrg}
3596dc99b369Smrg
3597dc99b369Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3598dc99b369Smrg#
3599dc99b369Smrg# The is the core of a fallback implementation of a
3600dc99b369Smrg# platform-specific function to extract the name of the
3601dc99b369Smrg# DLL associated with the specified import library LIBNAME.
3602dc99b369Smrg#
3603dc99b369Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
3604dc99b369Smrg# on the platform and compiler that created the implib.
3605dc99b369Smrg#
3606dc99b369Smrg# Echos the name of the DLL associated with the
3607dc99b369Smrg# specified import library.
3608dc99b369Smrgfunc_cygming_dll_for_implib_fallback_core ()
3609dc99b369Smrg{
3610dc99b369Smrg  $opt_debug
3611dc99b369Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3612dc99b369Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3613dc99b369Smrg    $SED '/^Contents of section '"$match_literal"':/{
3614dc99b369Smrg      # Place marker at beginning of archive member dllname section
3615dc99b369Smrg      s/.*/====MARK====/
3616dc99b369Smrg      p
3617dc99b369Smrg      d
3618dc99b369Smrg    }
3619dc99b369Smrg    # These lines can sometimes be longer than 43 characters, but
3620dc99b369Smrg    # are always uninteresting
3621dc99b369Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
3622dc99b369Smrg    /^In archive [^:]*:/d
3623dc99b369Smrg    # Ensure marker is printed
3624dc99b369Smrg    /^====MARK====/p
3625dc99b369Smrg    # Remove all lines with less than 43 characters
3626dc99b369Smrg    /^.\{43\}/!d
3627dc99b369Smrg    # From remaining lines, remove first 43 characters
3628dc99b369Smrg    s/^.\{43\}//' |
3629dc99b369Smrg    $SED -n '
3630dc99b369Smrg      # Join marker and all lines until next marker into a single line
3631dc99b369Smrg      /^====MARK====/ b para
3632dc99b369Smrg      H
3633dc99b369Smrg      $ b para
3634dc99b369Smrg      b
3635dc99b369Smrg      :para
3636dc99b369Smrg      x
3637dc99b369Smrg      s/\n//g
3638dc99b369Smrg      # Remove the marker
3639dc99b369Smrg      s/^====MARK====//
3640dc99b369Smrg      # Remove trailing dots and whitespace
3641dc99b369Smrg      s/[\. \t]*$//
3642dc99b369Smrg      # Print
3643dc99b369Smrg      /./p' |
3644dc99b369Smrg    # we now have a list, one entry per line, of the stringified
3645dc99b369Smrg    # contents of the appropriate section of all members of the
3646dc99b369Smrg    # archive which possess that section. Heuristic: eliminate
3647dc99b369Smrg    # all those which have a first or second character that is
3648dc99b369Smrg    # a '.' (that is, objdump's representation of an unprintable
3649dc99b369Smrg    # character.) This should work for all archives with less than
3650dc99b369Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
3651dc99b369Smrg    # begins with a literal '.' or a single character followed by
3652dc99b369Smrg    # a '.'.
3653dc99b369Smrg    #
3654dc99b369Smrg    # Of those that remain, print the first one.
3655dc99b369Smrg    $SED -e '/^\./d;/^.\./d;q'
3656dc99b369Smrg}
3657dc99b369Smrg
3658dc99b369Smrg# func_cygming_gnu_implib_p ARG
3659dc99b369Smrg# This predicate returns with zero status (TRUE) if
3660dc99b369Smrg# ARG is a GNU/binutils-style import library. Returns
3661dc99b369Smrg# with nonzero status (FALSE) otherwise.
3662dc99b369Smrgfunc_cygming_gnu_implib_p ()
3663dc99b369Smrg{
3664dc99b369Smrg  $opt_debug
3665dc99b369Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3666dc99b369Smrg  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)$'`
3667dc99b369Smrg  test -n "$func_cygming_gnu_implib_tmp"
3668dc99b369Smrg}
3669dc99b369Smrg
3670dc99b369Smrg# func_cygming_ms_implib_p ARG
3671dc99b369Smrg# This predicate returns with zero status (TRUE) if
3672dc99b369Smrg# ARG is an MS-style import library. Returns
3673dc99b369Smrg# with nonzero status (FALSE) otherwise.
3674dc99b369Smrgfunc_cygming_ms_implib_p ()
3675dc99b369Smrg{
3676dc99b369Smrg  $opt_debug
3677dc99b369Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3678dc99b369Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
3679dc99b369Smrg  test -n "$func_cygming_ms_implib_tmp"
3680dc99b369Smrg}
3681dc99b369Smrg
3682dc99b369Smrg# func_cygming_dll_for_implib_fallback ARG
3683dc99b369Smrg# Platform-specific function to extract the
3684dc99b369Smrg# name of the DLL associated with the specified
3685dc99b369Smrg# import library ARG.
3686dc99b369Smrg#
3687dc99b369Smrg# This fallback implementation is for use when $DLLTOOL
3688dc99b369Smrg# does not support the --identify-strict option.
3689dc99b369Smrg# Invoked by eval'ing the libtool variable
3690dc99b369Smrg#    $sharedlib_from_linklib_cmd
3691dc99b369Smrg# Result is available in the variable
3692dc99b369Smrg#    $sharedlib_from_linklib_result
3693dc99b369Smrgfunc_cygming_dll_for_implib_fallback ()
3694dc99b369Smrg{
3695dc99b369Smrg  $opt_debug
3696dc99b369Smrg  if func_cygming_gnu_implib_p "$1" ; then
3697dc99b369Smrg    # binutils import library
3698dc99b369Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
3699dc99b369Smrg  elif func_cygming_ms_implib_p "$1" ; then
3700dc99b369Smrg    # ms-generated import library
3701dc99b369Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3702dc99b369Smrg  else
3703dc99b369Smrg    # unknown
3704dc99b369Smrg    sharedlib_from_linklib_result=""
3705dc99b369Smrg  fi
3706dc99b369Smrg}
3707dc99b369Smrg
3708dc99b369Smrg
3709dc99b369Smrg# func_extract_an_archive dir oldlib
3710dc99b369Smrgfunc_extract_an_archive ()
3711dc99b369Smrg{
3712dc99b369Smrg    $opt_debug
3713dc99b369Smrg    f_ex_an_ar_dir="$1"; shift
3714dc99b369Smrg    f_ex_an_ar_oldlib="$1"
3715dc99b369Smrg    if test "$lock_old_archive_extraction" = yes; then
3716dc99b369Smrg      lockfile=$f_ex_an_ar_oldlib.lock
3717dc99b369Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3718dc99b369Smrg	func_echo "Waiting for $lockfile to be removed"
3719dc99b369Smrg	sleep 2
37205eefee25Smacallan      done
3721dc99b369Smrg    fi
3722dc99b369Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3723dc99b369Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
3724dc99b369Smrg    if test "$lock_old_archive_extraction" = yes; then
3725dc99b369Smrg      $opt_dry_run || rm -f "$lockfile"
3726dc99b369Smrg    fi
3727dc99b369Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3728dc99b369Smrg     :
3729dc99b369Smrg    else
3730dc99b369Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3731dc99b369Smrg    fi
3732dc99b369Smrg}
37335eefee25Smacallan
3734dc99b369Smrg
3735dc99b369Smrg# func_extract_archives gentop oldlib ...
3736dc99b369Smrgfunc_extract_archives ()
3737dc99b369Smrg{
3738dc99b369Smrg    $opt_debug
3739dc99b369Smrg    my_gentop="$1"; shift
3740dc99b369Smrg    my_oldlibs=${1+"$@"}
3741dc99b369Smrg    my_oldobjs=""
3742dc99b369Smrg    my_xlib=""
3743dc99b369Smrg    my_xabs=""
3744dc99b369Smrg    my_xdir=""
3745dc99b369Smrg
3746dc99b369Smrg    for my_xlib in $my_oldlibs; do
3747dc99b369Smrg      # Extract the objects.
3748dc99b369Smrg      case $my_xlib in
3749dc99b369Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3750dc99b369Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3751dc99b369Smrg      esac
3752dc99b369Smrg      func_basename "$my_xlib"
3753dc99b369Smrg      my_xlib="$func_basename_result"
3754dc99b369Smrg      my_xlib_u=$my_xlib
3755dc99b369Smrg      while :; do
3756dc99b369Smrg        case " $extracted_archives " in
3757dc99b369Smrg	*" $my_xlib_u "*)
3758dc99b369Smrg	  func_arith $extracted_serial + 1
3759dc99b369Smrg	  extracted_serial=$func_arith_result
3760dc99b369Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3761dc99b369Smrg	*) break ;;
37625eefee25Smacallan	esac
37635eefee25Smacallan      done
3764dc99b369Smrg      extracted_archives="$extracted_archives $my_xlib_u"
3765dc99b369Smrg      my_xdir="$my_gentop/$my_xlib_u"
37665eefee25Smacallan
3767dc99b369Smrg      func_mkdir_p "$my_xdir"
37685eefee25Smacallan
3769dc99b369Smrg      case $host in
3770dc99b369Smrg      *-darwin*)
3771dc99b369Smrg	func_verbose "Extracting $my_xabs"
3772dc99b369Smrg	# Do not bother doing anything if just a dry run
3773dc99b369Smrg	$opt_dry_run || {
3774dc99b369Smrg	  darwin_orig_dir=`pwd`
3775dc99b369Smrg	  cd $my_xdir || exit $?
3776dc99b369Smrg	  darwin_archive=$my_xabs
3777dc99b369Smrg	  darwin_curdir=`pwd`
3778dc99b369Smrg	  darwin_base_archive=`basename "$darwin_archive"`
3779dc99b369Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3780dc99b369Smrg	  if test -n "$darwin_arches"; then
3781dc99b369Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3782dc99b369Smrg	    darwin_arch=
3783dc99b369Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3784dc99b369Smrg	    for darwin_arch in  $darwin_arches ; do
3785dc99b369Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3786dc99b369Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3787dc99b369Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3788dc99b369Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3789dc99b369Smrg	      cd "$darwin_curdir"
3790dc99b369Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3791dc99b369Smrg	    done # $darwin_arches
3792dc99b369Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3793dc99b369Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3794dc99b369Smrg	    darwin_file=
3795dc99b369Smrg	    darwin_files=
3796dc99b369Smrg	    for darwin_file in $darwin_filelist; do
3797dc99b369Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3798dc99b369Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3799dc99b369Smrg	    done # $darwin_filelist
3800dc99b369Smrg	    $RM -rf unfat-$$
3801dc99b369Smrg	    cd "$darwin_orig_dir"
38025eefee25Smacallan	  else
3803dc99b369Smrg	    cd $darwin_orig_dir
3804dc99b369Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3805dc99b369Smrg	  fi # $darwin_arches
3806dc99b369Smrg	} # !$opt_dry_run
3807dc99b369Smrg	;;
3808dc99b369Smrg      *)
3809dc99b369Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3810dc99b369Smrg	;;
3811dc99b369Smrg      esac
3812dc99b369Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3813dc99b369Smrg    done
38145eefee25Smacallan
3815dc99b369Smrg    func_extract_archives_result="$my_oldobjs"
3816dc99b369Smrg}
38175eefee25Smacallan
38185eefee25Smacallan
3819dc99b369Smrg# func_emit_wrapper [arg=no]
3820dc99b369Smrg#
3821dc99b369Smrg# Emit a libtool wrapper script on stdout.
3822dc99b369Smrg# Don't directly open a file because we may want to
3823dc99b369Smrg# incorporate the script contents within a cygwin/mingw
3824dc99b369Smrg# wrapper executable.  Must ONLY be called from within
3825dc99b369Smrg# func_mode_link because it depends on a number of variables
3826dc99b369Smrg# set therein.
3827dc99b369Smrg#
3828dc99b369Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3829dc99b369Smrg# variable will take.  If 'yes', then the emitted script
3830dc99b369Smrg# will assume that the directory in which it is stored is
3831dc99b369Smrg# the $objdir directory.  This is a cygwin/mingw-specific
3832dc99b369Smrg# behavior.
3833dc99b369Smrgfunc_emit_wrapper ()
3834dc99b369Smrg{
3835dc99b369Smrg	func_emit_wrapper_arg1=${1-no}
38365eefee25Smacallan
3837dc99b369Smrg	$ECHO "\
3838dc99b369Smrg#! $SHELL
38395eefee25Smacallan
3840dc99b369Smrg# $output - temporary wrapper script for $objdir/$outputname
3841dc99b369Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3842dc99b369Smrg#
3843dc99b369Smrg# The $output program cannot be directly executed until all the libtool
3844dc99b369Smrg# libraries that it depends on are installed.
3845dc99b369Smrg#
3846dc99b369Smrg# This wrapper script should never be moved out of the build directory.
3847dc99b369Smrg# If it is, it will not operate correctly.
38485eefee25Smacallan
3849dc99b369Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3850dc99b369Smrg# metacharacters that are still active within double-quoted strings.
3851dc99b369Smrgsed_quote_subst='$sed_quote_subst'
38525eefee25Smacallan
3853dc99b369Smrg# Be Bourne compatible
3854dc99b369Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3855dc99b369Smrg  emulate sh
3856dc99b369Smrg  NULLCMD=:
3857dc99b369Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3858dc99b369Smrg  # is contrary to our usage.  Disable this feature.
3859dc99b369Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3860dc99b369Smrg  setopt NO_GLOB_SUBST
3861dc99b369Smrgelse
3862dc99b369Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3863dc99b369Smrgfi
3864dc99b369SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3865dc99b369SmrgDUALCASE=1; export DUALCASE # for MKS sh
38665eefee25Smacallan
3867dc99b369Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3868dc99b369Smrg# if CDPATH is set.
3869dc99b369Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
38705eefee25Smacallan
3871dc99b369Smrgrelink_command=\"$relink_command\"
38725eefee25Smacallan
3873dc99b369Smrg# This environment variable determines our operation mode.
3874dc99b369Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3875dc99b369Smrg  # install mode needs the following variables:
3876dc99b369Smrg  generated_by_libtool_version='$macro_version'
3877dc99b369Smrg  notinst_deplibs='$notinst_deplibs'
3878dc99b369Smrgelse
3879dc99b369Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3880dc99b369Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3881dc99b369Smrg    file=\"\$0\""
38825eefee25Smacallan
3883dc99b369Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3884dc99b369Smrg    $ECHO "\
38855eefee25Smacallan
3886dc99b369Smrg# A function that is used when there is no print builtin or printf.
3887dc99b369Smrgfunc_fallback_echo ()
3888dc99b369Smrg{
3889dc99b369Smrg  eval 'cat <<_LTECHO_EOF
3890dc99b369Smrg\$1
3891dc99b369Smrg_LTECHO_EOF'
3892dc99b369Smrg}
3893dc99b369Smrg    ECHO=\"$qECHO\"
3894dc99b369Smrg  fi
38955eefee25Smacallan
3896dc99b369Smrg# Very basic option parsing. These options are (a) specific to
3897dc99b369Smrg# the libtool wrapper, (b) are identical between the wrapper
3898dc99b369Smrg# /script/ and the wrapper /executable/ which is used only on
3899dc99b369Smrg# windows platforms, and (c) all begin with the string "--lt-"
3900dc99b369Smrg# (application programs are unlikely to have options which match
3901dc99b369Smrg# this pattern).
3902dc99b369Smrg#
3903dc99b369Smrg# There are only two supported options: --lt-debug and
3904dc99b369Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
3905dc99b369Smrg#
3906dc99b369Smrg# The first argument to this parsing function should be the
3907dc99b369Smrg# script's $0 value, followed by "$@".
3908dc99b369Smrglt_option_debug=
3909dc99b369Smrgfunc_parse_lt_options ()
3910dc99b369Smrg{
3911dc99b369Smrg  lt_script_arg0=\$0
3912dc99b369Smrg  shift
3913dc99b369Smrg  for lt_opt
3914dc99b369Smrg  do
3915dc99b369Smrg    case \"\$lt_opt\" in
3916dc99b369Smrg    --lt-debug) lt_option_debug=1 ;;
3917dc99b369Smrg    --lt-dump-script)
3918dc99b369Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3919dc99b369Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3920dc99b369Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3921dc99b369Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
3922dc99b369Smrg        exit 0
3923dc99b369Smrg      ;;
3924dc99b369Smrg    --lt-*)
3925dc99b369Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3926dc99b369Smrg        exit 1
3927dc99b369Smrg      ;;
3928dc99b369Smrg    esac
3929dc99b369Smrg  done
39305eefee25Smacallan
3931dc99b369Smrg  # Print the debug banner immediately:
3932dc99b369Smrg  if test -n \"\$lt_option_debug\"; then
3933dc99b369Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3934dc99b369Smrg  fi
3935dc99b369Smrg}
39365eefee25Smacallan
3937dc99b369Smrg# Used when --lt-debug. Prints its arguments to stdout
3938dc99b369Smrg# (redirection is the responsibility of the caller)
3939dc99b369Smrgfunc_lt_dump_args ()
3940dc99b369Smrg{
3941dc99b369Smrg  lt_dump_args_N=1;
3942dc99b369Smrg  for lt_arg
3943dc99b369Smrg  do
3944dc99b369Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3945dc99b369Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3946dc99b369Smrg  done
3947dc99b369Smrg}
39485eefee25Smacallan
3949dc99b369Smrg# Core function for launching the target application
3950dc99b369Smrgfunc_exec_program_core ()
3951dc99b369Smrg{
3952dc99b369Smrg"
3953dc99b369Smrg  case $host in
3954dc99b369Smrg  # Backslashes separate directories on plain windows
3955dc99b369Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
3956dc99b369Smrg    $ECHO "\
3957dc99b369Smrg      if test -n \"\$lt_option_debug\"; then
3958dc99b369Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3959dc99b369Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3960dc99b369Smrg      fi
3961dc99b369Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3962dc99b369Smrg"
3963dc99b369Smrg    ;;
39645eefee25Smacallan
3965dc99b369Smrg  *)
3966dc99b369Smrg    $ECHO "\
3967dc99b369Smrg      if test -n \"\$lt_option_debug\"; then
3968dc99b369Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3969dc99b369Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3970dc99b369Smrg      fi
3971dc99b369Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3972dc99b369Smrg"
3973dc99b369Smrg    ;;
3974dc99b369Smrg  esac
3975dc99b369Smrg  $ECHO "\
3976dc99b369Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3977dc99b369Smrg      exit 1
3978dc99b369Smrg}
39795eefee25Smacallan
3980dc99b369Smrg# A function to encapsulate launching the target application
3981dc99b369Smrg# Strips options in the --lt-* namespace from \$@ and
3982dc99b369Smrg# launches target application with the remaining arguments.
3983dc99b369Smrgfunc_exec_program ()
3984dc99b369Smrg{
3985dc99b369Smrg  for lt_wr_arg
3986dc99b369Smrg  do
3987dc99b369Smrg    case \$lt_wr_arg in
3988dc99b369Smrg    --lt-*) ;;
3989dc99b369Smrg    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3990dc99b369Smrg    esac
3991dc99b369Smrg    shift
3992dc99b369Smrg  done
3993dc99b369Smrg  func_exec_program_core \${1+\"\$@\"}
3994dc99b369Smrg}
39955eefee25Smacallan
3996dc99b369Smrg  # Parse options
3997dc99b369Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
39985eefee25Smacallan
3999dc99b369Smrg  # Find the directory that this script lives in.
4000dc99b369Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4001dc99b369Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
40025eefee25Smacallan
4003dc99b369Smrg  # Follow symbolic links until we get to the real thisdir.
4004dc99b369Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4005dc99b369Smrg  while test -n \"\$file\"; do
4006dc99b369Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
40075eefee25Smacallan
4008dc99b369Smrg    # If there was a directory component, then change thisdir.
4009dc99b369Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4010dc99b369Smrg      case \"\$destdir\" in
4011dc99b369Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4012dc99b369Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4013dc99b369Smrg      esac
4014dc99b369Smrg    fi
40155eefee25Smacallan
4016dc99b369Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4017dc99b369Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4018dc99b369Smrg  done
40195eefee25Smacallan
4020dc99b369Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4021dc99b369Smrg  # the cwrapper.
4022dc99b369Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4023dc99b369Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4024dc99b369Smrg    # special case for '.'
4025dc99b369Smrg    if test \"\$thisdir\" = \".\"; then
4026dc99b369Smrg      thisdir=\`pwd\`
4027dc99b369Smrg    fi
4028dc99b369Smrg    # remove .libs from thisdir
4029dc99b369Smrg    case \"\$thisdir\" in
4030dc99b369Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4031dc99b369Smrg    $objdir )   thisdir=. ;;
4032dc99b369Smrg    esac
4033dc99b369Smrg  fi
40345eefee25Smacallan
4035dc99b369Smrg  # Try to get the absolute directory name.
4036dc99b369Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4037dc99b369Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4038dc99b369Smrg"
40395eefee25Smacallan
4040dc99b369Smrg	if test "$fast_install" = yes; then
4041dc99b369Smrg	  $ECHO "\
4042dc99b369Smrg  program=lt-'$outputname'$exeext
4043dc99b369Smrg  progdir=\"\$thisdir/$objdir\"
40445eefee25Smacallan
4045dc99b369Smrg  if test ! -f \"\$progdir/\$program\" ||
4046dc99b369Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4047dc99b369Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
40485eefee25Smacallan
4049dc99b369Smrg    file=\"\$\$-\$program\"
40505eefee25Smacallan
4051dc99b369Smrg    if test ! -d \"\$progdir\"; then
4052dc99b369Smrg      $MKDIR \"\$progdir\"
4053dc99b369Smrg    else
4054dc99b369Smrg      $RM \"\$progdir/\$file\"
4055dc99b369Smrg    fi"
40565eefee25Smacallan
4057dc99b369Smrg	  $ECHO "\
40585eefee25Smacallan
4059dc99b369Smrg    # relink executable if necessary
4060dc99b369Smrg    if test -n \"\$relink_command\"; then
4061dc99b369Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4062dc99b369Smrg      else
4063dc99b369Smrg	$ECHO \"\$relink_command_output\" >&2
4064dc99b369Smrg	$RM \"\$progdir/\$file\"
4065dc99b369Smrg	exit 1
4066dc99b369Smrg      fi
4067dc99b369Smrg    fi
40685eefee25Smacallan
4069dc99b369Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4070dc99b369Smrg    { $RM \"\$progdir/\$program\";
4071dc99b369Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4072dc99b369Smrg    $RM \"\$progdir/\$file\"
4073dc99b369Smrg  fi"
4074dc99b369Smrg	else
4075dc99b369Smrg	  $ECHO "\
4076dc99b369Smrg  program='$outputname'
4077dc99b369Smrg  progdir=\"\$thisdir/$objdir\"
4078dc99b369Smrg"
40795eefee25Smacallan	fi
40805eefee25Smacallan
4081dc99b369Smrg	$ECHO "\
40825eefee25Smacallan
4083dc99b369Smrg  if test -f \"\$progdir/\$program\"; then"
40845eefee25Smacallan
4085dc99b369Smrg	# fixup the dll searchpath if we need to.
4086dc99b369Smrg	#
4087dc99b369Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
4088dc99b369Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
4089dc99b369Smrg	# libraries must come first.
4090dc99b369Smrg	if test -n "$dllsearchpath"; then
4091dc99b369Smrg	  $ECHO "\
4092dc99b369Smrg    # Add the dll search path components to the executable PATH
4093dc99b369Smrg    PATH=$dllsearchpath:\$PATH
4094dc99b369Smrg"
4095dc99b369Smrg	fi
40965eefee25Smacallan
4097dc99b369Smrg	# Export our shlibpath_var if we have one.
4098dc99b369Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4099dc99b369Smrg	  $ECHO "\
4100dc99b369Smrg    # Add our own library path to $shlibpath_var
4101dc99b369Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
41025eefee25Smacallan
4103dc99b369Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4104dc99b369Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
4105dc99b369Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
41065eefee25Smacallan
4107dc99b369Smrg    export $shlibpath_var
4108dc99b369Smrg"
4109dc99b369Smrg	fi
41105eefee25Smacallan
4111dc99b369Smrg	$ECHO "\
4112dc99b369Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4113dc99b369Smrg      # Run the actual program with our arguments.
4114dc99b369Smrg      func_exec_program \${1+\"\$@\"}
4115dc99b369Smrg    fi
4116dc99b369Smrg  else
4117dc99b369Smrg    # The program doesn't exist.
4118dc99b369Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4119dc99b369Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4120dc99b369Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4121dc99b369Smrg    exit 1
4122dc99b369Smrg  fi
4123dc99b369Smrgfi\
4124dc99b369Smrg"
4125dc99b369Smrg}
41265eefee25Smacallan
41275eefee25Smacallan
4128dc99b369Smrg# func_emit_cwrapperexe_src
4129dc99b369Smrg# emit the source code for a wrapper executable on stdout
4130dc99b369Smrg# Must ONLY be called from within func_mode_link because
4131dc99b369Smrg# it depends on a number of variable set therein.
4132dc99b369Smrgfunc_emit_cwrapperexe_src ()
4133dc99b369Smrg{
4134dc99b369Smrg	cat <<EOF
41355eefee25Smacallan
4136dc99b369Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4137dc99b369Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
41385eefee25Smacallan
4139dc99b369Smrg   The $output program cannot be directly executed until all the libtool
4140dc99b369Smrg   libraries that it depends on are installed.
41415eefee25Smacallan
4142dc99b369Smrg   This wrapper executable should never be moved out of the build directory.
4143dc99b369Smrg   If it is, it will not operate correctly.
4144dc99b369Smrg*/
4145dc99b369SmrgEOF
4146dc99b369Smrg	    cat <<"EOF"
4147dc99b369Smrg#ifdef _MSC_VER
4148dc99b369Smrg# define _CRT_SECURE_NO_DEPRECATE 1
4149dc99b369Smrg#endif
4150dc99b369Smrg#include <stdio.h>
4151dc99b369Smrg#include <stdlib.h>
4152dc99b369Smrg#ifdef _MSC_VER
4153dc99b369Smrg# include <direct.h>
4154dc99b369Smrg# include <process.h>
4155dc99b369Smrg# include <io.h>
4156dc99b369Smrg#else
4157dc99b369Smrg# include <unistd.h>
4158dc99b369Smrg# include <stdint.h>
4159dc99b369Smrg# ifdef __CYGWIN__
4160dc99b369Smrg#  include <io.h>
4161dc99b369Smrg# endif
4162dc99b369Smrg#endif
4163dc99b369Smrg#include <malloc.h>
4164dc99b369Smrg#include <stdarg.h>
4165dc99b369Smrg#include <assert.h>
4166dc99b369Smrg#include <string.h>
4167dc99b369Smrg#include <ctype.h>
4168dc99b369Smrg#include <errno.h>
4169dc99b369Smrg#include <fcntl.h>
4170dc99b369Smrg#include <sys/stat.h>
41715eefee25Smacallan
4172dc99b369Smrg/* declarations of non-ANSI functions */
4173dc99b369Smrg#if defined(__MINGW32__)
4174dc99b369Smrg# ifdef __STRICT_ANSI__
4175dc99b369Smrgint _putenv (const char *);
4176dc99b369Smrg# endif
4177dc99b369Smrg#elif defined(__CYGWIN__)
4178dc99b369Smrg# ifdef __STRICT_ANSI__
4179dc99b369Smrgchar *realpath (const char *, char *);
4180dc99b369Smrgint putenv (char *);
4181dc99b369Smrgint setenv (const char *, const char *, int);
4182dc99b369Smrg# endif
4183dc99b369Smrg/* #elif defined (other platforms) ... */
4184dc99b369Smrg#endif
41855eefee25Smacallan
4186dc99b369Smrg/* portability defines, excluding path handling macros */
4187dc99b369Smrg#if defined(_MSC_VER)
4188dc99b369Smrg# define setmode _setmode
4189dc99b369Smrg# define stat    _stat
4190dc99b369Smrg# define chmod   _chmod
4191dc99b369Smrg# define getcwd  _getcwd
4192dc99b369Smrg# define putenv  _putenv
4193dc99b369Smrg# define S_IXUSR _S_IEXEC
4194dc99b369Smrg# ifndef _INTPTR_T_DEFINED
4195dc99b369Smrg#  define _INTPTR_T_DEFINED
4196dc99b369Smrg#  define intptr_t int
4197dc99b369Smrg# endif
4198dc99b369Smrg#elif defined(__MINGW32__)
4199dc99b369Smrg# define setmode _setmode
4200dc99b369Smrg# define stat    _stat
4201dc99b369Smrg# define chmod   _chmod
4202dc99b369Smrg# define getcwd  _getcwd
4203dc99b369Smrg# define putenv  _putenv
4204dc99b369Smrg#elif defined(__CYGWIN__)
4205dc99b369Smrg# define HAVE_SETENV
4206dc99b369Smrg# define FOPEN_WB "wb"
4207dc99b369Smrg/* #elif defined (other platforms) ... */
4208dc99b369Smrg#endif
42095eefee25Smacallan
4210dc99b369Smrg#if defined(PATH_MAX)
4211dc99b369Smrg# define LT_PATHMAX PATH_MAX
4212dc99b369Smrg#elif defined(MAXPATHLEN)
4213dc99b369Smrg# define LT_PATHMAX MAXPATHLEN
4214dc99b369Smrg#else
4215dc99b369Smrg# define LT_PATHMAX 1024
4216dc99b369Smrg#endif
42175eefee25Smacallan
4218dc99b369Smrg#ifndef S_IXOTH
4219dc99b369Smrg# define S_IXOTH 0
4220dc99b369Smrg#endif
4221dc99b369Smrg#ifndef S_IXGRP
4222dc99b369Smrg# define S_IXGRP 0
4223dc99b369Smrg#endif
42245eefee25Smacallan
4225dc99b369Smrg/* path handling portability macros */
4226dc99b369Smrg#ifndef DIR_SEPARATOR
4227dc99b369Smrg# define DIR_SEPARATOR '/'
4228dc99b369Smrg# define PATH_SEPARATOR ':'
4229dc99b369Smrg#endif
42305eefee25Smacallan
4231dc99b369Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4232dc99b369Smrg  defined (__OS2__)
4233dc99b369Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4234dc99b369Smrg# define FOPEN_WB "wb"
4235dc99b369Smrg# ifndef DIR_SEPARATOR_2
4236dc99b369Smrg#  define DIR_SEPARATOR_2 '\\'
4237dc99b369Smrg# endif
4238dc99b369Smrg# ifndef PATH_SEPARATOR_2
4239dc99b369Smrg#  define PATH_SEPARATOR_2 ';'
4240dc99b369Smrg# endif
4241dc99b369Smrg#endif
42425eefee25Smacallan
4243dc99b369Smrg#ifndef DIR_SEPARATOR_2
4244dc99b369Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4245dc99b369Smrg#else /* DIR_SEPARATOR_2 */
4246dc99b369Smrg# define IS_DIR_SEPARATOR(ch) \
4247dc99b369Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4248dc99b369Smrg#endif /* DIR_SEPARATOR_2 */
42495eefee25Smacallan
4250dc99b369Smrg#ifndef PATH_SEPARATOR_2
4251dc99b369Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4252dc99b369Smrg#else /* PATH_SEPARATOR_2 */
4253dc99b369Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4254dc99b369Smrg#endif /* PATH_SEPARATOR_2 */
42555eefee25Smacallan
4256dc99b369Smrg#ifndef FOPEN_WB
4257dc99b369Smrg# define FOPEN_WB "w"
4258dc99b369Smrg#endif
4259dc99b369Smrg#ifndef _O_BINARY
4260dc99b369Smrg# define _O_BINARY 0
4261dc99b369Smrg#endif
42625eefee25Smacallan
4263dc99b369Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4264dc99b369Smrg#define XFREE(stale) do { \
4265dc99b369Smrg  if (stale) { free ((void *) stale); stale = 0; } \
4266dc99b369Smrg} while (0)
42675eefee25Smacallan
4268dc99b369Smrg#if defined(LT_DEBUGWRAPPER)
4269dc99b369Smrgstatic int lt_debug = 1;
4270dc99b369Smrg#else
4271dc99b369Smrgstatic int lt_debug = 0;
4272dc99b369Smrg#endif
42735eefee25Smacallan
4274dc99b369Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4275dc99b369Smrg
4276dc99b369Smrgvoid *xmalloc (size_t num);
4277dc99b369Smrgchar *xstrdup (const char *string);
4278dc99b369Smrgconst char *base_name (const char *name);
4279dc99b369Smrgchar *find_executable (const char *wrapper);
4280dc99b369Smrgchar *chase_symlinks (const char *pathspec);
4281dc99b369Smrgint make_executable (const char *path);
4282dc99b369Smrgint check_executable (const char *path);
4283dc99b369Smrgchar *strendzap (char *str, const char *pat);
4284dc99b369Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4285dc99b369Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
4286dc99b369Smrgstatic const char *nonnull (const char *s);
4287dc99b369Smrgstatic const char *nonempty (const char *s);
4288dc99b369Smrgvoid lt_setenv (const char *name, const char *value);
4289dc99b369Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4290dc99b369Smrgvoid lt_update_exe_path (const char *name, const char *value);
4291dc99b369Smrgvoid lt_update_lib_path (const char *name, const char *value);
4292dc99b369Smrgchar **prepare_spawn (char **argv);
4293dc99b369Smrgvoid lt_dump_script (FILE *f);
4294dc99b369SmrgEOF
42955eefee25Smacallan
4296dc99b369Smrg	    cat <<EOF
4297dc99b369Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
4298dc99b369Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4299dc99b369SmrgEOF
43005eefee25Smacallan
4301dc99b369Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4302dc99b369Smrg              func_to_host_path "$temp_rpath"
4303dc99b369Smrg	      cat <<EOF
4304dc99b369Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4305dc99b369SmrgEOF
4306dc99b369Smrg	    else
4307dc99b369Smrg	      cat <<"EOF"
4308dc99b369Smrgconst char * LIB_PATH_VALUE   = "";
4309dc99b369SmrgEOF
4310dc99b369Smrg	    fi
43115eefee25Smacallan
4312dc99b369Smrg	    if test -n "$dllsearchpath"; then
4313dc99b369Smrg              func_to_host_path "$dllsearchpath:"
4314dc99b369Smrg	      cat <<EOF
4315dc99b369Smrgconst char * EXE_PATH_VARNAME = "PATH";
4316dc99b369Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4317dc99b369SmrgEOF
4318dc99b369Smrg	    else
4319dc99b369Smrg	      cat <<"EOF"
4320dc99b369Smrgconst char * EXE_PATH_VARNAME = "";
4321dc99b369Smrgconst char * EXE_PATH_VALUE   = "";
4322dc99b369SmrgEOF
4323dc99b369Smrg	    fi
43245eefee25Smacallan
4325dc99b369Smrg	    if test "$fast_install" = yes; then
4326dc99b369Smrg	      cat <<EOF
4327dc99b369Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4328dc99b369SmrgEOF
4329dc99b369Smrg	    else
4330dc99b369Smrg	      cat <<EOF
4331dc99b369Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4332dc99b369SmrgEOF
4333dc99b369Smrg	    fi
43345eefee25Smacallan
43355eefee25Smacallan
4336dc99b369Smrg	    cat <<"EOF"
43375eefee25Smacallan
4338dc99b369Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
43395eefee25Smacallan
4340dc99b369Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4341dc99b369Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4342dc99b369Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
43435eefee25Smacallan
4344dc99b369Smrgint
4345dc99b369Smrgmain (int argc, char *argv[])
4346dc99b369Smrg{
4347dc99b369Smrg  char **newargz;
4348dc99b369Smrg  int  newargc;
4349dc99b369Smrg  char *tmp_pathspec;
4350dc99b369Smrg  char *actual_cwrapper_path;
4351dc99b369Smrg  char *actual_cwrapper_name;
4352dc99b369Smrg  char *target_name;
4353dc99b369Smrg  char *lt_argv_zero;
4354dc99b369Smrg  intptr_t rval = 127;
4355dc99b369Smrg
4356dc99b369Smrg  int i;
4357dc99b369Smrg
4358dc99b369Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
4359dc99b369Smrg  newargz = XMALLOC (char *, argc + 1);
4360dc99b369Smrg
4361dc99b369Smrg  /* very simple arg parsing; don't want to rely on getopt
4362dc99b369Smrg   * also, copy all non cwrapper options to newargz, except
4363dc99b369Smrg   * argz[0], which is handled differently
4364dc99b369Smrg   */
4365dc99b369Smrg  newargc=0;
4366dc99b369Smrg  for (i = 1; i < argc; i++)
4367dc99b369Smrg    {
4368dc99b369Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4369dc99b369Smrg	{
4370dc99b369SmrgEOF
4371dc99b369Smrg	    case "$host" in
4372dc99b369Smrg	      *mingw* | *cygwin* )
4373dc99b369Smrg		# make stdout use "unix" line endings
4374dc99b369Smrg		echo "          setmode(1,_O_BINARY);"
43755eefee25Smacallan		;;
43765eefee25Smacallan	      esac
43775eefee25Smacallan
4378dc99b369Smrg	    cat <<"EOF"
4379dc99b369Smrg	  lt_dump_script (stdout);
4380dc99b369Smrg	  return 0;
4381dc99b369Smrg	}
4382dc99b369Smrg      if (strcmp (argv[i], debug_opt) == 0)
4383dc99b369Smrg	{
4384dc99b369Smrg          lt_debug = 1;
4385dc99b369Smrg          continue;
4386dc99b369Smrg	}
4387dc99b369Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4388dc99b369Smrg        {
4389dc99b369Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4390dc99b369Smrg             namespace, but it is not one of the ones we know about and
4391dc99b369Smrg             have already dealt with, above (inluding dump-script), then
4392dc99b369Smrg             report an error. Otherwise, targets might begin to believe
4393dc99b369Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4394dc99b369Smrg             namespace. The first time any user complains about this, we'll
4395dc99b369Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4396dc99b369Smrg             or a configure.ac-settable value.
4397dc99b369Smrg           */
4398dc99b369Smrg          lt_fatal (__FILE__, __LINE__,
4399dc99b369Smrg		    "unrecognized %s option: '%s'",
4400dc99b369Smrg                    ltwrapper_option_prefix, argv[i]);
4401dc99b369Smrg        }
4402dc99b369Smrg      /* otherwise ... */
4403dc99b369Smrg      newargz[++newargc] = xstrdup (argv[i]);
4404dc99b369Smrg    }
4405dc99b369Smrg  newargz[++newargc] = NULL;
44065eefee25Smacallan
4407dc99b369SmrgEOF
4408dc99b369Smrg	    cat <<EOF
4409dc99b369Smrg  /* The GNU banner must be the first non-error debug message */
4410dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4411dc99b369SmrgEOF
4412dc99b369Smrg	    cat <<"EOF"
4413dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4414dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4415dc99b369Smrg
4416dc99b369Smrg  tmp_pathspec = find_executable (argv[0]);
4417dc99b369Smrg  if (tmp_pathspec == NULL)
4418dc99b369Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4419dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__,
4420dc99b369Smrg                  "(main) found exe (before symlink chase) at: %s\n",
4421dc99b369Smrg		  tmp_pathspec);
4422dc99b369Smrg
4423dc99b369Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4424dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__,
4425dc99b369Smrg                  "(main) found exe (after symlink chase) at: %s\n",
4426dc99b369Smrg		  actual_cwrapper_path);
4427dc99b369Smrg  XFREE (tmp_pathspec);
4428dc99b369Smrg
4429dc99b369Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4430dc99b369Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4431dc99b369Smrg
4432dc99b369Smrg  /* wrapper name transforms */
4433dc99b369Smrg  strendzap (actual_cwrapper_name, ".exe");
4434dc99b369Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4435dc99b369Smrg  XFREE (actual_cwrapper_name);
4436dc99b369Smrg  actual_cwrapper_name = tmp_pathspec;
4437dc99b369Smrg  tmp_pathspec = 0;
4438dc99b369Smrg
4439dc99b369Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4440dc99b369Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4441dc99b369Smrg  strendzap (target_name, ".exe");
4442dc99b369Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4443dc99b369Smrg  XFREE (target_name);
4444dc99b369Smrg  target_name = tmp_pathspec;
4445dc99b369Smrg  tmp_pathspec = 0;
4446dc99b369Smrg
4447dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__,
4448dc99b369Smrg		  "(main) libtool target name: %s\n",
4449dc99b369Smrg		  target_name);
4450dc99b369SmrgEOF
44515eefee25Smacallan
4452dc99b369Smrg	    cat <<EOF
4453dc99b369Smrg  newargz[0] =
4454dc99b369Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4455dc99b369Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4456dc99b369Smrg  strcpy (newargz[0], actual_cwrapper_path);
4457dc99b369Smrg  strcat (newargz[0], "$objdir");
4458dc99b369Smrg  strcat (newargz[0], "/");
4459dc99b369SmrgEOF
44605eefee25Smacallan
4461dc99b369Smrg	    cat <<"EOF"
4462dc99b369Smrg  /* stop here, and copy so we don't have to do this twice */
4463dc99b369Smrg  tmp_pathspec = xstrdup (newargz[0]);
44645eefee25Smacallan
4465dc99b369Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4466dc99b369Smrg  strcat (newargz[0], actual_cwrapper_name);
44675eefee25Smacallan
4468dc99b369Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4469dc99b369Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4470dc99b369Smrg  XFREE (tmp_pathspec);
4471dc99b369Smrg  tmp_pathspec = NULL;
4472dc99b369SmrgEOF
44735eefee25Smacallan
4474dc99b369Smrg	    case $host_os in
4475dc99b369Smrg	      mingw*)
4476dc99b369Smrg	    cat <<"EOF"
4477dc99b369Smrg  {
4478dc99b369Smrg    char* p;
4479dc99b369Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4480dc99b369Smrg      {
4481dc99b369Smrg	*p = '/';
4482dc99b369Smrg      }
4483dc99b369Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4484dc99b369Smrg      {
4485dc99b369Smrg	*p = '/';
4486dc99b369Smrg      }
4487dc99b369Smrg  }
4488dc99b369SmrgEOF
4489dc99b369Smrg	    ;;
4490dc99b369Smrg	    esac
44915eefee25Smacallan
4492dc99b369Smrg	    cat <<"EOF"
4493dc99b369Smrg  XFREE (target_name);
4494dc99b369Smrg  XFREE (actual_cwrapper_path);
4495dc99b369Smrg  XFREE (actual_cwrapper_name);
4496dc99b369Smrg
4497dc99b369Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4498dc99b369Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4499dc99b369Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4500dc99b369Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4501dc99b369Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
4502dc99b369Smrg     libraries must come first. */
4503dc99b369Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4504dc99b369Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4505dc99b369Smrg
4506dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4507dc99b369Smrg		  nonnull (lt_argv_zero));
4508dc99b369Smrg  for (i = 0; i < newargc; i++)
4509dc99b369Smrg    {
4510dc99b369Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4511dc99b369Smrg		      i, nonnull (newargz[i]));
4512dc99b369Smrg    }
45135eefee25Smacallan
4514dc99b369SmrgEOF
45155eefee25Smacallan
4516dc99b369Smrg	    case $host_os in
4517dc99b369Smrg	      mingw*)
4518dc99b369Smrg		cat <<"EOF"
4519dc99b369Smrg  /* execv doesn't actually work on mingw as expected on unix */
4520dc99b369Smrg  newargz = prepare_spawn (newargz);
4521dc99b369Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4522dc99b369Smrg  if (rval == -1)
4523dc99b369Smrg    {
4524dc99b369Smrg      /* failed to start process */
4525dc99b369Smrg      lt_debugprintf (__FILE__, __LINE__,
4526dc99b369Smrg		      "(main) failed to launch target \"%s\": %s\n",
4527dc99b369Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4528dc99b369Smrg      return 127;
4529dc99b369Smrg    }
4530dc99b369Smrg  return rval;
4531dc99b369SmrgEOF
4532dc99b369Smrg		;;
4533dc99b369Smrg	      *)
4534dc99b369Smrg		cat <<"EOF"
4535dc99b369Smrg  execv (lt_argv_zero, newargz);
4536dc99b369Smrg  return rval; /* =127, but avoids unused variable warning */
4537dc99b369SmrgEOF
4538dc99b369Smrg		;;
4539dc99b369Smrg	    esac
45405eefee25Smacallan
4541dc99b369Smrg	    cat <<"EOF"
4542dc99b369Smrg}
45435eefee25Smacallan
4544dc99b369Smrgvoid *
4545dc99b369Smrgxmalloc (size_t num)
4546dc99b369Smrg{
4547dc99b369Smrg  void *p = (void *) malloc (num);
4548dc99b369Smrg  if (!p)
4549dc99b369Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
45505eefee25Smacallan
4551dc99b369Smrg  return p;
4552dc99b369Smrg}
45535eefee25Smacallan
4554dc99b369Smrgchar *
4555dc99b369Smrgxstrdup (const char *string)
4556dc99b369Smrg{
4557dc99b369Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4558dc99b369Smrg			  string) : NULL;
4559dc99b369Smrg}
45605eefee25Smacallan
4561dc99b369Smrgconst char *
4562dc99b369Smrgbase_name (const char *name)
4563dc99b369Smrg{
4564dc99b369Smrg  const char *base;
45655eefee25Smacallan
4566dc99b369Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4567dc99b369Smrg  /* Skip over the disk name in MSDOS pathnames. */
4568dc99b369Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4569dc99b369Smrg    name += 2;
4570dc99b369Smrg#endif
45715eefee25Smacallan
4572dc99b369Smrg  for (base = name; *name; name++)
4573dc99b369Smrg    if (IS_DIR_SEPARATOR (*name))
4574dc99b369Smrg      base = name + 1;
4575dc99b369Smrg  return base;
4576dc99b369Smrg}
45775eefee25Smacallan
4578dc99b369Smrgint
4579dc99b369Smrgcheck_executable (const char *path)
4580dc99b369Smrg{
4581dc99b369Smrg  struct stat st;
45825eefee25Smacallan
4583dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4584dc99b369Smrg                  nonempty (path));
4585dc99b369Smrg  if ((!path) || (!*path))
4586dc99b369Smrg    return 0;
45875eefee25Smacallan
4588dc99b369Smrg  if ((stat (path, &st) >= 0)
4589dc99b369Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4590dc99b369Smrg    return 1;
4591dc99b369Smrg  else
4592dc99b369Smrg    return 0;
4593dc99b369Smrg}
45945eefee25Smacallan
4595dc99b369Smrgint
4596dc99b369Smrgmake_executable (const char *path)
4597dc99b369Smrg{
4598dc99b369Smrg  int rval = 0;
4599dc99b369Smrg  struct stat st;
46005eefee25Smacallan
4601dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4602dc99b369Smrg                  nonempty (path));
4603dc99b369Smrg  if ((!path) || (!*path))
4604dc99b369Smrg    return 0;
46055eefee25Smacallan
4606dc99b369Smrg  if (stat (path, &st) >= 0)
4607dc99b369Smrg    {
4608dc99b369Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4609dc99b369Smrg    }
4610dc99b369Smrg  return rval;
4611dc99b369Smrg}
46125eefee25Smacallan
4613dc99b369Smrg/* Searches for the full path of the wrapper.  Returns
4614dc99b369Smrg   newly allocated full path name if found, NULL otherwise
4615dc99b369Smrg   Does not chase symlinks, even on platforms that support them.
4616dc99b369Smrg*/
4617dc99b369Smrgchar *
4618dc99b369Smrgfind_executable (const char *wrapper)
4619dc99b369Smrg{
4620dc99b369Smrg  int has_slash = 0;
4621dc99b369Smrg  const char *p;
4622dc99b369Smrg  const char *p_next;
4623dc99b369Smrg  /* static buffer for getcwd */
4624dc99b369Smrg  char tmp[LT_PATHMAX + 1];
4625dc99b369Smrg  int tmp_len;
4626dc99b369Smrg  char *concat_name;
46275eefee25Smacallan
4628dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4629dc99b369Smrg                  nonempty (wrapper));
46305eefee25Smacallan
4631dc99b369Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4632dc99b369Smrg    return NULL;
46335eefee25Smacallan
4634dc99b369Smrg  /* Absolute path? */
4635dc99b369Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4636dc99b369Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4637dc99b369Smrg    {
4638dc99b369Smrg      concat_name = xstrdup (wrapper);
4639dc99b369Smrg      if (check_executable (concat_name))
4640dc99b369Smrg	return concat_name;
4641dc99b369Smrg      XFREE (concat_name);
4642dc99b369Smrg    }
4643dc99b369Smrg  else
4644dc99b369Smrg    {
4645dc99b369Smrg#endif
4646dc99b369Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4647dc99b369Smrg	{
4648dc99b369Smrg	  concat_name = xstrdup (wrapper);
4649dc99b369Smrg	  if (check_executable (concat_name))
4650dc99b369Smrg	    return concat_name;
4651dc99b369Smrg	  XFREE (concat_name);
4652dc99b369Smrg	}
4653dc99b369Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4654dc99b369Smrg    }
4655dc99b369Smrg#endif
46565eefee25Smacallan
4657dc99b369Smrg  for (p = wrapper; *p; p++)
4658dc99b369Smrg    if (*p == '/')
4659dc99b369Smrg      {
4660dc99b369Smrg	has_slash = 1;
4661dc99b369Smrg	break;
4662dc99b369Smrg      }
4663dc99b369Smrg  if (!has_slash)
4664dc99b369Smrg    {
4665dc99b369Smrg      /* no slashes; search PATH */
4666dc99b369Smrg      const char *path = getenv ("PATH");
4667dc99b369Smrg      if (path != NULL)
4668dc99b369Smrg	{
4669dc99b369Smrg	  for (p = path; *p; p = p_next)
4670dc99b369Smrg	    {
4671dc99b369Smrg	      const char *q;
4672dc99b369Smrg	      size_t p_len;
4673dc99b369Smrg	      for (q = p; *q; q++)
4674dc99b369Smrg		if (IS_PATH_SEPARATOR (*q))
4675dc99b369Smrg		  break;
4676dc99b369Smrg	      p_len = q - p;
4677dc99b369Smrg	      p_next = (*q == '\0' ? q : q + 1);
4678dc99b369Smrg	      if (p_len == 0)
4679dc99b369Smrg		{
4680dc99b369Smrg		  /* empty path: current directory */
4681dc99b369Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4682dc99b369Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4683dc99b369Smrg                              nonnull (strerror (errno)));
4684dc99b369Smrg		  tmp_len = strlen (tmp);
4685dc99b369Smrg		  concat_name =
4686dc99b369Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4687dc99b369Smrg		  memcpy (concat_name, tmp, tmp_len);
4688dc99b369Smrg		  concat_name[tmp_len] = '/';
4689dc99b369Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4690dc99b369Smrg		}
4691dc99b369Smrg	      else
4692dc99b369Smrg		{
4693dc99b369Smrg		  concat_name =
4694dc99b369Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4695dc99b369Smrg		  memcpy (concat_name, p, p_len);
4696dc99b369Smrg		  concat_name[p_len] = '/';
4697dc99b369Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4698dc99b369Smrg		}
4699dc99b369Smrg	      if (check_executable (concat_name))
4700dc99b369Smrg		return concat_name;
4701dc99b369Smrg	      XFREE (concat_name);
4702dc99b369Smrg	    }
4703dc99b369Smrg	}
4704dc99b369Smrg      /* not found in PATH; assume curdir */
4705dc99b369Smrg    }
4706dc99b369Smrg  /* Relative path | not found in path: prepend cwd */
4707dc99b369Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
4708dc99b369Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4709dc99b369Smrg              nonnull (strerror (errno)));
4710dc99b369Smrg  tmp_len = strlen (tmp);
4711dc99b369Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4712dc99b369Smrg  memcpy (concat_name, tmp, tmp_len);
4713dc99b369Smrg  concat_name[tmp_len] = '/';
4714dc99b369Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4715dc99b369Smrg
4716dc99b369Smrg  if (check_executable (concat_name))
4717dc99b369Smrg    return concat_name;
4718dc99b369Smrg  XFREE (concat_name);
4719dc99b369Smrg  return NULL;
47205eefee25Smacallan}
47215eefee25Smacallan
4722dc99b369Smrgchar *
4723dc99b369Smrgchase_symlinks (const char *pathspec)
4724dc99b369Smrg{
4725dc99b369Smrg#ifndef S_ISLNK
4726dc99b369Smrg  return xstrdup (pathspec);
4727dc99b369Smrg#else
4728dc99b369Smrg  char buf[LT_PATHMAX];
4729dc99b369Smrg  struct stat s;
4730dc99b369Smrg  char *tmp_pathspec = xstrdup (pathspec);
4731dc99b369Smrg  char *p;
4732dc99b369Smrg  int has_symlinks = 0;
4733dc99b369Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4734dc99b369Smrg    {
4735dc99b369Smrg      lt_debugprintf (__FILE__, __LINE__,
4736dc99b369Smrg		      "checking path component for symlinks: %s\n",
4737dc99b369Smrg		      tmp_pathspec);
4738dc99b369Smrg      if (lstat (tmp_pathspec, &s) == 0)
4739dc99b369Smrg	{
4740dc99b369Smrg	  if (S_ISLNK (s.st_mode) != 0)
4741dc99b369Smrg	    {
4742dc99b369Smrg	      has_symlinks = 1;
4743dc99b369Smrg	      break;
4744dc99b369Smrg	    }
47455eefee25Smacallan
4746dc99b369Smrg	  /* search backwards for last DIR_SEPARATOR */
4747dc99b369Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4748dc99b369Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4749dc99b369Smrg	    p--;
4750dc99b369Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4751dc99b369Smrg	    {
4752dc99b369Smrg	      /* no more DIR_SEPARATORS left */
4753dc99b369Smrg	      break;
4754dc99b369Smrg	    }
4755dc99b369Smrg	  *p = '\0';
4756dc99b369Smrg	}
4757dc99b369Smrg      else
4758dc99b369Smrg	{
4759dc99b369Smrg	  lt_fatal (__FILE__, __LINE__,
4760dc99b369Smrg		    "error accessing file \"%s\": %s",
4761dc99b369Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4762dc99b369Smrg	}
4763dc99b369Smrg    }
4764dc99b369Smrg  XFREE (tmp_pathspec);
47655eefee25Smacallan
4766dc99b369Smrg  if (!has_symlinks)
4767dc99b369Smrg    {
4768dc99b369Smrg      return xstrdup (pathspec);
4769dc99b369Smrg    }
47705eefee25Smacallan
4771dc99b369Smrg  tmp_pathspec = realpath (pathspec, buf);
4772dc99b369Smrg  if (tmp_pathspec == 0)
4773dc99b369Smrg    {
4774dc99b369Smrg      lt_fatal (__FILE__, __LINE__,
4775dc99b369Smrg		"could not follow symlinks for %s", pathspec);
4776dc99b369Smrg    }
4777dc99b369Smrg  return xstrdup (tmp_pathspec);
4778dc99b369Smrg#endif
47795eefee25Smacallan}
47805eefee25Smacallan
4781dc99b369Smrgchar *
4782dc99b369Smrgstrendzap (char *str, const char *pat)
4783dc99b369Smrg{
4784dc99b369Smrg  size_t len, patlen;
47855eefee25Smacallan
4786dc99b369Smrg  assert (str != NULL);
4787dc99b369Smrg  assert (pat != NULL);
47885eefee25Smacallan
4789dc99b369Smrg  len = strlen (str);
4790dc99b369Smrg  patlen = strlen (pat);
47915eefee25Smacallan
4792dc99b369Smrg  if (patlen <= len)
4793dc99b369Smrg    {
4794dc99b369Smrg      str += len - patlen;
4795dc99b369Smrg      if (strcmp (str, pat) == 0)
4796dc99b369Smrg	*str = '\0';
4797dc99b369Smrg    }
4798dc99b369Smrg  return str;
4799dc99b369Smrg}
48005eefee25Smacallan
4801dc99b369Smrgvoid
4802dc99b369Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
4803dc99b369Smrg{
4804dc99b369Smrg  va_list args;
4805dc99b369Smrg  if (lt_debug)
4806dc99b369Smrg    {
4807dc99b369Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4808dc99b369Smrg      va_start (args, fmt);
4809dc99b369Smrg      (void) vfprintf (stderr, fmt, args);
4810dc99b369Smrg      va_end (args);
4811dc99b369Smrg    }
4812dc99b369Smrg}
48135eefee25Smacallan
4814dc99b369Smrgstatic void
4815dc99b369Smrglt_error_core (int exit_status, const char *file,
4816dc99b369Smrg	       int line, const char *mode,
4817dc99b369Smrg	       const char *message, va_list ap)
4818dc99b369Smrg{
4819dc99b369Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4820dc99b369Smrg  vfprintf (stderr, message, ap);
4821dc99b369Smrg  fprintf (stderr, ".\n");
48225eefee25Smacallan
4823dc99b369Smrg  if (exit_status >= 0)
4824dc99b369Smrg    exit (exit_status);
4825dc99b369Smrg}
48265eefee25Smacallan
4827dc99b369Smrgvoid
4828dc99b369Smrglt_fatal (const char *file, int line, const char *message, ...)
4829dc99b369Smrg{
4830dc99b369Smrg  va_list ap;
4831dc99b369Smrg  va_start (ap, message);
4832dc99b369Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4833dc99b369Smrg  va_end (ap);
4834dc99b369Smrg}
48355eefee25Smacallan
4836dc99b369Smrgstatic const char *
4837dc99b369Smrgnonnull (const char *s)
4838dc99b369Smrg{
4839dc99b369Smrg  return s ? s : "(null)";
4840dc99b369Smrg}
48415eefee25Smacallan
4842dc99b369Smrgstatic const char *
4843dc99b369Smrgnonempty (const char *s)
4844dc99b369Smrg{
4845dc99b369Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
4846dc99b369Smrg}
48475eefee25Smacallan
4848dc99b369Smrgvoid
4849dc99b369Smrglt_setenv (const char *name, const char *value)
4850dc99b369Smrg{
4851dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__,
4852dc99b369Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
4853dc99b369Smrg                  nonnull (name), nonnull (value));
4854dc99b369Smrg  {
4855dc99b369Smrg#ifdef HAVE_SETENV
4856dc99b369Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4857dc99b369Smrg    char *str = xstrdup (value);
4858dc99b369Smrg    setenv (name, str, 1);
48595eefee25Smacallan#else
4860dc99b369Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
4861dc99b369Smrg    char *str = XMALLOC (char, len);
4862dc99b369Smrg    sprintf (str, "%s=%s", name, value);
4863dc99b369Smrg    if (putenv (str) != EXIT_SUCCESS)
4864dc99b369Smrg      {
4865dc99b369Smrg        XFREE (str);
4866dc99b369Smrg      }
48675eefee25Smacallan#endif
4868dc99b369Smrg  }
4869dc99b369Smrg}
48705eefee25Smacallan
4871dc99b369Smrgchar *
4872dc99b369Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4873dc99b369Smrg{
4874dc99b369Smrg  char *new_value;
4875dc99b369Smrg  if (orig_value && *orig_value)
4876dc99b369Smrg    {
4877dc99b369Smrg      int orig_value_len = strlen (orig_value);
4878dc99b369Smrg      int add_len = strlen (add);
4879dc99b369Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4880dc99b369Smrg      if (to_end)
4881dc99b369Smrg        {
4882dc99b369Smrg          strcpy (new_value, orig_value);
4883dc99b369Smrg          strcpy (new_value + orig_value_len, add);
4884dc99b369Smrg        }
4885dc99b369Smrg      else
4886dc99b369Smrg        {
4887dc99b369Smrg          strcpy (new_value, add);
4888dc99b369Smrg          strcpy (new_value + add_len, orig_value);
4889dc99b369Smrg        }
4890dc99b369Smrg    }
4891dc99b369Smrg  else
4892dc99b369Smrg    {
4893dc99b369Smrg      new_value = xstrdup (add);
4894dc99b369Smrg    }
4895dc99b369Smrg  return new_value;
4896dc99b369Smrg}
48975eefee25Smacallan
4898dc99b369Smrgvoid
4899dc99b369Smrglt_update_exe_path (const char *name, const char *value)
4900dc99b369Smrg{
4901dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__,
4902dc99b369Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4903dc99b369Smrg                  nonnull (name), nonnull (value));
49045eefee25Smacallan
4905dc99b369Smrg  if (name && *name && value && *value)
4906dc99b369Smrg    {
4907dc99b369Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4908dc99b369Smrg      /* some systems can't cope with a ':'-terminated path #' */
4909dc99b369Smrg      int len = strlen (new_value);
4910dc99b369Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4911dc99b369Smrg        {
4912dc99b369Smrg          new_value[len-1] = '\0';
4913dc99b369Smrg        }
4914dc99b369Smrg      lt_setenv (name, new_value);
4915dc99b369Smrg      XFREE (new_value);
4916dc99b369Smrg    }
4917dc99b369Smrg}
49185eefee25Smacallan
4919dc99b369Smrgvoid
4920dc99b369Smrglt_update_lib_path (const char *name, const char *value)
49215eefee25Smacallan{
4922dc99b369Smrg  lt_debugprintf (__FILE__, __LINE__,
4923dc99b369Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4924dc99b369Smrg                  nonnull (name), nonnull (value));
49255eefee25Smacallan
4926dc99b369Smrg  if (name && *name && value && *value)
4927dc99b369Smrg    {
4928dc99b369Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4929dc99b369Smrg      lt_setenv (name, new_value);
4930dc99b369Smrg      XFREE (new_value);
4931dc99b369Smrg    }
4932dc99b369Smrg}
49335eefee25Smacallan
49345eefee25SmacallanEOF
4935dc99b369Smrg	    case $host_os in
4936dc99b369Smrg	      mingw*)
4937dc99b369Smrg		cat <<"EOF"
4938dc99b369Smrg
4939dc99b369Smrg/* Prepares an argument vector before calling spawn().
4940dc99b369Smrg   Note that spawn() does not by itself call the command interpreter
4941dc99b369Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4942dc99b369Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4943dc99b369Smrg         GetVersionEx(&v);
4944dc99b369Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4945dc99b369Smrg      }) ? "cmd.exe" : "command.com").
4946dc99b369Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
4947dc99b369Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4948dc99b369Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4949dc99b369Smrg   special way:
4950dc99b369Smrg   - Space and tab are interpreted as delimiters. They are not treated as
4951dc99b369Smrg     delimiters if they are surrounded by double quotes: "...".
4952dc99b369Smrg   - Unescaped double quotes are removed from the input. Their only effect is
4953dc99b369Smrg     that within double quotes, space and tab are treated like normal
4954dc99b369Smrg     characters.
4955dc99b369Smrg   - Backslashes not followed by double quotes are not special.
4956dc99b369Smrg   - But 2*n+1 backslashes followed by a double quote become
4957dc99b369Smrg     n backslashes followed by a double quote (n >= 0):
4958dc99b369Smrg       \" -> "
4959dc99b369Smrg       \\\" -> \"
4960dc99b369Smrg       \\\\\" -> \\"
4961dc99b369Smrg */
4962dc99b369Smrg#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"
4963dc99b369Smrg#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"
4964dc99b369Smrgchar **
4965dc99b369Smrgprepare_spawn (char **argv)
4966dc99b369Smrg{
4967dc99b369Smrg  size_t argc;
4968dc99b369Smrg  char **new_argv;
4969dc99b369Smrg  size_t i;
49705eefee25Smacallan
4971dc99b369Smrg  /* Count number of arguments.  */
4972dc99b369Smrg  for (argc = 0; argv[argc] != NULL; argc++)
49735eefee25Smacallan    ;
49745eefee25Smacallan
4975dc99b369Smrg  /* Allocate new argument vector.  */
4976dc99b369Smrg  new_argv = XMALLOC (char *, argc + 1);
49775eefee25Smacallan
4978dc99b369Smrg  /* Put quoted arguments into the new argument vector.  */
4979dc99b369Smrg  for (i = 0; i < argc; i++)
4980dc99b369Smrg    {
4981dc99b369Smrg      const char *string = argv[i];
4982dc99b369Smrg
4983dc99b369Smrg      if (string[0] == '\0')
4984dc99b369Smrg	new_argv[i] = xstrdup ("\"\"");
4985dc99b369Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4986dc99b369Smrg	{
4987dc99b369Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4988dc99b369Smrg	  size_t length;
4989dc99b369Smrg	  unsigned int backslashes;
4990dc99b369Smrg	  const char *s;
4991dc99b369Smrg	  char *quoted_string;
4992dc99b369Smrg	  char *p;
4993dc99b369Smrg
4994dc99b369Smrg	  length = 0;
4995dc99b369Smrg	  backslashes = 0;
4996dc99b369Smrg	  if (quote_around)
4997dc99b369Smrg	    length++;
4998dc99b369Smrg	  for (s = string; *s != '\0'; s++)
4999dc99b369Smrg	    {
5000dc99b369Smrg	      char c = *s;
5001dc99b369Smrg	      if (c == '"')
5002dc99b369Smrg		length += backslashes + 1;
5003dc99b369Smrg	      length++;
5004dc99b369Smrg	      if (c == '\\')
5005dc99b369Smrg		backslashes++;
5006dc99b369Smrg	      else
5007dc99b369Smrg		backslashes = 0;
5008dc99b369Smrg	    }
5009dc99b369Smrg	  if (quote_around)
5010dc99b369Smrg	    length += backslashes + 1;
5011dc99b369Smrg
5012dc99b369Smrg	  quoted_string = XMALLOC (char, length + 1);
5013dc99b369Smrg
5014dc99b369Smrg	  p = quoted_string;
5015dc99b369Smrg	  backslashes = 0;
5016dc99b369Smrg	  if (quote_around)
5017dc99b369Smrg	    *p++ = '"';
5018dc99b369Smrg	  for (s = string; *s != '\0'; s++)
5019dc99b369Smrg	    {
5020dc99b369Smrg	      char c = *s;
5021dc99b369Smrg	      if (c == '"')
5022dc99b369Smrg		{
5023dc99b369Smrg		  unsigned int j;
5024dc99b369Smrg		  for (j = backslashes + 1; j > 0; j--)
5025dc99b369Smrg		    *p++ = '\\';
5026dc99b369Smrg		}
5027dc99b369Smrg	      *p++ = c;
5028dc99b369Smrg	      if (c == '\\')
5029dc99b369Smrg		backslashes++;
5030dc99b369Smrg	      else
5031dc99b369Smrg		backslashes = 0;
5032dc99b369Smrg	    }
5033dc99b369Smrg	  if (quote_around)
5034dc99b369Smrg	    {
5035dc99b369Smrg	      unsigned int j;
5036dc99b369Smrg	      for (j = backslashes; j > 0; j--)
5037dc99b369Smrg		*p++ = '\\';
5038dc99b369Smrg	      *p++ = '"';
5039dc99b369Smrg	    }
5040dc99b369Smrg	  *p = '\0';
5041dc99b369Smrg
5042dc99b369Smrg	  new_argv[i] = quoted_string;
5043dc99b369Smrg	}
5044dc99b369Smrg      else
5045dc99b369Smrg	new_argv[i] = (char *) string;
5046dc99b369Smrg    }
5047dc99b369Smrg  new_argv[argc] = NULL;
50485eefee25Smacallan
5049dc99b369Smrg  return new_argv;
50505eefee25Smacallan}
5051dc99b369SmrgEOF
5052dc99b369Smrg		;;
5053dc99b369Smrg	    esac
50545eefee25Smacallan
5055dc99b369Smrg            cat <<"EOF"
5056dc99b369Smrgvoid lt_dump_script (FILE* f)
50575eefee25Smacallan{
5058dc99b369SmrgEOF
5059dc99b369Smrg	    func_emit_wrapper yes |
5060dc99b369Smrg              $SED -e 's/\([\\"]\)/\\\1/g' \
5061dc99b369Smrg	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
50625eefee25Smacallan
5063dc99b369Smrg            cat <<"EOF"
50645eefee25Smacallan}
5065dc99b369SmrgEOF
50665eefee25Smacallan}
5067dc99b369Smrg# end: func_emit_cwrapperexe_src
50685eefee25Smacallan
5069dc99b369Smrg# func_win32_import_lib_p ARG
5070dc99b369Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
5071dc99b369Smrgfunc_win32_import_lib_p ()
50725eefee25Smacallan{
5073dc99b369Smrg    $opt_debug
5074dc99b369Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5075dc99b369Smrg    *import*) : ;;
5076dc99b369Smrg    *) false ;;
5077dc99b369Smrg    esac
50785eefee25Smacallan}
50795eefee25Smacallan
5080dc99b369Smrg# func_mode_link arg...
5081dc99b369Smrgfunc_mode_link ()
50825eefee25Smacallan{
5083dc99b369Smrg    $opt_debug
5084dc99b369Smrg    case $host in
5085dc99b369Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5086dc99b369Smrg      # It is impossible to link a dll without this setting, and
5087dc99b369Smrg      # we shouldn't force the makefile maintainer to figure out
5088dc99b369Smrg      # which system we are compiling for in order to pass an extra
5089dc99b369Smrg      # flag for every libtool invocation.
5090dc99b369Smrg      # allow_undefined=no
50915eefee25Smacallan
5092dc99b369Smrg      # FIXME: Unfortunately, there are problems with the above when trying
5093dc99b369Smrg      # to make a dll which has undefined symbols, in which case not
5094dc99b369Smrg      # even a static library is built.  For now, we need to specify
5095dc99b369Smrg      # -no-undefined on the libtool link line when we can be certain
5096dc99b369Smrg      # that all symbols are satisfied, otherwise we get a static library.
5097dc99b369Smrg      allow_undefined=yes
5098dc99b369Smrg      ;;
5099dc99b369Smrg    *)
5100dc99b369Smrg      allow_undefined=yes
5101dc99b369Smrg      ;;
5102dc99b369Smrg    esac
5103dc99b369Smrg    libtool_args=$nonopt
5104dc99b369Smrg    base_compile="$nonopt $@"
5105dc99b369Smrg    compile_command=$nonopt
5106dc99b369Smrg    finalize_command=$nonopt
51075eefee25Smacallan
5108dc99b369Smrg    compile_rpath=
5109dc99b369Smrg    finalize_rpath=
5110dc99b369Smrg    compile_shlibpath=
5111dc99b369Smrg    finalize_shlibpath=
5112dc99b369Smrg    convenience=
5113dc99b369Smrg    old_convenience=
5114dc99b369Smrg    deplibs=
5115dc99b369Smrg    old_deplibs=
5116dc99b369Smrg    compiler_flags=
5117dc99b369Smrg    linker_flags=
5118dc99b369Smrg    dllsearchpath=
5119dc99b369Smrg    lib_search_path=`pwd`
5120dc99b369Smrg    inst_prefix_dir=
5121dc99b369Smrg    new_inherited_linker_flags=
51225eefee25Smacallan
5123dc99b369Smrg    avoid_version=no
5124dc99b369Smrg    bindir=
5125dc99b369Smrg    dlfiles=
5126dc99b369Smrg    dlprefiles=
5127dc99b369Smrg    dlself=no
5128dc99b369Smrg    export_dynamic=no
5129dc99b369Smrg    export_symbols=
5130dc99b369Smrg    export_symbols_regex=
5131dc99b369Smrg    generated=
5132dc99b369Smrg    libobjs=
5133dc99b369Smrg    ltlibs=
5134dc99b369Smrg    module=no
5135dc99b369Smrg    no_install=no
5136dc99b369Smrg    objs=
5137dc99b369Smrg    non_pic_objects=
5138dc99b369Smrg    precious_files_regex=
5139dc99b369Smrg    prefer_static_libs=no
5140dc99b369Smrg    preload=no
5141dc99b369Smrg    prev=
5142dc99b369Smrg    prevarg=
5143dc99b369Smrg    release=
5144dc99b369Smrg    rpath=
5145dc99b369Smrg    xrpath=
5146dc99b369Smrg    perm_rpath=
5147dc99b369Smrg    temp_rpath=
5148dc99b369Smrg    thread_safe=no
5149dc99b369Smrg    vinfo=
5150dc99b369Smrg    vinfo_number=no
5151dc99b369Smrg    weak_libs=
5152dc99b369Smrg    single_module="${wl}-single_module"
5153dc99b369Smrg    func_infer_tag $base_compile
51545eefee25Smacallan
5155dc99b369Smrg    # We need to know -static, to get the right output filenames.
5156dc99b369Smrg    for arg
5157dc99b369Smrg    do
5158dc99b369Smrg      case $arg in
5159dc99b369Smrg      -shared)
5160dc99b369Smrg	test "$build_libtool_libs" != yes && \
5161dc99b369Smrg	  func_fatal_configuration "can not build a shared library"
5162dc99b369Smrg	build_old_libs=no
5163dc99b369Smrg	break
5164dc99b369Smrg	;;
5165dc99b369Smrg      -all-static | -static | -static-libtool-libs)
5166dc99b369Smrg	case $arg in
5167dc99b369Smrg	-all-static)
5168dc99b369Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5169dc99b369Smrg	    func_warning "complete static linking is impossible in this configuration"
5170dc99b369Smrg	  fi
5171dc99b369Smrg	  if test -n "$link_static_flag"; then
5172dc99b369Smrg	    dlopen_self=$dlopen_self_static
5173dc99b369Smrg	  fi
5174dc99b369Smrg	  prefer_static_libs=yes
5175dc99b369Smrg	  ;;
5176dc99b369Smrg	-static)
5177dc99b369Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5178dc99b369Smrg	    dlopen_self=$dlopen_self_static
5179dc99b369Smrg	  fi
5180dc99b369Smrg	  prefer_static_libs=built
5181dc99b369Smrg	  ;;
5182dc99b369Smrg	-static-libtool-libs)
5183dc99b369Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5184dc99b369Smrg	    dlopen_self=$dlopen_self_static
5185dc99b369Smrg	  fi
5186dc99b369Smrg	  prefer_static_libs=yes
5187dc99b369Smrg	  ;;
5188dc99b369Smrg	esac
5189dc99b369Smrg	build_libtool_libs=no
5190dc99b369Smrg	build_old_libs=yes
5191dc99b369Smrg	break
5192dc99b369Smrg	;;
5193dc99b369Smrg      esac
5194dc99b369Smrg    done
51955eefee25Smacallan
5196dc99b369Smrg    # See if our shared archives depend on static archives.
5197dc99b369Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
51985eefee25Smacallan
5199dc99b369Smrg    # Go through the arguments, transforming them on the way.
5200dc99b369Smrg    while test "$#" -gt 0; do
5201dc99b369Smrg      arg="$1"
5202dc99b369Smrg      shift
5203dc99b369Smrg      func_quote_for_eval "$arg"
5204dc99b369Smrg      qarg=$func_quote_for_eval_unquoted_result
5205dc99b369Smrg      func_append libtool_args " $func_quote_for_eval_result"
52065eefee25Smacallan
5207dc99b369Smrg      # If the previous option needs an argument, assign it.
5208dc99b369Smrg      if test -n "$prev"; then
5209dc99b369Smrg	case $prev in
5210dc99b369Smrg	output)
5211dc99b369Smrg	  func_append compile_command " @OUTPUT@"
5212dc99b369Smrg	  func_append finalize_command " @OUTPUT@"
5213dc99b369Smrg	  ;;
5214dc99b369Smrg	esac
52155eefee25Smacallan
5216dc99b369Smrg	case $prev in
5217dc99b369Smrg	bindir)
5218dc99b369Smrg	  bindir="$arg"
5219dc99b369Smrg	  prev=
5220dc99b369Smrg	  continue
5221dc99b369Smrg	  ;;
5222dc99b369Smrg	dlfiles|dlprefiles)
5223dc99b369Smrg	  if test "$preload" = no; then
5224dc99b369Smrg	    # Add the symbol object into the linking commands.
5225dc99b369Smrg	    func_append compile_command " @SYMFILE@"
5226dc99b369Smrg	    func_append finalize_command " @SYMFILE@"
5227dc99b369Smrg	    preload=yes
5228dc99b369Smrg	  fi
5229dc99b369Smrg	  case $arg in
5230dc99b369Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5231dc99b369Smrg	  force)
5232dc99b369Smrg	    if test "$dlself" = no; then
5233dc99b369Smrg	      dlself=needless
5234dc99b369Smrg	      export_dynamic=yes
5235dc99b369Smrg	    fi
5236dc99b369Smrg	    prev=
5237dc99b369Smrg	    continue
5238dc99b369Smrg	    ;;
5239dc99b369Smrg	  self)
5240dc99b369Smrg	    if test "$prev" = dlprefiles; then
5241dc99b369Smrg	      dlself=yes
5242dc99b369Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5243dc99b369Smrg	      dlself=yes
5244dc99b369Smrg	    else
5245dc99b369Smrg	      dlself=needless
5246dc99b369Smrg	      export_dynamic=yes
5247dc99b369Smrg	    fi
5248dc99b369Smrg	    prev=
5249dc99b369Smrg	    continue
5250dc99b369Smrg	    ;;
5251dc99b369Smrg	  *)
5252dc99b369Smrg	    if test "$prev" = dlfiles; then
5253dc99b369Smrg	      func_append dlfiles " $arg"
5254dc99b369Smrg	    else
5255dc99b369Smrg	      func_append dlprefiles " $arg"
5256dc99b369Smrg	    fi
5257dc99b369Smrg	    prev=
5258dc99b369Smrg	    continue
5259dc99b369Smrg	    ;;
5260dc99b369Smrg	  esac
5261dc99b369Smrg	  ;;
5262dc99b369Smrg	expsyms)
5263dc99b369Smrg	  export_symbols="$arg"
5264dc99b369Smrg	  test -f "$arg" \
5265dc99b369Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5266dc99b369Smrg	  prev=
5267dc99b369Smrg	  continue
5268dc99b369Smrg	  ;;
5269dc99b369Smrg	expsyms_regex)
5270dc99b369Smrg	  export_symbols_regex="$arg"
5271dc99b369Smrg	  prev=
5272dc99b369Smrg	  continue
5273dc99b369Smrg	  ;;
5274dc99b369Smrg	framework)
5275dc99b369Smrg	  case $host in
5276dc99b369Smrg	    *-*-darwin*)
5277dc99b369Smrg	      case "$deplibs " in
5278dc99b369Smrg		*" $qarg.ltframework "*) ;;
5279dc99b369Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5280dc99b369Smrg		   ;;
5281dc99b369Smrg	      esac
5282dc99b369Smrg	      ;;
5283dc99b369Smrg	  esac
5284dc99b369Smrg	  prev=
5285dc99b369Smrg	  continue
5286dc99b369Smrg	  ;;
5287dc99b369Smrg	inst_prefix)
5288dc99b369Smrg	  inst_prefix_dir="$arg"
5289dc99b369Smrg	  prev=
5290dc99b369Smrg	  continue
5291dc99b369Smrg	  ;;
5292dc99b369Smrg	objectlist)
5293dc99b369Smrg	  if test -f "$arg"; then
5294dc99b369Smrg	    save_arg=$arg
5295dc99b369Smrg	    moreargs=
5296dc99b369Smrg	    for fil in `cat "$save_arg"`
5297dc99b369Smrg	    do
5298dc99b369Smrg#	      func_append moreargs " $fil"
5299dc99b369Smrg	      arg=$fil
5300dc99b369Smrg	      # A libtool-controlled object.
53015eefee25Smacallan
5302dc99b369Smrg	      # Check to see that this really is a libtool object.
5303dc99b369Smrg	      if func_lalib_unsafe_p "$arg"; then
5304dc99b369Smrg		pic_object=
5305dc99b369Smrg		non_pic_object=
53065eefee25Smacallan
5307dc99b369Smrg		# Read the .lo file
5308dc99b369Smrg		func_source "$arg"
53095eefee25Smacallan
5310dc99b369Smrg		if test -z "$pic_object" ||
5311dc99b369Smrg		   test -z "$non_pic_object" ||
5312dc99b369Smrg		   test "$pic_object" = none &&
5313dc99b369Smrg		   test "$non_pic_object" = none; then
5314dc99b369Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
5315dc99b369Smrg		fi
53165eefee25Smacallan
5317dc99b369Smrg		# Extract subdirectory from the argument.
5318dc99b369Smrg		func_dirname "$arg" "/" ""
5319dc99b369Smrg		xdir="$func_dirname_result"
53205eefee25Smacallan
5321dc99b369Smrg		if test "$pic_object" != none; then
5322dc99b369Smrg		  # Prepend the subdirectory the object is found in.
5323dc99b369Smrg		  pic_object="$xdir$pic_object"
53245eefee25Smacallan
5325dc99b369Smrg		  if test "$prev" = dlfiles; then
5326dc99b369Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5327dc99b369Smrg		      func_append dlfiles " $pic_object"
5328dc99b369Smrg		      prev=
5329dc99b369Smrg		      continue
5330dc99b369Smrg		    else
5331dc99b369Smrg		      # If libtool objects are unsupported, then we need to preload.
5332dc99b369Smrg		      prev=dlprefiles
5333dc99b369Smrg		    fi
5334dc99b369Smrg		  fi
53355eefee25Smacallan
5336dc99b369Smrg		  # CHECK ME:  I think I busted this.  -Ossama
5337dc99b369Smrg		  if test "$prev" = dlprefiles; then
5338dc99b369Smrg		    # Preload the old-style object.
5339dc99b369Smrg		    func_append dlprefiles " $pic_object"
5340dc99b369Smrg		    prev=
5341dc99b369Smrg		  fi
534262ab96baSmrg
5343dc99b369Smrg		  # A PIC object.
5344dc99b369Smrg		  func_append libobjs " $pic_object"
5345dc99b369Smrg		  arg="$pic_object"
5346dc99b369Smrg		fi
53475eefee25Smacallan
5348dc99b369Smrg		# Non-PIC object.
5349dc99b369Smrg		if test "$non_pic_object" != none; then
5350dc99b369Smrg		  # Prepend the subdirectory the object is found in.
5351dc99b369Smrg		  non_pic_object="$xdir$non_pic_object"
53525eefee25Smacallan
5353dc99b369Smrg		  # A standard non-PIC object
5354dc99b369Smrg		  func_append non_pic_objects " $non_pic_object"
5355dc99b369Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5356dc99b369Smrg		    arg="$non_pic_object"
5357dc99b369Smrg		  fi
5358dc99b369Smrg		else
5359dc99b369Smrg		  # If the PIC object exists, use it instead.
5360dc99b369Smrg		  # $xdir was prepended to $pic_object above.
5361dc99b369Smrg		  non_pic_object="$pic_object"
5362dc99b369Smrg		  func_append non_pic_objects " $non_pic_object"
5363dc99b369Smrg		fi
5364dc99b369Smrg	      else
5365dc99b369Smrg		# Only an error if not doing a dry-run.
5366dc99b369Smrg		if $opt_dry_run; then
5367dc99b369Smrg		  # Extract subdirectory from the argument.
5368dc99b369Smrg		  func_dirname "$arg" "/" ""
5369dc99b369Smrg		  xdir="$func_dirname_result"
5370dc99b369Smrg
5371dc99b369Smrg		  func_lo2o "$arg"
5372dc99b369Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5373dc99b369Smrg		  non_pic_object=$xdir$func_lo2o_result
5374dc99b369Smrg		  func_append libobjs " $pic_object"
5375dc99b369Smrg		  func_append non_pic_objects " $non_pic_object"
5376dc99b369Smrg	        else
5377dc99b369Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5378dc99b369Smrg		fi
5379dc99b369Smrg	      fi
5380dc99b369Smrg	    done
5381dc99b369Smrg	  else
5382dc99b369Smrg	    func_fatal_error "link input file \`$arg' does not exist"
5383dc99b369Smrg	  fi
5384dc99b369Smrg	  arg=$save_arg
5385dc99b369Smrg	  prev=
5386dc99b369Smrg	  continue
5387dc99b369Smrg	  ;;
5388dc99b369Smrg	precious_regex)
5389dc99b369Smrg	  precious_files_regex="$arg"
5390dc99b369Smrg	  prev=
5391dc99b369Smrg	  continue
5392dc99b369Smrg	  ;;
5393dc99b369Smrg	release)
5394dc99b369Smrg	  release="-$arg"
5395dc99b369Smrg	  prev=
5396dc99b369Smrg	  continue
5397dc99b369Smrg	  ;;
5398dc99b369Smrg	rpath | xrpath)
5399dc99b369Smrg	  # We need an absolute path.
5400dc99b369Smrg	  case $arg in
5401dc99b369Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5402dc99b369Smrg	  *)
5403dc99b369Smrg	    func_fatal_error "only absolute run-paths are allowed"
5404dc99b369Smrg	    ;;
5405dc99b369Smrg	  esac
5406dc99b369Smrg	  if test "$prev" = rpath; then
5407dc99b369Smrg	    case "$rpath " in
5408dc99b369Smrg	    *" $arg "*) ;;
5409dc99b369Smrg	    *) func_append rpath " $arg" ;;
5410dc99b369Smrg	    esac
5411dc99b369Smrg	  else
5412dc99b369Smrg	    case "$xrpath " in
5413dc99b369Smrg	    *" $arg "*) ;;
5414dc99b369Smrg	    *) func_append xrpath " $arg" ;;
5415dc99b369Smrg	    esac
5416dc99b369Smrg	  fi
5417dc99b369Smrg	  prev=
5418dc99b369Smrg	  continue
5419dc99b369Smrg	  ;;
5420dc99b369Smrg	shrext)
5421dc99b369Smrg	  shrext_cmds="$arg"
5422dc99b369Smrg	  prev=
5423dc99b369Smrg	  continue
5424dc99b369Smrg	  ;;
5425dc99b369Smrg	weak)
5426dc99b369Smrg	  func_append weak_libs " $arg"
5427dc99b369Smrg	  prev=
5428dc99b369Smrg	  continue
5429dc99b369Smrg	  ;;
5430dc99b369Smrg	xcclinker)
5431dc99b369Smrg	  func_append linker_flags " $qarg"
5432dc99b369Smrg	  func_append compiler_flags " $qarg"
5433dc99b369Smrg	  prev=
5434dc99b369Smrg	  func_append compile_command " $qarg"
5435dc99b369Smrg	  func_append finalize_command " $qarg"
5436dc99b369Smrg	  continue
5437dc99b369Smrg	  ;;
5438dc99b369Smrg	xcompiler)
5439dc99b369Smrg	  func_append compiler_flags " $qarg"
5440dc99b369Smrg	  prev=
5441dc99b369Smrg	  func_append compile_command " $qarg"
5442dc99b369Smrg	  func_append finalize_command " $qarg"
5443dc99b369Smrg	  continue
5444dc99b369Smrg	  ;;
5445dc99b369Smrg	xlinker)
5446dc99b369Smrg	  func_append linker_flags " $qarg"
5447dc99b369Smrg	  func_append compiler_flags " $wl$qarg"
5448dc99b369Smrg	  prev=
5449dc99b369Smrg	  func_append compile_command " $wl$qarg"
5450dc99b369Smrg	  func_append finalize_command " $wl$qarg"
5451dc99b369Smrg	  continue
5452dc99b369Smrg	  ;;
5453dc99b369Smrg	*)
5454dc99b369Smrg	  eval "$prev=\"\$arg\""
5455dc99b369Smrg	  prev=
5456dc99b369Smrg	  continue
5457dc99b369Smrg	  ;;
5458dc99b369Smrg	esac
5459dc99b369Smrg      fi # test -n "$prev"
54605eefee25Smacallan
5461dc99b369Smrg      prevarg="$arg"
54625eefee25Smacallan
5463dc99b369Smrg      case $arg in
5464dc99b369Smrg      -all-static)
5465dc99b369Smrg	if test -n "$link_static_flag"; then
5466dc99b369Smrg	  # See comment for -static flag below, for more details.
5467dc99b369Smrg	  func_append compile_command " $link_static_flag"
5468dc99b369Smrg	  func_append finalize_command " $link_static_flag"
5469dc99b369Smrg	fi
5470dc99b369Smrg	continue
5471dc99b369Smrg	;;
54725eefee25Smacallan
5473dc99b369Smrg      -allow-undefined)
5474dc99b369Smrg	# FIXME: remove this flag sometime in the future.
5475dc99b369Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5476dc99b369Smrg	;;
54775eefee25Smacallan
5478dc99b369Smrg      -avoid-version)
5479dc99b369Smrg	avoid_version=yes
5480dc99b369Smrg	continue
5481dc99b369Smrg	;;
54825eefee25Smacallan
5483dc99b369Smrg      -bindir)
5484dc99b369Smrg	prev=bindir
5485dc99b369Smrg	continue
5486dc99b369Smrg	;;
5487dc99b369Smrg
5488dc99b369Smrg      -dlopen)
5489dc99b369Smrg	prev=dlfiles
5490dc99b369Smrg	continue
5491dc99b369Smrg	;;
5492dc99b369Smrg
5493dc99b369Smrg      -dlpreopen)
5494dc99b369Smrg	prev=dlprefiles
5495dc99b369Smrg	continue
5496dc99b369Smrg	;;
5497dc99b369Smrg
5498dc99b369Smrg      -export-dynamic)
5499dc99b369Smrg	export_dynamic=yes
5500dc99b369Smrg	continue
5501dc99b369Smrg	;;
5502dc99b369Smrg
5503dc99b369Smrg      -export-symbols | -export-symbols-regex)
5504dc99b369Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5505dc99b369Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5506dc99b369Smrg	fi
5507dc99b369Smrg	if test "X$arg" = "X-export-symbols"; then
5508dc99b369Smrg	  prev=expsyms
5509dc99b369Smrg	else
5510dc99b369Smrg	  prev=expsyms_regex
5511dc99b369Smrg	fi
5512dc99b369Smrg	continue
5513dc99b369Smrg	;;
5514dc99b369Smrg
5515dc99b369Smrg      -framework)
5516dc99b369Smrg	prev=framework
5517dc99b369Smrg	continue
5518dc99b369Smrg	;;
5519dc99b369Smrg
5520dc99b369Smrg      -inst-prefix-dir)
5521dc99b369Smrg	prev=inst_prefix
5522dc99b369Smrg	continue
5523dc99b369Smrg	;;
5524dc99b369Smrg
5525dc99b369Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5526dc99b369Smrg      # so, if we see these flags be careful not to treat them like -L
5527dc99b369Smrg      -L[A-Z][A-Z]*:*)
5528dc99b369Smrg	case $with_gcc/$host in
5529dc99b369Smrg	no/*-*-irix* | /*-*-irix*)
5530dc99b369Smrg	  func_append compile_command " $arg"
5531dc99b369Smrg	  func_append finalize_command " $arg"
5532dc99b369Smrg	  ;;
5533dc99b369Smrg	esac
5534dc99b369Smrg	continue
5535dc99b369Smrg	;;
5536dc99b369Smrg
5537dc99b369Smrg      -L*)
5538dc99b369Smrg	func_stripname "-L" '' "$arg"
5539dc99b369Smrg	if test -z "$func_stripname_result"; then
5540dc99b369Smrg	  if test "$#" -gt 0; then
5541dc99b369Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5542dc99b369Smrg	  else
5543dc99b369Smrg	    func_fatal_error "need path for \`-L' option"
5544dc99b369Smrg	  fi
5545dc99b369Smrg	fi
5546dc99b369Smrg	func_resolve_sysroot "$func_stripname_result"
5547dc99b369Smrg	dir=$func_resolve_sysroot_result
5548dc99b369Smrg	# We need an absolute path.
5549dc99b369Smrg	case $dir in
5550dc99b369Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5551dc99b369Smrg	*)
5552dc99b369Smrg	  absdir=`cd "$dir" && pwd`
5553dc99b369Smrg	  test -z "$absdir" && \
5554dc99b369Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5555dc99b369Smrg	  dir="$absdir"
5556dc99b369Smrg	  ;;
5557dc99b369Smrg	esac
5558dc99b369Smrg	case "$deplibs " in
5559dc99b369Smrg	*" -L$dir "* | *" $arg "*)
5560dc99b369Smrg	  # Will only happen for absolute or sysroot arguments
5561dc99b369Smrg	  ;;
5562dc99b369Smrg	*)
5563dc99b369Smrg	  # Preserve sysroot, but never include relative directories
5564dc99b369Smrg	  case $dir in
5565dc99b369Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5566dc99b369Smrg	    *) func_append deplibs " -L$dir" ;;
5567dc99b369Smrg	  esac
5568dc99b369Smrg	  func_append lib_search_path " $dir"
5569dc99b369Smrg	  ;;
5570dc99b369Smrg	esac
5571dc99b369Smrg	case $host in
5572dc99b369Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5573dc99b369Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5574dc99b369Smrg	  case :$dllsearchpath: in
5575dc99b369Smrg	  *":$dir:"*) ;;
5576dc99b369Smrg	  ::) dllsearchpath=$dir;;
5577dc99b369Smrg	  *) func_append dllsearchpath ":$dir";;
5578dc99b369Smrg	  esac
5579dc99b369Smrg	  case :$dllsearchpath: in
5580dc99b369Smrg	  *":$testbindir:"*) ;;
5581dc99b369Smrg	  ::) dllsearchpath=$testbindir;;
5582dc99b369Smrg	  *) func_append dllsearchpath ":$testbindir";;
5583dc99b369Smrg	  esac
5584dc99b369Smrg	  ;;
5585dc99b369Smrg	esac
5586dc99b369Smrg	continue
5587dc99b369Smrg	;;
5588dc99b369Smrg
5589dc99b369Smrg      -l*)
5590dc99b369Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5591dc99b369Smrg	  case $host in
5592dc99b369Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5593dc99b369Smrg	    # These systems don't actually have a C or math library (as such)
5594dc99b369Smrg	    continue
5595dc99b369Smrg	    ;;
5596dc99b369Smrg	  *-*-os2*)
5597dc99b369Smrg	    # These systems don't actually have a C library (as such)
5598dc99b369Smrg	    test "X$arg" = "X-lc" && continue
5599dc99b369Smrg	    ;;
5600dc99b369Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5601dc99b369Smrg	    # Do not include libc due to us having libc/libc_r.
5602dc99b369Smrg	    test "X$arg" = "X-lc" && continue
5603dc99b369Smrg	    ;;
5604dc99b369Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5605dc99b369Smrg	    # Rhapsody C and math libraries are in the System framework
5606dc99b369Smrg	    func_append deplibs " System.ltframework"
5607dc99b369Smrg	    continue
5608dc99b369Smrg	    ;;
5609dc99b369Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5610dc99b369Smrg	    # Causes problems with __ctype
5611dc99b369Smrg	    test "X$arg" = "X-lc" && continue
5612dc99b369Smrg	    ;;
5613dc99b369Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5614dc99b369Smrg	    # Compiler inserts libc in the correct place for threads to work
5615dc99b369Smrg	    test "X$arg" = "X-lc" && continue
5616dc99b369Smrg	    ;;
5617dc99b369Smrg	  esac
5618dc99b369Smrg	elif test "X$arg" = "X-lc_r"; then
5619dc99b369Smrg	 case $host in
5620dc99b369Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5621dc99b369Smrg	   # Do not include libc_r directly, use -pthread flag.
5622dc99b369Smrg	   continue
5623dc99b369Smrg	   ;;
5624dc99b369Smrg	 esac
5625dc99b369Smrg	fi
5626dc99b369Smrg	func_append deplibs " $arg"
5627dc99b369Smrg	continue
5628dc99b369Smrg	;;
5629dc99b369Smrg
5630dc99b369Smrg      -module)
5631dc99b369Smrg	module=yes
5632dc99b369Smrg	continue
5633dc99b369Smrg	;;
5634dc99b369Smrg
5635dc99b369Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5636dc99b369Smrg      # classes, name mangling, and exception handling.
5637dc99b369Smrg      # Darwin uses the -arch flag to determine output architecture.
5638dc99b369Smrg      -model|-arch|-isysroot|--sysroot)
5639dc99b369Smrg	func_append compiler_flags " $arg"
5640dc99b369Smrg	func_append compile_command " $arg"
5641dc99b369Smrg	func_append finalize_command " $arg"
5642dc99b369Smrg	prev=xcompiler
5643dc99b369Smrg	continue
5644dc99b369Smrg	;;
5645dc99b369Smrg
5646dc99b369Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
5647dc99b369Smrg	func_append compiler_flags " $arg"
5648dc99b369Smrg	func_append compile_command " $arg"
5649dc99b369Smrg	func_append finalize_command " $arg"
5650dc99b369Smrg	case "$new_inherited_linker_flags " in
5651dc99b369Smrg	    *" $arg "*) ;;
5652dc99b369Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5653dc99b369Smrg	esac
5654dc99b369Smrg	continue
5655dc99b369Smrg	;;
5656dc99b369Smrg
5657dc99b369Smrg      -multi_module)
5658dc99b369Smrg	single_module="${wl}-multi_module"
5659dc99b369Smrg	continue
5660dc99b369Smrg	;;
5661dc99b369Smrg
5662dc99b369Smrg      -no-fast-install)
5663dc99b369Smrg	fast_install=no
5664dc99b369Smrg	continue
5665dc99b369Smrg	;;
5666dc99b369Smrg
5667dc99b369Smrg      -no-install)
5668dc99b369Smrg	case $host in
5669dc99b369Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5670dc99b369Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5671dc99b369Smrg	  # and Darwin in order for the loader to find any dlls it needs.
5672dc99b369Smrg	  func_warning "\`-no-install' is ignored for $host"
5673dc99b369Smrg	  func_warning "assuming \`-no-fast-install' instead"
5674dc99b369Smrg	  fast_install=no
5675dc99b369Smrg	  ;;
5676dc99b369Smrg	*) no_install=yes ;;
5677dc99b369Smrg	esac
5678dc99b369Smrg	continue
5679dc99b369Smrg	;;
5680dc99b369Smrg
5681dc99b369Smrg      -no-undefined)
5682dc99b369Smrg	allow_undefined=no
5683dc99b369Smrg	continue
5684dc99b369Smrg	;;
5685dc99b369Smrg
5686dc99b369Smrg      -objectlist)
5687dc99b369Smrg	prev=objectlist
5688dc99b369Smrg	continue
5689dc99b369Smrg	;;
5690dc99b369Smrg
5691dc99b369Smrg      -o) prev=output ;;
5692dc99b369Smrg
5693dc99b369Smrg      -precious-files-regex)
5694dc99b369Smrg	prev=precious_regex
5695dc99b369Smrg	continue
5696dc99b369Smrg	;;
5697dc99b369Smrg
5698dc99b369Smrg      -release)
5699dc99b369Smrg	prev=release
5700dc99b369Smrg	continue
5701dc99b369Smrg	;;
5702dc99b369Smrg
5703dc99b369Smrg      -rpath)
5704dc99b369Smrg	prev=rpath
5705dc99b369Smrg	continue
5706dc99b369Smrg	;;
5707dc99b369Smrg
5708dc99b369Smrg      -R)
5709dc99b369Smrg	prev=xrpath
5710dc99b369Smrg	continue
5711dc99b369Smrg	;;
5712dc99b369Smrg
5713dc99b369Smrg      -R*)
5714dc99b369Smrg	func_stripname '-R' '' "$arg"
5715dc99b369Smrg	dir=$func_stripname_result
5716dc99b369Smrg	# We need an absolute path.
5717dc99b369Smrg	case $dir in
5718dc99b369Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5719dc99b369Smrg	=*)
5720dc99b369Smrg	  func_stripname '=' '' "$dir"
5721dc99b369Smrg	  dir=$lt_sysroot$func_stripname_result
5722dc99b369Smrg	  ;;
5723dc99b369Smrg	*)
5724dc99b369Smrg	  func_fatal_error "only absolute run-paths are allowed"
5725dc99b369Smrg	  ;;
5726dc99b369Smrg	esac
5727dc99b369Smrg	case "$xrpath " in
5728dc99b369Smrg	*" $dir "*) ;;
5729dc99b369Smrg	*) func_append xrpath " $dir" ;;
5730dc99b369Smrg	esac
5731dc99b369Smrg	continue
5732dc99b369Smrg	;;
5733dc99b369Smrg
5734dc99b369Smrg      -shared)
5735dc99b369Smrg	# The effects of -shared are defined in a previous loop.
5736dc99b369Smrg	continue
5737dc99b369Smrg	;;
5738dc99b369Smrg
5739dc99b369Smrg      -shrext)
5740dc99b369Smrg	prev=shrext
5741dc99b369Smrg	continue
5742dc99b369Smrg	;;
5743dc99b369Smrg
5744dc99b369Smrg      -static | -static-libtool-libs)
5745dc99b369Smrg	# The effects of -static are defined in a previous loop.
5746dc99b369Smrg	# We used to do the same as -all-static on platforms that
5747dc99b369Smrg	# didn't have a PIC flag, but the assumption that the effects
5748dc99b369Smrg	# would be equivalent was wrong.  It would break on at least
5749dc99b369Smrg	# Digital Unix and AIX.
5750dc99b369Smrg	continue
5751dc99b369Smrg	;;
5752dc99b369Smrg
5753dc99b369Smrg      -thread-safe)
5754dc99b369Smrg	thread_safe=yes
5755dc99b369Smrg	continue
5756dc99b369Smrg	;;
5757dc99b369Smrg
5758dc99b369Smrg      -version-info)
5759dc99b369Smrg	prev=vinfo
5760dc99b369Smrg	continue
5761dc99b369Smrg	;;
5762dc99b369Smrg
5763dc99b369Smrg      -version-number)
5764dc99b369Smrg	prev=vinfo
5765dc99b369Smrg	vinfo_number=yes
5766dc99b369Smrg	continue
5767dc99b369Smrg	;;
5768dc99b369Smrg
5769dc99b369Smrg      -weak)
5770dc99b369Smrg        prev=weak
5771dc99b369Smrg	continue
5772dc99b369Smrg	;;
5773dc99b369Smrg
5774dc99b369Smrg      -Wc,*)
5775dc99b369Smrg	func_stripname '-Wc,' '' "$arg"
5776dc99b369Smrg	args=$func_stripname_result
5777dc99b369Smrg	arg=
5778dc99b369Smrg	save_ifs="$IFS"; IFS=','
5779dc99b369Smrg	for flag in $args; do
5780dc99b369Smrg	  IFS="$save_ifs"
5781dc99b369Smrg          func_quote_for_eval "$flag"
5782dc99b369Smrg	  func_append arg " $func_quote_for_eval_result"
5783dc99b369Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
5784dc99b369Smrg	done
5785dc99b369Smrg	IFS="$save_ifs"
5786dc99b369Smrg	func_stripname ' ' '' "$arg"
5787dc99b369Smrg	arg=$func_stripname_result
5788dc99b369Smrg	;;
5789dc99b369Smrg
5790dc99b369Smrg      -Wl,*)
5791dc99b369Smrg	func_stripname '-Wl,' '' "$arg"
5792dc99b369Smrg	args=$func_stripname_result
5793dc99b369Smrg	arg=
5794dc99b369Smrg	save_ifs="$IFS"; IFS=','
5795dc99b369Smrg	for flag in $args; do
5796dc99b369Smrg	  IFS="$save_ifs"
5797dc99b369Smrg          func_quote_for_eval "$flag"
5798dc99b369Smrg	  func_append arg " $wl$func_quote_for_eval_result"
5799dc99b369Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5800dc99b369Smrg	  func_append linker_flags " $func_quote_for_eval_result"
5801dc99b369Smrg	done
5802dc99b369Smrg	IFS="$save_ifs"
5803dc99b369Smrg	func_stripname ' ' '' "$arg"
5804dc99b369Smrg	arg=$func_stripname_result
5805dc99b369Smrg	;;
5806dc99b369Smrg
5807dc99b369Smrg      -Xcompiler)
5808dc99b369Smrg	prev=xcompiler
5809dc99b369Smrg	continue
5810dc99b369Smrg	;;
5811dc99b369Smrg
5812dc99b369Smrg      -Xlinker)
5813dc99b369Smrg	prev=xlinker
5814dc99b369Smrg	continue
5815dc99b369Smrg	;;
5816dc99b369Smrg
5817dc99b369Smrg      -XCClinker)
5818dc99b369Smrg	prev=xcclinker
5819dc99b369Smrg	continue
5820dc99b369Smrg	;;
5821dc99b369Smrg
5822dc99b369Smrg      # -msg_* for osf cc
5823dc99b369Smrg      -msg_*)
5824dc99b369Smrg	func_quote_for_eval "$arg"
5825dc99b369Smrg	arg="$func_quote_for_eval_result"
5826dc99b369Smrg	;;
5827dc99b369Smrg
5828dc99b369Smrg      # Flags to be passed through unchanged, with rationale:
5829dc99b369Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5830dc99b369Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
5831dc99b369Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5832dc99b369Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5833dc99b369Smrg      # -q*                  compiler args for the IBM compiler
5834dc99b369Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5835dc99b369Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
5836dc99b369Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5837dc99b369Smrg      # @file                GCC response files
5838dc99b369Smrg      # -tp=*                Portland pgcc target processor selection
5839dc99b369Smrg      # --sysroot=*          for sysroot support
5840dc99b369Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5841dc99b369Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5842dc99b369Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
5843dc99b369Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5844dc99b369Smrg        func_quote_for_eval "$arg"
5845dc99b369Smrg	arg="$func_quote_for_eval_result"
5846dc99b369Smrg        func_append compile_command " $arg"
5847dc99b369Smrg        func_append finalize_command " $arg"
5848dc99b369Smrg        func_append compiler_flags " $arg"
5849dc99b369Smrg        continue
5850dc99b369Smrg        ;;
5851dc99b369Smrg
5852dc99b369Smrg      # Some other compiler flag.
5853dc99b369Smrg      -* | +*)
5854dc99b369Smrg        func_quote_for_eval "$arg"
5855dc99b369Smrg	arg="$func_quote_for_eval_result"
5856dc99b369Smrg	;;
5857dc99b369Smrg
5858dc99b369Smrg      *.$objext)
5859dc99b369Smrg	# A standard object.
5860dc99b369Smrg	func_append objs " $arg"
5861dc99b369Smrg	;;
5862dc99b369Smrg
5863dc99b369Smrg      *.lo)
5864dc99b369Smrg	# A libtool-controlled object.
5865dc99b369Smrg
5866dc99b369Smrg	# Check to see that this really is a libtool object.
5867dc99b369Smrg	if func_lalib_unsafe_p "$arg"; then
5868dc99b369Smrg	  pic_object=
5869dc99b369Smrg	  non_pic_object=
5870dc99b369Smrg
5871dc99b369Smrg	  # Read the .lo file
5872dc99b369Smrg	  func_source "$arg"
5873dc99b369Smrg
5874dc99b369Smrg	  if test -z "$pic_object" ||
5875dc99b369Smrg	     test -z "$non_pic_object" ||
5876dc99b369Smrg	     test "$pic_object" = none &&
5877dc99b369Smrg	     test "$non_pic_object" = none; then
5878dc99b369Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
5879dc99b369Smrg	  fi
5880dc99b369Smrg
5881dc99b369Smrg	  # Extract subdirectory from the argument.
5882dc99b369Smrg	  func_dirname "$arg" "/" ""
5883dc99b369Smrg	  xdir="$func_dirname_result"
5884dc99b369Smrg
5885dc99b369Smrg	  if test "$pic_object" != none; then
5886dc99b369Smrg	    # Prepend the subdirectory the object is found in.
5887dc99b369Smrg	    pic_object="$xdir$pic_object"
5888dc99b369Smrg
5889dc99b369Smrg	    if test "$prev" = dlfiles; then
5890dc99b369Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5891dc99b369Smrg		func_append dlfiles " $pic_object"
5892dc99b369Smrg		prev=
5893dc99b369Smrg		continue
5894dc99b369Smrg	      else
5895dc99b369Smrg		# If libtool objects are unsupported, then we need to preload.
5896dc99b369Smrg		prev=dlprefiles
5897dc99b369Smrg	      fi
5898dc99b369Smrg	    fi
5899dc99b369Smrg
5900dc99b369Smrg	    # CHECK ME:  I think I busted this.  -Ossama
5901dc99b369Smrg	    if test "$prev" = dlprefiles; then
5902dc99b369Smrg	      # Preload the old-style object.
5903dc99b369Smrg	      func_append dlprefiles " $pic_object"
5904dc99b369Smrg	      prev=
5905dc99b369Smrg	    fi
5906dc99b369Smrg
5907dc99b369Smrg	    # A PIC object.
5908dc99b369Smrg	    func_append libobjs " $pic_object"
5909dc99b369Smrg	    arg="$pic_object"
5910dc99b369Smrg	  fi
5911dc99b369Smrg
5912dc99b369Smrg	  # Non-PIC object.
5913dc99b369Smrg	  if test "$non_pic_object" != none; then
5914dc99b369Smrg	    # Prepend the subdirectory the object is found in.
5915dc99b369Smrg	    non_pic_object="$xdir$non_pic_object"
5916dc99b369Smrg
5917dc99b369Smrg	    # A standard non-PIC object
5918dc99b369Smrg	    func_append non_pic_objects " $non_pic_object"
5919dc99b369Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5920dc99b369Smrg	      arg="$non_pic_object"
5921dc99b369Smrg	    fi
5922dc99b369Smrg	  else
5923dc99b369Smrg	    # If the PIC object exists, use it instead.
5924dc99b369Smrg	    # $xdir was prepended to $pic_object above.
5925dc99b369Smrg	    non_pic_object="$pic_object"
5926dc99b369Smrg	    func_append non_pic_objects " $non_pic_object"
5927dc99b369Smrg	  fi
5928dc99b369Smrg	else
5929dc99b369Smrg	  # Only an error if not doing a dry-run.
5930dc99b369Smrg	  if $opt_dry_run; then
5931dc99b369Smrg	    # Extract subdirectory from the argument.
5932dc99b369Smrg	    func_dirname "$arg" "/" ""
5933dc99b369Smrg	    xdir="$func_dirname_result"
5934dc99b369Smrg
5935dc99b369Smrg	    func_lo2o "$arg"
5936dc99b369Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5937dc99b369Smrg	    non_pic_object=$xdir$func_lo2o_result
5938dc99b369Smrg	    func_append libobjs " $pic_object"
5939dc99b369Smrg	    func_append non_pic_objects " $non_pic_object"
5940dc99b369Smrg	  else
5941dc99b369Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5942dc99b369Smrg	  fi
5943dc99b369Smrg	fi
5944dc99b369Smrg	;;
5945dc99b369Smrg
5946dc99b369Smrg      *.$libext)
5947dc99b369Smrg	# An archive.
5948dc99b369Smrg	func_append deplibs " $arg"
5949dc99b369Smrg	func_append old_deplibs " $arg"
5950dc99b369Smrg	continue
5951dc99b369Smrg	;;
5952dc99b369Smrg
5953dc99b369Smrg      *.la)
5954dc99b369Smrg	# A libtool-controlled library.
5955dc99b369Smrg
5956dc99b369Smrg	func_resolve_sysroot "$arg"
5957dc99b369Smrg	if test "$prev" = dlfiles; then
5958dc99b369Smrg	  # This library was specified with -dlopen.
5959dc99b369Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
5960dc99b369Smrg	  prev=
5961dc99b369Smrg	elif test "$prev" = dlprefiles; then
5962dc99b369Smrg	  # The library was specified with -dlpreopen.
5963dc99b369Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5964dc99b369Smrg	  prev=
5965dc99b369Smrg	else
5966dc99b369Smrg	  func_append deplibs " $func_resolve_sysroot_result"
5967dc99b369Smrg	fi
5968dc99b369Smrg	continue
5969dc99b369Smrg	;;
5970dc99b369Smrg
5971dc99b369Smrg      # Some other compiler argument.
5972dc99b369Smrg      *)
5973dc99b369Smrg	# Unknown arguments in both finalize_command and compile_command need
5974dc99b369Smrg	# to be aesthetically quoted because they are evaled later.
5975dc99b369Smrg	func_quote_for_eval "$arg"
5976dc99b369Smrg	arg="$func_quote_for_eval_result"
5977dc99b369Smrg	;;
5978dc99b369Smrg      esac # arg
5979dc99b369Smrg
5980dc99b369Smrg      # Now actually substitute the argument into the commands.
5981dc99b369Smrg      if test -n "$arg"; then
5982dc99b369Smrg	func_append compile_command " $arg"
5983dc99b369Smrg	func_append finalize_command " $arg"
5984dc99b369Smrg      fi
5985dc99b369Smrg    done # argument parsing loop
5986dc99b369Smrg
5987dc99b369Smrg    test -n "$prev" && \
5988dc99b369Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
5989dc99b369Smrg
5990dc99b369Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
5991dc99b369Smrg      eval arg=\"$export_dynamic_flag_spec\"
5992dc99b369Smrg      func_append compile_command " $arg"
5993dc99b369Smrg      func_append finalize_command " $arg"
5994dc99b369Smrg    fi
5995dc99b369Smrg
5996dc99b369Smrg    oldlibs=
5997dc99b369Smrg    # calculate the name of the file, without its directory
5998dc99b369Smrg    func_basename "$output"
5999dc99b369Smrg    outputname="$func_basename_result"
6000dc99b369Smrg    libobjs_save="$libobjs"
6001dc99b369Smrg
6002dc99b369Smrg    if test -n "$shlibpath_var"; then
6003dc99b369Smrg      # get the directories listed in $shlibpath_var
6004dc99b369Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6005dc99b369Smrg    else
6006dc99b369Smrg      shlib_search_path=
6007dc99b369Smrg    fi
6008dc99b369Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6009dc99b369Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6010dc99b369Smrg
6011dc99b369Smrg    func_dirname "$output" "/" ""
6012dc99b369Smrg    output_objdir="$func_dirname_result$objdir"
6013dc99b369Smrg    func_to_tool_file "$output_objdir/"
6014dc99b369Smrg    tool_output_objdir=$func_to_tool_file_result
6015dc99b369Smrg    # Create the object directory.
6016dc99b369Smrg    func_mkdir_p "$output_objdir"
6017dc99b369Smrg
6018dc99b369Smrg    # Determine the type of output
6019dc99b369Smrg    case $output in
6020dc99b369Smrg    "")
6021dc99b369Smrg      func_fatal_help "you must specify an output file"
6022dc99b369Smrg      ;;
6023dc99b369Smrg    *.$libext) linkmode=oldlib ;;
6024dc99b369Smrg    *.lo | *.$objext) linkmode=obj ;;
6025dc99b369Smrg    *.la) linkmode=lib ;;
6026dc99b369Smrg    *) linkmode=prog ;; # Anything else should be a program.
6027dc99b369Smrg    esac
6028dc99b369Smrg
6029dc99b369Smrg    specialdeplibs=
6030dc99b369Smrg
6031dc99b369Smrg    libs=
6032dc99b369Smrg    # Find all interdependent deplibs by searching for libraries
6033dc99b369Smrg    # that are linked more than once (e.g. -la -lb -la)
6034dc99b369Smrg    for deplib in $deplibs; do
6035dc99b369Smrg      if $opt_preserve_dup_deps ; then
6036dc99b369Smrg	case "$libs " in
6037dc99b369Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6038dc99b369Smrg	esac
6039dc99b369Smrg      fi
6040dc99b369Smrg      func_append libs " $deplib"
6041dc99b369Smrg    done
6042dc99b369Smrg
6043dc99b369Smrg    if test "$linkmode" = lib; then
6044dc99b369Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6045dc99b369Smrg
6046dc99b369Smrg      # Compute libraries that are listed more than once in $predeps
6047dc99b369Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6048dc99b369Smrg      # not to be eliminated).
6049dc99b369Smrg      pre_post_deps=
6050dc99b369Smrg      if $opt_duplicate_compiler_generated_deps; then
6051dc99b369Smrg	for pre_post_dep in $predeps $postdeps; do
6052dc99b369Smrg	  case "$pre_post_deps " in
6053dc99b369Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6054dc99b369Smrg	  esac
6055dc99b369Smrg	  func_append pre_post_deps " $pre_post_dep"
6056dc99b369Smrg	done
6057dc99b369Smrg      fi
6058dc99b369Smrg      pre_post_deps=
6059dc99b369Smrg    fi
6060dc99b369Smrg
6061dc99b369Smrg    deplibs=
6062dc99b369Smrg    newdependency_libs=
6063dc99b369Smrg    newlib_search_path=
6064dc99b369Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6065dc99b369Smrg    notinst_deplibs= # not-installed libtool libraries
6066dc99b369Smrg    notinst_path= # paths that contain not-installed libtool libraries
6067dc99b369Smrg
6068dc99b369Smrg    case $linkmode in
6069dc99b369Smrg    lib)
6070dc99b369Smrg	passes="conv dlpreopen link"
6071dc99b369Smrg	for file in $dlfiles $dlprefiles; do
6072dc99b369Smrg	  case $file in
6073dc99b369Smrg	  *.la) ;;
6074dc99b369Smrg	  *)
6075dc99b369Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6076dc99b369Smrg	    ;;
6077dc99b369Smrg	  esac
6078dc99b369Smrg	done
6079dc99b369Smrg	;;
6080dc99b369Smrg    prog)
6081dc99b369Smrg	compile_deplibs=
6082dc99b369Smrg	finalize_deplibs=
6083dc99b369Smrg	alldeplibs=no
6084dc99b369Smrg	newdlfiles=
6085dc99b369Smrg	newdlprefiles=
6086dc99b369Smrg	passes="conv scan dlopen dlpreopen link"
6087dc99b369Smrg	;;
6088dc99b369Smrg    *)  passes="conv"
6089dc99b369Smrg	;;
6090dc99b369Smrg    esac
6091dc99b369Smrg
6092dc99b369Smrg    for pass in $passes; do
6093dc99b369Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6094dc99b369Smrg      # so that -L comes before libs that need it for instance...
6095dc99b369Smrg      if test "$linkmode,$pass" = "lib,link"; then
6096dc99b369Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6097dc99b369Smrg	##        order, and fix it there properly
6098dc99b369Smrg        tmp_deplibs=
6099dc99b369Smrg	for deplib in $deplibs; do
6100dc99b369Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6101dc99b369Smrg	done
6102dc99b369Smrg	deplibs="$tmp_deplibs"
6103dc99b369Smrg      fi
6104dc99b369Smrg
6105dc99b369Smrg      if test "$linkmode,$pass" = "lib,link" ||
6106dc99b369Smrg	 test "$linkmode,$pass" = "prog,scan"; then
6107dc99b369Smrg	libs="$deplibs"
6108dc99b369Smrg	deplibs=
6109dc99b369Smrg      fi
6110dc99b369Smrg      if test "$linkmode" = prog; then
6111dc99b369Smrg	case $pass in
6112dc99b369Smrg	dlopen) libs="$dlfiles" ;;
6113dc99b369Smrg	dlpreopen) libs="$dlprefiles" ;;
6114dc99b369Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6115dc99b369Smrg	esac
6116dc99b369Smrg      fi
6117dc99b369Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6118dc99b369Smrg	# Collect and forward deplibs of preopened libtool libs
6119dc99b369Smrg	for lib in $dlprefiles; do
6120dc99b369Smrg	  # Ignore non-libtool-libs
6121dc99b369Smrg	  dependency_libs=
6122dc99b369Smrg	  func_resolve_sysroot "$lib"
6123dc99b369Smrg	  case $lib in
6124dc99b369Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6125dc99b369Smrg	  esac
6126dc99b369Smrg
6127dc99b369Smrg	  # Collect preopened libtool deplibs, except any this library
6128dc99b369Smrg	  # has declared as weak libs
6129dc99b369Smrg	  for deplib in $dependency_libs; do
6130dc99b369Smrg	    func_basename "$deplib"
6131dc99b369Smrg            deplib_base=$func_basename_result
6132dc99b369Smrg	    case " $weak_libs " in
6133dc99b369Smrg	    *" $deplib_base "*) ;;
6134dc99b369Smrg	    *) func_append deplibs " $deplib" ;;
6135dc99b369Smrg	    esac
6136dc99b369Smrg	  done
6137dc99b369Smrg	done
6138dc99b369Smrg	libs="$dlprefiles"
6139dc99b369Smrg      fi
6140dc99b369Smrg      if test "$pass" = dlopen; then
6141dc99b369Smrg	# Collect dlpreopened libraries
6142dc99b369Smrg	save_deplibs="$deplibs"
6143dc99b369Smrg	deplibs=
6144dc99b369Smrg      fi
6145dc99b369Smrg
6146dc99b369Smrg      for deplib in $libs; do
6147dc99b369Smrg	lib=
6148dc99b369Smrg	found=no
6149dc99b369Smrg	case $deplib in
6150dc99b369Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
6151dc99b369Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6152dc99b369Smrg	    compile_deplibs="$deplib $compile_deplibs"
6153dc99b369Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6154dc99b369Smrg	  else
6155dc99b369Smrg	    func_append compiler_flags " $deplib"
6156dc99b369Smrg	    if test "$linkmode" = lib ; then
6157dc99b369Smrg		case "$new_inherited_linker_flags " in
6158dc99b369Smrg		    *" $deplib "*) ;;
6159dc99b369Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6160dc99b369Smrg		esac
6161dc99b369Smrg	    fi
6162dc99b369Smrg	  fi
6163dc99b369Smrg	  continue
6164dc99b369Smrg	  ;;
6165dc99b369Smrg	-l*)
6166dc99b369Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6167dc99b369Smrg	    func_warning "\`-l' is ignored for archives/objects"
6168dc99b369Smrg	    continue
6169dc99b369Smrg	  fi
6170dc99b369Smrg	  func_stripname '-l' '' "$deplib"
6171dc99b369Smrg	  name=$func_stripname_result
6172dc99b369Smrg	  if test "$linkmode" = lib; then
6173dc99b369Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6174dc99b369Smrg	  else
6175dc99b369Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6176dc99b369Smrg	  fi
6177dc99b369Smrg	  for searchdir in $searchdirs; do
6178dc99b369Smrg	    for search_ext in .la $std_shrext .so .a; do
6179dc99b369Smrg	      # Search the libtool library
6180dc99b369Smrg	      lib="$searchdir/lib${name}${search_ext}"
6181dc99b369Smrg	      if test -f "$lib"; then
6182dc99b369Smrg		if test "$search_ext" = ".la"; then
6183dc99b369Smrg		  found=yes
6184dc99b369Smrg		else
6185dc99b369Smrg		  found=no
6186dc99b369Smrg		fi
6187dc99b369Smrg		break 2
6188dc99b369Smrg	      fi
6189dc99b369Smrg	    done
6190dc99b369Smrg	  done
6191dc99b369Smrg	  if test "$found" != yes; then
6192dc99b369Smrg	    # deplib doesn't seem to be a libtool library
6193dc99b369Smrg	    if test "$linkmode,$pass" = "prog,link"; then
6194dc99b369Smrg	      compile_deplibs="$deplib $compile_deplibs"
6195dc99b369Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6196dc99b369Smrg	    else
6197dc99b369Smrg	      deplibs="$deplib $deplibs"
6198dc99b369Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6199dc99b369Smrg	    fi
6200dc99b369Smrg	    continue
6201dc99b369Smrg	  else # deplib is a libtool library
6202dc99b369Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6203dc99b369Smrg	    # We need to do some special things here, and not later.
6204dc99b369Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6205dc99b369Smrg	      case " $predeps $postdeps " in
6206dc99b369Smrg	      *" $deplib "*)
6207dc99b369Smrg		if func_lalib_p "$lib"; then
6208dc99b369Smrg		  library_names=
6209dc99b369Smrg		  old_library=
6210dc99b369Smrg		  func_source "$lib"
6211dc99b369Smrg		  for l in $old_library $library_names; do
6212dc99b369Smrg		    ll="$l"
6213dc99b369Smrg		  done
6214dc99b369Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6215dc99b369Smrg		    found=no
6216dc99b369Smrg		    func_dirname "$lib" "" "."
6217dc99b369Smrg		    ladir="$func_dirname_result"
6218dc99b369Smrg		    lib=$ladir/$old_library
6219dc99b369Smrg		    if test "$linkmode,$pass" = "prog,link"; then
6220dc99b369Smrg		      compile_deplibs="$deplib $compile_deplibs"
6221dc99b369Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6222dc99b369Smrg		    else
6223dc99b369Smrg		      deplibs="$deplib $deplibs"
6224dc99b369Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6225dc99b369Smrg		    fi
6226dc99b369Smrg		    continue
6227dc99b369Smrg		  fi
6228dc99b369Smrg		fi
6229dc99b369Smrg		;;
6230dc99b369Smrg	      *) ;;
6231dc99b369Smrg	      esac
6232dc99b369Smrg	    fi
6233dc99b369Smrg	  fi
6234dc99b369Smrg	  ;; # -l
6235dc99b369Smrg	*.ltframework)
6236dc99b369Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6237dc99b369Smrg	    compile_deplibs="$deplib $compile_deplibs"
6238dc99b369Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6239dc99b369Smrg	  else
6240dc99b369Smrg	    deplibs="$deplib $deplibs"
6241dc99b369Smrg	    if test "$linkmode" = lib ; then
6242dc99b369Smrg		case "$new_inherited_linker_flags " in
6243dc99b369Smrg		    *" $deplib "*) ;;
6244dc99b369Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6245dc99b369Smrg		esac
6246dc99b369Smrg	    fi
6247dc99b369Smrg	  fi
6248dc99b369Smrg	  continue
6249dc99b369Smrg	  ;;
6250dc99b369Smrg	-L*)
6251dc99b369Smrg	  case $linkmode in
6252dc99b369Smrg	  lib)
6253dc99b369Smrg	    deplibs="$deplib $deplibs"
6254dc99b369Smrg	    test "$pass" = conv && continue
6255dc99b369Smrg	    newdependency_libs="$deplib $newdependency_libs"
6256dc99b369Smrg	    func_stripname '-L' '' "$deplib"
6257dc99b369Smrg	    func_resolve_sysroot "$func_stripname_result"
6258dc99b369Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6259dc99b369Smrg	    ;;
6260dc99b369Smrg	  prog)
6261dc99b369Smrg	    if test "$pass" = conv; then
6262dc99b369Smrg	      deplibs="$deplib $deplibs"
6263dc99b369Smrg	      continue
6264dc99b369Smrg	    fi
6265dc99b369Smrg	    if test "$pass" = scan; then
6266dc99b369Smrg	      deplibs="$deplib $deplibs"
6267dc99b369Smrg	    else
6268dc99b369Smrg	      compile_deplibs="$deplib $compile_deplibs"
6269dc99b369Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6270dc99b369Smrg	    fi
6271dc99b369Smrg	    func_stripname '-L' '' "$deplib"
6272dc99b369Smrg	    func_resolve_sysroot "$func_stripname_result"
6273dc99b369Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6274dc99b369Smrg	    ;;
6275dc99b369Smrg	  *)
6276dc99b369Smrg	    func_warning "\`-L' is ignored for archives/objects"
6277dc99b369Smrg	    ;;
6278dc99b369Smrg	  esac # linkmode
6279dc99b369Smrg	  continue
6280dc99b369Smrg	  ;; # -L
6281dc99b369Smrg	-R*)
6282dc99b369Smrg	  if test "$pass" = link; then
6283dc99b369Smrg	    func_stripname '-R' '' "$deplib"
6284dc99b369Smrg	    func_resolve_sysroot "$func_stripname_result"
6285dc99b369Smrg	    dir=$func_resolve_sysroot_result
6286dc99b369Smrg	    # Make sure the xrpath contains only unique directories.
6287dc99b369Smrg	    case "$xrpath " in
6288dc99b369Smrg	    *" $dir "*) ;;
6289dc99b369Smrg	    *) func_append xrpath " $dir" ;;
6290dc99b369Smrg	    esac
6291dc99b369Smrg	  fi
6292dc99b369Smrg	  deplibs="$deplib $deplibs"
6293dc99b369Smrg	  continue
6294dc99b369Smrg	  ;;
6295dc99b369Smrg	*.la)
6296dc99b369Smrg	  func_resolve_sysroot "$deplib"
6297dc99b369Smrg	  lib=$func_resolve_sysroot_result
6298dc99b369Smrg	  ;;
6299dc99b369Smrg	*.$libext)
6300dc99b369Smrg	  if test "$pass" = conv; then
6301dc99b369Smrg	    deplibs="$deplib $deplibs"
6302dc99b369Smrg	    continue
6303dc99b369Smrg	  fi
6304dc99b369Smrg	  case $linkmode in
6305dc99b369Smrg	  lib)
6306dc99b369Smrg	    # Linking convenience modules into shared libraries is allowed,
6307dc99b369Smrg	    # but linking other static libraries is non-portable.
6308dc99b369Smrg	    case " $dlpreconveniencelibs " in
6309dc99b369Smrg	    *" $deplib "*) ;;
6310dc99b369Smrg	    *)
6311dc99b369Smrg	      valid_a_lib=no
6312dc99b369Smrg	      case $deplibs_check_method in
6313dc99b369Smrg		match_pattern*)
6314dc99b369Smrg		  set dummy $deplibs_check_method; shift
6315dc99b369Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6316dc99b369Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6317dc99b369Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6318dc99b369Smrg		    valid_a_lib=yes
6319dc99b369Smrg		  fi
6320dc99b369Smrg		;;
6321dc99b369Smrg		pass_all)
6322dc99b369Smrg		  valid_a_lib=yes
6323dc99b369Smrg		;;
6324dc99b369Smrg	      esac
6325dc99b369Smrg	      if test "$valid_a_lib" != yes; then
6326dc99b369Smrg		echo
6327dc99b369Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6328dc99b369Smrg		echo "*** I have the capability to make that library automatically link in when"
6329dc99b369Smrg		echo "*** you link to this library.  But I can only do this if you have a"
6330dc99b369Smrg		echo "*** shared version of the library, which you do not appear to have"
6331dc99b369Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
6332dc99b369Smrg		echo "*** that it is just a static archive that I should not use here."
6333dc99b369Smrg	      else
6334dc99b369Smrg		echo
6335dc99b369Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
6336dc99b369Smrg		$ECHO "*** static library $deplib is not portable!"
6337dc99b369Smrg		deplibs="$deplib $deplibs"
6338dc99b369Smrg	      fi
6339dc99b369Smrg	      ;;
6340dc99b369Smrg	    esac
6341dc99b369Smrg	    continue
6342dc99b369Smrg	    ;;
6343dc99b369Smrg	  prog)
6344dc99b369Smrg	    if test "$pass" != link; then
6345dc99b369Smrg	      deplibs="$deplib $deplibs"
6346dc99b369Smrg	    else
6347dc99b369Smrg	      compile_deplibs="$deplib $compile_deplibs"
6348dc99b369Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6349dc99b369Smrg	    fi
6350dc99b369Smrg	    continue
6351dc99b369Smrg	    ;;
6352dc99b369Smrg	  esac # linkmode
6353dc99b369Smrg	  ;; # *.$libext
6354dc99b369Smrg	*.lo | *.$objext)
6355dc99b369Smrg	  if test "$pass" = conv; then
6356dc99b369Smrg	    deplibs="$deplib $deplibs"
6357dc99b369Smrg	  elif test "$linkmode" = prog; then
6358dc99b369Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6359dc99b369Smrg	      # If there is no dlopen support or we're linking statically,
6360dc99b369Smrg	      # we need to preload.
6361dc99b369Smrg	      func_append newdlprefiles " $deplib"
6362dc99b369Smrg	      compile_deplibs="$deplib $compile_deplibs"
6363dc99b369Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6364dc99b369Smrg	    else
6365dc99b369Smrg	      func_append newdlfiles " $deplib"
6366dc99b369Smrg	    fi
6367dc99b369Smrg	  fi
6368dc99b369Smrg	  continue
6369dc99b369Smrg	  ;;
6370dc99b369Smrg	%DEPLIBS%)
6371dc99b369Smrg	  alldeplibs=yes
6372dc99b369Smrg	  continue
6373dc99b369Smrg	  ;;
6374dc99b369Smrg	esac # case $deplib
6375dc99b369Smrg
6376dc99b369Smrg	if test "$found" = yes || test -f "$lib"; then :
6377dc99b369Smrg	else
6378dc99b369Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6379dc99b369Smrg	fi
6380dc99b369Smrg
6381dc99b369Smrg	# Check to see that this really is a libtool archive.
6382dc99b369Smrg	func_lalib_unsafe_p "$lib" \
6383dc99b369Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6384dc99b369Smrg
6385dc99b369Smrg	func_dirname "$lib" "" "."
6386dc99b369Smrg	ladir="$func_dirname_result"
6387dc99b369Smrg
6388dc99b369Smrg	dlname=
6389dc99b369Smrg	dlopen=
6390dc99b369Smrg	dlpreopen=
6391dc99b369Smrg	libdir=
6392dc99b369Smrg	library_names=
6393dc99b369Smrg	old_library=
6394dc99b369Smrg	inherited_linker_flags=
6395dc99b369Smrg	# If the library was installed with an old release of libtool,
6396dc99b369Smrg	# it will not redefine variables installed, or shouldnotlink
6397dc99b369Smrg	installed=yes
6398dc99b369Smrg	shouldnotlink=no
6399dc99b369Smrg	avoidtemprpath=
6400dc99b369Smrg
6401dc99b369Smrg
6402dc99b369Smrg	# Read the .la file
6403dc99b369Smrg	func_source "$lib"
6404dc99b369Smrg
6405dc99b369Smrg	# Convert "-framework foo" to "foo.ltframework"
6406dc99b369Smrg	if test -n "$inherited_linker_flags"; then
6407dc99b369Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6408dc99b369Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6409dc99b369Smrg	    case " $new_inherited_linker_flags " in
6410dc99b369Smrg	      *" $tmp_inherited_linker_flag "*) ;;
6411dc99b369Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6412dc99b369Smrg	    esac
6413dc99b369Smrg	  done
6414dc99b369Smrg	fi
6415dc99b369Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6416dc99b369Smrg	if test "$linkmode,$pass" = "lib,link" ||
6417dc99b369Smrg	   test "$linkmode,$pass" = "prog,scan" ||
6418dc99b369Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6419dc99b369Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6420dc99b369Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6421dc99b369Smrg	fi
6422dc99b369Smrg
6423dc99b369Smrg	if test "$pass" = conv; then
6424dc99b369Smrg	  # Only check for convenience libraries
6425dc99b369Smrg	  deplibs="$lib $deplibs"
6426dc99b369Smrg	  if test -z "$libdir"; then
6427dc99b369Smrg	    if test -z "$old_library"; then
6428dc99b369Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6429dc99b369Smrg	    fi
6430dc99b369Smrg	    # It is a libtool convenience library, so add in its objects.
6431dc99b369Smrg	    func_append convenience " $ladir/$objdir/$old_library"
6432dc99b369Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6433dc99b369Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6434dc99b369Smrg	    func_fatal_error "\`$lib' is not a convenience library"
6435dc99b369Smrg	  fi
6436dc99b369Smrg	  tmp_libs=
6437dc99b369Smrg	  for deplib in $dependency_libs; do
6438dc99b369Smrg	    deplibs="$deplib $deplibs"
6439dc99b369Smrg	    if $opt_preserve_dup_deps ; then
6440dc99b369Smrg	      case "$tmp_libs " in
6441dc99b369Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6442dc99b369Smrg	      esac
6443dc99b369Smrg	    fi
6444dc99b369Smrg	    func_append tmp_libs " $deplib"
6445dc99b369Smrg	  done
6446dc99b369Smrg	  continue
6447dc99b369Smrg	fi # $pass = conv
6448dc99b369Smrg
6449dc99b369Smrg
6450dc99b369Smrg	# Get the name of the library we link against.
6451dc99b369Smrg	linklib=
6452dc99b369Smrg	if test -n "$old_library" &&
6453dc99b369Smrg	   { test "$prefer_static_libs" = yes ||
6454dc99b369Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6455dc99b369Smrg	  linklib=$old_library
6456dc99b369Smrg	else
6457dc99b369Smrg	  for l in $old_library $library_names; do
6458dc99b369Smrg	    linklib="$l"
6459dc99b369Smrg	  done
6460dc99b369Smrg	fi
6461dc99b369Smrg	if test -z "$linklib"; then
6462dc99b369Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6463dc99b369Smrg	fi
6464dc99b369Smrg
6465dc99b369Smrg	# This library was specified with -dlopen.
6466dc99b369Smrg	if test "$pass" = dlopen; then
6467dc99b369Smrg	  if test -z "$libdir"; then
6468dc99b369Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6469dc99b369Smrg	  fi
6470dc99b369Smrg	  if test -z "$dlname" ||
6471dc99b369Smrg	     test "$dlopen_support" != yes ||
6472dc99b369Smrg	     test "$build_libtool_libs" = no; then
6473dc99b369Smrg	    # If there is no dlname, no dlopen support or we're linking
6474dc99b369Smrg	    # statically, we need to preload.  We also need to preload any
6475dc99b369Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6476dc99b369Smrg	    # bomb out in the load deplibs phase.
6477dc99b369Smrg	    func_append dlprefiles " $lib $dependency_libs"
6478dc99b369Smrg	  else
6479dc99b369Smrg	    func_append newdlfiles " $lib"
6480dc99b369Smrg	  fi
6481dc99b369Smrg	  continue
6482dc99b369Smrg	fi # $pass = dlopen
6483dc99b369Smrg
6484dc99b369Smrg	# We need an absolute path.
6485dc99b369Smrg	case $ladir in
6486dc99b369Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6487dc99b369Smrg	*)
6488dc99b369Smrg	  abs_ladir=`cd "$ladir" && pwd`
6489dc99b369Smrg	  if test -z "$abs_ladir"; then
6490dc99b369Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6491dc99b369Smrg	    func_warning "passing it literally to the linker, although it might fail"
6492dc99b369Smrg	    abs_ladir="$ladir"
6493dc99b369Smrg	  fi
6494dc99b369Smrg	  ;;
6495dc99b369Smrg	esac
6496dc99b369Smrg	func_basename "$lib"
6497dc99b369Smrg	laname="$func_basename_result"
6498dc99b369Smrg
6499dc99b369Smrg	# Find the relevant object directory and library name.
6500dc99b369Smrg	if test "X$installed" = Xyes; then
6501dc99b369Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6502dc99b369Smrg	    func_warning "library \`$lib' was moved."
6503dc99b369Smrg	    dir="$ladir"
6504dc99b369Smrg	    absdir="$abs_ladir"
6505dc99b369Smrg	    libdir="$abs_ladir"
6506dc99b369Smrg	  else
6507dc99b369Smrg	    dir="$lt_sysroot$libdir"
6508dc99b369Smrg	    absdir="$lt_sysroot$libdir"
6509dc99b369Smrg	  fi
6510dc99b369Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6511dc99b369Smrg	else
6512dc99b369Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6513dc99b369Smrg	    dir="$ladir"
6514dc99b369Smrg	    absdir="$abs_ladir"
6515dc99b369Smrg	    # Remove this search path later
6516dc99b369Smrg	    func_append notinst_path " $abs_ladir"
6517dc99b369Smrg	  else
6518dc99b369Smrg	    dir="$ladir/$objdir"
6519dc99b369Smrg	    absdir="$abs_ladir/$objdir"
6520dc99b369Smrg	    # Remove this search path later
6521dc99b369Smrg	    func_append notinst_path " $abs_ladir"
6522dc99b369Smrg	  fi
6523dc99b369Smrg	fi # $installed = yes
6524dc99b369Smrg	func_stripname 'lib' '.la' "$laname"
6525dc99b369Smrg	name=$func_stripname_result
6526dc99b369Smrg
6527dc99b369Smrg	# This library was specified with -dlpreopen.
6528dc99b369Smrg	if test "$pass" = dlpreopen; then
6529dc99b369Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6530dc99b369Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6531dc99b369Smrg	  fi
6532dc99b369Smrg	  case "$host" in
6533dc99b369Smrg	    # special handling for platforms with PE-DLLs.
6534dc99b369Smrg	    *cygwin* | *mingw* | *cegcc* )
6535dc99b369Smrg	      # Linker will automatically link against shared library if both
6536dc99b369Smrg	      # static and shared are present.  Therefore, ensure we extract
6537dc99b369Smrg	      # symbols from the import library if a shared library is present
6538dc99b369Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
6539dc99b369Smrg	      # this by putting the import library name into $newdlprefiles.
6540dc99b369Smrg	      # We recover the dlopen module name by 'saving' the la file
6541dc99b369Smrg	      # name in a special purpose variable, and (later) extracting the
6542dc99b369Smrg	      # dlname from the la file.
6543dc99b369Smrg	      if test -n "$dlname"; then
6544dc99b369Smrg	        func_tr_sh "$dir/$linklib"
6545dc99b369Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6546dc99b369Smrg	        func_append newdlprefiles " $dir/$linklib"
6547dc99b369Smrg	      else
6548dc99b369Smrg	        func_append newdlprefiles " $dir/$old_library"
6549dc99b369Smrg	        # Keep a list of preopened convenience libraries to check
6550dc99b369Smrg	        # that they are being used correctly in the link pass.
6551dc99b369Smrg	        test -z "$libdir" && \
6552dc99b369Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6553dc99b369Smrg	      fi
6554dc99b369Smrg	    ;;
6555dc99b369Smrg	    * )
6556dc99b369Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6557dc99b369Smrg	      # are required to link).
6558dc99b369Smrg	      if test -n "$old_library"; then
6559dc99b369Smrg	        func_append newdlprefiles " $dir/$old_library"
6560dc99b369Smrg	        # Keep a list of preopened convenience libraries to check
6561dc99b369Smrg	        # that they are being used correctly in the link pass.
6562dc99b369Smrg	        test -z "$libdir" && \
6563dc99b369Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6564dc99b369Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6565dc99b369Smrg	      elif test -n "$dlname"; then
6566dc99b369Smrg	        func_append newdlprefiles " $dir/$dlname"
6567dc99b369Smrg	      else
6568dc99b369Smrg	        func_append newdlprefiles " $dir/$linklib"
6569dc99b369Smrg	      fi
6570dc99b369Smrg	    ;;
6571dc99b369Smrg	  esac
6572dc99b369Smrg	fi # $pass = dlpreopen
6573dc99b369Smrg
6574dc99b369Smrg	if test -z "$libdir"; then
6575dc99b369Smrg	  # Link the convenience library
6576dc99b369Smrg	  if test "$linkmode" = lib; then
6577dc99b369Smrg	    deplibs="$dir/$old_library $deplibs"
6578dc99b369Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
6579dc99b369Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6580dc99b369Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6581dc99b369Smrg	  else
6582dc99b369Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6583dc99b369Smrg	  fi
6584dc99b369Smrg	  continue
6585dc99b369Smrg	fi
6586dc99b369Smrg
6587dc99b369Smrg
6588dc99b369Smrg	if test "$linkmode" = prog && test "$pass" != link; then
6589dc99b369Smrg	  func_append newlib_search_path " $ladir"
6590dc99b369Smrg	  deplibs="$lib $deplibs"
6591dc99b369Smrg
6592dc99b369Smrg	  linkalldeplibs=no
6593dc99b369Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6594dc99b369Smrg	     test "$build_libtool_libs" = no; then
6595dc99b369Smrg	    linkalldeplibs=yes
6596dc99b369Smrg	  fi
6597dc99b369Smrg
6598dc99b369Smrg	  tmp_libs=
6599dc99b369Smrg	  for deplib in $dependency_libs; do
6600dc99b369Smrg	    case $deplib in
6601dc99b369Smrg	    -L*) func_stripname '-L' '' "$deplib"
6602dc99b369Smrg	         func_resolve_sysroot "$func_stripname_result"
6603dc99b369Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6604dc99b369Smrg		 ;;
6605dc99b369Smrg	    esac
6606dc99b369Smrg	    # Need to link against all dependency_libs?
6607dc99b369Smrg	    if test "$linkalldeplibs" = yes; then
6608dc99b369Smrg	      deplibs="$deplib $deplibs"
6609dc99b369Smrg	    else
6610dc99b369Smrg	      # Need to hardcode shared library paths
6611dc99b369Smrg	      # or/and link against static libraries
6612dc99b369Smrg	      newdependency_libs="$deplib $newdependency_libs"
6613dc99b369Smrg	    fi
6614dc99b369Smrg	    if $opt_preserve_dup_deps ; then
6615dc99b369Smrg	      case "$tmp_libs " in
6616dc99b369Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6617dc99b369Smrg	      esac
6618dc99b369Smrg	    fi
6619dc99b369Smrg	    func_append tmp_libs " $deplib"
6620dc99b369Smrg	  done # for deplib
6621dc99b369Smrg	  continue
6622dc99b369Smrg	fi # $linkmode = prog...
6623dc99b369Smrg
6624dc99b369Smrg	if test "$linkmode,$pass" = "prog,link"; then
6625dc99b369Smrg	  if test -n "$library_names" &&
6626dc99b369Smrg	     { { test "$prefer_static_libs" = no ||
6627dc99b369Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6628dc99b369Smrg	       test -z "$old_library"; }; then
6629dc99b369Smrg	    # We need to hardcode the library path
6630dc99b369Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6631dc99b369Smrg	      # Make sure the rpath contains only unique directories.
6632dc99b369Smrg	      case "$temp_rpath:" in
6633dc99b369Smrg	      *"$absdir:"*) ;;
6634dc99b369Smrg	      *) func_append temp_rpath "$absdir:" ;;
6635dc99b369Smrg	      esac
6636dc99b369Smrg	    fi
6637dc99b369Smrg
6638dc99b369Smrg	    # Hardcode the library path.
6639dc99b369Smrg	    # Skip directories that are in the system default run-time
6640dc99b369Smrg	    # search path.
6641dc99b369Smrg	    case " $sys_lib_dlsearch_path " in
6642dc99b369Smrg	    *" $absdir "*) ;;
6643dc99b369Smrg	    *)
6644dc99b369Smrg	      case "$compile_rpath " in
6645dc99b369Smrg	      *" $absdir "*) ;;
6646dc99b369Smrg	      *) func_append compile_rpath " $absdir" ;;
6647dc99b369Smrg	      esac
6648dc99b369Smrg	      ;;
6649dc99b369Smrg	    esac
6650dc99b369Smrg	    case " $sys_lib_dlsearch_path " in
6651dc99b369Smrg	    *" $libdir "*) ;;
6652dc99b369Smrg	    *)
6653dc99b369Smrg	      case "$finalize_rpath " in
6654dc99b369Smrg	      *" $libdir "*) ;;
6655dc99b369Smrg	      *) func_append finalize_rpath " $libdir" ;;
6656dc99b369Smrg	      esac
6657dc99b369Smrg	      ;;
6658dc99b369Smrg	    esac
6659dc99b369Smrg	  fi # $linkmode,$pass = prog,link...
6660dc99b369Smrg
6661dc99b369Smrg	  if test "$alldeplibs" = yes &&
6662dc99b369Smrg	     { test "$deplibs_check_method" = pass_all ||
6663dc99b369Smrg	       { test "$build_libtool_libs" = yes &&
6664dc99b369Smrg		 test -n "$library_names"; }; }; then
6665dc99b369Smrg	    # We only need to search for static libraries
6666dc99b369Smrg	    continue
6667dc99b369Smrg	  fi
6668dc99b369Smrg	fi
6669dc99b369Smrg
6670dc99b369Smrg	link_static=no # Whether the deplib will be linked statically
6671dc99b369Smrg	use_static_libs=$prefer_static_libs
6672dc99b369Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6673dc99b369Smrg	  use_static_libs=no
6674dc99b369Smrg	fi
6675dc99b369Smrg	if test -n "$library_names" &&
6676dc99b369Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6677dc99b369Smrg	  case $host in
6678dc99b369Smrg	  *cygwin* | *mingw* | *cegcc*)
6679dc99b369Smrg	      # No point in relinking DLLs because paths are not encoded
6680dc99b369Smrg	      func_append notinst_deplibs " $lib"
6681dc99b369Smrg	      need_relink=no
6682dc99b369Smrg	    ;;
6683dc99b369Smrg	  *)
6684dc99b369Smrg	    if test "$installed" = no; then
6685dc99b369Smrg	      func_append notinst_deplibs " $lib"
6686dc99b369Smrg	      need_relink=yes
6687dc99b369Smrg	    fi
6688dc99b369Smrg	    ;;
6689dc99b369Smrg	  esac
6690dc99b369Smrg	  # This is a shared library
6691dc99b369Smrg
6692dc99b369Smrg	  # Warn about portability, can't link against -module's on some
6693dc99b369Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6694dc99b369Smrg	  dlopenmodule=""
6695dc99b369Smrg	  for dlpremoduletest in $dlprefiles; do
6696dc99b369Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
6697dc99b369Smrg	      dlopenmodule="$dlpremoduletest"
6698dc99b369Smrg	      break
6699dc99b369Smrg	    fi
6700dc99b369Smrg	  done
6701dc99b369Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6702dc99b369Smrg	    echo
6703dc99b369Smrg	    if test "$linkmode" = prog; then
6704dc99b369Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6705dc99b369Smrg	    else
6706dc99b369Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6707dc99b369Smrg	    fi
6708dc99b369Smrg	    $ECHO "*** $linklib is not portable!"
6709dc99b369Smrg	  fi
6710dc99b369Smrg	  if test "$linkmode" = lib &&
6711dc99b369Smrg	     test "$hardcode_into_libs" = yes; then
6712dc99b369Smrg	    # Hardcode the library path.
6713dc99b369Smrg	    # Skip directories that are in the system default run-time
6714dc99b369Smrg	    # search path.
6715dc99b369Smrg	    case " $sys_lib_dlsearch_path " in
6716dc99b369Smrg	    *" $absdir "*) ;;
6717dc99b369Smrg	    *)
6718dc99b369Smrg	      case "$compile_rpath " in
6719dc99b369Smrg	      *" $absdir "*) ;;
6720dc99b369Smrg	      *) func_append compile_rpath " $absdir" ;;
6721dc99b369Smrg	      esac
6722dc99b369Smrg	      ;;
6723dc99b369Smrg	    esac
6724dc99b369Smrg	    case " $sys_lib_dlsearch_path " in
6725dc99b369Smrg	    *" $libdir "*) ;;
6726dc99b369Smrg	    *)
6727dc99b369Smrg	      case "$finalize_rpath " in
6728dc99b369Smrg	      *" $libdir "*) ;;
6729dc99b369Smrg	      *) func_append finalize_rpath " $libdir" ;;
6730dc99b369Smrg	      esac
6731dc99b369Smrg	      ;;
6732dc99b369Smrg	    esac
6733dc99b369Smrg	  fi
6734dc99b369Smrg
6735dc99b369Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6736dc99b369Smrg	    # figure out the soname
6737dc99b369Smrg	    set dummy $library_names
6738dc99b369Smrg	    shift
6739dc99b369Smrg	    realname="$1"
6740dc99b369Smrg	    shift
6741dc99b369Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6742dc99b369Smrg	    # use dlname if we got it. it's perfectly good, no?
6743dc99b369Smrg	    if test -n "$dlname"; then
6744dc99b369Smrg	      soname="$dlname"
6745dc99b369Smrg	    elif test -n "$soname_spec"; then
6746dc99b369Smrg	      # bleh windows
6747dc99b369Smrg	      case $host in
6748dc99b369Smrg	      *cygwin* | mingw* | *cegcc*)
6749dc99b369Smrg	        func_arith $current - $age
6750dc99b369Smrg		major=$func_arith_result
6751dc99b369Smrg		versuffix="-$major"
6752dc99b369Smrg		;;
6753dc99b369Smrg	      esac
6754dc99b369Smrg	      eval soname=\"$soname_spec\"
6755dc99b369Smrg	    else
6756dc99b369Smrg	      soname="$realname"
6757dc99b369Smrg	    fi
6758dc99b369Smrg
6759dc99b369Smrg	    # Make a new name for the extract_expsyms_cmds to use
6760dc99b369Smrg	    soroot="$soname"
6761dc99b369Smrg	    func_basename "$soroot"
6762dc99b369Smrg	    soname="$func_basename_result"
6763dc99b369Smrg	    func_stripname 'lib' '.dll' "$soname"
6764dc99b369Smrg	    newlib=libimp-$func_stripname_result.a
6765dc99b369Smrg
6766dc99b369Smrg	    # If the library has no export list, then create one now
6767dc99b369Smrg	    if test -f "$output_objdir/$soname-def"; then :
6768dc99b369Smrg	    else
6769dc99b369Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
6770dc99b369Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6771dc99b369Smrg	    fi
6772dc99b369Smrg
6773dc99b369Smrg	    # Create $newlib
6774dc99b369Smrg	    if test -f "$output_objdir/$newlib"; then :; else
6775dc99b369Smrg	      func_verbose "generating import library for \`$soname'"
6776dc99b369Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6777dc99b369Smrg	    fi
6778dc99b369Smrg	    # make sure the library variables are pointing to the new library
6779dc99b369Smrg	    dir=$output_objdir
6780dc99b369Smrg	    linklib=$newlib
6781dc99b369Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6782dc99b369Smrg
6783dc99b369Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6784dc99b369Smrg	    add_shlibpath=
6785dc99b369Smrg	    add_dir=
6786dc99b369Smrg	    add=
6787dc99b369Smrg	    lib_linked=yes
6788dc99b369Smrg	    case $hardcode_action in
6789dc99b369Smrg	    immediate | unsupported)
6790dc99b369Smrg	      if test "$hardcode_direct" = no; then
6791dc99b369Smrg		add="$dir/$linklib"
6792dc99b369Smrg		case $host in
6793dc99b369Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6794dc99b369Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6795dc99b369Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6796dc99b369Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6797dc99b369Smrg		  *-*-darwin* )
6798dc99b369Smrg		    # if the lib is a (non-dlopened) module then we can not
6799dc99b369Smrg		    # link against it, someone is ignoring the earlier warnings
6800dc99b369Smrg		    if /usr/bin/file -L $add 2> /dev/null |
6801dc99b369Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6802dc99b369Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6803dc99b369Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6804dc99b369Smrg			if test -z "$old_library" ; then
6805dc99b369Smrg			  echo
6806dc99b369Smrg			  echo "*** And there doesn't seem to be a static archive available"
6807dc99b369Smrg			  echo "*** The link will probably fail, sorry"
6808dc99b369Smrg			else
6809dc99b369Smrg			  add="$dir/$old_library"
6810dc99b369Smrg			fi
6811dc99b369Smrg		      elif test -n "$old_library"; then
6812dc99b369Smrg			add="$dir/$old_library"
6813dc99b369Smrg		      fi
6814dc99b369Smrg		    fi
6815dc99b369Smrg		esac
6816dc99b369Smrg	      elif test "$hardcode_minus_L" = no; then
6817dc99b369Smrg		case $host in
6818dc99b369Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
6819dc99b369Smrg		esac
6820dc99b369Smrg		add_dir="-L$dir"
6821dc99b369Smrg		add="-l$name"
6822dc99b369Smrg	      elif test "$hardcode_shlibpath_var" = no; then
6823dc99b369Smrg		add_shlibpath="$dir"
6824dc99b369Smrg		add="-l$name"
6825dc99b369Smrg	      else
6826dc99b369Smrg		lib_linked=no
6827dc99b369Smrg	      fi
6828dc99b369Smrg	      ;;
6829dc99b369Smrg	    relink)
6830dc99b369Smrg	      if test "$hardcode_direct" = yes &&
6831dc99b369Smrg	         test "$hardcode_direct_absolute" = no; then
6832dc99b369Smrg		add="$dir/$linklib"
6833dc99b369Smrg	      elif test "$hardcode_minus_L" = yes; then
6834dc99b369Smrg		add_dir="-L$dir"
6835dc99b369Smrg		# Try looking first in the location we're being installed to.
6836dc99b369Smrg		if test -n "$inst_prefix_dir"; then
6837dc99b369Smrg		  case $libdir in
6838dc99b369Smrg		    [\\/]*)
6839dc99b369Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6840dc99b369Smrg		      ;;
6841dc99b369Smrg		  esac
6842dc99b369Smrg		fi
6843dc99b369Smrg		add="-l$name"
6844dc99b369Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
6845dc99b369Smrg		add_shlibpath="$dir"
6846dc99b369Smrg		add="-l$name"
6847dc99b369Smrg	      else
6848dc99b369Smrg		lib_linked=no
6849dc99b369Smrg	      fi
6850dc99b369Smrg	      ;;
6851dc99b369Smrg	    *) lib_linked=no ;;
6852dc99b369Smrg	    esac
6853dc99b369Smrg
6854dc99b369Smrg	    if test "$lib_linked" != yes; then
6855dc99b369Smrg	      func_fatal_configuration "unsupported hardcode properties"
6856dc99b369Smrg	    fi
6857dc99b369Smrg
6858dc99b369Smrg	    if test -n "$add_shlibpath"; then
6859dc99b369Smrg	      case :$compile_shlibpath: in
6860dc99b369Smrg	      *":$add_shlibpath:"*) ;;
6861dc99b369Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6862dc99b369Smrg	      esac
6863dc99b369Smrg	    fi
6864dc99b369Smrg	    if test "$linkmode" = prog; then
6865dc99b369Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6866dc99b369Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6867dc99b369Smrg	    else
6868dc99b369Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6869dc99b369Smrg	      test -n "$add" && deplibs="$add $deplibs"
6870dc99b369Smrg	      if test "$hardcode_direct" != yes &&
6871dc99b369Smrg		 test "$hardcode_minus_L" != yes &&
6872dc99b369Smrg		 test "$hardcode_shlibpath_var" = yes; then
6873dc99b369Smrg		case :$finalize_shlibpath: in
6874dc99b369Smrg		*":$libdir:"*) ;;
6875dc99b369Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
6876dc99b369Smrg		esac
6877dc99b369Smrg	      fi
6878dc99b369Smrg	    fi
6879dc99b369Smrg	  fi
6880dc99b369Smrg
6881dc99b369Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6882dc99b369Smrg	    add_shlibpath=
6883dc99b369Smrg	    add_dir=
6884dc99b369Smrg	    add=
6885dc99b369Smrg	    # Finalize command for both is simple: just hardcode it.
6886dc99b369Smrg	    if test "$hardcode_direct" = yes &&
6887dc99b369Smrg	       test "$hardcode_direct_absolute" = no; then
6888dc99b369Smrg	      add="$libdir/$linklib"
6889dc99b369Smrg	    elif test "$hardcode_minus_L" = yes; then
6890dc99b369Smrg	      add_dir="-L$libdir"
6891dc99b369Smrg	      add="-l$name"
6892dc99b369Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
6893dc99b369Smrg	      case :$finalize_shlibpath: in
6894dc99b369Smrg	      *":$libdir:"*) ;;
6895dc99b369Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6896dc99b369Smrg	      esac
6897dc99b369Smrg	      add="-l$name"
6898dc99b369Smrg	    elif test "$hardcode_automatic" = yes; then
6899dc99b369Smrg	      if test -n "$inst_prefix_dir" &&
6900dc99b369Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6901dc99b369Smrg		add="$inst_prefix_dir$libdir/$linklib"
6902dc99b369Smrg	      else
6903dc99b369Smrg		add="$libdir/$linklib"
6904dc99b369Smrg	      fi
6905dc99b369Smrg	    else
6906dc99b369Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
6907dc99b369Smrg	      add_dir="-L$libdir"
6908dc99b369Smrg	      # Try looking first in the location we're being installed to.
6909dc99b369Smrg	      if test -n "$inst_prefix_dir"; then
6910dc99b369Smrg		case $libdir in
6911dc99b369Smrg		  [\\/]*)
6912dc99b369Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6913dc99b369Smrg		    ;;
6914dc99b369Smrg		esac
6915dc99b369Smrg	      fi
6916dc99b369Smrg	      add="-l$name"
6917dc99b369Smrg	    fi
6918dc99b369Smrg
6919dc99b369Smrg	    if test "$linkmode" = prog; then
6920dc99b369Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6921dc99b369Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6922dc99b369Smrg	    else
6923dc99b369Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6924dc99b369Smrg	      test -n "$add" && deplibs="$add $deplibs"
6925dc99b369Smrg	    fi
6926dc99b369Smrg	  fi
6927dc99b369Smrg	elif test "$linkmode" = prog; then
6928dc99b369Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6929dc99b369Smrg	  # is not unsupported.  This is valid on all known static and
6930dc99b369Smrg	  # shared platforms.
6931dc99b369Smrg	  if test "$hardcode_direct" != unsupported; then
6932dc99b369Smrg	    test -n "$old_library" && linklib="$old_library"
6933dc99b369Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6934dc99b369Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6935dc99b369Smrg	  else
6936dc99b369Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6937dc99b369Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6938dc99b369Smrg	  fi
6939dc99b369Smrg	elif test "$build_libtool_libs" = yes; then
6940dc99b369Smrg	  # Not a shared library
6941dc99b369Smrg	  if test "$deplibs_check_method" != pass_all; then
6942dc99b369Smrg	    # We're trying link a shared library against a static one
6943dc99b369Smrg	    # but the system doesn't support it.
6944dc99b369Smrg
6945dc99b369Smrg	    # Just print a warning and add the library to dependency_libs so
6946dc99b369Smrg	    # that the program can be linked against the static library.
6947dc99b369Smrg	    echo
6948dc99b369Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6949dc99b369Smrg	    echo "*** I have the capability to make that library automatically link in when"
6950dc99b369Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
6951dc99b369Smrg	    echo "*** shared version of the library, which you do not appear to have."
6952dc99b369Smrg	    if test "$module" = yes; then
6953dc99b369Smrg	      echo "*** But as you try to build a module library, libtool will still create "
6954dc99b369Smrg	      echo "*** a static module, that should work as long as the dlopening application"
6955dc99b369Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6956dc99b369Smrg	      if test -z "$global_symbol_pipe"; then
6957dc99b369Smrg		echo
6958dc99b369Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
6959dc99b369Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6960dc99b369Smrg		echo "*** not find such a program.  So, this module is probably useless."
6961dc99b369Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6962dc99b369Smrg	      fi
6963dc99b369Smrg	      if test "$build_old_libs" = no; then
6964dc99b369Smrg		build_libtool_libs=module
6965dc99b369Smrg		build_old_libs=yes
6966dc99b369Smrg	      else
6967dc99b369Smrg		build_libtool_libs=no
6968dc99b369Smrg	      fi
6969dc99b369Smrg	    fi
6970dc99b369Smrg	  else
6971dc99b369Smrg	    deplibs="$dir/$old_library $deplibs"
6972dc99b369Smrg	    link_static=yes
6973dc99b369Smrg	  fi
6974dc99b369Smrg	fi # link shared/static library?
6975dc99b369Smrg
6976dc99b369Smrg	if test "$linkmode" = lib; then
6977dc99b369Smrg	  if test -n "$dependency_libs" &&
6978dc99b369Smrg	     { test "$hardcode_into_libs" != yes ||
6979dc99b369Smrg	       test "$build_old_libs" = yes ||
6980dc99b369Smrg	       test "$link_static" = yes; }; then
6981dc99b369Smrg	    # Extract -R from dependency_libs
6982dc99b369Smrg	    temp_deplibs=
6983dc99b369Smrg	    for libdir in $dependency_libs; do
6984dc99b369Smrg	      case $libdir in
6985dc99b369Smrg	      -R*) func_stripname '-R' '' "$libdir"
6986dc99b369Smrg	           temp_xrpath=$func_stripname_result
6987dc99b369Smrg		   case " $xrpath " in
6988dc99b369Smrg		   *" $temp_xrpath "*) ;;
6989dc99b369Smrg		   *) func_append xrpath " $temp_xrpath";;
6990dc99b369Smrg		   esac;;
6991dc99b369Smrg	      *) func_append temp_deplibs " $libdir";;
6992dc99b369Smrg	      esac
6993dc99b369Smrg	    done
6994dc99b369Smrg	    dependency_libs="$temp_deplibs"
6995dc99b369Smrg	  fi
6996dc99b369Smrg
6997dc99b369Smrg	  func_append newlib_search_path " $absdir"
6998dc99b369Smrg	  # Link against this library
6999dc99b369Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7000dc99b369Smrg	  # ... and its dependency_libs
7001dc99b369Smrg	  tmp_libs=
7002dc99b369Smrg	  for deplib in $dependency_libs; do
7003dc99b369Smrg	    newdependency_libs="$deplib $newdependency_libs"
7004dc99b369Smrg	    case $deplib in
7005dc99b369Smrg              -L*) func_stripname '-L' '' "$deplib"
7006dc99b369Smrg                   func_resolve_sysroot "$func_stripname_result";;
7007dc99b369Smrg              *) func_resolve_sysroot "$deplib" ;;
7008dc99b369Smrg            esac
7009dc99b369Smrg	    if $opt_preserve_dup_deps ; then
7010dc99b369Smrg	      case "$tmp_libs " in
7011dc99b369Smrg	      *" $func_resolve_sysroot_result "*)
7012dc99b369Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7013dc99b369Smrg	      esac
7014dc99b369Smrg	    fi
7015dc99b369Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7016dc99b369Smrg	  done
7017dc99b369Smrg
7018dc99b369Smrg	  if test "$link_all_deplibs" != no; then
7019dc99b369Smrg	    # Add the search paths of all dependency libraries
7020dc99b369Smrg	    for deplib in $dependency_libs; do
7021dc99b369Smrg	      path=
7022dc99b369Smrg	      case $deplib in
7023dc99b369Smrg	      -L*) path="$deplib" ;;
7024dc99b369Smrg	      *.la)
7025dc99b369Smrg	        func_resolve_sysroot "$deplib"
7026dc99b369Smrg	        deplib=$func_resolve_sysroot_result
7027dc99b369Smrg	        func_dirname "$deplib" "" "."
7028dc99b369Smrg		dir=$func_dirname_result
7029dc99b369Smrg		# We need an absolute path.
7030dc99b369Smrg		case $dir in
7031dc99b369Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7032dc99b369Smrg		*)
7033dc99b369Smrg		  absdir=`cd "$dir" && pwd`
7034dc99b369Smrg		  if test -z "$absdir"; then
7035dc99b369Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7036dc99b369Smrg		    absdir="$dir"
7037dc99b369Smrg		  fi
7038dc99b369Smrg		  ;;
7039dc99b369Smrg		esac
7040dc99b369Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7041dc99b369Smrg		case $host in
7042dc99b369Smrg		*-*-darwin*)
7043dc99b369Smrg		  depdepl=
7044dc99b369Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7045dc99b369Smrg		  if test -n "$deplibrary_names" ; then
7046dc99b369Smrg		    for tmp in $deplibrary_names ; do
7047dc99b369Smrg		      depdepl=$tmp
7048dc99b369Smrg		    done
7049dc99b369Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7050dc99b369Smrg		      depdepl="$absdir/$objdir/$depdepl"
7051dc99b369Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7052dc99b369Smrg                      if test -z "$darwin_install_name"; then
7053dc99b369Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7054dc99b369Smrg                      fi
7055dc99b369Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
7056dc99b369Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7057dc99b369Smrg		      path=
7058dc99b369Smrg		    fi
7059dc99b369Smrg		  fi
7060dc99b369Smrg		  ;;
7061dc99b369Smrg		*)
7062dc99b369Smrg		  path="-L$absdir/$objdir"
7063dc99b369Smrg		  ;;
7064dc99b369Smrg		esac
7065dc99b369Smrg		else
7066dc99b369Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7067dc99b369Smrg		  test -z "$libdir" && \
7068dc99b369Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7069dc99b369Smrg		  test "$absdir" != "$libdir" && \
7070dc99b369Smrg		    func_warning "\`$deplib' seems to be moved"
7071dc99b369Smrg
7072dc99b369Smrg		  path="-L$absdir"
7073dc99b369Smrg		fi
7074dc99b369Smrg		;;
7075dc99b369Smrg	      esac
7076dc99b369Smrg	      case " $deplibs " in
7077dc99b369Smrg	      *" $path "*) ;;
7078dc99b369Smrg	      *) deplibs="$path $deplibs" ;;
7079dc99b369Smrg	      esac
7080dc99b369Smrg	    done
7081dc99b369Smrg	  fi # link_all_deplibs != no
7082dc99b369Smrg	fi # linkmode = lib
7083dc99b369Smrg      done # for deplib in $libs
7084dc99b369Smrg      if test "$pass" = link; then
7085dc99b369Smrg	if test "$linkmode" = "prog"; then
7086dc99b369Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7087dc99b369Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7088dc99b369Smrg	else
7089dc99b369Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7090dc99b369Smrg	fi
7091dc99b369Smrg      fi
7092dc99b369Smrg      dependency_libs="$newdependency_libs"
7093dc99b369Smrg      if test "$pass" = dlpreopen; then
7094dc99b369Smrg	# Link the dlpreopened libraries before other libraries
7095dc99b369Smrg	for deplib in $save_deplibs; do
7096dc99b369Smrg	  deplibs="$deplib $deplibs"
7097dc99b369Smrg	done
7098dc99b369Smrg      fi
7099dc99b369Smrg      if test "$pass" != dlopen; then
7100dc99b369Smrg	if test "$pass" != conv; then
7101dc99b369Smrg	  # Make sure lib_search_path contains only unique directories.
7102dc99b369Smrg	  lib_search_path=
7103dc99b369Smrg	  for dir in $newlib_search_path; do
7104dc99b369Smrg	    case "$lib_search_path " in
7105dc99b369Smrg	    *" $dir "*) ;;
7106dc99b369Smrg	    *) func_append lib_search_path " $dir" ;;
7107dc99b369Smrg	    esac
7108dc99b369Smrg	  done
7109dc99b369Smrg	  newlib_search_path=
7110dc99b369Smrg	fi
7111dc99b369Smrg
7112dc99b369Smrg	if test "$linkmode,$pass" != "prog,link"; then
7113dc99b369Smrg	  vars="deplibs"
7114dc99b369Smrg	else
7115dc99b369Smrg	  vars="compile_deplibs finalize_deplibs"
7116dc99b369Smrg	fi
7117dc99b369Smrg	for var in $vars dependency_libs; do
7118dc99b369Smrg	  # Add libraries to $var in reverse order
7119dc99b369Smrg	  eval tmp_libs=\"\$$var\"
7120dc99b369Smrg	  new_libs=
7121dc99b369Smrg	  for deplib in $tmp_libs; do
7122dc99b369Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7123dc99b369Smrg	    #        that some nasty dependency loop isn't accidentally
7124dc99b369Smrg	    #        broken:
7125dc99b369Smrg	    #new_libs="$deplib $new_libs"
7126dc99b369Smrg	    # Pragmatically, this seems to cause very few problems in
7127dc99b369Smrg	    # practice:
7128dc99b369Smrg	    case $deplib in
7129dc99b369Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7130dc99b369Smrg	    -R*) ;;
7131dc99b369Smrg	    *)
7132dc99b369Smrg	      # And here is the reason: when a library appears more
7133dc99b369Smrg	      # than once as an explicit dependence of a library, or
7134dc99b369Smrg	      # is implicitly linked in more than once by the
7135dc99b369Smrg	      # compiler, it is considered special, and multiple
7136dc99b369Smrg	      # occurrences thereof are not removed.  Compare this
7137dc99b369Smrg	      # with having the same library being listed as a
7138dc99b369Smrg	      # dependency of multiple other libraries: in this case,
7139dc99b369Smrg	      # we know (pedantically, we assume) the library does not
7140dc99b369Smrg	      # need to be listed more than once, so we keep only the
7141dc99b369Smrg	      # last copy.  This is not always right, but it is rare
7142dc99b369Smrg	      # enough that we require users that really mean to play
7143dc99b369Smrg	      # such unportable linking tricks to link the library
7144dc99b369Smrg	      # using -Wl,-lname, so that libtool does not consider it
7145dc99b369Smrg	      # for duplicate removal.
7146dc99b369Smrg	      case " $specialdeplibs " in
7147dc99b369Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7148dc99b369Smrg	      *)
7149dc99b369Smrg		case " $new_libs " in
7150dc99b369Smrg		*" $deplib "*) ;;
7151dc99b369Smrg		*) new_libs="$deplib $new_libs" ;;
7152dc99b369Smrg		esac
7153dc99b369Smrg		;;
7154dc99b369Smrg	      esac
7155dc99b369Smrg	      ;;
7156dc99b369Smrg	    esac
7157dc99b369Smrg	  done
7158dc99b369Smrg	  tmp_libs=
7159dc99b369Smrg	  for deplib in $new_libs; do
7160dc99b369Smrg	    case $deplib in
7161dc99b369Smrg	    -L*)
7162dc99b369Smrg	      case " $tmp_libs " in
7163dc99b369Smrg	      *" $deplib "*) ;;
7164dc99b369Smrg	      *) func_append tmp_libs " $deplib" ;;
7165dc99b369Smrg	      esac
7166dc99b369Smrg	      ;;
7167dc99b369Smrg	    *) func_append tmp_libs " $deplib" ;;
7168dc99b369Smrg	    esac
7169dc99b369Smrg	  done
7170dc99b369Smrg	  eval $var=\"$tmp_libs\"
7171dc99b369Smrg	done # for var
7172dc99b369Smrg      fi
7173dc99b369Smrg      # Last step: remove runtime libs from dependency_libs
7174dc99b369Smrg      # (they stay in deplibs)
7175dc99b369Smrg      tmp_libs=
7176dc99b369Smrg      for i in $dependency_libs ; do
7177dc99b369Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7178dc99b369Smrg	*" $i "*)
7179dc99b369Smrg	  i=""
7180dc99b369Smrg	  ;;
7181dc99b369Smrg	esac
7182dc99b369Smrg	if test -n "$i" ; then
7183dc99b369Smrg	  func_append tmp_libs " $i"
7184dc99b369Smrg	fi
7185dc99b369Smrg      done
7186dc99b369Smrg      dependency_libs=$tmp_libs
7187dc99b369Smrg    done # for pass
7188dc99b369Smrg    if test "$linkmode" = prog; then
7189dc99b369Smrg      dlfiles="$newdlfiles"
7190dc99b369Smrg    fi
7191dc99b369Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7192dc99b369Smrg      dlprefiles="$newdlprefiles"
7193dc99b369Smrg    fi
7194dc99b369Smrg
7195dc99b369Smrg    case $linkmode in
7196dc99b369Smrg    oldlib)
7197dc99b369Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7198dc99b369Smrg	func_warning "\`-dlopen' is ignored for archives"
7199dc99b369Smrg      fi
7200dc99b369Smrg
7201dc99b369Smrg      case " $deplibs" in
7202dc99b369Smrg      *\ -l* | *\ -L*)
7203dc99b369Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7204dc99b369Smrg      esac
7205dc99b369Smrg
7206dc99b369Smrg      test -n "$rpath" && \
7207dc99b369Smrg	func_warning "\`-rpath' is ignored for archives"
7208dc99b369Smrg
7209dc99b369Smrg      test -n "$xrpath" && \
7210dc99b369Smrg	func_warning "\`-R' is ignored for archives"
7211dc99b369Smrg
7212dc99b369Smrg      test -n "$vinfo" && \
7213dc99b369Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7214dc99b369Smrg
7215dc99b369Smrg      test -n "$release" && \
7216dc99b369Smrg	func_warning "\`-release' is ignored for archives"
7217dc99b369Smrg
7218dc99b369Smrg      test -n "$export_symbols$export_symbols_regex" && \
7219dc99b369Smrg	func_warning "\`-export-symbols' is ignored for archives"
7220dc99b369Smrg
7221dc99b369Smrg      # Now set the variables for building old libraries.
7222dc99b369Smrg      build_libtool_libs=no
7223dc99b369Smrg      oldlibs="$output"
7224dc99b369Smrg      func_append objs "$old_deplibs"
7225dc99b369Smrg      ;;
7226dc99b369Smrg
7227dc99b369Smrg    lib)
7228dc99b369Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
7229dc99b369Smrg      case $outputname in
7230dc99b369Smrg      lib*)
7231dc99b369Smrg	func_stripname 'lib' '.la' "$outputname"
7232dc99b369Smrg	name=$func_stripname_result
7233dc99b369Smrg	eval shared_ext=\"$shrext_cmds\"
7234dc99b369Smrg	eval libname=\"$libname_spec\"
7235dc99b369Smrg	;;
7236dc99b369Smrg      *)
7237dc99b369Smrg	test "$module" = no && \
7238dc99b369Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7239dc99b369Smrg
7240dc99b369Smrg	if test "$need_lib_prefix" != no; then
7241dc99b369Smrg	  # Add the "lib" prefix for modules if required
7242dc99b369Smrg	  func_stripname '' '.la' "$outputname"
7243dc99b369Smrg	  name=$func_stripname_result
7244dc99b369Smrg	  eval shared_ext=\"$shrext_cmds\"
7245dc99b369Smrg	  eval libname=\"$libname_spec\"
7246dc99b369Smrg	else
7247dc99b369Smrg	  func_stripname '' '.la' "$outputname"
7248dc99b369Smrg	  libname=$func_stripname_result
7249dc99b369Smrg	fi
7250dc99b369Smrg	;;
7251dc99b369Smrg      esac
7252dc99b369Smrg
7253dc99b369Smrg      if test -n "$objs"; then
7254dc99b369Smrg	if test "$deplibs_check_method" != pass_all; then
7255dc99b369Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7256dc99b369Smrg	else
7257dc99b369Smrg	  echo
7258dc99b369Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7259dc99b369Smrg	  $ECHO "*** objects $objs is not portable!"
7260dc99b369Smrg	  func_append libobjs " $objs"
7261dc99b369Smrg	fi
7262dc99b369Smrg      fi
7263dc99b369Smrg
7264dc99b369Smrg      test "$dlself" != no && \
7265dc99b369Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7266dc99b369Smrg
7267dc99b369Smrg      set dummy $rpath
7268dc99b369Smrg      shift
7269dc99b369Smrg      test "$#" -gt 1 && \
7270dc99b369Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7271dc99b369Smrg
7272dc99b369Smrg      install_libdir="$1"
7273dc99b369Smrg
7274dc99b369Smrg      oldlibs=
7275dc99b369Smrg      if test -z "$rpath"; then
7276dc99b369Smrg	if test "$build_libtool_libs" = yes; then
7277dc99b369Smrg	  # Building a libtool convenience library.
7278dc99b369Smrg	  # Some compilers have problems with a `.al' extension so
7279dc99b369Smrg	  # convenience libraries should have the same extension an
7280dc99b369Smrg	  # archive normally would.
7281dc99b369Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7282dc99b369Smrg	  build_libtool_libs=convenience
7283dc99b369Smrg	  build_old_libs=yes
7284dc99b369Smrg	fi
7285dc99b369Smrg
7286dc99b369Smrg	test -n "$vinfo" && \
7287dc99b369Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7288dc99b369Smrg
7289dc99b369Smrg	test -n "$release" && \
7290dc99b369Smrg	  func_warning "\`-release' is ignored for convenience libraries"
7291dc99b369Smrg      else
7292dc99b369Smrg
7293dc99b369Smrg	# Parse the version information argument.
7294dc99b369Smrg	save_ifs="$IFS"; IFS=':'
7295dc99b369Smrg	set dummy $vinfo 0 0 0
7296dc99b369Smrg	shift
7297dc99b369Smrg	IFS="$save_ifs"
7298dc99b369Smrg
7299dc99b369Smrg	test -n "$7" && \
7300dc99b369Smrg	  func_fatal_help "too many parameters to \`-version-info'"
7301dc99b369Smrg
7302dc99b369Smrg	# convert absolute version numbers to libtool ages
7303dc99b369Smrg	# this retains compatibility with .la files and attempts
7304dc99b369Smrg	# to make the code below a bit more comprehensible
7305dc99b369Smrg
7306dc99b369Smrg	case $vinfo_number in
7307dc99b369Smrg	yes)
7308dc99b369Smrg	  number_major="$1"
7309dc99b369Smrg	  number_minor="$2"
7310dc99b369Smrg	  number_revision="$3"
7311dc99b369Smrg	  #
7312dc99b369Smrg	  # There are really only two kinds -- those that
7313dc99b369Smrg	  # use the current revision as the major version
7314dc99b369Smrg	  # and those that subtract age and use age as
7315dc99b369Smrg	  # a minor version.  But, then there is irix
7316dc99b369Smrg	  # which has an extra 1 added just for fun
7317dc99b369Smrg	  #
7318dc99b369Smrg	  case $version_type in
7319dc99b369Smrg	  darwin|linux|osf|windows|none)
7320dc99b369Smrg	    func_arith $number_major + $number_minor
7321dc99b369Smrg	    current=$func_arith_result
7322dc99b369Smrg	    age="$number_minor"
7323dc99b369Smrg	    revision="$number_revision"
7324dc99b369Smrg	    ;;
7325dc99b369Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7326dc99b369Smrg	    current="$number_major"
7327dc99b369Smrg	    revision="$number_minor"
7328dc99b369Smrg	    age="0"
7329dc99b369Smrg	    ;;
7330dc99b369Smrg	  irix|nonstopux)
7331dc99b369Smrg	    func_arith $number_major + $number_minor
7332dc99b369Smrg	    current=$func_arith_result
7333dc99b369Smrg	    age="$number_minor"
7334dc99b369Smrg	    revision="$number_minor"
7335dc99b369Smrg	    lt_irix_increment=no
7336dc99b369Smrg	    ;;
7337dc99b369Smrg	  esac
7338dc99b369Smrg	  ;;
7339dc99b369Smrg	no)
7340dc99b369Smrg	  current="$1"
7341dc99b369Smrg	  revision="$2"
7342dc99b369Smrg	  age="$3"
7343dc99b369Smrg	  ;;
7344dc99b369Smrg	esac
7345dc99b369Smrg
7346dc99b369Smrg	# Check that each of the things are valid numbers.
7347dc99b369Smrg	case $current in
7348dc99b369Smrg	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]) ;;
7349dc99b369Smrg	*)
7350dc99b369Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7351dc99b369Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7352dc99b369Smrg	  ;;
7353dc99b369Smrg	esac
7354dc99b369Smrg
7355dc99b369Smrg	case $revision in
7356dc99b369Smrg	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]) ;;
7357dc99b369Smrg	*)
7358dc99b369Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7359dc99b369Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7360dc99b369Smrg	  ;;
7361dc99b369Smrg	esac
7362dc99b369Smrg
7363dc99b369Smrg	case $age in
7364dc99b369Smrg	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]) ;;
7365dc99b369Smrg	*)
7366dc99b369Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
7367dc99b369Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7368dc99b369Smrg	  ;;
7369dc99b369Smrg	esac
7370dc99b369Smrg
7371dc99b369Smrg	if test "$age" -gt "$current"; then
7372dc99b369Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7373dc99b369Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7374dc99b369Smrg	fi
7375dc99b369Smrg
7376dc99b369Smrg	# Calculate the version variables.
7377dc99b369Smrg	major=
7378dc99b369Smrg	versuffix=
7379dc99b369Smrg	verstring=
7380dc99b369Smrg	case $version_type in
7381dc99b369Smrg	none) ;;
7382dc99b369Smrg
7383dc99b369Smrg	darwin)
7384dc99b369Smrg	  # Like Linux, but with the current version available in
7385dc99b369Smrg	  # verstring for coding it into the library header
7386dc99b369Smrg	  func_arith $current - $age
7387dc99b369Smrg	  major=.$func_arith_result
7388dc99b369Smrg	  versuffix="$major.$age.$revision"
7389dc99b369Smrg	  # Darwin ld doesn't like 0 for these options...
7390dc99b369Smrg	  func_arith $current + 1
7391dc99b369Smrg	  minor_current=$func_arith_result
7392dc99b369Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7393dc99b369Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7394dc99b369Smrg	  ;;
7395dc99b369Smrg
7396dc99b369Smrg	freebsd-aout)
7397dc99b369Smrg	  major=".$current"
7398dc99b369Smrg	  versuffix=".$current.$revision";
7399dc99b369Smrg	  ;;
7400dc99b369Smrg
7401dc99b369Smrg	freebsd-elf)
7402dc99b369Smrg	  major=".$current"
7403dc99b369Smrg	  versuffix=".$current"
7404dc99b369Smrg	  ;;
7405dc99b369Smrg
7406dc99b369Smrg	irix | nonstopux)
7407dc99b369Smrg	  if test "X$lt_irix_increment" = "Xno"; then
7408dc99b369Smrg	    func_arith $current - $age
7409dc99b369Smrg	  else
7410dc99b369Smrg	    func_arith $current - $age + 1
7411dc99b369Smrg	  fi
7412dc99b369Smrg	  major=$func_arith_result
7413dc99b369Smrg
7414dc99b369Smrg	  case $version_type in
7415dc99b369Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7416dc99b369Smrg	    *)         verstring_prefix=sgi ;;
7417dc99b369Smrg	  esac
7418dc99b369Smrg	  verstring="$verstring_prefix$major.$revision"
7419dc99b369Smrg
7420dc99b369Smrg	  # Add in all the interfaces that we are compatible with.
7421dc99b369Smrg	  loop=$revision
7422dc99b369Smrg	  while test "$loop" -ne 0; do
7423dc99b369Smrg	    func_arith $revision - $loop
7424dc99b369Smrg	    iface=$func_arith_result
7425dc99b369Smrg	    func_arith $loop - 1
7426dc99b369Smrg	    loop=$func_arith_result
7427dc99b369Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7428dc99b369Smrg	  done
7429dc99b369Smrg
7430dc99b369Smrg	  # Before this point, $major must not contain `.'.
7431dc99b369Smrg	  major=.$major
7432dc99b369Smrg	  versuffix="$major.$revision"
7433dc99b369Smrg	  ;;
7434dc99b369Smrg
7435dc99b369Smrg	linux)
7436dc99b369Smrg	  func_arith $current - $age
7437dc99b369Smrg	  major=.$func_arith_result
7438dc99b369Smrg	  versuffix="$major.$age.$revision"
7439dc99b369Smrg	  ;;
7440dc99b369Smrg
7441dc99b369Smrg	osf)
7442dc99b369Smrg	  func_arith $current - $age
7443dc99b369Smrg	  major=.$func_arith_result
7444dc99b369Smrg	  versuffix=".$current.$age.$revision"
7445dc99b369Smrg	  verstring="$current.$age.$revision"
7446dc99b369Smrg
7447dc99b369Smrg	  # Add in all the interfaces that we are compatible with.
7448dc99b369Smrg	  loop=$age
7449dc99b369Smrg	  while test "$loop" -ne 0; do
7450dc99b369Smrg	    func_arith $current - $loop
7451dc99b369Smrg	    iface=$func_arith_result
7452dc99b369Smrg	    func_arith $loop - 1
7453dc99b369Smrg	    loop=$func_arith_result
7454dc99b369Smrg	    verstring="$verstring:${iface}.0"
7455dc99b369Smrg	  done
7456dc99b369Smrg
7457dc99b369Smrg	  # Make executables depend on our current version.
7458dc99b369Smrg	  func_append verstring ":${current}.0"
7459dc99b369Smrg	  ;;
7460dc99b369Smrg
7461dc99b369Smrg	qnx)
7462dc99b369Smrg	  major=".$current"
7463dc99b369Smrg	  versuffix=".$current"
7464dc99b369Smrg	  ;;
7465dc99b369Smrg
7466dc99b369Smrg	sunos)
7467dc99b369Smrg	  major=".$current"
7468dc99b369Smrg	  versuffix=".$current.$revision"
7469dc99b369Smrg	  ;;
7470dc99b369Smrg
7471dc99b369Smrg	windows)
7472dc99b369Smrg	  # Use '-' rather than '.', since we only want one
7473dc99b369Smrg	  # extension on DOS 8.3 filesystems.
7474dc99b369Smrg	  func_arith $current - $age
7475dc99b369Smrg	  major=$func_arith_result
7476dc99b369Smrg	  versuffix="-$major"
7477dc99b369Smrg	  ;;
7478dc99b369Smrg
7479dc99b369Smrg	*)
7480dc99b369Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7481dc99b369Smrg	  ;;
7482dc99b369Smrg	esac
7483dc99b369Smrg
7484dc99b369Smrg	# Clear the version info if we defaulted, and they specified a release.
7485dc99b369Smrg	if test -z "$vinfo" && test -n "$release"; then
7486dc99b369Smrg	  major=
7487dc99b369Smrg	  case $version_type in
7488dc99b369Smrg	  darwin)
7489dc99b369Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7490dc99b369Smrg	    # problems, so we reset it completely
7491dc99b369Smrg	    verstring=
7492dc99b369Smrg	    ;;
7493dc99b369Smrg	  *)
7494dc99b369Smrg	    verstring="0.0"
7495dc99b369Smrg	    ;;
7496dc99b369Smrg	  esac
7497dc99b369Smrg	  if test "$need_version" = no; then
7498dc99b369Smrg	    versuffix=
7499dc99b369Smrg	  else
7500dc99b369Smrg	    versuffix=".0.0"
7501dc99b369Smrg	  fi
7502dc99b369Smrg	fi
7503dc99b369Smrg
7504dc99b369Smrg	# Remove version info from name if versioning should be avoided
7505dc99b369Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7506dc99b369Smrg	  major=
7507dc99b369Smrg	  versuffix=
7508dc99b369Smrg	  verstring=""
7509dc99b369Smrg	fi
7510dc99b369Smrg
7511dc99b369Smrg	# Check to see if the archive will have undefined symbols.
7512dc99b369Smrg	if test "$allow_undefined" = yes; then
7513dc99b369Smrg	  if test "$allow_undefined_flag" = unsupported; then
7514dc99b369Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7515dc99b369Smrg	    build_libtool_libs=no
7516dc99b369Smrg	    build_old_libs=yes
7517dc99b369Smrg	  fi
7518dc99b369Smrg	else
7519dc99b369Smrg	  # Don't allow undefined symbols.
7520dc99b369Smrg	  allow_undefined_flag="$no_undefined_flag"
7521dc99b369Smrg	fi
7522dc99b369Smrg
7523dc99b369Smrg      fi
7524dc99b369Smrg
7525dc99b369Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
7526dc99b369Smrg      func_append libobjs " $symfileobj"
7527dc99b369Smrg      test "X$libobjs" = "X " && libobjs=
7528dc99b369Smrg
7529dc99b369Smrg      if test "$opt_mode" != relink; then
7530dc99b369Smrg	# Remove our outputs, but don't remove object files since they
7531dc99b369Smrg	# may have been created when compiling PIC objects.
7532dc99b369Smrg	removelist=
7533dc99b369Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7534dc99b369Smrg	for p in $tempremovelist; do
7535dc99b369Smrg	  case $p in
7536dc99b369Smrg	    *.$objext | *.gcno)
7537dc99b369Smrg	       ;;
7538dc99b369Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7539dc99b369Smrg	       if test "X$precious_files_regex" != "X"; then
7540dc99b369Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7541dc99b369Smrg		 then
7542dc99b369Smrg		   continue
7543dc99b369Smrg		 fi
7544dc99b369Smrg	       fi
7545dc99b369Smrg	       func_append removelist " $p"
7546dc99b369Smrg	       ;;
7547dc99b369Smrg	    *) ;;
7548dc99b369Smrg	  esac
7549dc99b369Smrg	done
7550dc99b369Smrg	test -n "$removelist" && \
7551dc99b369Smrg	  func_show_eval "${RM}r \$removelist"
7552dc99b369Smrg      fi
7553dc99b369Smrg
7554dc99b369Smrg      # Now set the variables for building old libraries.
7555dc99b369Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7556dc99b369Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
7557dc99b369Smrg
7558dc99b369Smrg	# Transform .lo files to .o files.
7559dc99b369Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7560dc99b369Smrg      fi
7561dc99b369Smrg
7562dc99b369Smrg      # Eliminate all temporary directories.
7563dc99b369Smrg      #for path in $notinst_path; do
7564dc99b369Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7565dc99b369Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7566dc99b369Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7567dc99b369Smrg      #done
7568dc99b369Smrg
7569dc99b369Smrg      if test -n "$xrpath"; then
7570dc99b369Smrg	# If the user specified any rpath flags, then add them.
7571dc99b369Smrg	temp_xrpath=
7572dc99b369Smrg	for libdir in $xrpath; do
7573dc99b369Smrg	  func_replace_sysroot "$libdir"
7574dc99b369Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7575dc99b369Smrg	  case "$finalize_rpath " in
7576dc99b369Smrg	  *" $libdir "*) ;;
7577dc99b369Smrg	  *) func_append finalize_rpath " $libdir" ;;
7578dc99b369Smrg	  esac
7579dc99b369Smrg	done
7580dc99b369Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7581dc99b369Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7582dc99b369Smrg	fi
7583dc99b369Smrg      fi
7584dc99b369Smrg
7585dc99b369Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7586dc99b369Smrg      old_dlfiles="$dlfiles"
7587dc99b369Smrg      dlfiles=
7588dc99b369Smrg      for lib in $old_dlfiles; do
7589dc99b369Smrg	case " $dlprefiles $dlfiles " in
7590dc99b369Smrg	*" $lib "*) ;;
7591dc99b369Smrg	*) func_append dlfiles " $lib" ;;
7592dc99b369Smrg	esac
7593dc99b369Smrg      done
7594dc99b369Smrg
7595dc99b369Smrg      # Make sure dlprefiles contains only unique files
7596dc99b369Smrg      old_dlprefiles="$dlprefiles"
7597dc99b369Smrg      dlprefiles=
7598dc99b369Smrg      for lib in $old_dlprefiles; do
7599dc99b369Smrg	case "$dlprefiles " in
7600dc99b369Smrg	*" $lib "*) ;;
7601dc99b369Smrg	*) func_append dlprefiles " $lib" ;;
7602dc99b369Smrg	esac
7603dc99b369Smrg      done
7604dc99b369Smrg
7605dc99b369Smrg      if test "$build_libtool_libs" = yes; then
7606dc99b369Smrg	if test -n "$rpath"; then
7607dc99b369Smrg	  case $host in
7608dc99b369Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7609dc99b369Smrg	    # these systems don't actually have a c library (as such)!
7610dc99b369Smrg	    ;;
7611dc99b369Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7612dc99b369Smrg	    # Rhapsody C library is in the System framework
7613dc99b369Smrg	    func_append deplibs " System.ltframework"
7614dc99b369Smrg	    ;;
7615dc99b369Smrg	  *-*-netbsd*)
7616dc99b369Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7617dc99b369Smrg	    ;;
7618dc99b369Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7619dc99b369Smrg	    # Do not include libc due to us having libc/libc_r.
7620dc99b369Smrg	    ;;
7621dc99b369Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7622dc99b369Smrg	    # Causes problems with __ctype
7623dc99b369Smrg	    ;;
7624dc99b369Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7625dc99b369Smrg	    # Compiler inserts libc in the correct place for threads to work
7626dc99b369Smrg	    ;;
7627dc99b369Smrg	  *)
7628dc99b369Smrg	    # Add libc to deplibs on all other systems if necessary.
7629dc99b369Smrg	    if test "$build_libtool_need_lc" = "yes"; then
7630dc99b369Smrg	      func_append deplibs " -lc"
7631dc99b369Smrg	    fi
7632dc99b369Smrg	    ;;
7633dc99b369Smrg	  esac
7634dc99b369Smrg	fi
7635dc99b369Smrg
7636dc99b369Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7637dc99b369Smrg	name_save=$name
7638dc99b369Smrg	libname_save=$libname
7639dc99b369Smrg	release_save=$release
7640dc99b369Smrg	versuffix_save=$versuffix
7641dc99b369Smrg	major_save=$major
7642dc99b369Smrg	# I'm not sure if I'm treating the release correctly.  I think
7643dc99b369Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7644dc99b369Smrg	# add it in twice.  Is that correct?
7645dc99b369Smrg	release=""
7646dc99b369Smrg	versuffix=""
7647dc99b369Smrg	major=""
7648dc99b369Smrg	newdeplibs=
7649dc99b369Smrg	droppeddeps=no
7650dc99b369Smrg	case $deplibs_check_method in
7651dc99b369Smrg	pass_all)
7652dc99b369Smrg	  # Don't check for shared/static.  Everything works.
7653dc99b369Smrg	  # This might be a little naive.  We might want to check
7654dc99b369Smrg	  # whether the library exists or not.  But this is on
7655dc99b369Smrg	  # osf3 & osf4 and I'm not really sure... Just
7656dc99b369Smrg	  # implementing what was already the behavior.
7657dc99b369Smrg	  newdeplibs=$deplibs
7658dc99b369Smrg	  ;;
7659dc99b369Smrg	test_compile)
7660dc99b369Smrg	  # This code stresses the "libraries are programs" paradigm to its
7661dc99b369Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7662dc99b369Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7663dc99b369Smrg	  # whether they linked in statically or dynamically with ldd.
7664dc99b369Smrg	  $opt_dry_run || $RM conftest.c
7665dc99b369Smrg	  cat > conftest.c <<EOF
7666dc99b369Smrg	  int main() { return 0; }
7667dc99b369SmrgEOF
7668dc99b369Smrg	  $opt_dry_run || $RM conftest
7669dc99b369Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7670dc99b369Smrg	    ldd_output=`ldd conftest`
7671dc99b369Smrg	    for i in $deplibs; do
7672dc99b369Smrg	      case $i in
7673dc99b369Smrg	      -l*)
7674dc99b369Smrg		func_stripname -l '' "$i"
7675dc99b369Smrg		name=$func_stripname_result
7676dc99b369Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7677dc99b369Smrg		  case " $predeps $postdeps " in
7678dc99b369Smrg		  *" $i "*)
7679dc99b369Smrg		    func_append newdeplibs " $i"
7680dc99b369Smrg		    i=""
7681dc99b369Smrg		    ;;
7682dc99b369Smrg		  esac
7683dc99b369Smrg		fi
7684dc99b369Smrg		if test -n "$i" ; then
7685dc99b369Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7686dc99b369Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7687dc99b369Smrg		  set dummy $deplib_matches; shift
7688dc99b369Smrg		  deplib_match=$1
7689dc99b369Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7690dc99b369Smrg		    func_append newdeplibs " $i"
7691dc99b369Smrg		  else
7692dc99b369Smrg		    droppeddeps=yes
7693dc99b369Smrg		    echo
7694dc99b369Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7695dc99b369Smrg		    echo "*** I have the capability to make that library automatically link in when"
7696dc99b369Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
7697dc99b369Smrg		    echo "*** shared version of the library, which I believe you do not have"
7698dc99b369Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
7699dc99b369Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7700dc99b369Smrg		  fi
7701dc99b369Smrg		fi
7702dc99b369Smrg		;;
7703dc99b369Smrg	      *)
7704dc99b369Smrg		func_append newdeplibs " $i"
7705dc99b369Smrg		;;
7706dc99b369Smrg	      esac
7707dc99b369Smrg	    done
7708dc99b369Smrg	  else
7709dc99b369Smrg	    # Error occurred in the first compile.  Let's try to salvage
7710dc99b369Smrg	    # the situation: Compile a separate program for each library.
7711dc99b369Smrg	    for i in $deplibs; do
7712dc99b369Smrg	      case $i in
7713dc99b369Smrg	      -l*)
7714dc99b369Smrg		func_stripname -l '' "$i"
7715dc99b369Smrg		name=$func_stripname_result
7716dc99b369Smrg		$opt_dry_run || $RM conftest
7717dc99b369Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7718dc99b369Smrg		  ldd_output=`ldd conftest`
7719dc99b369Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7720dc99b369Smrg		    case " $predeps $postdeps " in
7721dc99b369Smrg		    *" $i "*)
7722dc99b369Smrg		      func_append newdeplibs " $i"
7723dc99b369Smrg		      i=""
7724dc99b369Smrg		      ;;
7725dc99b369Smrg		    esac
7726dc99b369Smrg		  fi
7727dc99b369Smrg		  if test -n "$i" ; then
7728dc99b369Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7729dc99b369Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7730dc99b369Smrg		    set dummy $deplib_matches; shift
7731dc99b369Smrg		    deplib_match=$1
7732dc99b369Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7733dc99b369Smrg		      func_append newdeplibs " $i"
7734dc99b369Smrg		    else
7735dc99b369Smrg		      droppeddeps=yes
7736dc99b369Smrg		      echo
7737dc99b369Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7738dc99b369Smrg		      echo "*** I have the capability to make that library automatically link in when"
7739dc99b369Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
7740dc99b369Smrg		      echo "*** shared version of the library, which you do not appear to have"
7741dc99b369Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
7742dc99b369Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7743dc99b369Smrg		    fi
7744dc99b369Smrg		  fi
7745dc99b369Smrg		else
7746dc99b369Smrg		  droppeddeps=yes
7747dc99b369Smrg		  echo
7748dc99b369Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7749dc99b369Smrg		  echo "*** make it link in!  You will probably need to install it or some"
7750dc99b369Smrg		  echo "*** library that it depends on before this library will be fully"
7751dc99b369Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7752dc99b369Smrg		fi
7753dc99b369Smrg		;;
7754dc99b369Smrg	      *)
7755dc99b369Smrg		func_append newdeplibs " $i"
7756dc99b369Smrg		;;
7757dc99b369Smrg	      esac
7758dc99b369Smrg	    done
7759dc99b369Smrg	  fi
7760dc99b369Smrg	  ;;
7761dc99b369Smrg	file_magic*)
7762dc99b369Smrg	  set dummy $deplibs_check_method; shift
7763dc99b369Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7764dc99b369Smrg	  for a_deplib in $deplibs; do
7765dc99b369Smrg	    case $a_deplib in
7766dc99b369Smrg	    -l*)
7767dc99b369Smrg	      func_stripname -l '' "$a_deplib"
7768dc99b369Smrg	      name=$func_stripname_result
7769dc99b369Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7770dc99b369Smrg		case " $predeps $postdeps " in
7771dc99b369Smrg		*" $a_deplib "*)
7772dc99b369Smrg		  func_append newdeplibs " $a_deplib"
7773dc99b369Smrg		  a_deplib=""
7774dc99b369Smrg		  ;;
7775dc99b369Smrg		esac
7776dc99b369Smrg	      fi
7777dc99b369Smrg	      if test -n "$a_deplib" ; then
7778dc99b369Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7779dc99b369Smrg		if test -n "$file_magic_glob"; then
7780dc99b369Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7781dc99b369Smrg		else
7782dc99b369Smrg		  libnameglob=$libname
7783dc99b369Smrg		fi
7784dc99b369Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7785dc99b369Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7786dc99b369Smrg		  if test "$want_nocaseglob" = yes; then
7787dc99b369Smrg		    shopt -s nocaseglob
7788dc99b369Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7789dc99b369Smrg		    $nocaseglob
7790dc99b369Smrg		  else
7791dc99b369Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7792dc99b369Smrg		  fi
7793dc99b369Smrg		  for potent_lib in $potential_libs; do
7794dc99b369Smrg		      # Follow soft links.
7795dc99b369Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7796dc99b369Smrg			 $GREP " -> " >/dev/null; then
7797dc99b369Smrg			continue
7798dc99b369Smrg		      fi
7799dc99b369Smrg		      # The statement above tries to avoid entering an
7800dc99b369Smrg		      # endless loop below, in case of cyclic links.
7801dc99b369Smrg		      # We might still enter an endless loop, since a link
7802dc99b369Smrg		      # loop can be closed while we follow links,
7803dc99b369Smrg		      # but so what?
7804dc99b369Smrg		      potlib="$potent_lib"
7805dc99b369Smrg		      while test -h "$potlib" 2>/dev/null; do
7806dc99b369Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7807dc99b369Smrg			case $potliblink in
7808dc99b369Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
7809dc99b369Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7810dc99b369Smrg			esac
7811dc99b369Smrg		      done
7812dc99b369Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7813dc99b369Smrg			 $SED -e 10q |
7814dc99b369Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
7815dc99b369Smrg			func_append newdeplibs " $a_deplib"
7816dc99b369Smrg			a_deplib=""
7817dc99b369Smrg			break 2
7818dc99b369Smrg		      fi
7819dc99b369Smrg		  done
7820dc99b369Smrg		done
7821dc99b369Smrg	      fi
7822dc99b369Smrg	      if test -n "$a_deplib" ; then
7823dc99b369Smrg		droppeddeps=yes
7824dc99b369Smrg		echo
7825dc99b369Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7826dc99b369Smrg		echo "*** I have the capability to make that library automatically link in when"
7827dc99b369Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7828dc99b369Smrg		echo "*** shared version of the library, which you do not appear to have"
7829dc99b369Smrg		echo "*** because I did check the linker path looking for a file starting"
7830dc99b369Smrg		if test -z "$potlib" ; then
7831dc99b369Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7832dc99b369Smrg		else
7833dc99b369Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7834dc99b369Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7835dc99b369Smrg		fi
7836dc99b369Smrg	      fi
7837dc99b369Smrg	      ;;
7838dc99b369Smrg	    *)
7839dc99b369Smrg	      # Add a -L argument.
7840dc99b369Smrg	      func_append newdeplibs " $a_deplib"
7841dc99b369Smrg	      ;;
7842dc99b369Smrg	    esac
7843dc99b369Smrg	  done # Gone through all deplibs.
7844dc99b369Smrg	  ;;
7845dc99b369Smrg	match_pattern*)
7846dc99b369Smrg	  set dummy $deplibs_check_method; shift
7847dc99b369Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7848dc99b369Smrg	  for a_deplib in $deplibs; do
7849dc99b369Smrg	    case $a_deplib in
7850dc99b369Smrg	    -l*)
7851dc99b369Smrg	      func_stripname -l '' "$a_deplib"
7852dc99b369Smrg	      name=$func_stripname_result
7853dc99b369Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7854dc99b369Smrg		case " $predeps $postdeps " in
7855dc99b369Smrg		*" $a_deplib "*)
7856dc99b369Smrg		  func_append newdeplibs " $a_deplib"
7857dc99b369Smrg		  a_deplib=""
7858dc99b369Smrg		  ;;
7859dc99b369Smrg		esac
7860dc99b369Smrg	      fi
7861dc99b369Smrg	      if test -n "$a_deplib" ; then
7862dc99b369Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7863dc99b369Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7864dc99b369Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7865dc99b369Smrg		  for potent_lib in $potential_libs; do
7866dc99b369Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
7867dc99b369Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7868dc99b369Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
7869dc99b369Smrg		      func_append newdeplibs " $a_deplib"
7870dc99b369Smrg		      a_deplib=""
7871dc99b369Smrg		      break 2
7872dc99b369Smrg		    fi
7873dc99b369Smrg		  done
7874dc99b369Smrg		done
7875dc99b369Smrg	      fi
7876dc99b369Smrg	      if test -n "$a_deplib" ; then
7877dc99b369Smrg		droppeddeps=yes
7878dc99b369Smrg		echo
7879dc99b369Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7880dc99b369Smrg		echo "*** I have the capability to make that library automatically link in when"
7881dc99b369Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7882dc99b369Smrg		echo "*** shared version of the library, which you do not appear to have"
7883dc99b369Smrg		echo "*** because I did check the linker path looking for a file starting"
7884dc99b369Smrg		if test -z "$potlib" ; then
7885dc99b369Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7886dc99b369Smrg		else
7887dc99b369Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7888dc99b369Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7889dc99b369Smrg		fi
7890dc99b369Smrg	      fi
7891dc99b369Smrg	      ;;
7892dc99b369Smrg	    *)
7893dc99b369Smrg	      # Add a -L argument.
7894dc99b369Smrg	      func_append newdeplibs " $a_deplib"
7895dc99b369Smrg	      ;;
7896dc99b369Smrg	    esac
7897dc99b369Smrg	  done # Gone through all deplibs.
7898dc99b369Smrg	  ;;
7899dc99b369Smrg	none | unknown | *)
7900dc99b369Smrg	  newdeplibs=""
7901dc99b369Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7902dc99b369Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7903dc99b369Smrg	    for i in $predeps $postdeps ; do
7904dc99b369Smrg	      # can't use Xsed below, because $i might contain '/'
7905dc99b369Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7906dc99b369Smrg	    done
7907dc99b369Smrg	  fi
7908dc99b369Smrg	  case $tmp_deplibs in
7909dc99b369Smrg	  *[!\	\ ]*)
7910dc99b369Smrg	    echo
7911dc99b369Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
7912dc99b369Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7913dc99b369Smrg	    else
7914dc99b369Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7915dc99b369Smrg	    fi
7916dc99b369Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7917dc99b369Smrg	    droppeddeps=yes
7918dc99b369Smrg	    ;;
7919dc99b369Smrg	  esac
7920dc99b369Smrg	  ;;
7921dc99b369Smrg	esac
7922dc99b369Smrg	versuffix=$versuffix_save
7923dc99b369Smrg	major=$major_save
7924dc99b369Smrg	release=$release_save
7925dc99b369Smrg	libname=$libname_save
7926dc99b369Smrg	name=$name_save
7927dc99b369Smrg
7928dc99b369Smrg	case $host in
7929dc99b369Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7930dc99b369Smrg	  # On Rhapsody replace the C library with the System framework
7931dc99b369Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7932dc99b369Smrg	  ;;
7933dc99b369Smrg	esac
7934dc99b369Smrg
7935dc99b369Smrg	if test "$droppeddeps" = yes; then
7936dc99b369Smrg	  if test "$module" = yes; then
7937dc99b369Smrg	    echo
7938dc99b369Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7939dc99b369Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7940dc99b369Smrg	    echo "*** a static module, that should work as long as the dlopening"
7941dc99b369Smrg	    echo "*** application is linked with the -dlopen flag."
7942dc99b369Smrg	    if test -z "$global_symbol_pipe"; then
7943dc99b369Smrg	      echo
7944dc99b369Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
7945dc99b369Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7946dc99b369Smrg	      echo "*** not find such a program.  So, this module is probably useless."
7947dc99b369Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7948dc99b369Smrg	    fi
7949dc99b369Smrg	    if test "$build_old_libs" = no; then
7950dc99b369Smrg	      oldlibs="$output_objdir/$libname.$libext"
7951dc99b369Smrg	      build_libtool_libs=module
7952dc99b369Smrg	      build_old_libs=yes
7953dc99b369Smrg	    else
7954dc99b369Smrg	      build_libtool_libs=no
7955dc99b369Smrg	    fi
7956dc99b369Smrg	  else
7957dc99b369Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
7958dc99b369Smrg	    echo "*** automatically added whenever a program is linked with this library"
7959dc99b369Smrg	    echo "*** or is declared to -dlopen it."
79605eefee25Smacallan
7961dc99b369Smrg	    if test "$allow_undefined" = no; then
7962dc99b369Smrg	      echo
7963dc99b369Smrg	      echo "*** Since this library must not contain undefined symbols,"
7964dc99b369Smrg	      echo "*** because either the platform does not support them or"
7965dc99b369Smrg	      echo "*** it was explicitly requested with -no-undefined,"
7966dc99b369Smrg	      echo "*** libtool will only create a static version of it."
7967dc99b369Smrg	      if test "$build_old_libs" = no; then
7968dc99b369Smrg		oldlibs="$output_objdir/$libname.$libext"
7969dc99b369Smrg		build_libtool_libs=module
7970dc99b369Smrg		build_old_libs=yes
7971dc99b369Smrg	      else
7972dc99b369Smrg		build_libtool_libs=no
7973dc99b369Smrg	      fi
7974dc99b369Smrg	    fi
7975dc99b369Smrg	  fi
7976dc99b369Smrg	fi
7977dc99b369Smrg	# Done checking deplibs!
7978dc99b369Smrg	deplibs=$newdeplibs
7979dc99b369Smrg      fi
7980dc99b369Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7981dc99b369Smrg      case $host in
7982dc99b369Smrg	*-*-darwin*)
7983dc99b369Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7984dc99b369Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7985dc99b369Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7986dc99b369Smrg	  ;;
7987dc99b369Smrg      esac
79885eefee25Smacallan
7989dc99b369Smrg      # move library search paths that coincide with paths to not yet
7990dc99b369Smrg      # installed libraries to the beginning of the library search list
7991dc99b369Smrg      new_libs=
7992dc99b369Smrg      for path in $notinst_path; do
7993dc99b369Smrg	case " $new_libs " in
7994dc99b369Smrg	*" -L$path/$objdir "*) ;;
7995dc99b369Smrg	*)
7996dc99b369Smrg	  case " $deplibs " in
7997dc99b369Smrg	  *" -L$path/$objdir "*)
7998dc99b369Smrg	    func_append new_libs " -L$path/$objdir" ;;
7999dc99b369Smrg	  esac
8000dc99b369Smrg	  ;;
8001dc99b369Smrg	esac
8002dc99b369Smrg      done
8003dc99b369Smrg      for deplib in $deplibs; do
8004dc99b369Smrg	case $deplib in
8005dc99b369Smrg	-L*)
8006dc99b369Smrg	  case " $new_libs " in
8007dc99b369Smrg	  *" $deplib "*) ;;
8008dc99b369Smrg	  *) func_append new_libs " $deplib" ;;
8009dc99b369Smrg	  esac
8010dc99b369Smrg	  ;;
8011dc99b369Smrg	*) func_append new_libs " $deplib" ;;
8012dc99b369Smrg	esac
8013dc99b369Smrg      done
8014dc99b369Smrg      deplibs="$new_libs"
80155eefee25Smacallan
8016dc99b369Smrg      # All the library-specific variables (install_libdir is set above).
8017dc99b369Smrg      library_names=
8018dc99b369Smrg      old_library=
8019dc99b369Smrg      dlname=
80205eefee25Smacallan
8021dc99b369Smrg      # Test again, we may have decided not to build it any more
8022dc99b369Smrg      if test "$build_libtool_libs" = yes; then
8023dc99b369Smrg	if test "$hardcode_into_libs" = yes; then
8024dc99b369Smrg	  # Hardcode the library paths
8025dc99b369Smrg	  hardcode_libdirs=
8026dc99b369Smrg	  dep_rpath=
8027dc99b369Smrg	  rpath="$finalize_rpath"
8028dc99b369Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8029dc99b369Smrg	  for libdir in $rpath; do
8030dc99b369Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8031dc99b369Smrg	      if test -n "$hardcode_libdir_separator"; then
8032dc99b369Smrg		func_replace_sysroot "$libdir"
8033dc99b369Smrg		libdir=$func_replace_sysroot_result
8034dc99b369Smrg		if test -z "$hardcode_libdirs"; then
8035dc99b369Smrg		  hardcode_libdirs="$libdir"
8036dc99b369Smrg		else
8037dc99b369Smrg		  # Just accumulate the unique libdirs.
8038dc99b369Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8039dc99b369Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8040dc99b369Smrg		    ;;
8041dc99b369Smrg		  *)
8042dc99b369Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8043dc99b369Smrg		    ;;
8044dc99b369Smrg		  esac
8045dc99b369Smrg		fi
8046dc99b369Smrg	      else
8047dc99b369Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
8048dc99b369Smrg		func_append dep_rpath " $flag"
8049dc99b369Smrg	      fi
8050dc99b369Smrg	    elif test -n "$runpath_var"; then
8051dc99b369Smrg	      case "$perm_rpath " in
8052dc99b369Smrg	      *" $libdir "*) ;;
8053dc99b369Smrg	      *) func_apped perm_rpath " $libdir" ;;
8054dc99b369Smrg	      esac
8055dc99b369Smrg	    fi
8056dc99b369Smrg	  done
8057dc99b369Smrg	  # Substitute the hardcoded libdirs into the rpath.
8058dc99b369Smrg	  if test -n "$hardcode_libdir_separator" &&
8059dc99b369Smrg	     test -n "$hardcode_libdirs"; then
8060dc99b369Smrg	    libdir="$hardcode_libdirs"
8061dc99b369Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
8062dc99b369Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
8063dc99b369Smrg	    else
8064dc99b369Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
8065dc99b369Smrg	    fi
8066dc99b369Smrg	  fi
8067dc99b369Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8068dc99b369Smrg	    # We should set the runpath_var.
8069dc99b369Smrg	    rpath=
8070dc99b369Smrg	    for dir in $perm_rpath; do
8071dc99b369Smrg	      func_append rpath "$dir:"
8072dc99b369Smrg	    done
8073dc99b369Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8074dc99b369Smrg	  fi
8075dc99b369Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8076dc99b369Smrg	fi
80775eefee25Smacallan
8078dc99b369Smrg	shlibpath="$finalize_shlibpath"
8079dc99b369Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8080dc99b369Smrg	if test -n "$shlibpath"; then
8081dc99b369Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8082dc99b369Smrg	fi
80835eefee25Smacallan
8084dc99b369Smrg	# Get the real and link names of the library.
8085dc99b369Smrg	eval shared_ext=\"$shrext_cmds\"
8086dc99b369Smrg	eval library_names=\"$library_names_spec\"
8087dc99b369Smrg	set dummy $library_names
8088dc99b369Smrg	shift
8089dc99b369Smrg	realname="$1"
8090dc99b369Smrg	shift
80915eefee25Smacallan
8092dc99b369Smrg	if test -n "$soname_spec"; then
8093dc99b369Smrg	  eval soname=\"$soname_spec\"
80945eefee25Smacallan	else
8095dc99b369Smrg	  soname="$realname"
8096dc99b369Smrg	fi
8097dc99b369Smrg	if test -z "$dlname"; then
8098dc99b369Smrg	  dlname=$soname
80995eefee25Smacallan	fi
81005eefee25Smacallan
8101dc99b369Smrg	lib="$output_objdir/$realname"
8102dc99b369Smrg	linknames=
8103dc99b369Smrg	for link
8104dc99b369Smrg	do
8105dc99b369Smrg	  func_append linknames " $link"
8106dc99b369Smrg	done
81075eefee25Smacallan
8108dc99b369Smrg	# Use standard objects if they are pic
8109dc99b369Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8110dc99b369Smrg	test "X$libobjs" = "X " && libobjs=
81115eefee25Smacallan
8112dc99b369Smrg	delfiles=
8113dc99b369Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8114dc99b369Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8115dc99b369Smrg	  export_symbols="$output_objdir/$libname.uexp"
8116dc99b369Smrg	  func_append delfiles " $export_symbols"
8117dc99b369Smrg	fi
81185eefee25Smacallan
8119dc99b369Smrg	orig_export_symbols=
8120dc99b369Smrg	case $host_os in
8121dc99b369Smrg	cygwin* | mingw* | cegcc*)
8122dc99b369Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8123dc99b369Smrg	    # exporting using user supplied symfile
8124dc99b369Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8125dc99b369Smrg	      # and it's NOT already a .def file. Must figure out
8126dc99b369Smrg	      # which of the given symbols are data symbols and tag
8127dc99b369Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8128dc99b369Smrg	      # export_symbols gets reassigned inside the "prepare
8129dc99b369Smrg	      # the list of exported symbols" if statement, so the
8130dc99b369Smrg	      # include_expsyms logic still works.
8131dc99b369Smrg	      orig_export_symbols="$export_symbols"
8132dc99b369Smrg	      export_symbols=
8133dc99b369Smrg	      always_export_symbols=yes
8134dc99b369Smrg	    fi
8135dc99b369Smrg	  fi
8136dc99b369Smrg	  ;;
8137dc99b369Smrg	esac
81385eefee25Smacallan
8139dc99b369Smrg	# Prepare the list of exported symbols
8140dc99b369Smrg	if test -z "$export_symbols"; then
8141dc99b369Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8142dc99b369Smrg	    func_verbose "generating symbol list for \`$libname.la'"
8143dc99b369Smrg	    export_symbols="$output_objdir/$libname.exp"
8144dc99b369Smrg	    $opt_dry_run || $RM $export_symbols
8145dc99b369Smrg	    cmds=$export_symbols_cmds
8146dc99b369Smrg	    save_ifs="$IFS"; IFS='~'
8147dc99b369Smrg	    for cmd1 in $cmds; do
8148dc99b369Smrg	      IFS="$save_ifs"
8149dc99b369Smrg	      # Take the normal branch if the nm_file_list_spec branch
8150dc99b369Smrg	      # doesn't work or if tool conversion is not needed.
8151dc99b369Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
8152dc99b369Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8153dc99b369Smrg		  try_normal_branch=yes
8154dc99b369Smrg		  eval cmd=\"$cmd1\"
8155dc99b369Smrg		  func_len " $cmd"
8156dc99b369Smrg		  len=$func_len_result
8157dc99b369Smrg		  ;;
8158dc99b369Smrg		*)
8159dc99b369Smrg		  try_normal_branch=no
8160dc99b369Smrg		  ;;
8161dc99b369Smrg	      esac
8162dc99b369Smrg	      if test "$try_normal_branch" = yes \
8163dc99b369Smrg		 && { test "$len" -lt "$max_cmd_len" \
8164dc99b369Smrg		      || test "$max_cmd_len" -le -1; }
8165dc99b369Smrg	      then
8166dc99b369Smrg		func_show_eval "$cmd" 'exit $?'
8167dc99b369Smrg		skipped_export=false
8168dc99b369Smrg	      elif test -n "$nm_file_list_spec"; then
8169dc99b369Smrg		func_basename "$output"
8170dc99b369Smrg		output_la=$func_basename_result
8171dc99b369Smrg		save_libobjs=$libobjs
8172dc99b369Smrg		save_output=$output
8173dc99b369Smrg		output=${output_objdir}/${output_la}.nm
8174dc99b369Smrg		func_to_tool_file "$output"
8175dc99b369Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
8176dc99b369Smrg		func_append delfiles " $output"
8177dc99b369Smrg		func_verbose "creating $NM input file list: $output"
8178dc99b369Smrg		for obj in $save_libobjs; do
8179dc99b369Smrg		  func_to_tool_file "$obj"
8180dc99b369Smrg		  $ECHO "$func_to_tool_file_result"
8181dc99b369Smrg		done > "$output"
8182dc99b369Smrg		eval cmd=\"$cmd1\"
8183dc99b369Smrg		func_show_eval "$cmd" 'exit $?'
8184dc99b369Smrg		output=$save_output
8185dc99b369Smrg		libobjs=$save_libobjs
8186dc99b369Smrg		skipped_export=false
8187dc99b369Smrg	      else
8188dc99b369Smrg		# The command line is too long to execute in one step.
8189dc99b369Smrg		func_verbose "using reloadable object file for export list..."
8190dc99b369Smrg		skipped_export=:
8191dc99b369Smrg		# Break out early, otherwise skipped_export may be
8192dc99b369Smrg		# set to false by a later but shorter cmd.
8193dc99b369Smrg		break
8194dc99b369Smrg	      fi
8195dc99b369Smrg	    done
8196dc99b369Smrg	    IFS="$save_ifs"
8197dc99b369Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8198dc99b369Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8199dc99b369Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8200dc99b369Smrg	    fi
8201dc99b369Smrg	  fi
82025eefee25Smacallan	fi
82035eefee25Smacallan
8204dc99b369Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8205dc99b369Smrg	  tmp_export_symbols="$export_symbols"
8206dc99b369Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8207dc99b369Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
82085eefee25Smacallan	fi
82095eefee25Smacallan
8210dc99b369Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8211dc99b369Smrg	  # The given exports_symbols file has to be filtered, so filter it.
8212dc99b369Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8213dc99b369Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8214dc99b369Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8215dc99b369Smrg	  # though. Also, the filter scales superlinearly with the number of
8216dc99b369Smrg	  # global variables. join(1) would be nice here, but unfortunately
8217dc99b369Smrg	  # isn't a blessed tool.
8218dc99b369Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8219dc99b369Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8220dc99b369Smrg	  export_symbols=$output_objdir/$libname.def
8221dc99b369Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8222dc99b369Smrg	fi
82235eefee25Smacallan
8224dc99b369Smrg	tmp_deplibs=
8225dc99b369Smrg	for test_deplib in $deplibs; do
8226dc99b369Smrg	  case " $convenience " in
8227dc99b369Smrg	  *" $test_deplib "*) ;;
8228dc99b369Smrg	  *)
8229dc99b369Smrg	    func_append tmp_deplibs " $test_deplib"
8230dc99b369Smrg	    ;;
8231dc99b369Smrg	  esac
8232dc99b369Smrg	done
8233dc99b369Smrg	deplibs="$tmp_deplibs"
82345eefee25Smacallan
8235dc99b369Smrg	if test -n "$convenience"; then
8236dc99b369Smrg	  if test -n "$whole_archive_flag_spec" &&
8237dc99b369Smrg	    test "$compiler_needs_object" = yes &&
8238dc99b369Smrg	    test -z "$libobjs"; then
8239dc99b369Smrg	    # extract the archives, so we have objects to list.
8240dc99b369Smrg	    # TODO: could optimize this to just extract one archive.
8241dc99b369Smrg	    whole_archive_flag_spec=
8242dc99b369Smrg	  fi
8243dc99b369Smrg	  if test -n "$whole_archive_flag_spec"; then
8244dc99b369Smrg	    save_libobjs=$libobjs
8245dc99b369Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8246dc99b369Smrg	    test "X$libobjs" = "X " && libobjs=
8247dc99b369Smrg	  else
8248dc99b369Smrg	    gentop="$output_objdir/${outputname}x"
8249dc99b369Smrg	    func_append generated " $gentop"
82505eefee25Smacallan
8251dc99b369Smrg	    func_extract_archives $gentop $convenience
8252dc99b369Smrg	    func_append libobjs " $func_extract_archives_result"
8253dc99b369Smrg	    test "X$libobjs" = "X " && libobjs=
8254dc99b369Smrg	  fi
82555eefee25Smacallan	fi
82565eefee25Smacallan
8257dc99b369Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8258dc99b369Smrg	  eval flag=\"$thread_safe_flag_spec\"
8259dc99b369Smrg	  func_append linker_flags " $flag"
8260dc99b369Smrg	fi
82615eefee25Smacallan
8262dc99b369Smrg	# Make a backup of the uninstalled library when relinking
8263dc99b369Smrg	if test "$opt_mode" = relink; then
8264dc99b369Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8265dc99b369Smrg	fi
8266dc99b369Smrg
8267dc99b369Smrg	# Do each of the archive commands.
8268dc99b369Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
8269dc99b369Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8270dc99b369Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8271dc99b369Smrg	    cmds=$module_expsym_cmds
8272dc99b369Smrg	  else
8273dc99b369Smrg	    eval test_cmds=\"$module_cmds\"
8274dc99b369Smrg	    cmds=$module_cmds
8275dc99b369Smrg	  fi
8276dc99b369Smrg	else
8277dc99b369Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8278dc99b369Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8279dc99b369Smrg	    cmds=$archive_expsym_cmds
8280dc99b369Smrg	  else
8281dc99b369Smrg	    eval test_cmds=\"$archive_cmds\"
8282dc99b369Smrg	    cmds=$archive_cmds
8283dc99b369Smrg	  fi
8284dc99b369Smrg	fi
82855eefee25Smacallan
8286dc99b369Smrg	if test "X$skipped_export" != "X:" &&
8287dc99b369Smrg	   func_len " $test_cmds" &&
8288dc99b369Smrg	   len=$func_len_result &&
8289dc99b369Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
82905eefee25Smacallan	  :
82915eefee25Smacallan	else
8292dc99b369Smrg	  # The command line is too long to link in one step, link piecewise
8293dc99b369Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8294dc99b369Smrg	  # script.
82955eefee25Smacallan
8296dc99b369Smrg	  # Save the value of $output and $libobjs because we want to
8297dc99b369Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8298dc99b369Smrg	  # want to use save_libobjs as it was before
8299dc99b369Smrg	  # whole_archive_flag_spec was expanded, because we can't
8300dc99b369Smrg	  # assume the linker understands whole_archive_flag_spec.
8301dc99b369Smrg	  # This may have to be revisited, in case too many
8302dc99b369Smrg	  # convenience libraries get linked in and end up exceeding
8303dc99b369Smrg	  # the spec.
8304dc99b369Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8305dc99b369Smrg	    save_libobjs=$libobjs
83065eefee25Smacallan	  fi
8307dc99b369Smrg	  save_output=$output
8308dc99b369Smrg	  func_basename "$output"
8309dc99b369Smrg	  output_la=$func_basename_result
83105eefee25Smacallan
8311dc99b369Smrg	  # Clear the reloadable object creation command queue and
8312dc99b369Smrg	  # initialize k to one.
8313dc99b369Smrg	  test_cmds=
83145eefee25Smacallan	  concat_cmds=
8315dc99b369Smrg	  objlist=
8316dc99b369Smrg	  last_robj=
8317dc99b369Smrg	  k=1
83185eefee25Smacallan
8319dc99b369Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8320dc99b369Smrg	    output=${output_objdir}/${output_la}.lnkscript
8321dc99b369Smrg	    func_verbose "creating GNU ld script: $output"
8322dc99b369Smrg	    echo 'INPUT (' > $output
8323dc99b369Smrg	    for obj in $save_libobjs
8324dc99b369Smrg	    do
8325dc99b369Smrg	      func_to_tool_file "$obj"
8326dc99b369Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8327dc99b369Smrg	    done
8328dc99b369Smrg	    echo ')' >> $output
8329dc99b369Smrg	    func_append delfiles " $output"
8330dc99b369Smrg	    func_to_tool_file "$output"
8331dc99b369Smrg	    output=$func_to_tool_file_result
8332dc99b369Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8333dc99b369Smrg	    output=${output_objdir}/${output_la}.lnk
8334dc99b369Smrg	    func_verbose "creating linker input file list: $output"
8335dc99b369Smrg	    : > $output
8336dc99b369Smrg	    set x $save_libobjs
8337dc99b369Smrg	    shift
8338dc99b369Smrg	    firstobj=
8339dc99b369Smrg	    if test "$compiler_needs_object" = yes; then
8340dc99b369Smrg	      firstobj="$1 "
8341dc99b369Smrg	      shift
8342dc99b369Smrg	    fi
8343dc99b369Smrg	    for obj
8344dc99b369Smrg	    do
8345dc99b369Smrg	      func_to_tool_file "$obj"
8346dc99b369Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8347dc99b369Smrg	    done
8348dc99b369Smrg	    func_append delfiles " $output"
8349dc99b369Smrg	    func_to_tool_file "$output"
8350dc99b369Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8351dc99b369Smrg	  else
8352dc99b369Smrg	    if test -n "$save_libobjs"; then
8353dc99b369Smrg	      func_verbose "creating reloadable object files..."
8354dc99b369Smrg	      output=$output_objdir/$output_la-${k}.$objext
8355dc99b369Smrg	      eval test_cmds=\"$reload_cmds\"
8356dc99b369Smrg	      func_len " $test_cmds"
8357dc99b369Smrg	      len0=$func_len_result
8358dc99b369Smrg	      len=$len0
8359dc99b369Smrg
8360dc99b369Smrg	      # Loop over the list of objects to be linked.
8361dc99b369Smrg	      for obj in $save_libobjs
8362dc99b369Smrg	      do
8363dc99b369Smrg		func_len " $obj"
8364dc99b369Smrg		func_arith $len + $func_len_result
8365dc99b369Smrg		len=$func_arith_result
8366dc99b369Smrg		if test "X$objlist" = X ||
8367dc99b369Smrg		   test "$len" -lt "$max_cmd_len"; then
8368dc99b369Smrg		  func_append objlist " $obj"
8369dc99b369Smrg		else
8370dc99b369Smrg		  # The command $test_cmds is almost too long, add a
8371dc99b369Smrg		  # command to the queue.
8372dc99b369Smrg		  if test "$k" -eq 1 ; then
8373dc99b369Smrg		    # The first file doesn't have a previous command to add.
8374dc99b369Smrg		    reload_objs=$objlist
8375dc99b369Smrg		    eval concat_cmds=\"$reload_cmds\"
8376dc99b369Smrg		  else
8377dc99b369Smrg		    # All subsequent reloadable object files will link in
8378dc99b369Smrg		    # the last one created.
8379dc99b369Smrg		    reload_objs="$objlist $last_robj"
8380dc99b369Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8381dc99b369Smrg		  fi
8382dc99b369Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8383dc99b369Smrg		  func_arith $k + 1
8384dc99b369Smrg		  k=$func_arith_result
8385dc99b369Smrg		  output=$output_objdir/$output_la-${k}.$objext
8386dc99b369Smrg		  objlist=" $obj"
8387dc99b369Smrg		  func_len " $last_robj"
8388dc99b369Smrg		  func_arith $len0 + $func_len_result
8389dc99b369Smrg		  len=$func_arith_result
8390dc99b369Smrg		fi
8391dc99b369Smrg	      done
8392dc99b369Smrg	      # Handle the remaining objects by creating one last
8393dc99b369Smrg	      # reloadable object file.  All subsequent reloadable object
8394dc99b369Smrg	      # files will link in the last one created.
8395dc99b369Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8396dc99b369Smrg	      reload_objs="$objlist $last_robj"
8397dc99b369Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8398dc99b369Smrg	      if test -n "$last_robj"; then
8399dc99b369Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
84005eefee25Smacallan	      fi
8401dc99b369Smrg	      func_append delfiles " $output"
8402dc99b369Smrg
8403dc99b369Smrg	    else
8404dc99b369Smrg	      output=
8405dc99b369Smrg	    fi
8406dc99b369Smrg
8407dc99b369Smrg	    if ${skipped_export-false}; then
8408dc99b369Smrg	      func_verbose "generating symbol list for \`$libname.la'"
8409dc99b369Smrg	      export_symbols="$output_objdir/$libname.exp"
8410dc99b369Smrg	      $opt_dry_run || $RM $export_symbols
8411dc99b369Smrg	      libobjs=$output
8412dc99b369Smrg	      # Append the command to create the export file.
84135eefee25Smacallan	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8414dc99b369Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8415dc99b369Smrg	      if test -n "$last_robj"; then
8416dc99b369Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8417dc99b369Smrg	      fi
8418dc99b369Smrg	    fi
8419dc99b369Smrg
8420dc99b369Smrg	    test -n "$save_libobjs" &&
8421dc99b369Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8422dc99b369Smrg
8423dc99b369Smrg	    # Loop through the commands generated above and execute them.
8424dc99b369Smrg	    save_ifs="$IFS"; IFS='~'
8425dc99b369Smrg	    for cmd in $concat_cmds; do
8426dc99b369Smrg	      IFS="$save_ifs"
8427dc99b369Smrg	      $opt_silent || {
8428dc99b369Smrg		  func_quote_for_expand "$cmd"
8429dc99b369Smrg		  eval "func_echo $func_quote_for_expand_result"
8430dc99b369Smrg	      }
8431dc99b369Smrg	      $opt_dry_run || eval "$cmd" || {
8432dc99b369Smrg		lt_exit=$?
8433dc99b369Smrg
8434dc99b369Smrg		# Restore the uninstalled library and exit
8435dc99b369Smrg		if test "$opt_mode" = relink; then
8436dc99b369Smrg		  ( cd "$output_objdir" && \
8437dc99b369Smrg		    $RM "${realname}T" && \
8438dc99b369Smrg		    $MV "${realname}U" "$realname" )
8439dc99b369Smrg		fi
8440dc99b369Smrg
8441dc99b369Smrg		exit $lt_exit
8442dc99b369Smrg	      }
8443dc99b369Smrg	    done
8444dc99b369Smrg	    IFS="$save_ifs"
8445dc99b369Smrg
8446dc99b369Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8447dc99b369Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8448dc99b369Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
84495eefee25Smacallan	    fi
84505eefee25Smacallan	  fi
84515eefee25Smacallan
8452dc99b369Smrg          if ${skipped_export-false}; then
8453dc99b369Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8454dc99b369Smrg	      tmp_export_symbols="$export_symbols"
8455dc99b369Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8456dc99b369Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8457dc99b369Smrg	    fi
84585eefee25Smacallan
8459dc99b369Smrg	    if test -n "$orig_export_symbols"; then
8460dc99b369Smrg	      # The given exports_symbols file has to be filtered, so filter it.
8461dc99b369Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8462dc99b369Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8463dc99b369Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8464dc99b369Smrg	      # though. Also, the filter scales superlinearly with the number of
8465dc99b369Smrg	      # global variables. join(1) would be nice here, but unfortunately
8466dc99b369Smrg	      # isn't a blessed tool.
8467dc99b369Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8468dc99b369Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8469dc99b369Smrg	      export_symbols=$output_objdir/$libname.def
8470dc99b369Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8471dc99b369Smrg	    fi
8472dc99b369Smrg	  fi
84735eefee25Smacallan
8474dc99b369Smrg	  libobjs=$output
8475dc99b369Smrg	  # Restore the value of output.
8476dc99b369Smrg	  output=$save_output
84775eefee25Smacallan
8478dc99b369Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8479dc99b369Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8480dc99b369Smrg	    test "X$libobjs" = "X " && libobjs=
8481dc99b369Smrg	  fi
8482dc99b369Smrg	  # Expand the library linking commands again to reset the
8483dc99b369Smrg	  # value of $libobjs for piecewise linking.
84845eefee25Smacallan
8485dc99b369Smrg	  # Do each of the archive commands.
8486dc99b369Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8487dc99b369Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8488dc99b369Smrg	      cmds=$module_expsym_cmds
8489dc99b369Smrg	    else
8490dc99b369Smrg	      cmds=$module_cmds
84915eefee25Smacallan	    fi
84925eefee25Smacallan	  else
8493dc99b369Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8494dc99b369Smrg	      cmds=$archive_expsym_cmds
8495dc99b369Smrg	    else
8496dc99b369Smrg	      cmds=$archive_cmds
8497dc99b369Smrg	    fi
84985eefee25Smacallan	  fi
8499dc99b369Smrg	fi
85005eefee25Smacallan
8501dc99b369Smrg	if test -n "$delfiles"; then
8502dc99b369Smrg	  # Append the command to remove temporary files to $cmds.
8503dc99b369Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8504dc99b369Smrg	fi
85055eefee25Smacallan
8506dc99b369Smrg	# Add any objects from preloaded convenience libraries
8507dc99b369Smrg	if test -n "$dlprefiles"; then
8508dc99b369Smrg	  gentop="$output_objdir/${outputname}x"
8509dc99b369Smrg	  func_append generated " $gentop"
85105eefee25Smacallan
8511dc99b369Smrg	  func_extract_archives $gentop $dlprefiles
8512dc99b369Smrg	  func_append libobjs " $func_extract_archives_result"
8513dc99b369Smrg	  test "X$libobjs" = "X " && libobjs=
8514dc99b369Smrg	fi
85155eefee25Smacallan
8516dc99b369Smrg	save_ifs="$IFS"; IFS='~'
8517dc99b369Smrg	for cmd in $cmds; do
8518dc99b369Smrg	  IFS="$save_ifs"
8519dc99b369Smrg	  eval cmd=\"$cmd\"
8520dc99b369Smrg	  $opt_silent || {
8521dc99b369Smrg	    func_quote_for_expand "$cmd"
8522dc99b369Smrg	    eval "func_echo $func_quote_for_expand_result"
8523dc99b369Smrg	  }
8524dc99b369Smrg	  $opt_dry_run || eval "$cmd" || {
8525dc99b369Smrg	    lt_exit=$?
85265eefee25Smacallan
8527dc99b369Smrg	    # Restore the uninstalled library and exit
8528dc99b369Smrg	    if test "$opt_mode" = relink; then
8529dc99b369Smrg	      ( cd "$output_objdir" && \
8530dc99b369Smrg	        $RM "${realname}T" && \
8531dc99b369Smrg		$MV "${realname}U" "$realname" )
8532dc99b369Smrg	    fi
85335eefee25Smacallan
8534dc99b369Smrg	    exit $lt_exit
8535dc99b369Smrg	  }
8536dc99b369Smrg	done
8537dc99b369Smrg	IFS="$save_ifs"
85385eefee25Smacallan
8539dc99b369Smrg	# Restore the uninstalled library and exit
8540dc99b369Smrg	if test "$opt_mode" = relink; then
8541dc99b369Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
85425eefee25Smacallan
8543dc99b369Smrg	  if test -n "$convenience"; then
8544dc99b369Smrg	    if test -z "$whole_archive_flag_spec"; then
8545dc99b369Smrg	      func_show_eval '${RM}r "$gentop"'
8546dc99b369Smrg	    fi
8547dc99b369Smrg	  fi
85485eefee25Smacallan
8549dc99b369Smrg	  exit $EXIT_SUCCESS
8550dc99b369Smrg	fi
8551dc99b369Smrg
8552dc99b369Smrg	# Create links to the real library.
8553dc99b369Smrg	for linkname in $linknames; do
8554dc99b369Smrg	  if test "$realname" != "$linkname"; then
8555dc99b369Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
85565eefee25Smacallan	  fi
85575eefee25Smacallan	done
85585eefee25Smacallan
8559dc99b369Smrg	# If -module or -export-dynamic was specified, set the dlname.
8560dc99b369Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8561dc99b369Smrg	  # On all known operating systems, these are identical.
8562dc99b369Smrg	  dlname="$soname"
8563dc99b369Smrg	fi
8564dc99b369Smrg      fi
85655eefee25Smacallan      ;;
85665eefee25Smacallan
8567dc99b369Smrg    obj)
8568dc99b369Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8569dc99b369Smrg	func_warning "\`-dlopen' is ignored for objects"
8570dc99b369Smrg      fi
85715eefee25Smacallan
8572dc99b369Smrg      case " $deplibs" in
8573dc99b369Smrg      *\ -l* | *\ -L*)
8574dc99b369Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
85755eefee25Smacallan      esac
85765eefee25Smacallan
8577dc99b369Smrg      test -n "$rpath" && \
8578dc99b369Smrg	func_warning "\`-rpath' is ignored for objects"
85795eefee25Smacallan
8580dc99b369Smrg      test -n "$xrpath" && \
8581dc99b369Smrg	func_warning "\`-R' is ignored for objects"
85825eefee25Smacallan
8583dc99b369Smrg      test -n "$vinfo" && \
8584dc99b369Smrg	func_warning "\`-version-info' is ignored for objects"
8585dc99b369Smrg
8586dc99b369Smrg      test -n "$release" && \
8587dc99b369Smrg	func_warning "\`-release' is ignored for objects"
8588dc99b369Smrg
8589dc99b369Smrg      case $output in
8590dc99b369Smrg      *.lo)
8591dc99b369Smrg	test -n "$objs$old_deplibs" && \
8592dc99b369Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8593dc99b369Smrg
8594dc99b369Smrg	libobj=$output
8595dc99b369Smrg	func_lo2o "$libobj"
8596dc99b369Smrg	obj=$func_lo2o_result
85975eefee25Smacallan	;;
85985eefee25Smacallan      *)
8599dc99b369Smrg	libobj=
8600dc99b369Smrg	obj="$output"
86015eefee25Smacallan	;;
86025eefee25Smacallan      esac
86035eefee25Smacallan
8604dc99b369Smrg      # Delete the old objects.
8605dc99b369Smrg      $opt_dry_run || $RM $obj $libobj
86065eefee25Smacallan
8607dc99b369Smrg      # Objects from convenience libraries.  This assumes
8608dc99b369Smrg      # single-version convenience libraries.  Whenever we create
8609dc99b369Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8610dc99b369Smrg      # the extraction.
8611dc99b369Smrg      reload_conv_objs=
8612dc99b369Smrg      gentop=
8613dc99b369Smrg      # reload_cmds runs $LD directly, so let us get rid of
8614dc99b369Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8615dc99b369Smrg      # turning comma into space..
8616dc99b369Smrg      wl=
86175eefee25Smacallan
8618dc99b369Smrg      if test -n "$convenience"; then
8619dc99b369Smrg	if test -n "$whole_archive_flag_spec"; then
8620dc99b369Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
8621dc99b369Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8622dc99b369Smrg	else
8623dc99b369Smrg	  gentop="$output_objdir/${obj}x"
8624dc99b369Smrg	  func_append generated " $gentop"
86255eefee25Smacallan
8626dc99b369Smrg	  func_extract_archives $gentop $convenience
8627dc99b369Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8628dc99b369Smrg	fi
86295eefee25Smacallan      fi
86305eefee25Smacallan
8631dc99b369Smrg      # If we're not building shared, we need to use non_pic_objs
8632dc99b369Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
86335eefee25Smacallan
8634dc99b369Smrg      # Create the old-style object.
8635dc99b369Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
86365eefee25Smacallan
8637dc99b369Smrg      output="$obj"
8638dc99b369Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8639dc99b369Smrg
8640dc99b369Smrg      # Exit if we aren't doing a library object file.
8641dc99b369Smrg      if test -z "$libobj"; then
8642dc99b369Smrg	if test -n "$gentop"; then
8643dc99b369Smrg	  func_show_eval '${RM}r "$gentop"'
8644dc99b369Smrg	fi
8645dc99b369Smrg
8646dc99b369Smrg	exit $EXIT_SUCCESS
86475eefee25Smacallan      fi
8648dc99b369Smrg
8649dc99b369Smrg      if test "$build_libtool_libs" != yes; then
8650dc99b369Smrg	if test -n "$gentop"; then
8651dc99b369Smrg	  func_show_eval '${RM}r "$gentop"'
8652dc99b369Smrg	fi
8653dc99b369Smrg
8654dc99b369Smrg	# Create an invalid libtool object if no PIC, so that we don't
8655dc99b369Smrg	# accidentally link it into a program.
8656dc99b369Smrg	# $show "echo timestamp > $libobj"
8657dc99b369Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8658dc99b369Smrg	exit $EXIT_SUCCESS
8659dc99b369Smrg      fi
8660dc99b369Smrg
8661dc99b369Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8662dc99b369Smrg	# Only do commands if we really have different PIC objects.
8663dc99b369Smrg	reload_objs="$libobjs $reload_conv_objs"
8664dc99b369Smrg	output="$libobj"
8665dc99b369Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8666dc99b369Smrg      fi
8667dc99b369Smrg
8668dc99b369Smrg      if test -n "$gentop"; then
8669dc99b369Smrg	func_show_eval '${RM}r "$gentop"'
8670dc99b369Smrg      fi
8671dc99b369Smrg
8672dc99b369Smrg      exit $EXIT_SUCCESS
86735eefee25Smacallan      ;;
86745eefee25Smacallan
8675dc99b369Smrg    prog)
8676dc99b369Smrg      case $host in
8677dc99b369Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8678dc99b369Smrg	          output=$func_stripname_result.exe;;
8679dc99b369Smrg      esac
8680dc99b369Smrg      test -n "$vinfo" && \
8681dc99b369Smrg	func_warning "\`-version-info' is ignored for programs"
86825eefee25Smacallan
8683dc99b369Smrg      test -n "$release" && \
8684dc99b369Smrg	func_warning "\`-release' is ignored for programs"
86855eefee25Smacallan
8686dc99b369Smrg      test "$preload" = yes \
8687dc99b369Smrg        && test "$dlopen_support" = unknown \
8688dc99b369Smrg	&& test "$dlopen_self" = unknown \
8689dc99b369Smrg	&& test "$dlopen_self_static" = unknown && \
8690dc99b369Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8691dc99b369Smrg
8692dc99b369Smrg      case $host in
8693dc99b369Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8694dc99b369Smrg	# On Rhapsody replace the C library is the System framework
8695dc99b369Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8696dc99b369Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
86975eefee25Smacallan	;;
8698dc99b369Smrg      esac
86995eefee25Smacallan
8700dc99b369Smrg      case $host in
8701dc99b369Smrg      *-*-darwin*)
8702dc99b369Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8703dc99b369Smrg	# But is supposedly fixed on 10.4 or later (yay!).
8704dc99b369Smrg	if test "$tagname" = CXX ; then
8705dc99b369Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8706dc99b369Smrg	    10.[0123])
8707dc99b369Smrg	      func_append compile_command " ${wl}-bind_at_load"
8708dc99b369Smrg	      func_append finalize_command " ${wl}-bind_at_load"
8709dc99b369Smrg	    ;;
8710dc99b369Smrg	  esac
87115eefee25Smacallan	fi
8712dc99b369Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8713dc99b369Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8714dc99b369Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8715dc99b369Smrg	;;
8716dc99b369Smrg      esac
87175eefee25Smacallan
87185eefee25Smacallan
8719dc99b369Smrg      # move library search paths that coincide with paths to not yet
8720dc99b369Smrg      # installed libraries to the beginning of the library search list
8721dc99b369Smrg      new_libs=
8722dc99b369Smrg      for path in $notinst_path; do
8723dc99b369Smrg	case " $new_libs " in
8724dc99b369Smrg	*" -L$path/$objdir "*) ;;
8725dc99b369Smrg	*)
8726dc99b369Smrg	  case " $compile_deplibs " in
8727dc99b369Smrg	  *" -L$path/$objdir "*)
8728dc99b369Smrg	    func_append new_libs " -L$path/$objdir" ;;
87295eefee25Smacallan	  esac
8730dc99b369Smrg	  ;;
8731dc99b369Smrg	esac
8732dc99b369Smrg      done
8733dc99b369Smrg      for deplib in $compile_deplibs; do
8734dc99b369Smrg	case $deplib in
8735dc99b369Smrg	-L*)
8736dc99b369Smrg	  case " $new_libs " in
8737dc99b369Smrg	  *" $deplib "*) ;;
8738dc99b369Smrg	  *) func_append new_libs " $deplib" ;;
87395eefee25Smacallan	  esac
8740dc99b369Smrg	  ;;
8741dc99b369Smrg	*) func_append new_libs " $deplib" ;;
8742dc99b369Smrg	esac
8743dc99b369Smrg      done
8744dc99b369Smrg      compile_deplibs="$new_libs"
87455eefee25Smacallan
87465eefee25Smacallan
8747dc99b369Smrg      func_append compile_command " $compile_deplibs"
8748dc99b369Smrg      func_append finalize_command " $finalize_deplibs"
87495eefee25Smacallan
8750dc99b369Smrg      if test -n "$rpath$xrpath"; then
8751dc99b369Smrg	# If the user specified any rpath flags, then add them.
8752dc99b369Smrg	for libdir in $rpath $xrpath; do
8753dc99b369Smrg	  # This is the magic to use -rpath.
8754dc99b369Smrg	  case "$finalize_rpath " in
8755dc99b369Smrg	  *" $libdir "*) ;;
8756dc99b369Smrg	  *) func_append finalize_rpath " $libdir" ;;
8757dc99b369Smrg	  esac
8758dc99b369Smrg	done
8759dc99b369Smrg      fi
87605eefee25Smacallan
8761dc99b369Smrg      # Now hardcode the library paths
8762dc99b369Smrg      rpath=
8763dc99b369Smrg      hardcode_libdirs=
8764dc99b369Smrg      for libdir in $compile_rpath $finalize_rpath; do
8765dc99b369Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8766dc99b369Smrg	  if test -n "$hardcode_libdir_separator"; then
8767dc99b369Smrg	    if test -z "$hardcode_libdirs"; then
8768dc99b369Smrg	      hardcode_libdirs="$libdir"
8769dc99b369Smrg	    else
8770dc99b369Smrg	      # Just accumulate the unique libdirs.
8771dc99b369Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8772dc99b369Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8773dc99b369Smrg		;;
8774dc99b369Smrg	      *)
8775dc99b369Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8776dc99b369Smrg		;;
8777dc99b369Smrg	      esac
8778dc99b369Smrg	    fi
87795eefee25Smacallan	  else
8780dc99b369Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8781dc99b369Smrg	    func_append rpath " $flag"
87825eefee25Smacallan	  fi
8783dc99b369Smrg	elif test -n "$runpath_var"; then
8784dc99b369Smrg	  case "$perm_rpath " in
8785dc99b369Smrg	  *" $libdir "*) ;;
8786dc99b369Smrg	  *) func_append perm_rpath " $libdir" ;;
8787dc99b369Smrg	  esac
8788dc99b369Smrg	fi
8789dc99b369Smrg	case $host in
8790dc99b369Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8791dc99b369Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8792dc99b369Smrg	  case :$dllsearchpath: in
8793dc99b369Smrg	  *":$libdir:"*) ;;
8794dc99b369Smrg	  ::) dllsearchpath=$libdir;;
8795dc99b369Smrg	  *) func_append dllsearchpath ":$libdir";;
8796dc99b369Smrg	  esac
8797dc99b369Smrg	  case :$dllsearchpath: in
8798dc99b369Smrg	  *":$testbindir:"*) ;;
8799dc99b369Smrg	  ::) dllsearchpath=$testbindir;;
8800dc99b369Smrg	  *) func_append dllsearchpath ":$testbindir";;
8801dc99b369Smrg	  esac
8802dc99b369Smrg	  ;;
8803dc99b369Smrg	esac
8804dc99b369Smrg      done
8805dc99b369Smrg      # Substitute the hardcoded libdirs into the rpath.
8806dc99b369Smrg      if test -n "$hardcode_libdir_separator" &&
8807dc99b369Smrg	 test -n "$hardcode_libdirs"; then
8808dc99b369Smrg	libdir="$hardcode_libdirs"
8809dc99b369Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8810dc99b369Smrg      fi
8811dc99b369Smrg      compile_rpath="$rpath"
88125eefee25Smacallan
8813dc99b369Smrg      rpath=
8814dc99b369Smrg      hardcode_libdirs=
8815dc99b369Smrg      for libdir in $finalize_rpath; do
8816dc99b369Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8817dc99b369Smrg	  if test -n "$hardcode_libdir_separator"; then
8818dc99b369Smrg	    if test -z "$hardcode_libdirs"; then
8819dc99b369Smrg	      hardcode_libdirs="$libdir"
8820dc99b369Smrg	    else
8821dc99b369Smrg	      # Just accumulate the unique libdirs.
8822dc99b369Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8823dc99b369Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8824dc99b369Smrg		;;
8825dc99b369Smrg	      *)
8826dc99b369Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8827dc99b369Smrg		;;
8828dc99b369Smrg	      esac
8829dc99b369Smrg	    fi
88305eefee25Smacallan	  else
8831dc99b369Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8832dc99b369Smrg	    func_append rpath " $flag"
88335eefee25Smacallan	  fi
8834dc99b369Smrg	elif test -n "$runpath_var"; then
8835dc99b369Smrg	  case "$finalize_perm_rpath " in
8836dc99b369Smrg	  *" $libdir "*) ;;
8837dc99b369Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8838dc99b369Smrg	  esac
88395eefee25Smacallan	fi
8840dc99b369Smrg      done
8841dc99b369Smrg      # Substitute the hardcoded libdirs into the rpath.
8842dc99b369Smrg      if test -n "$hardcode_libdir_separator" &&
8843dc99b369Smrg	 test -n "$hardcode_libdirs"; then
8844dc99b369Smrg	libdir="$hardcode_libdirs"
8845dc99b369Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8846dc99b369Smrg      fi
8847dc99b369Smrg      finalize_rpath="$rpath"
88485eefee25Smacallan
8849dc99b369Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8850dc99b369Smrg	# Transform all the library objects into standard objects.
8851dc99b369Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8852dc99b369Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8853dc99b369Smrg      fi
88545eefee25Smacallan
8855dc99b369Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
88565eefee25Smacallan
8857dc99b369Smrg      # template prelinking step
8858dc99b369Smrg      if test -n "$prelink_cmds"; then
8859dc99b369Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8860dc99b369Smrg      fi
88615eefee25Smacallan
8862dc99b369Smrg      wrappers_required=yes
8863dc99b369Smrg      case $host in
8864dc99b369Smrg      *cegcc* | *mingw32ce*)
8865dc99b369Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8866dc99b369Smrg        wrappers_required=no
8867dc99b369Smrg        ;;
8868dc99b369Smrg      *cygwin* | *mingw* )
8869dc99b369Smrg        if test "$build_libtool_libs" != yes; then
8870dc99b369Smrg          wrappers_required=no
8871dc99b369Smrg        fi
8872dc99b369Smrg        ;;
8873dc99b369Smrg      *)
8874dc99b369Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8875dc99b369Smrg          wrappers_required=no
8876dc99b369Smrg        fi
8877dc99b369Smrg        ;;
8878dc99b369Smrg      esac
8879dc99b369Smrg      if test "$wrappers_required" = no; then
8880dc99b369Smrg	# Replace the output file specification.
8881dc99b369Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8882dc99b369Smrg	link_command="$compile_command$compile_rpath"
88835eefee25Smacallan
8884dc99b369Smrg	# We have no uninstalled library dependencies, so finalize right now.
8885dc99b369Smrg	exit_status=0
8886dc99b369Smrg	func_show_eval "$link_command" 'exit_status=$?'
88875eefee25Smacallan
8888dc99b369Smrg	if test -n "$postlink_cmds"; then
8889dc99b369Smrg	  func_to_tool_file "$output"
8890dc99b369Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8891dc99b369Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
88925eefee25Smacallan	fi
88935eefee25Smacallan
8894dc99b369Smrg	# Delete the generated files.
8895dc99b369Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8896dc99b369Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8897dc99b369Smrg	fi
88985eefee25Smacallan
8899dc99b369Smrg	exit $exit_status
8900dc99b369Smrg      fi
89015eefee25Smacallan
8902dc99b369Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8903dc99b369Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8904dc99b369Smrg      fi
8905dc99b369Smrg      if test -n "$finalize_shlibpath"; then
8906dc99b369Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8907dc99b369Smrg      fi
89085eefee25Smacallan
8909dc99b369Smrg      compile_var=
8910dc99b369Smrg      finalize_var=
8911dc99b369Smrg      if test -n "$runpath_var"; then
8912dc99b369Smrg	if test -n "$perm_rpath"; then
8913dc99b369Smrg	  # We should set the runpath_var.
8914dc99b369Smrg	  rpath=
8915dc99b369Smrg	  for dir in $perm_rpath; do
8916dc99b369Smrg	    func_append rpath "$dir:"
8917dc99b369Smrg	  done
8918dc99b369Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
89195eefee25Smacallan	fi
8920dc99b369Smrg	if test -n "$finalize_perm_rpath"; then
8921dc99b369Smrg	  # We should set the runpath_var.
8922dc99b369Smrg	  rpath=
8923dc99b369Smrg	  for dir in $finalize_perm_rpath; do
8924dc99b369Smrg	    func_append rpath "$dir:"
8925dc99b369Smrg	  done
8926dc99b369Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
89275eefee25Smacallan	fi
8928dc99b369Smrg      fi
89295eefee25Smacallan
8930dc99b369Smrg      if test "$no_install" = yes; then
8931dc99b369Smrg	# We don't need to create a wrapper script.
8932dc99b369Smrg	link_command="$compile_var$compile_command$compile_rpath"
8933dc99b369Smrg	# Replace the output file specification.
8934dc99b369Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8935dc99b369Smrg	# Delete the old output file.
8936dc99b369Smrg	$opt_dry_run || $RM $output
8937dc99b369Smrg	# Link the executable and exit
8938dc99b369Smrg	func_show_eval "$link_command" 'exit $?'
89395eefee25Smacallan
8940dc99b369Smrg	if test -n "$postlink_cmds"; then
8941dc99b369Smrg	  func_to_tool_file "$output"
8942dc99b369Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8943dc99b369Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89445eefee25Smacallan	fi
8945dc99b369Smrg
89465eefee25Smacallan	exit $EXIT_SUCCESS
8947dc99b369Smrg      fi
89485eefee25Smacallan
8949dc99b369Smrg      if test "$hardcode_action" = relink; then
8950dc99b369Smrg	# Fast installation is not supported
8951dc99b369Smrg	link_command="$compile_var$compile_command$compile_rpath"
8952dc99b369Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8953dc99b369Smrg
8954dc99b369Smrg	func_warning "this platform does not like uninstalled shared libraries"
8955dc99b369Smrg	func_warning "\`$output' will be relinked during installation"
8956dc99b369Smrg      else
8957dc99b369Smrg	if test "$fast_install" != no; then
8958dc99b369Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8959dc99b369Smrg	  if test "$fast_install" = yes; then
8960dc99b369Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8961dc99b369Smrg	  else
8962dc99b369Smrg	    # fast_install is set to needless
8963dc99b369Smrg	    relink_command=
8964dc99b369Smrg	  fi
89655eefee25Smacallan	else
8966dc99b369Smrg	  link_command="$compile_var$compile_command$compile_rpath"
8967dc99b369Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
89685eefee25Smacallan	fi
8969dc99b369Smrg      fi
89705eefee25Smacallan
8971dc99b369Smrg      # Replace the output file specification.
8972dc99b369Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
89735eefee25Smacallan
8974dc99b369Smrg      # Delete the old output files.
8975dc99b369Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
89765eefee25Smacallan
8977dc99b369Smrg      func_show_eval "$link_command" 'exit $?'
89785eefee25Smacallan
8979dc99b369Smrg      if test -n "$postlink_cmds"; then
8980dc99b369Smrg	func_to_tool_file "$output_objdir/$outputname"
8981dc99b369Smrg	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'`
8982dc99b369Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
8983dc99b369Smrg      fi
89845eefee25Smacallan
8985dc99b369Smrg      # Now create the wrapper script.
8986dc99b369Smrg      func_verbose "creating $output"
89875eefee25Smacallan
8988dc99b369Smrg      # Quote the relink command for shipping.
8989dc99b369Smrg      if test -n "$relink_command"; then
8990dc99b369Smrg	# Preserve any variables that may affect compiler behavior
8991dc99b369Smrg	for var in $variables_saved_for_relink; do
8992dc99b369Smrg	  if eval test -z \"\${$var+set}\"; then
8993dc99b369Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
8994dc99b369Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
8995dc99b369Smrg	    relink_command="$var=; export $var; $relink_command"
89965eefee25Smacallan	  else
8997dc99b369Smrg	    func_quote_for_eval "$var_value"
8998dc99b369Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
89995eefee25Smacallan	  fi
9000dc99b369Smrg	done
9001dc99b369Smrg	relink_command="(cd `pwd`; $relink_command)"
9002dc99b369Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9003dc99b369Smrg      fi
9004dc99b369Smrg
9005dc99b369Smrg      # Only actually do things if not in dry run mode.
9006dc99b369Smrg      $opt_dry_run || {
9007dc99b369Smrg	# win32 will think the script is a binary if it has
9008dc99b369Smrg	# a .exe suffix, so we strip it off here.
9009dc99b369Smrg	case $output in
9010dc99b369Smrg	  *.exe) func_stripname '' '.exe' "$output"
9011dc99b369Smrg	         output=$func_stripname_result ;;
90125eefee25Smacallan	esac
9013dc99b369Smrg	# test for cygwin because mv fails w/o .exe extensions
9014dc99b369Smrg	case $host in
9015dc99b369Smrg	  *cygwin*)
9016dc99b369Smrg	    exeext=.exe
9017dc99b369Smrg	    func_stripname '' '.exe' "$outputname"
9018dc99b369Smrg	    outputname=$func_stripname_result ;;
9019dc99b369Smrg	  *) exeext= ;;
9020dc99b369Smrg	esac
9021dc99b369Smrg	case $host in
9022dc99b369Smrg	  *cygwin* | *mingw* )
9023dc99b369Smrg	    func_dirname_and_basename "$output" "" "."
9024dc99b369Smrg	    output_name=$func_basename_result
9025dc99b369Smrg	    output_path=$func_dirname_result
9026dc99b369Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9027dc99b369Smrg	    cwrapper="$output_path/$output_name.exe"
9028dc99b369Smrg	    $RM $cwrappersource $cwrapper
9029dc99b369Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9030dc99b369Smrg
9031dc99b369Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9032dc99b369Smrg
9033dc99b369Smrg	    # The wrapper executable is built using the $host compiler,
9034dc99b369Smrg	    # because it contains $host paths and files. If cross-
9035dc99b369Smrg	    # compiling, it, like the target executable, must be
9036dc99b369Smrg	    # executed on the $host or under an emulation environment.
9037dc99b369Smrg	    $opt_dry_run || {
9038dc99b369Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9039dc99b369Smrg	      $STRIP $cwrapper
9040dc99b369Smrg	    }
90415eefee25Smacallan
9042dc99b369Smrg	    # Now, create the wrapper script for func_source use:
9043dc99b369Smrg	    func_ltwrapper_scriptname $cwrapper
9044dc99b369Smrg	    $RM $func_ltwrapper_scriptname_result
9045dc99b369Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9046dc99b369Smrg	    $opt_dry_run || {
9047dc99b369Smrg	      # note: this script will not be executed, so do not chmod.
9048dc99b369Smrg	      if test "x$build" = "x$host" ; then
9049dc99b369Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9050dc99b369Smrg	      else
9051dc99b369Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9052dc99b369Smrg	      fi
9053dc99b369Smrg	    }
9054dc99b369Smrg	  ;;
9055dc99b369Smrg	  * )
9056dc99b369Smrg	    $RM $output
9057dc99b369Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
90585eefee25Smacallan
9059dc99b369Smrg	    func_emit_wrapper no > $output
9060dc99b369Smrg	    chmod +x $output
9061dc99b369Smrg	  ;;
9062dc99b369Smrg	esac
9063dc99b369Smrg      }
9064dc99b369Smrg      exit $EXIT_SUCCESS
9065dc99b369Smrg      ;;
9066dc99b369Smrg    esac
90675eefee25Smacallan
9068dc99b369Smrg    # See if we need to build an old-fashioned archive.
9069dc99b369Smrg    for oldlib in $oldlibs; do
90705eefee25Smacallan
9071dc99b369Smrg      if test "$build_libtool_libs" = convenience; then
9072dc99b369Smrg	oldobjs="$libobjs_save $symfileobj"
9073dc99b369Smrg	addlibs="$convenience"
9074dc99b369Smrg	build_libtool_libs=no
9075dc99b369Smrg      else
9076dc99b369Smrg	if test "$build_libtool_libs" = module; then
9077dc99b369Smrg	  oldobjs="$libobjs_save"
9078dc99b369Smrg	  build_libtool_libs=no
9079dc99b369Smrg	else
9080dc99b369Smrg	  oldobjs="$old_deplibs $non_pic_objects"
9081dc99b369Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
9082dc99b369Smrg	    func_append oldobjs " $symfileobj"
9083dc99b369Smrg	  fi
9084dc99b369Smrg	fi
9085dc99b369Smrg	addlibs="$old_convenience"
90865eefee25Smacallan      fi
90875eefee25Smacallan
9088dc99b369Smrg      if test -n "$addlibs"; then
9089dc99b369Smrg	gentop="$output_objdir/${outputname}x"
9090dc99b369Smrg	func_append generated " $gentop"
90915eefee25Smacallan
9092dc99b369Smrg	func_extract_archives $gentop $addlibs
9093dc99b369Smrg	func_append oldobjs " $func_extract_archives_result"
9094dc99b369Smrg      fi
90955eefee25Smacallan
9096dc99b369Smrg      # Do each command in the archive commands.
9097dc99b369Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9098dc99b369Smrg	cmds=$old_archive_from_new_cmds
9099dc99b369Smrg      else
91005eefee25Smacallan
9101dc99b369Smrg	# Add any objects from preloaded convenience libraries
9102dc99b369Smrg	if test -n "$dlprefiles"; then
9103dc99b369Smrg	  gentop="$output_objdir/${outputname}x"
9104dc99b369Smrg	  func_append generated " $gentop"
91055eefee25Smacallan
9106dc99b369Smrg	  func_extract_archives $gentop $dlprefiles
9107dc99b369Smrg	  func_append oldobjs " $func_extract_archives_result"
9108dc99b369Smrg	fi
91095eefee25Smacallan
9110dc99b369Smrg	# POSIX demands no paths to be encoded in archives.  We have
9111dc99b369Smrg	# to avoid creating archives with duplicate basenames if we
9112dc99b369Smrg	# might have to extract them afterwards, e.g., when creating a
9113dc99b369Smrg	# static archive out of a convenience library, or when linking
9114dc99b369Smrg	# the entirety of a libtool archive into another (currently
9115dc99b369Smrg	# not supported by libtool).
9116dc99b369Smrg	if (for obj in $oldobjs
9117dc99b369Smrg	    do
9118dc99b369Smrg	      func_basename "$obj"
9119dc99b369Smrg	      $ECHO "$func_basename_result"
9120dc99b369Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9121dc99b369Smrg	  :
9122dc99b369Smrg	else
9123dc99b369Smrg	  echo "copying selected object files to avoid basename conflicts..."
9124dc99b369Smrg	  gentop="$output_objdir/${outputname}x"
9125dc99b369Smrg	  func_append generated " $gentop"
9126dc99b369Smrg	  func_mkdir_p "$gentop"
9127dc99b369Smrg	  save_oldobjs=$oldobjs
9128dc99b369Smrg	  oldobjs=
9129dc99b369Smrg	  counter=1
9130dc99b369Smrg	  for obj in $save_oldobjs
9131dc99b369Smrg	  do
9132dc99b369Smrg	    func_basename "$obj"
9133dc99b369Smrg	    objbase="$func_basename_result"
9134dc99b369Smrg	    case " $oldobjs " in
9135dc99b369Smrg	    " ") oldobjs=$obj ;;
9136dc99b369Smrg	    *[\ /]"$objbase "*)
9137dc99b369Smrg	      while :; do
9138dc99b369Smrg		# Make sure we don't pick an alternate name that also
9139dc99b369Smrg		# overlaps.
9140dc99b369Smrg		newobj=lt$counter-$objbase
9141dc99b369Smrg		func_arith $counter + 1
9142dc99b369Smrg		counter=$func_arith_result
9143dc99b369Smrg		case " $oldobjs " in
9144dc99b369Smrg		*[\ /]"$newobj "*) ;;
9145dc99b369Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9146dc99b369Smrg		esac
9147dc99b369Smrg	      done
9148dc99b369Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9149dc99b369Smrg	      func_append oldobjs " $gentop/$newobj"
9150dc99b369Smrg	      ;;
9151dc99b369Smrg	    *) func_append oldobjs " $obj" ;;
9152dc99b369Smrg	    esac
91535eefee25Smacallan	  done
91545eefee25Smacallan	fi
9155dc99b369Smrg	eval cmds=\"$old_archive_cmds\"
91565eefee25Smacallan
9157dc99b369Smrg	func_len " $cmds"
9158dc99b369Smrg	len=$func_len_result
9159dc99b369Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9160dc99b369Smrg	  cmds=$old_archive_cmds
9161dc99b369Smrg	elif test -n "$archiver_list_spec"; then
9162dc99b369Smrg	  func_verbose "using command file archive linking..."
9163dc99b369Smrg	  for obj in $oldobjs
9164dc99b369Smrg	  do
9165dc99b369Smrg	    func_to_tool_file "$obj"
9166dc99b369Smrg	    $ECHO "$func_to_tool_file_result"
9167dc99b369Smrg	  done > $output_objdir/$libname.libcmd
9168dc99b369Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
9169dc99b369Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9170dc99b369Smrg	  cmds=$old_archive_cmds
9171dc99b369Smrg	else
9172dc99b369Smrg	  # the command line is too long to link in one step, link in parts
9173dc99b369Smrg	  func_verbose "using piecewise archive linking..."
9174dc99b369Smrg	  save_RANLIB=$RANLIB
9175dc99b369Smrg	  RANLIB=:
9176dc99b369Smrg	  objlist=
9177dc99b369Smrg	  concat_cmds=
9178dc99b369Smrg	  save_oldobjs=$oldobjs
9179dc99b369Smrg	  oldobjs=
9180dc99b369Smrg	  # Is there a better way of finding the last object in the list?
9181dc99b369Smrg	  for obj in $save_oldobjs
9182dc99b369Smrg	  do
9183dc99b369Smrg	    last_oldobj=$obj
9184dc99b369Smrg	  done
9185dc99b369Smrg	  eval test_cmds=\"$old_archive_cmds\"
9186dc99b369Smrg	  func_len " $test_cmds"
9187dc99b369Smrg	  len0=$func_len_result
9188dc99b369Smrg	  len=$len0
9189dc99b369Smrg	  for obj in $save_oldobjs
9190dc99b369Smrg	  do
9191dc99b369Smrg	    func_len " $obj"
9192dc99b369Smrg	    func_arith $len + $func_len_result
9193dc99b369Smrg	    len=$func_arith_result
9194dc99b369Smrg	    func_append objlist " $obj"
9195dc99b369Smrg	    if test "$len" -lt "$max_cmd_len"; then
9196dc99b369Smrg	      :
9197dc99b369Smrg	    else
9198dc99b369Smrg	      # the above command should be used before it gets too long
9199dc99b369Smrg	      oldobjs=$objlist
9200dc99b369Smrg	      if test "$obj" = "$last_oldobj" ; then
9201dc99b369Smrg		RANLIB=$save_RANLIB
9202dc99b369Smrg	      fi
9203dc99b369Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9204dc99b369Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9205dc99b369Smrg	      objlist=
9206dc99b369Smrg	      len=$len0
9207dc99b369Smrg	    fi
9208dc99b369Smrg	  done
9209dc99b369Smrg	  RANLIB=$save_RANLIB
9210dc99b369Smrg	  oldobjs=$objlist
9211dc99b369Smrg	  if test "X$oldobjs" = "X" ; then
9212dc99b369Smrg	    eval cmds=\"\$concat_cmds\"
9213dc99b369Smrg	  else
9214dc99b369Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9215dc99b369Smrg	  fi
9216dc99b369Smrg	fi
9217dc99b369Smrg      fi
9218dc99b369Smrg      func_execute_cmds "$cmds" 'exit $?'
92195eefee25Smacallan    done
92205eefee25Smacallan
9221dc99b369Smrg    test -n "$generated" && \
9222dc99b369Smrg      func_show_eval "${RM}r$generated"
92235eefee25Smacallan
9224dc99b369Smrg    # Now create the libtool archive.
9225dc99b369Smrg    case $output in
9226dc99b369Smrg    *.la)
9227dc99b369Smrg      old_library=
9228dc99b369Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9229dc99b369Smrg      func_verbose "creating $output"
92305eefee25Smacallan
9231dc99b369Smrg      # Preserve any variables that may affect compiler behavior
9232dc99b369Smrg      for var in $variables_saved_for_relink; do
9233dc99b369Smrg	if eval test -z \"\${$var+set}\"; then
9234dc99b369Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9235dc99b369Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9236dc99b369Smrg	  relink_command="$var=; export $var; $relink_command"
92375eefee25Smacallan	else
9238dc99b369Smrg	  func_quote_for_eval "$var_value"
9239dc99b369Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
92405eefee25Smacallan	fi
9241dc99b369Smrg      done
9242dc99b369Smrg      # Quote the link command for shipping.
9243dc99b369Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9244dc99b369Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9245dc99b369Smrg      if test "$hardcode_automatic" = yes ; then
9246dc99b369Smrg	relink_command=
9247dc99b369Smrg      fi
92485eefee25Smacallan
9249dc99b369Smrg      # Only create the output if not a dry run.
9250dc99b369Smrg      $opt_dry_run || {
9251dc99b369Smrg	for installed in no yes; do
9252dc99b369Smrg	  if test "$installed" = yes; then
9253dc99b369Smrg	    if test -z "$install_libdir"; then
9254dc99b369Smrg	      break
9255dc99b369Smrg	    fi
9256dc99b369Smrg	    output="$output_objdir/$outputname"i
9257dc99b369Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9258dc99b369Smrg	    newdependency_libs=
9259dc99b369Smrg	    for deplib in $dependency_libs; do
9260dc99b369Smrg	      case $deplib in
9261dc99b369Smrg	      *.la)
9262dc99b369Smrg		func_basename "$deplib"
9263dc99b369Smrg		name="$func_basename_result"
9264dc99b369Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
9265dc99b369Smrg		test -z "$libdir" && \
9266dc99b369Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9267dc99b369Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9268dc99b369Smrg		;;
9269dc99b369Smrg	      -L*)
9270dc99b369Smrg		func_stripname -L '' "$deplib"
9271dc99b369Smrg		func_replace_sysroot "$func_stripname_result"
9272dc99b369Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9273dc99b369Smrg		;;
9274dc99b369Smrg	      -R*)
9275dc99b369Smrg		func_stripname -R '' "$deplib"
9276dc99b369Smrg		func_replace_sysroot "$func_stripname_result"
9277dc99b369Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
9278dc99b369Smrg		;;
9279dc99b369Smrg	      *) func_append newdependency_libs " $deplib" ;;
9280dc99b369Smrg	      esac
9281dc99b369Smrg	    done
9282dc99b369Smrg	    dependency_libs="$newdependency_libs"
9283dc99b369Smrg	    newdlfiles=
9284dc99b369Smrg
9285dc99b369Smrg	    for lib in $dlfiles; do
9286dc99b369Smrg	      case $lib in
9287dc99b369Smrg	      *.la)
9288dc99b369Smrg	        func_basename "$lib"
9289dc99b369Smrg		name="$func_basename_result"
9290dc99b369Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9291dc99b369Smrg		test -z "$libdir" && \
9292dc99b369Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9293dc99b369Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9294dc99b369Smrg		;;
9295dc99b369Smrg	      *) func_append newdlfiles " $lib" ;;
9296dc99b369Smrg	      esac
9297dc99b369Smrg	    done
9298dc99b369Smrg	    dlfiles="$newdlfiles"
9299dc99b369Smrg	    newdlprefiles=
9300dc99b369Smrg	    for lib in $dlprefiles; do
9301dc99b369Smrg	      case $lib in
9302dc99b369Smrg	      *.la)
9303dc99b369Smrg		# Only pass preopened files to the pseudo-archive (for
9304dc99b369Smrg		# eventual linking with the app. that links it) if we
9305dc99b369Smrg		# didn't already link the preopened objects directly into
9306dc99b369Smrg		# the library:
9307dc99b369Smrg		func_basename "$lib"
9308dc99b369Smrg		name="$func_basename_result"
9309dc99b369Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310dc99b369Smrg		test -z "$libdir" && \
9311dc99b369Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312dc99b369Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9313dc99b369Smrg		;;
9314dc99b369Smrg	      esac
9315dc99b369Smrg	    done
9316dc99b369Smrg	    dlprefiles="$newdlprefiles"
9317dc99b369Smrg	  else
9318dc99b369Smrg	    newdlfiles=
9319dc99b369Smrg	    for lib in $dlfiles; do
9320dc99b369Smrg	      case $lib in
9321dc99b369Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9322dc99b369Smrg		*) abs=`pwd`"/$lib" ;;
9323dc99b369Smrg	      esac
9324dc99b369Smrg	      func_append newdlfiles " $abs"
9325dc99b369Smrg	    done
9326dc99b369Smrg	    dlfiles="$newdlfiles"
9327dc99b369Smrg	    newdlprefiles=
9328dc99b369Smrg	    for lib in $dlprefiles; do
9329dc99b369Smrg	      case $lib in
9330dc99b369Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9331dc99b369Smrg		*) abs=`pwd`"/$lib" ;;
9332dc99b369Smrg	      esac
9333dc99b369Smrg	      func_append newdlprefiles " $abs"
9334dc99b369Smrg	    done
9335dc99b369Smrg	    dlprefiles="$newdlprefiles"
9336dc99b369Smrg	  fi
9337dc99b369Smrg	  $RM $output
9338dc99b369Smrg	  # place dlname in correct position for cygwin
9339dc99b369Smrg	  # In fact, it would be nice if we could use this code for all target
9340dc99b369Smrg	  # systems that can't hard-code library paths into their executables
9341dc99b369Smrg	  # and that have no shared library path variable independent of PATH,
9342dc99b369Smrg	  # but it turns out we can't easily determine that from inspecting
9343dc99b369Smrg	  # libtool variables, so we have to hard-code the OSs to which it
9344dc99b369Smrg	  # applies here; at the moment, that means platforms that use the PE
9345dc99b369Smrg	  # object format with DLL files.  See the long comment at the top of
9346dc99b369Smrg	  # tests/bindir.at for full details.
9347dc99b369Smrg	  tdlname=$dlname
9348dc99b369Smrg	  case $host,$output,$installed,$module,$dlname in
9349dc99b369Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9350dc99b369Smrg	      # If a -bindir argument was supplied, place the dll there.
9351dc99b369Smrg	      if test "x$bindir" != x ;
9352dc99b369Smrg	      then
9353dc99b369Smrg		func_relative_path "$install_libdir" "$bindir"
9354dc99b369Smrg		tdlname=$func_relative_path_result$dlname
9355dc99b369Smrg	      else
9356dc99b369Smrg		# Otherwise fall back on heuristic.
9357dc99b369Smrg		tdlname=../bin/$dlname
9358dc99b369Smrg	      fi
9359dc99b369Smrg	      ;;
9360dc99b369Smrg	  esac
9361dc99b369Smrg	  $ECHO > $output "\
9362dc99b369Smrg# $outputname - a libtool library file
9363dc99b369Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9364dc99b369Smrg#
9365dc99b369Smrg# Please DO NOT delete this file!
9366dc99b369Smrg# It is necessary for linking the library.
93675eefee25Smacallan
9368dc99b369Smrg# The name that we can dlopen(3).
9369dc99b369Smrgdlname='$tdlname'
93705eefee25Smacallan
9371dc99b369Smrg# Names of this library.
9372dc99b369Smrglibrary_names='$library_names'
93735eefee25Smacallan
9374dc99b369Smrg# The name of the static archive.
9375dc99b369Smrgold_library='$old_library'
93765eefee25Smacallan
9377dc99b369Smrg# Linker flags that can not go in dependency_libs.
9378dc99b369Smrginherited_linker_flags='$new_inherited_linker_flags'
93795eefee25Smacallan
9380dc99b369Smrg# Libraries that this one depends upon.
9381dc99b369Smrgdependency_libs='$dependency_libs'
93825eefee25Smacallan
9383dc99b369Smrg# Names of additional weak libraries provided by this library
9384dc99b369Smrgweak_library_names='$weak_libs'
93855eefee25Smacallan
9386dc99b369Smrg# Version information for $libname.
9387dc99b369Smrgcurrent=$current
9388dc99b369Smrgage=$age
9389dc99b369Smrgrevision=$revision
93905eefee25Smacallan
9391dc99b369Smrg# Is this an already installed library?
9392dc99b369Smrginstalled=$installed
93935eefee25Smacallan
9394dc99b369Smrg# Should we warn about portability when linking against -modules?
9395dc99b369Smrgshouldnotlink=$module
93965eefee25Smacallan
9397dc99b369Smrg# Files to dlopen/dlpreopen
9398dc99b369Smrgdlopen='$dlfiles'
9399dc99b369Smrgdlpreopen='$dlprefiles'
94005eefee25Smacallan
9401dc99b369Smrg# Directory that this library needs to be installed in:
9402dc99b369Smrglibdir='$install_libdir'"
9403dc99b369Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
9404dc99b369Smrg	    $ECHO >> $output "\
9405dc99b369Smrgrelink_command=\"$relink_command\""
9406dc99b369Smrg	  fi
9407dc99b369Smrg	done
9408dc99b369Smrg      }
94095eefee25Smacallan
9410dc99b369Smrg      # Do a symbolic link so that the libtool archive can be found in
9411dc99b369Smrg      # LD_LIBRARY_PATH before the program is installed.
9412dc99b369Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9413dc99b369Smrg      ;;
9414dc99b369Smrg    esac
9415dc99b369Smrg    exit $EXIT_SUCCESS
9416dc99b369Smrg}
94175eefee25Smacallan
9418dc99b369Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9419dc99b369Smrg    func_mode_link ${1+"$@"}
94205eefee25Smacallan
94215eefee25Smacallan
9422dc99b369Smrg# func_mode_uninstall arg...
9423dc99b369Smrgfunc_mode_uninstall ()
9424dc99b369Smrg{
9425dc99b369Smrg    $opt_debug
9426dc99b369Smrg    RM="$nonopt"
94275eefee25Smacallan    files=
94285eefee25Smacallan    rmforce=
94295eefee25Smacallan    exit_status=0
94305eefee25Smacallan
94315eefee25Smacallan    # This variable tells wrapper scripts just to set variables rather
94325eefee25Smacallan    # than running their programs.
94335eefee25Smacallan    libtool_install_magic="$magic"
94345eefee25Smacallan
94355eefee25Smacallan    for arg
94365eefee25Smacallan    do
94375eefee25Smacallan      case $arg in
9438dc99b369Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
9439dc99b369Smrg      -*) func_append RM " $arg" ;;
9440dc99b369Smrg      *) func_append files " $arg" ;;
94415eefee25Smacallan      esac
94425eefee25Smacallan    done
94435eefee25Smacallan
9444dc99b369Smrg    test -z "$RM" && \
9445dc99b369Smrg      func_fatal_help "you must specify an RM program"
94465eefee25Smacallan
94475eefee25Smacallan    rmdirs=
94485eefee25Smacallan
94495eefee25Smacallan    for file in $files; do
9450dc99b369Smrg      func_dirname "$file" "" "."
9451dc99b369Smrg      dir="$func_dirname_result"
9452dc99b369Smrg      if test "X$dir" = X.; then
9453dc99b369Smrg	odir="$objdir"
94545eefee25Smacallan      else
9455dc99b369Smrg	odir="$dir/$objdir"
94565eefee25Smacallan      fi
9457dc99b369Smrg      func_basename "$file"
9458dc99b369Smrg      name="$func_basename_result"
9459dc99b369Smrg      test "$opt_mode" = uninstall && odir="$dir"
94605eefee25Smacallan
9461dc99b369Smrg      # Remember odir for removal later, being careful to avoid duplicates
9462dc99b369Smrg      if test "$opt_mode" = clean; then
94635eefee25Smacallan	case " $rmdirs " in
9464dc99b369Smrg	  *" $odir "*) ;;
9465dc99b369Smrg	  *) func_append rmdirs " $odir" ;;
94665eefee25Smacallan	esac
94675eefee25Smacallan      fi
94685eefee25Smacallan
94695eefee25Smacallan      # Don't error if the file doesn't exist and rm -f was used.
9470dc99b369Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9471dc99b369Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9472dc99b369Smrg	 test -f "$file"; then
94735eefee25Smacallan	:
94745eefee25Smacallan      elif test -d "$file"; then
94755eefee25Smacallan	exit_status=1
94765eefee25Smacallan	continue
94775eefee25Smacallan      elif test "$rmforce" = yes; then
94785eefee25Smacallan	continue
94795eefee25Smacallan      fi
94805eefee25Smacallan
94815eefee25Smacallan      rmfiles="$file"
94825eefee25Smacallan
94835eefee25Smacallan      case $name in
94845eefee25Smacallan      *.la)
94855eefee25Smacallan	# Possibly a libtool archive, so verify it.
9486dc99b369Smrg	if func_lalib_p "$file"; then
9487dc99b369Smrg	  func_source $dir/$name
94885eefee25Smacallan
94895eefee25Smacallan	  # Delete the libtool libraries and symlinks.
94905eefee25Smacallan	  for n in $library_names; do
9491dc99b369Smrg	    func_append rmfiles " $odir/$n"
94925eefee25Smacallan	  done
9493dc99b369Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
94945eefee25Smacallan
9495dc99b369Smrg	  case "$opt_mode" in
94965eefee25Smacallan	  clean)
9497dc99b369Smrg	    case " $library_names " in
94985eefee25Smacallan	    *" $dlname "*) ;;
9499dc99b369Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
95005eefee25Smacallan	    esac
9501dc99b369Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
95025eefee25Smacallan	    ;;
95035eefee25Smacallan	  uninstall)
95045eefee25Smacallan	    if test -n "$library_names"; then
95055eefee25Smacallan	      # Do each command in the postuninstall commands.
9506dc99b369Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
95075eefee25Smacallan	    fi
95085eefee25Smacallan
95095eefee25Smacallan	    if test -n "$old_library"; then
95105eefee25Smacallan	      # Do each command in the old_postuninstall commands.
9511dc99b369Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
95125eefee25Smacallan	    fi
95135eefee25Smacallan	    # FIXME: should reinstall the best remaining shared library.
95145eefee25Smacallan	    ;;
95155eefee25Smacallan	  esac
95165eefee25Smacallan	fi
95175eefee25Smacallan	;;
95185eefee25Smacallan
95195eefee25Smacallan      *.lo)
95205eefee25Smacallan	# Possibly a libtool object, so verify it.
9521dc99b369Smrg	if func_lalib_p "$file"; then
95225eefee25Smacallan
95235eefee25Smacallan	  # Read the .lo file
9524dc99b369Smrg	  func_source $dir/$name
95255eefee25Smacallan
95265eefee25Smacallan	  # Add PIC object to the list of files to remove.
9527dc99b369Smrg	  if test -n "$pic_object" &&
9528dc99b369Smrg	     test "$pic_object" != none; then
9529dc99b369Smrg	    func_append rmfiles " $dir/$pic_object"
95305eefee25Smacallan	  fi
95315eefee25Smacallan
95325eefee25Smacallan	  # Add non-PIC object to the list of files to remove.
9533dc99b369Smrg	  if test -n "$non_pic_object" &&
9534dc99b369Smrg	     test "$non_pic_object" != none; then
9535dc99b369Smrg	    func_append rmfiles " $dir/$non_pic_object"
95365eefee25Smacallan	  fi
95375eefee25Smacallan	fi
95385eefee25Smacallan	;;
95395eefee25Smacallan
95405eefee25Smacallan      *)
9541dc99b369Smrg	if test "$opt_mode" = clean ; then
95425eefee25Smacallan	  noexename=$name
95435eefee25Smacallan	  case $file in
95445eefee25Smacallan	  *.exe)
9545dc99b369Smrg	    func_stripname '' '.exe' "$file"
9546dc99b369Smrg	    file=$func_stripname_result
9547dc99b369Smrg	    func_stripname '' '.exe' "$name"
9548dc99b369Smrg	    noexename=$func_stripname_result
95495eefee25Smacallan	    # $file with .exe has already been added to rmfiles,
95505eefee25Smacallan	    # add $file without .exe
9551dc99b369Smrg	    func_append rmfiles " $file"
95525eefee25Smacallan	    ;;
95535eefee25Smacallan	  esac
95545eefee25Smacallan	  # Do a test to see if this is a libtool program.
9555dc99b369Smrg	  if func_ltwrapper_p "$file"; then
9556dc99b369Smrg	    if func_ltwrapper_executable_p "$file"; then
9557dc99b369Smrg	      func_ltwrapper_scriptname "$file"
9558dc99b369Smrg	      relink_command=
9559dc99b369Smrg	      func_source $func_ltwrapper_scriptname_result
9560dc99b369Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9561dc99b369Smrg	    else
9562dc99b369Smrg	      relink_command=
9563dc99b369Smrg	      func_source $dir/$noexename
9564dc99b369Smrg	    fi
95655eefee25Smacallan
95665eefee25Smacallan	    # note $name still contains .exe if it was in $file originally
95675eefee25Smacallan	    # as does the version of $file that was added into $rmfiles
9568dc99b369Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
95695eefee25Smacallan	    if test "$fast_install" = yes && test -n "$relink_command"; then
9570dc99b369Smrg	      func_append rmfiles " $odir/lt-$name"
95715eefee25Smacallan	    fi
95725eefee25Smacallan	    if test "X$noexename" != "X$name" ; then
9573dc99b369Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
95745eefee25Smacallan	    fi
95755eefee25Smacallan	  fi
95765eefee25Smacallan	fi
95775eefee25Smacallan	;;
95785eefee25Smacallan      esac
9579dc99b369Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
95805eefee25Smacallan    done
95815eefee25Smacallan
95825eefee25Smacallan    # Try to remove the ${objdir}s in the directories where we deleted files
95835eefee25Smacallan    for dir in $rmdirs; do
95845eefee25Smacallan      if test -d "$dir"; then
9585dc99b369Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
95865eefee25Smacallan      fi
95875eefee25Smacallan    done
95885eefee25Smacallan
95895eefee25Smacallan    exit $exit_status
9590dc99b369Smrg}
95915eefee25Smacallan
9592dc99b369Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9593dc99b369Smrg    func_mode_uninstall ${1+"$@"}
95945eefee25Smacallan
9595dc99b369Smrgtest -z "$opt_mode" && {
9596dc99b369Smrg  help="$generic_help"
9597dc99b369Smrg  func_fatal_help "you must specify a MODE"
9598dc99b369Smrg}
9599dc99b369Smrg
9600dc99b369Smrgtest -z "$exec_cmd" && \
9601dc99b369Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
96025eefee25Smacallan
96035eefee25Smacallanif test -n "$exec_cmd"; then
9604dc99b369Smrg  eval exec "$exec_cmd"
96055eefee25Smacallan  exit $EXIT_FAILURE
96065eefee25Smacallanfi
96075eefee25Smacallan
9608dc99b369Smrgexit $exit_status
96095eefee25Smacallan
96105eefee25Smacallan
96115eefee25Smacallan# The TAGs below are defined such that we never get into a situation
96125eefee25Smacallan# in which we disable both kinds of libraries.  Given conflicting
96135eefee25Smacallan# choices, we go for a static library, that is the most portable,
96145eefee25Smacallan# since we can't tell whether shared libraries were disabled because
96155eefee25Smacallan# the user asked for that or because the platform doesn't support
96165eefee25Smacallan# them.  This is particularly important on AIX, because we don't
96175eefee25Smacallan# support having both static and shared libraries enabled at the same
96185eefee25Smacallan# time on that platform, so we default to a shared-only configuration.
96195eefee25Smacallan# If a disable-shared tag is given, we'll fallback to a static-only
96205eefee25Smacallan# configuration.  But we'll never go from static-only to shared-only.
96215eefee25Smacallan
96225eefee25Smacallan# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9623dc99b369Smrgbuild_libtool_libs=no
9624dc99b369Smrgbuild_old_libs=yes
96255eefee25Smacallan# ### END LIBTOOL TAG CONFIG: disable-shared
96265eefee25Smacallan
96275eefee25Smacallan# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9628dc99b369Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
96295eefee25Smacallan# ### END LIBTOOL TAG CONFIG: disable-static
96305eefee25Smacallan
96315eefee25Smacallan# Local Variables:
96325eefee25Smacallan# mode:shell-script
96335eefee25Smacallan# sh-indentation:2
96345eefee25Smacallan# End:
9635dc99b369Smrg# vi:sw=2
9636dc99b369Smrg
9637