ltmain.sh revision 313a12fd
1e19dfac4Smrg
2313a12fdSmrg# libtool (GNU libtool) 2.4.2
3e19dfac4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4e19dfac4Smrg
5313a12fdSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
6313a12fdSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7e19dfac4Smrg# This is free software; see the source for copying conditions.  There is NO
8e19dfac4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9e19dfac4Smrg
10e19dfac4Smrg# GNU Libtool is free software; you can redistribute it and/or modify
1127702724Smrg# it under the terms of the GNU General Public License as published by
1227702724Smrg# the Free Software Foundation; either version 2 of the License, or
1327702724Smrg# (at your option) any later version.
1427702724Smrg#
15e19dfac4Smrg# As a special exception to the GNU General Public License,
16e19dfac4Smrg# if you distribute this file as part of a program or library that
17e19dfac4Smrg# is built using GNU Libtool, you may include this file under the
18e19dfac4Smrg# same distribution terms that you use for the rest of that program.
19e19dfac4Smrg#
20e19dfac4Smrg# GNU Libtool is distributed in the hope that it will be useful, but
2127702724Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
2227702724Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2327702724Smrg# General Public License for more details.
2427702724Smrg#
2527702724Smrg# You should have received a copy of the GNU General Public License
26e19dfac4Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27e19dfac4Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28e19dfac4Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29e19dfac4Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30e19dfac4Smrg
31e19dfac4Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32e19dfac4Smrg#
33e19dfac4Smrg# Provide generalized library-building support services.
3427702724Smrg#
35313a12fdSmrg#       --config             show all configuration variables
36313a12fdSmrg#       --debug              enable verbose shell tracing
37313a12fdSmrg#   -n, --dry-run            display commands without modifying any files
38313a12fdSmrg#       --features           display basic configuration information and exit
39313a12fdSmrg#       --mode=MODE          use operation mode MODE
40313a12fdSmrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
41313a12fdSmrg#       --quiet, --silent    don't print informational messages
42313a12fdSmrg#       --no-quiet, --no-silent
43313a12fdSmrg#                            print informational messages (default)
44313a12fdSmrg#       --no-warn            don't display warning messages
45313a12fdSmrg#       --tag=TAG            use configuration variables from tag TAG
46313a12fdSmrg#   -v, --verbose            print more informational messages than default
47313a12fdSmrg#       --no-verbose         don't print the extra informational messages
48313a12fdSmrg#       --version            print version information
49313a12fdSmrg#   -h, --help, --help-all   print short, long, or detailed help message
50e19dfac4Smrg#
51e19dfac4Smrg# MODE must be one of the following:
52e19dfac4Smrg#
53313a12fdSmrg#         clean              remove files from the build directory
54313a12fdSmrg#         compile            compile a source file into a libtool object
55313a12fdSmrg#         execute            automatically set library path, then run a program
56313a12fdSmrg#         finish             complete the installation of libtool libraries
57313a12fdSmrg#         install            install libraries or executables
58313a12fdSmrg#         link               create a library or an executable
59313a12fdSmrg#         uninstall          remove libraries from an installed directory
60e19dfac4Smrg#
61313a12fdSmrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
62313a12fdSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63e19dfac4Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64e19dfac4Smrg#
65e19dfac4Smrg# When reporting a bug, please describe a test case to reproduce it and
66e19dfac4Smrg# include the following information:
67e19dfac4Smrg#
68313a12fdSmrg#         host-triplet:	$host
69313a12fdSmrg#         shell:		$SHELL
70313a12fdSmrg#         compiler:		$LTCC
71313a12fdSmrg#         compiler flags:		$LTCFLAGS
72313a12fdSmrg#         linker:		$LD (gnu? $with_gnu_ld)
73313a12fdSmrg#         $progname:	(GNU libtool) 2.4.2
74313a12fdSmrg#         automake:	$automake_version
75313a12fdSmrg#         autoconf:	$autoconf_version
76e19dfac4Smrg#
77e19dfac4Smrg# Report bugs to <bug-libtool@gnu.org>.
78313a12fdSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
79313a12fdSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
80e19dfac4Smrg
81313a12fdSmrgPROGRAM=libtool
82e19dfac4SmrgPACKAGE=libtool
83313a12fdSmrgVERSION=2.4.2
84e19dfac4SmrgTIMESTAMP=""
85313a12fdSmrgpackage_revision=1.3337
86e19dfac4Smrg
87e19dfac4Smrg# Be Bourne compatible
88e19dfac4Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
89e19dfac4Smrg  emulate sh
90e19dfac4Smrg  NULLCMD=:
91e19dfac4Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
92e19dfac4Smrg  # is contrary to our usage.  Disable this feature.
93e19dfac4Smrg  alias -g '${1+"$@"}'='"$@"'
94e19dfac4Smrg  setopt NO_GLOB_SUBST
95e19dfac4Smrgelse
96e19dfac4Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
97e19dfac4Smrgfi
98e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
99e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh
100e19dfac4Smrg
101313a12fdSmrg# A function that is used when there is no print builtin or printf.
102313a12fdSmrgfunc_fallback_echo ()
103313a12fdSmrg{
104313a12fdSmrg  eval 'cat <<_LTECHO_EOF
105313a12fdSmrg$1
106313a12fdSmrg_LTECHO_EOF'
107313a12fdSmrg}
108313a12fdSmrg
109e19dfac4Smrg# NLS nuisances: We save the old values to restore during execute mode.
110e19dfac4Smrglt_user_locale=
111e19dfac4Smrglt_safe_locale=
112e19dfac4Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
113e19dfac4Smrgdo
114e19dfac4Smrg  eval "if test \"\${$lt_var+set}\" = set; then
115e19dfac4Smrg          save_$lt_var=\$$lt_var
116e19dfac4Smrg          $lt_var=C
117e19dfac4Smrg	  export $lt_var
118e19dfac4Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119e19dfac4Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
120e19dfac4Smrg	fi"
121e19dfac4Smrgdone
122313a12fdSmrgLC_ALL=C
123313a12fdSmrgLANGUAGE=C
124313a12fdSmrgexport LANGUAGE LC_ALL
125e19dfac4Smrg
126e19dfac4Smrg$lt_unset CDPATH
127e19dfac4Smrg
128e19dfac4Smrg
129313a12fdSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
130313a12fdSmrg# is ksh but when the shell is invoked as "sh" and the current value of
131313a12fdSmrg# the _XPG environment variable is not equal to 1 (one), the special
132313a12fdSmrg# positional parameter $0, within a function call, is the name of the
133313a12fdSmrg# function.
134313a12fdSmrgprogpath="$0"
135e19dfac4Smrg
136e19dfac4Smrg
137e19dfac4Smrg
138e19dfac4Smrg: ${CP="cp -f"}
139313a12fdSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140e19dfac4Smrg: ${MAKE="make"}
141e19dfac4Smrg: ${MKDIR="mkdir"}
142e19dfac4Smrg: ${MV="mv -f"}
143e19dfac4Smrg: ${RM="rm -f"}
144e19dfac4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145e19dfac4Smrg: ${Xsed="$SED -e 1s/^X//"}
14627702724Smrg
147e19dfac4Smrg# Global variables:
148e19dfac4SmrgEXIT_SUCCESS=0
149e19dfac4SmrgEXIT_FAILURE=1
150e19dfac4SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151e19dfac4SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152e19dfac4Smrg
153e19dfac4Smrgexit_status=$EXIT_SUCCESS
154e19dfac4Smrg
155e19dfac4Smrg# Make sure IFS has a sensible default
156e19dfac4Smrglt_nl='
157e19dfac4Smrg'
158e19dfac4SmrgIFS=" 	$lt_nl"
159e19dfac4Smrg
160e19dfac4Smrgdirname="s,/[^/]*$,,"
161e19dfac4Smrgbasename="s,^.*/,,"
162e19dfac4Smrg
163313a12fdSmrg# func_dirname file append nondir_replacement
164313a12fdSmrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
165313a12fdSmrg# otherwise set result to NONDIR_REPLACEMENT.
166313a12fdSmrgfunc_dirname ()
167313a12fdSmrg{
168313a12fdSmrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
169313a12fdSmrg    if test "X$func_dirname_result" = "X${1}"; then
170313a12fdSmrg      func_dirname_result="${3}"
171313a12fdSmrg    else
172313a12fdSmrg      func_dirname_result="$func_dirname_result${2}"
173313a12fdSmrg    fi
174313a12fdSmrg} # func_dirname may be replaced by extended shell implementation
175313a12fdSmrg
176313a12fdSmrg
177313a12fdSmrg# func_basename file
178313a12fdSmrgfunc_basename ()
179313a12fdSmrg{
180313a12fdSmrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
181313a12fdSmrg} # func_basename may be replaced by extended shell implementation
182313a12fdSmrg
183313a12fdSmrg
184e19dfac4Smrg# func_dirname_and_basename file append nondir_replacement
185e19dfac4Smrg# perform func_basename and func_dirname in a single function
186e19dfac4Smrg# call:
187e19dfac4Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
188e19dfac4Smrg#             add APPEND to the result, otherwise set result
189e19dfac4Smrg#             to NONDIR_REPLACEMENT.
190e19dfac4Smrg#             value returned in "$func_dirname_result"
191e19dfac4Smrg#   basename: Compute filename of FILE.
192e19dfac4Smrg#             value retuned in "$func_basename_result"
193e19dfac4Smrg# Implementation must be kept synchronized with func_dirname
194e19dfac4Smrg# and func_basename. For efficiency, we do not delegate to
195e19dfac4Smrg# those functions but instead duplicate the functionality here.
196e19dfac4Smrgfunc_dirname_and_basename ()
197e19dfac4Smrg{
198313a12fdSmrg    # Extract subdirectory from the argument.
199313a12fdSmrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
200313a12fdSmrg    if test "X$func_dirname_result" = "X${1}"; then
201313a12fdSmrg      func_dirname_result="${3}"
202313a12fdSmrg    else
203313a12fdSmrg      func_dirname_result="$func_dirname_result${2}"
204313a12fdSmrg    fi
205313a12fdSmrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
206313a12fdSmrg} # func_dirname_and_basename may be replaced by extended shell implementation
207313a12fdSmrg
208313a12fdSmrg
209313a12fdSmrg# func_stripname prefix suffix name
210313a12fdSmrg# strip PREFIX and SUFFIX off of NAME.
211313a12fdSmrg# PREFIX and SUFFIX must not contain globbing or regex special
212313a12fdSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading
213313a12fdSmrg# dot (in which case that matches only a dot).
214313a12fdSmrg# func_strip_suffix prefix name
215313a12fdSmrgfunc_stripname ()
216313a12fdSmrg{
217313a12fdSmrg    case ${2} in
218313a12fdSmrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
219313a12fdSmrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
220313a12fdSmrg    esac
221313a12fdSmrg} # func_stripname may be replaced by extended shell implementation
222313a12fdSmrg
223313a12fdSmrg
224313a12fdSmrg# These SED scripts presuppose an absolute path with a trailing slash.
225313a12fdSmrgpathcar='s,^/\([^/]*\).*$,\1,'
226313a12fdSmrgpathcdr='s,^/[^/]*,,'
227313a12fdSmrgremovedotparts=':dotsl
228313a12fdSmrg		s@/\./@/@g
229313a12fdSmrg		t dotsl
230313a12fdSmrg		s,/\.$,/,'
231313a12fdSmrgcollapseslashes='s@/\{1,\}@/@g'
232313a12fdSmrgfinalslash='s,/*$,/,'
233313a12fdSmrg
234313a12fdSmrg# func_normal_abspath PATH
235313a12fdSmrg# Remove doubled-up and trailing slashes, "." path components,
236313a12fdSmrg# and cancel out any ".." path components in PATH after making
237313a12fdSmrg# it an absolute path.
238313a12fdSmrg#             value returned in "$func_normal_abspath_result"
239313a12fdSmrgfunc_normal_abspath ()
240313a12fdSmrg{
241313a12fdSmrg  # Start from root dir and reassemble the path.
242313a12fdSmrg  func_normal_abspath_result=
243313a12fdSmrg  func_normal_abspath_tpath=$1
244313a12fdSmrg  func_normal_abspath_altnamespace=
245313a12fdSmrg  case $func_normal_abspath_tpath in
246313a12fdSmrg    "")
247313a12fdSmrg      # Empty path, that just means $cwd.
248313a12fdSmrg      func_stripname '' '/' "`pwd`"
249313a12fdSmrg      func_normal_abspath_result=$func_stripname_result
250313a12fdSmrg      return
251313a12fdSmrg    ;;
252313a12fdSmrg    # The next three entries are used to spot a run of precisely
253313a12fdSmrg    # two leading slashes without using negated character classes;
254313a12fdSmrg    # we take advantage of case's first-match behaviour.
255313a12fdSmrg    ///*)
256313a12fdSmrg      # Unusual form of absolute path, do nothing.
257313a12fdSmrg    ;;
258313a12fdSmrg    //*)
259313a12fdSmrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
260313a12fdSmrg      # and for example Cygwin uses it to access remote file shares
261313a12fdSmrg      # over CIFS/SMB, so we conserve a leading double slash if found.
262313a12fdSmrg      func_normal_abspath_altnamespace=/
263313a12fdSmrg    ;;
264313a12fdSmrg    /*)
265313a12fdSmrg      # Absolute path, do nothing.
266313a12fdSmrg    ;;
267313a12fdSmrg    *)
268313a12fdSmrg      # Relative path, prepend $cwd.
269313a12fdSmrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
270313a12fdSmrg    ;;
271313a12fdSmrg  esac
272313a12fdSmrg  # Cancel out all the simple stuff to save iterations.  We also want
273313a12fdSmrg  # the path to end with a slash for ease of parsing, so make sure
274313a12fdSmrg  # there is one (and only one) here.
275313a12fdSmrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
276313a12fdSmrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
277313a12fdSmrg  while :; do
278313a12fdSmrg    # Processed it all yet?
279313a12fdSmrg    if test "$func_normal_abspath_tpath" = / ; then
280313a12fdSmrg      # If we ascended to the root using ".." the result may be empty now.
281313a12fdSmrg      if test -z "$func_normal_abspath_result" ; then
282313a12fdSmrg        func_normal_abspath_result=/
283313a12fdSmrg      fi
284313a12fdSmrg      break
285313a12fdSmrg    fi
286313a12fdSmrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
287313a12fdSmrg        -e "$pathcar"`
288313a12fdSmrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
289313a12fdSmrg        -e "$pathcdr"`
290313a12fdSmrg    # Figure out what to do with it
291313a12fdSmrg    case $func_normal_abspath_tcomponent in
292313a12fdSmrg      "")
293313a12fdSmrg        # Trailing empty path component, ignore it.
294313a12fdSmrg      ;;
295313a12fdSmrg      ..)
296313a12fdSmrg        # Parent dir; strip last assembled component from result.
297313a12fdSmrg        func_dirname "$func_normal_abspath_result"
298313a12fdSmrg        func_normal_abspath_result=$func_dirname_result
299313a12fdSmrg      ;;
300313a12fdSmrg      *)
301313a12fdSmrg        # Actual path component, append it.
302313a12fdSmrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
303313a12fdSmrg      ;;
304313a12fdSmrg    esac
305313a12fdSmrg  done
306313a12fdSmrg  # Restore leading double-slash if one was found on entry.
307313a12fdSmrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308e19dfac4Smrg}
309e19dfac4Smrg
310313a12fdSmrg# func_relative_path SRCDIR DSTDIR
311313a12fdSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
312313a12fdSmrg# slash if non-empty, suitable for immediately appending a filename
313313a12fdSmrg# without needing to append a separator.
314313a12fdSmrg#             value returned in "$func_relative_path_result"
315313a12fdSmrgfunc_relative_path ()
316313a12fdSmrg{
317313a12fdSmrg  func_relative_path_result=
318313a12fdSmrg  func_normal_abspath "$1"
319313a12fdSmrg  func_relative_path_tlibdir=$func_normal_abspath_result
320313a12fdSmrg  func_normal_abspath "$2"
321313a12fdSmrg  func_relative_path_tbindir=$func_normal_abspath_result
322313a12fdSmrg
323313a12fdSmrg  # Ascend the tree starting from libdir
324313a12fdSmrg  while :; do
325313a12fdSmrg    # check if we have found a prefix of bindir
326313a12fdSmrg    case $func_relative_path_tbindir in
327313a12fdSmrg      $func_relative_path_tlibdir)
328313a12fdSmrg        # found an exact match
329313a12fdSmrg        func_relative_path_tcancelled=
330313a12fdSmrg        break
331313a12fdSmrg        ;;
332313a12fdSmrg      $func_relative_path_tlibdir*)
333313a12fdSmrg        # found a matching prefix
334313a12fdSmrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
335313a12fdSmrg        func_relative_path_tcancelled=$func_stripname_result
336313a12fdSmrg        if test -z "$func_relative_path_result"; then
337313a12fdSmrg          func_relative_path_result=.
338313a12fdSmrg        fi
339313a12fdSmrg        break
340313a12fdSmrg        ;;
341313a12fdSmrg      *)
342313a12fdSmrg        func_dirname $func_relative_path_tlibdir
343313a12fdSmrg        func_relative_path_tlibdir=${func_dirname_result}
344313a12fdSmrg        if test "x$func_relative_path_tlibdir" = x ; then
345313a12fdSmrg          # Have to descend all the way to the root!
346313a12fdSmrg          func_relative_path_result=../$func_relative_path_result
347313a12fdSmrg          func_relative_path_tcancelled=$func_relative_path_tbindir
348313a12fdSmrg          break
349313a12fdSmrg        fi
350313a12fdSmrg        func_relative_path_result=../$func_relative_path_result
351313a12fdSmrg        ;;
352313a12fdSmrg    esac
353313a12fdSmrg  done
35427702724Smrg
355313a12fdSmrg  # Now calculate path; take care to avoid doubling-up slashes.
356313a12fdSmrg  func_stripname '' '/' "$func_relative_path_result"
357313a12fdSmrg  func_relative_path_result=$func_stripname_result
358313a12fdSmrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
359313a12fdSmrg  if test "x$func_stripname_result" != x ; then
360313a12fdSmrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
361313a12fdSmrg  fi
362313a12fdSmrg
363313a12fdSmrg  # Normalisation. If bindir is libdir, return empty string,
364313a12fdSmrg  # else relative path ending with a slash; either way, target
365313a12fdSmrg  # file name can be directly appended.
366313a12fdSmrg  if test ! -z "$func_relative_path_result"; then
367313a12fdSmrg    func_stripname './' '' "$func_relative_path_result/"
368313a12fdSmrg    func_relative_path_result=$func_stripname_result
369313a12fdSmrg  fi
370313a12fdSmrg}
37127702724Smrg
37227702724Smrg# The name of this program:
373e19dfac4Smrgfunc_dirname_and_basename "$progpath"
374e19dfac4Smrgprogname=$func_basename_result
37527702724Smrg
376e19dfac4Smrg# Make sure we have an absolute path for reexecution:
377e19dfac4Smrgcase $progpath in
378e19dfac4Smrg  [\\/]*|[A-Za-z]:\\*) ;;
379e19dfac4Smrg  *[\\/]*)
380e19dfac4Smrg     progdir=$func_dirname_result
381e19dfac4Smrg     progdir=`cd "$progdir" && pwd`
382e19dfac4Smrg     progpath="$progdir/$progname"
383e19dfac4Smrg     ;;
384e19dfac4Smrg  *)
385e19dfac4Smrg     save_IFS="$IFS"
386313a12fdSmrg     IFS=${PATH_SEPARATOR-:}
387e19dfac4Smrg     for progdir in $PATH; do
388e19dfac4Smrg       IFS="$save_IFS"
389e19dfac4Smrg       test -x "$progdir/$progname" && break
390e19dfac4Smrg     done
391e19dfac4Smrg     IFS="$save_IFS"
392e19dfac4Smrg     test -n "$progdir" || progdir=`pwd`
393e19dfac4Smrg     progpath="$progdir/$progname"
394e19dfac4Smrg     ;;
395e19dfac4Smrgesac
39627702724Smrg
397e19dfac4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
398e19dfac4Smrg# metacharacters that are still active within double-quoted strings.
399e19dfac4SmrgXsed="${SED}"' -e 1s/^X//'
400e19dfac4Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401e19dfac4Smrg
402e19dfac4Smrg# Same as above, but do not quote variable references.
403e19dfac4Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404e19dfac4Smrg
405313a12fdSmrg# Sed substitution that turns a string into a regex matching for the
406313a12fdSmrg# string literally.
407313a12fdSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
408313a12fdSmrg
409313a12fdSmrg# Sed substitution that converts a w32 file name or path
410313a12fdSmrg# which contains forward slashes, into one that contains
411313a12fdSmrg# (escaped) backslashes.  A very naive implementation.
412313a12fdSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
413313a12fdSmrg
414e19dfac4Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
415e19dfac4Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416e19dfac4Smrg# in input to double_quote_subst, that '$' was protected from expansion.
417e19dfac4Smrg# Since each input `\' is now two `\'s, look for any number of runs of
418e19dfac4Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419e19dfac4Smrgbs='\\'
420e19dfac4Smrgbs2='\\\\'
421e19dfac4Smrgbs4='\\\\\\\\'
422e19dfac4Smrgdollar='\$'
423e19dfac4Smrgsed_double_backslash="\
424e19dfac4Smrg  s/$bs4/&\\
425e19dfac4Smrg/g
426e19dfac4Smrg  s/^$bs2$dollar/$bs&/
427e19dfac4Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428e19dfac4Smrg  s/\n//g"
429e19dfac4Smrg
430e19dfac4Smrg# Standard options:
431e19dfac4Smrgopt_dry_run=false
432e19dfac4Smrgopt_help=false
433e19dfac4Smrgopt_quiet=false
434e19dfac4Smrgopt_verbose=false
435e19dfac4Smrgopt_warning=:
436e19dfac4Smrg
437e19dfac4Smrg# func_echo arg...
438e19dfac4Smrg# Echo program name prefixed message, along with the current mode
439e19dfac4Smrg# name if it has been set yet.
440e19dfac4Smrgfunc_echo ()
441e19dfac4Smrg{
442313a12fdSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443e19dfac4Smrg}
44427702724Smrg
445e19dfac4Smrg# func_verbose arg...
446e19dfac4Smrg# Echo program name prefixed message in verbose mode only.
447e19dfac4Smrgfunc_verbose ()
448e19dfac4Smrg{
449e19dfac4Smrg    $opt_verbose && func_echo ${1+"$@"}
45027702724Smrg
451e19dfac4Smrg    # A bug in bash halts the script if the last line of a function
452e19dfac4Smrg    # fails when set -e is in force, so we need another command to
453e19dfac4Smrg    # work around that:
454e19dfac4Smrg    :
455e19dfac4Smrg}
45627702724Smrg
457313a12fdSmrg# func_echo_all arg...
458313a12fdSmrg# Invoke $ECHO with all args, space-separated.
459313a12fdSmrgfunc_echo_all ()
460313a12fdSmrg{
461313a12fdSmrg    $ECHO "$*"
462313a12fdSmrg}
463313a12fdSmrg
464e19dfac4Smrg# func_error arg...
465e19dfac4Smrg# Echo program name prefixed message to standard error.
466e19dfac4Smrgfunc_error ()
467e19dfac4Smrg{
468313a12fdSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469e19dfac4Smrg}
47027702724Smrg
471e19dfac4Smrg# func_warning arg...
472e19dfac4Smrg# Echo program name prefixed warning message to standard error.
473e19dfac4Smrgfunc_warning ()
474e19dfac4Smrg{
475313a12fdSmrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
47627702724Smrg
477e19dfac4Smrg    # bash bug again:
478e19dfac4Smrg    :
479e19dfac4Smrg}
48027702724Smrg
481e19dfac4Smrg# func_fatal_error arg...
482e19dfac4Smrg# Echo program name prefixed message to standard error, and exit.
483e19dfac4Smrgfunc_fatal_error ()
484e19dfac4Smrg{
485e19dfac4Smrg    func_error ${1+"$@"}
486e19dfac4Smrg    exit $EXIT_FAILURE
487e19dfac4Smrg}
48827702724Smrg
489e19dfac4Smrg# func_fatal_help arg...
490e19dfac4Smrg# Echo program name prefixed message to standard error, followed by
491e19dfac4Smrg# a help hint, and exit.
492e19dfac4Smrgfunc_fatal_help ()
493e19dfac4Smrg{
494e19dfac4Smrg    func_error ${1+"$@"}
495e19dfac4Smrg    func_fatal_error "$help"
496e19dfac4Smrg}
497e19dfac4Smrghelp="Try \`$progname --help' for more information."  ## default
49827702724Smrg
49927702724Smrg
500e19dfac4Smrg# func_grep expression filename
501e19dfac4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502e19dfac4Smrgfunc_grep ()
503e19dfac4Smrg{
504e19dfac4Smrg    $GREP "$1" "$2" >/dev/null 2>&1
505e19dfac4Smrg}
506e19dfac4Smrg
507e19dfac4Smrg
508e19dfac4Smrg# func_mkdir_p directory-path
509e19dfac4Smrg# Make sure the entire path to DIRECTORY-PATH is available.
510e19dfac4Smrgfunc_mkdir_p ()
511e19dfac4Smrg{
512e19dfac4Smrg    my_directory_path="$1"
513e19dfac4Smrg    my_dir_list=
514e19dfac4Smrg
515e19dfac4Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516e19dfac4Smrg
517e19dfac4Smrg      # Protect directory names starting with `-'
518e19dfac4Smrg      case $my_directory_path in
519e19dfac4Smrg        -*) my_directory_path="./$my_directory_path" ;;
520e19dfac4Smrg      esac
521e19dfac4Smrg
522e19dfac4Smrg      # While some portion of DIR does not yet exist...
523e19dfac4Smrg      while test ! -d "$my_directory_path"; do
524e19dfac4Smrg        # ...make a list in topmost first order.  Use a colon delimited
525e19dfac4Smrg	# list incase some portion of path contains whitespace.
526e19dfac4Smrg        my_dir_list="$my_directory_path:$my_dir_list"
527e19dfac4Smrg
528e19dfac4Smrg        # If the last portion added has no slash in it, the list is done
529e19dfac4Smrg        case $my_directory_path in */*) ;; *) break ;; esac
530e19dfac4Smrg
531e19dfac4Smrg        # ...otherwise throw away the child directory and loop
532313a12fdSmrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533e19dfac4Smrg      done
534313a12fdSmrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535e19dfac4Smrg
536e19dfac4Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
537e19dfac4Smrg      for my_dir in $my_dir_list; do
538e19dfac4Smrg	IFS="$save_mkdir_p_IFS"
539e19dfac4Smrg        # mkdir can fail with a `File exist' error if two processes
540e19dfac4Smrg        # try to create one of the directories concurrently.  Don't
541e19dfac4Smrg        # stop in that case!
542e19dfac4Smrg        $MKDIR "$my_dir" 2>/dev/null || :
543e19dfac4Smrg      done
544e19dfac4Smrg      IFS="$save_mkdir_p_IFS"
545e19dfac4Smrg
546e19dfac4Smrg      # Bail out if we (or some other process) failed to create a directory.
547e19dfac4Smrg      test -d "$my_directory_path" || \
548e19dfac4Smrg        func_fatal_error "Failed to create \`$1'"
549e19dfac4Smrg    fi
550e19dfac4Smrg}
55127702724Smrg
55227702724Smrg
55327702724Smrg# func_mktempdir [string]
55427702724Smrg# Make a temporary directory that won't clash with other running
55527702724Smrg# libtool processes, and avoids race conditions if possible.  If
55627702724Smrg# given, STRING is the basename for that directory.
55727702724Smrgfunc_mktempdir ()
55827702724Smrg{
55927702724Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
56027702724Smrg
561e19dfac4Smrg    if test "$opt_dry_run" = ":"; then
56227702724Smrg      # Return a directory name, but don't create it in dry-run mode
56327702724Smrg      my_tmpdir="${my_template}-$$"
56427702724Smrg    else
56527702724Smrg
56627702724Smrg      # If mktemp works, use that first and foremost
56727702724Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
56827702724Smrg
56927702724Smrg      if test ! -d "$my_tmpdir"; then
570e19dfac4Smrg        # Failing that, at least try and use $RANDOM to avoid a race
571e19dfac4Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
57227702724Smrg
573e19dfac4Smrg        save_mktempdir_umask=`umask`
574e19dfac4Smrg        umask 0077
575e19dfac4Smrg        $MKDIR "$my_tmpdir"
576e19dfac4Smrg        umask $save_mktempdir_umask
57727702724Smrg      fi
57827702724Smrg
57927702724Smrg      # If we're not in dry-run mode, bomb out on failure
580e19dfac4Smrg      test -d "$my_tmpdir" || \
581e19dfac4Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
58227702724Smrg    fi
58327702724Smrg
584313a12fdSmrg    $ECHO "$my_tmpdir"
58527702724Smrg}
58627702724Smrg
58727702724Smrg
588e19dfac4Smrg# func_quote_for_eval arg
589e19dfac4Smrg# Aesthetically quote ARG to be evaled later.
590e19dfac4Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591e19dfac4Smrg# is double-quoted, suitable for a subsequent eval, whereas
592e19dfac4Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593e19dfac4Smrg# which are still active within double quotes backslashified.
594e19dfac4Smrgfunc_quote_for_eval ()
59527702724Smrg{
596e19dfac4Smrg    case $1 in
597e19dfac4Smrg      *[\\\`\"\$]*)
598313a12fdSmrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599e19dfac4Smrg      *)
600e19dfac4Smrg        func_quote_for_eval_unquoted_result="$1" ;;
601e19dfac4Smrg    esac
602e19dfac4Smrg
603e19dfac4Smrg    case $func_quote_for_eval_unquoted_result in
604e19dfac4Smrg      # Double-quote args containing shell metacharacters to delay
605e19dfac4Smrg      # word splitting, command substitution and and variable
606e19dfac4Smrg      # expansion for a subsequent eval.
607e19dfac4Smrg      # Many Bourne shells cannot handle close brackets correctly
608e19dfac4Smrg      # in scan sets, so we specify it separately.
609e19dfac4Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610e19dfac4Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611e19dfac4Smrg        ;;
612e19dfac4Smrg      *)
613e19dfac4Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
61427702724Smrg    esac
61527702724Smrg}
61627702724Smrg
61727702724Smrg
618e19dfac4Smrg# func_quote_for_expand arg
619e19dfac4Smrg# Aesthetically quote ARG to be evaled later; same as above,
620e19dfac4Smrg# but do not quote variable references.
621e19dfac4Smrgfunc_quote_for_expand ()
62227702724Smrg{
623e19dfac4Smrg    case $1 in
624e19dfac4Smrg      *[\\\`\"]*)
625313a12fdSmrg	my_arg=`$ECHO "$1" | $SED \
626e19dfac4Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
62727702724Smrg      *)
628e19dfac4Smrg        my_arg="$1" ;;
629e19dfac4Smrg    esac
630e19dfac4Smrg
631e19dfac4Smrg    case $my_arg in
632e19dfac4Smrg      # Double-quote args containing shell metacharacters to delay
633e19dfac4Smrg      # word splitting and command substitution for a subsequent eval.
634e19dfac4Smrg      # Many Bourne shells cannot handle close brackets correctly
635e19dfac4Smrg      # in scan sets, so we specify it separately.
636e19dfac4Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637e19dfac4Smrg        my_arg="\"$my_arg\""
638e19dfac4Smrg        ;;
639e19dfac4Smrg    esac
640e19dfac4Smrg
641e19dfac4Smrg    func_quote_for_expand_result="$my_arg"
64227702724Smrg}
64327702724Smrg
64427702724Smrg
645e19dfac4Smrg# func_show_eval cmd [fail_exp]
646e19dfac4Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647e19dfac4Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648e19dfac4Smrg# is given, then evaluate it.
649e19dfac4Smrgfunc_show_eval ()
65027702724Smrg{
651e19dfac4Smrg    my_cmd="$1"
652e19dfac4Smrg    my_fail_exp="${2-:}"
65327702724Smrg
654e19dfac4Smrg    ${opt_silent-false} || {
655e19dfac4Smrg      func_quote_for_expand "$my_cmd"
656e19dfac4Smrg      eval "func_echo $func_quote_for_expand_result"
657e19dfac4Smrg    }
658e19dfac4Smrg
659e19dfac4Smrg    if ${opt_dry_run-false}; then :; else
660e19dfac4Smrg      eval "$my_cmd"
661e19dfac4Smrg      my_status=$?
662e19dfac4Smrg      if test "$my_status" -eq 0; then :; else
663e19dfac4Smrg	eval "(exit $my_status); $my_fail_exp"
664e19dfac4Smrg      fi
66527702724Smrg    fi
66627702724Smrg}
66727702724Smrg
668e19dfac4Smrg
669e19dfac4Smrg# func_show_eval_locale cmd [fail_exp]
670e19dfac4Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671e19dfac4Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672e19dfac4Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
673e19dfac4Smrgfunc_show_eval_locale ()
67427702724Smrg{
675e19dfac4Smrg    my_cmd="$1"
676e19dfac4Smrg    my_fail_exp="${2-:}"
67727702724Smrg
678e19dfac4Smrg    ${opt_silent-false} || {
679e19dfac4Smrg      func_quote_for_expand "$my_cmd"
680e19dfac4Smrg      eval "func_echo $func_quote_for_expand_result"
681e19dfac4Smrg    }
682e19dfac4Smrg
683e19dfac4Smrg    if ${opt_dry_run-false}; then :; else
684e19dfac4Smrg      eval "$lt_user_locale
685e19dfac4Smrg	    $my_cmd"
686e19dfac4Smrg      my_status=$?
687e19dfac4Smrg      eval "$lt_safe_locale"
688e19dfac4Smrg      if test "$my_status" -eq 0; then :; else
689e19dfac4Smrg	eval "(exit $my_status); $my_fail_exp"
69027702724Smrg      fi
691e19dfac4Smrg    fi
69227702724Smrg}
69327702724Smrg
694313a12fdSmrg# func_tr_sh
695313a12fdSmrg# Turn $1 into a string suitable for a shell variable name.
696313a12fdSmrg# Result is stored in $func_tr_sh_result.  All characters
697313a12fdSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
698313a12fdSmrg# if $1 begins with a digit, a '_' is prepended as well.
699313a12fdSmrgfunc_tr_sh ()
700313a12fdSmrg{
701313a12fdSmrg  case $1 in
702313a12fdSmrg  [0-9]* | *[!a-zA-Z0-9_]*)
703313a12fdSmrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
704313a12fdSmrg    ;;
705313a12fdSmrg  * )
706313a12fdSmrg    func_tr_sh_result=$1
707313a12fdSmrg    ;;
708313a12fdSmrg  esac
709313a12fdSmrg}
710e19dfac4Smrg
711e19dfac4Smrg
712e19dfac4Smrg# func_version
713e19dfac4Smrg# Echo version message to standard output and exit.
714e19dfac4Smrgfunc_version ()
715e19dfac4Smrg{
716313a12fdSmrg    $opt_debug
717313a12fdSmrg
718313a12fdSmrg    $SED -n '/(C)/!b go
719313a12fdSmrg	:more
720313a12fdSmrg	/\./!{
721313a12fdSmrg	  N
722313a12fdSmrg	  s/\n# / /
723313a12fdSmrg	  b more
724313a12fdSmrg	}
725313a12fdSmrg	:go
726313a12fdSmrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
727e19dfac4Smrg        s/^# //
728e19dfac4Smrg	s/^# *$//
729e19dfac4Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730e19dfac4Smrg        p
731e19dfac4Smrg     }' < "$progpath"
732e19dfac4Smrg     exit $?
733e19dfac4Smrg}
734e19dfac4Smrg
735e19dfac4Smrg# func_usage
736e19dfac4Smrg# Echo short help message to standard output and exit.
737e19dfac4Smrgfunc_usage ()
738e19dfac4Smrg{
739313a12fdSmrg    $opt_debug
740313a12fdSmrg
741313a12fdSmrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742e19dfac4Smrg        s/^# //
743e19dfac4Smrg	s/^# *$//
744e19dfac4Smrg	s/\$progname/'$progname'/
745e19dfac4Smrg	p
746e19dfac4Smrg    }' < "$progpath"
747313a12fdSmrg    echo
748e19dfac4Smrg    $ECHO "run \`$progname --help | more' for full usage"
749e19dfac4Smrg    exit $?
750e19dfac4Smrg}
751e19dfac4Smrg
752313a12fdSmrg# func_help [NOEXIT]
753313a12fdSmrg# Echo long help message to standard output and exit,
754313a12fdSmrg# unless 'noexit' is passed as argument.
755e19dfac4Smrgfunc_help ()
756e19dfac4Smrg{
757313a12fdSmrg    $opt_debug
758313a12fdSmrg
759e19dfac4Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
760313a12fdSmrg	:print
761e19dfac4Smrg        s/^# //
762e19dfac4Smrg	s/^# *$//
763e19dfac4Smrg	s*\$progname*'$progname'*
764e19dfac4Smrg	s*\$host*'"$host"'*
765e19dfac4Smrg	s*\$SHELL*'"$SHELL"'*
766e19dfac4Smrg	s*\$LTCC*'"$LTCC"'*
767e19dfac4Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768e19dfac4Smrg	s*\$LD*'"$LD"'*
769e19dfac4Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
770313a12fdSmrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
771313a12fdSmrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772e19dfac4Smrg	p
773313a12fdSmrg	d
774313a12fdSmrg     }
775313a12fdSmrg     /^# .* home page:/b print
776313a12fdSmrg     /^# General help using/b print
777313a12fdSmrg     ' < "$progpath"
778313a12fdSmrg    ret=$?
779313a12fdSmrg    if test -z "$1"; then
780313a12fdSmrg      exit $ret
781313a12fdSmrg    fi
782e19dfac4Smrg}
783e19dfac4Smrg
784e19dfac4Smrg# func_missing_arg argname
785e19dfac4Smrg# Echo program name prefixed message to standard error and set global
786e19dfac4Smrg# exit_cmd.
787e19dfac4Smrgfunc_missing_arg ()
788e19dfac4Smrg{
789313a12fdSmrg    $opt_debug
790313a12fdSmrg
791313a12fdSmrg    func_error "missing argument for $1."
792e19dfac4Smrg    exit_cmd=exit
793e19dfac4Smrg}
794e19dfac4Smrg
795e19dfac4Smrg
796313a12fdSmrg# func_split_short_opt shortopt
797313a12fdSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
798313a12fdSmrg# variables after splitting SHORTOPT after the 2nd character.
799313a12fdSmrgfunc_split_short_opt ()
800313a12fdSmrg{
801313a12fdSmrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
802313a12fdSmrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803313a12fdSmrg
804313a12fdSmrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
805313a12fdSmrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
806313a12fdSmrg} # func_split_short_opt may be replaced by extended shell implementation
807e19dfac4Smrg
808e19dfac4Smrg
809313a12fdSmrg# func_split_long_opt longopt
810313a12fdSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
811313a12fdSmrg# variables after splitting LONGOPT at the `=' sign.
812313a12fdSmrgfunc_split_long_opt ()
813313a12fdSmrg{
814313a12fdSmrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
815313a12fdSmrg    my_sed_long_arg='1s/^--[^=]*=//'
816313a12fdSmrg
817313a12fdSmrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
818313a12fdSmrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
819313a12fdSmrg} # func_split_long_opt may be replaced by extended shell implementation
820313a12fdSmrg
821313a12fdSmrgexit_cmd=:
822313a12fdSmrg
823e19dfac4Smrg
824e19dfac4Smrg
82527702724Smrg
82627702724Smrg
827e19dfac4Smrgmagic="%%%MAGIC variable%%%"
828e19dfac4Smrgmagic_exe="%%%MAGIC EXE variable%%%"
82927702724Smrg
830e19dfac4Smrg# Global variables.
831e19dfac4Smrgnonopt=
832e19dfac4Smrgpreserve_args=
833e19dfac4Smrglo2o="s/\\.lo\$/.${objext}/"
834e19dfac4Smrgo2lo="s/\\.${objext}\$/.lo/"
835e19dfac4Smrgextracted_archives=
836e19dfac4Smrgextracted_serial=0
83727702724Smrg
838e19dfac4Smrg# If this variable is set in any of the actions, the command in it
839e19dfac4Smrg# will be execed at the end.  This prevents here-documents from being
840e19dfac4Smrg# left over by shells.
841e19dfac4Smrgexec_cmd=
84227702724Smrg
843313a12fdSmrg# func_append var value
844313a12fdSmrg# Append VALUE to the end of shell variable VAR.
845313a12fdSmrgfunc_append ()
846313a12fdSmrg{
847313a12fdSmrg    eval "${1}=\$${1}\${2}"
848313a12fdSmrg} # func_append may be replaced by extended shell implementation
849313a12fdSmrg
850313a12fdSmrg# func_append_quoted var value
851313a12fdSmrg# Quote VALUE and append to the end of shell variable VAR, separated
852313a12fdSmrg# by a space.
853313a12fdSmrgfunc_append_quoted ()
854313a12fdSmrg{
855313a12fdSmrg    func_quote_for_eval "${2}"
856313a12fdSmrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
857313a12fdSmrg} # func_append_quoted may be replaced by extended shell implementation
858313a12fdSmrg
859313a12fdSmrg
860313a12fdSmrg# func_arith arithmetic-term...
861313a12fdSmrgfunc_arith ()
862313a12fdSmrg{
863313a12fdSmrg    func_arith_result=`expr "${@}"`
864313a12fdSmrg} # func_arith may be replaced by extended shell implementation
865313a12fdSmrg
866313a12fdSmrg
867313a12fdSmrg# func_len string
868313a12fdSmrg# STRING may not start with a hyphen.
869313a12fdSmrgfunc_len ()
870313a12fdSmrg{
871313a12fdSmrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
872313a12fdSmrg} # func_len may be replaced by extended shell implementation
873313a12fdSmrg
874313a12fdSmrg
875313a12fdSmrg# func_lo2o object
876313a12fdSmrgfunc_lo2o ()
877313a12fdSmrg{
878313a12fdSmrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
879313a12fdSmrg} # func_lo2o may be replaced by extended shell implementation
880313a12fdSmrg
881313a12fdSmrg
882313a12fdSmrg# func_xform libobj-or-source
883313a12fdSmrgfunc_xform ()
884313a12fdSmrg{
885313a12fdSmrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
886313a12fdSmrg} # func_xform may be replaced by extended shell implementation
887313a12fdSmrg
888313a12fdSmrg
889e19dfac4Smrg# func_fatal_configuration arg...
890e19dfac4Smrg# Echo program name prefixed message to standard error, followed by
891e19dfac4Smrg# a configuration failure hint, and exit.
892e19dfac4Smrgfunc_fatal_configuration ()
893e19dfac4Smrg{
894e19dfac4Smrg    func_error ${1+"$@"}
895e19dfac4Smrg    func_error "See the $PACKAGE documentation for more information."
896e19dfac4Smrg    func_fatal_error "Fatal configuration error."
897e19dfac4Smrg}
898e19dfac4Smrg
899e19dfac4Smrg
900e19dfac4Smrg# func_config
901e19dfac4Smrg# Display the configuration for all the tags in this script.
902e19dfac4Smrgfunc_config ()
903e19dfac4Smrg{
904e19dfac4Smrg    re_begincf='^# ### BEGIN LIBTOOL'
905e19dfac4Smrg    re_endcf='^# ### END LIBTOOL'
906e19dfac4Smrg
907e19dfac4Smrg    # Default configuration.
908e19dfac4Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
90927702724Smrg
91027702724Smrg    # Now print the configurations for the tags.
91127702724Smrg    for tagname in $taglist; do
912e19dfac4Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
91327702724Smrg    done
91427702724Smrg
915e19dfac4Smrg    exit $?
916e19dfac4Smrg}
91727702724Smrg
918e19dfac4Smrg# func_features
919e19dfac4Smrg# Display the features supported by this script.
920e19dfac4Smrgfunc_features ()
921e19dfac4Smrg{
922313a12fdSmrg    echo "host: $host"
92327702724Smrg    if test "$build_libtool_libs" = yes; then
924313a12fdSmrg      echo "enable shared libraries"
92527702724Smrg    else
926313a12fdSmrg      echo "disable shared libraries"
92727702724Smrg    fi
92827702724Smrg    if test "$build_old_libs" = yes; then
929313a12fdSmrg      echo "enable static libraries"
93027702724Smrg    else
931313a12fdSmrg      echo "disable static libraries"
93227702724Smrg    fi
933e19dfac4Smrg
93427702724Smrg    exit $?
935e19dfac4Smrg}
936e19dfac4Smrg
937e19dfac4Smrg# func_enable_tag tagname
938e19dfac4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939e19dfac4Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940e19dfac4Smrg# variable here.
941e19dfac4Smrgfunc_enable_tag ()
942e19dfac4Smrg{
943e19dfac4Smrg  # Global variable:
944e19dfac4Smrg  tagname="$1"
94527702724Smrg
946e19dfac4Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947e19dfac4Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948e19dfac4Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
94927702724Smrg
950e19dfac4Smrg  # Validate tagname.
951e19dfac4Smrg  case $tagname in
952e19dfac4Smrg    *[!-_A-Za-z0-9,/]*)
953e19dfac4Smrg      func_fatal_error "invalid tag name: $tagname"
954e19dfac4Smrg      ;;
955e19dfac4Smrg  esac
95627702724Smrg
957e19dfac4Smrg  # Don't test for the "default" C tag, as we know it's
958e19dfac4Smrg  # there but not specially marked.
959e19dfac4Smrg  case $tagname in
960e19dfac4Smrg    CC) ;;
961e19dfac4Smrg    *)
962e19dfac4Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963e19dfac4Smrg	taglist="$taglist $tagname"
964e19dfac4Smrg
965e19dfac4Smrg	# Evaluate the configuration.  Be careful to quote the path
966e19dfac4Smrg	# and the sed script, to avoid splitting on whitespace, but
967e19dfac4Smrg	# also don't use non-portable quotes within backquotes within
968e19dfac4Smrg	# quotes we have to do it in 2 steps:
969e19dfac4Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970e19dfac4Smrg	eval "$extractedcf"
971e19dfac4Smrg      else
972e19dfac4Smrg	func_error "ignoring unknown tag $tagname"
973e19dfac4Smrg      fi
974e19dfac4Smrg      ;;
975e19dfac4Smrg  esac
976e19dfac4Smrg}
97727702724Smrg
978313a12fdSmrg# func_check_version_match
979313a12fdSmrg# Ensure that we are using m4 macros, and libtool script from the same
980313a12fdSmrg# release of libtool.
981313a12fdSmrgfunc_check_version_match ()
982e19dfac4Smrg{
983313a12fdSmrg  if test "$package_revision" != "$macro_revision"; then
984313a12fdSmrg    if test "$VERSION" != "$macro_version"; then
985313a12fdSmrg      if test -z "$macro_version"; then
986313a12fdSmrg        cat >&2 <<_LT_EOF
987313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
988313a12fdSmrg$progname: definition of this LT_INIT comes from an older release.
989313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
990313a12fdSmrg$progname: and run autoconf again.
991313a12fdSmrg_LT_EOF
992313a12fdSmrg      else
993313a12fdSmrg        cat >&2 <<_LT_EOF
994313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
995313a12fdSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
996313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
997313a12fdSmrg$progname: and run autoconf again.
998313a12fdSmrg_LT_EOF
999313a12fdSmrg      fi
1000313a12fdSmrg    else
1001313a12fdSmrg      cat >&2 <<_LT_EOF
1002313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1003313a12fdSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1004313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1005313a12fdSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
1006313a12fdSmrg_LT_EOF
1007313a12fdSmrg    fi
1008313a12fdSmrg
1009313a12fdSmrg    exit $EXIT_MISMATCH
1010313a12fdSmrg  fi
1011313a12fdSmrg}
1012313a12fdSmrg
1013313a12fdSmrg
1014313a12fdSmrg# Shorthand for --mode=foo, only valid as the first argument
1015313a12fdSmrgcase $1 in
1016313a12fdSmrgclean|clea|cle|cl)
1017313a12fdSmrg  shift; set dummy --mode clean ${1+"$@"}; shift
1018313a12fdSmrg  ;;
1019313a12fdSmrgcompile|compil|compi|comp|com|co|c)
1020313a12fdSmrg  shift; set dummy --mode compile ${1+"$@"}; shift
1021313a12fdSmrg  ;;
1022313a12fdSmrgexecute|execut|execu|exec|exe|ex|e)
1023313a12fdSmrg  shift; set dummy --mode execute ${1+"$@"}; shift
1024313a12fdSmrg  ;;
1025313a12fdSmrgfinish|finis|fini|fin|fi|f)
1026313a12fdSmrg  shift; set dummy --mode finish ${1+"$@"}; shift
1027313a12fdSmrg  ;;
1028313a12fdSmrginstall|instal|insta|inst|ins|in|i)
1029313a12fdSmrg  shift; set dummy --mode install ${1+"$@"}; shift
1030313a12fdSmrg  ;;
1031313a12fdSmrglink|lin|li|l)
1032313a12fdSmrg  shift; set dummy --mode link ${1+"$@"}; shift
1033313a12fdSmrg  ;;
1034313a12fdSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
1035313a12fdSmrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
1036313a12fdSmrg  ;;
1037313a12fdSmrgesac
103827702724Smrg
103927702724Smrg
1040313a12fdSmrg
1041313a12fdSmrg# Option defaults:
1042313a12fdSmrgopt_debug=:
1043313a12fdSmrgopt_dry_run=false
1044313a12fdSmrgopt_config=false
1045313a12fdSmrgopt_preserve_dup_deps=false
1046313a12fdSmrgopt_features=false
1047313a12fdSmrgopt_finish=false
1048313a12fdSmrgopt_help=false
1049313a12fdSmrgopt_help_all=false
1050313a12fdSmrgopt_silent=:
1051313a12fdSmrgopt_warning=:
1052313a12fdSmrgopt_verbose=:
1053313a12fdSmrgopt_silent=false
1054313a12fdSmrgopt_verbose=false
1055313a12fdSmrg
1056313a12fdSmrg
1057313a12fdSmrg# Parse options once, thoroughly.  This comes as soon as possible in the
1058313a12fdSmrg# script to make things like `--version' happen as quickly as we can.
1059313a12fdSmrg{
1060313a12fdSmrg  # this just eases exit handling
1061313a12fdSmrg  while test $# -gt 0; do
1062e19dfac4Smrg    opt="$1"
1063e19dfac4Smrg    shift
1064e19dfac4Smrg    case $opt in
1065313a12fdSmrg      --debug|-x)	opt_debug='set -x'
1066e19dfac4Smrg			func_echo "enabling shell trace mode"
1067e19dfac4Smrg			$opt_debug
1068e19dfac4Smrg			;;
1069313a12fdSmrg      --dry-run|--dryrun|-n)
1070313a12fdSmrg			opt_dry_run=:
1071e19dfac4Smrg			;;
1072313a12fdSmrg      --config)
1073313a12fdSmrg			opt_config=:
1074313a12fdSmrgfunc_config
1075313a12fdSmrg			;;
1076313a12fdSmrg      --dlopen|-dlopen)
1077313a12fdSmrg			optarg="$1"
1078313a12fdSmrg			opt_dlopen="${opt_dlopen+$opt_dlopen
1079313a12fdSmrg}$optarg"
1080e19dfac4Smrg			shift
1081e19dfac4Smrg			;;
1082e19dfac4Smrg      --preserve-dup-deps)
1083313a12fdSmrg			opt_preserve_dup_deps=:
1084e19dfac4Smrg			;;
1085313a12fdSmrg      --features)
1086313a12fdSmrg			opt_features=:
1087313a12fdSmrgfunc_features
1088313a12fdSmrg			;;
1089313a12fdSmrg      --finish)
1090313a12fdSmrg			opt_finish=:
1091313a12fdSmrgset dummy --mode finish ${1+"$@"}; shift
1092313a12fdSmrg			;;
1093313a12fdSmrg      --help)
1094313a12fdSmrg			opt_help=:
1095313a12fdSmrg			;;
1096313a12fdSmrg      --help-all)
1097313a12fdSmrg			opt_help_all=:
1098313a12fdSmrgopt_help=': help-all'
1099313a12fdSmrg			;;
1100313a12fdSmrg      --mode)
1101313a12fdSmrg			test $# = 0 && func_missing_arg $opt && break
1102313a12fdSmrg			optarg="$1"
1103313a12fdSmrg			opt_mode="$optarg"
1104313a12fdSmrgcase $optarg in
1105313a12fdSmrg  # Valid mode arguments:
1106313a12fdSmrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
1107313a12fdSmrg
1108313a12fdSmrg  # Catch anything else as an error
1109313a12fdSmrg  *) func_error "invalid argument for $opt"
1110313a12fdSmrg     exit_cmd=exit
1111313a12fdSmrg     break
1112313a12fdSmrg     ;;
1113313a12fdSmrgesac
1114313a12fdSmrg			shift
1115313a12fdSmrg			;;
1116313a12fdSmrg      --no-silent|--no-quiet)
1117e19dfac4Smrg			opt_silent=false
1118313a12fdSmrgfunc_append preserve_args " $opt"
1119e19dfac4Smrg			;;
1120313a12fdSmrg      --no-warning|--no-warn)
1121313a12fdSmrg			opt_warning=false
1122313a12fdSmrgfunc_append preserve_args " $opt"
1123313a12fdSmrg			;;
1124313a12fdSmrg      --no-verbose)
1125313a12fdSmrg			opt_verbose=false
1126313a12fdSmrgfunc_append preserve_args " $opt"
1127313a12fdSmrg			;;
1128313a12fdSmrg      --silent|--quiet)
1129313a12fdSmrg			opt_silent=:
1130313a12fdSmrgfunc_append preserve_args " $opt"
1131313a12fdSmrg        opt_verbose=false
1132313a12fdSmrg			;;
1133313a12fdSmrg      --verbose|-v)
1134313a12fdSmrg			opt_verbose=:
1135313a12fdSmrgfunc_append preserve_args " $opt"
1136313a12fdSmrgopt_silent=false
1137313a12fdSmrg			;;
1138313a12fdSmrg      --tag)
1139313a12fdSmrg			test $# = 0 && func_missing_arg $opt && break
1140313a12fdSmrg			optarg="$1"
1141313a12fdSmrg			opt_tag="$optarg"
1142313a12fdSmrgfunc_append preserve_args " $opt $optarg"
1143313a12fdSmrgfunc_enable_tag "$optarg"
1144e19dfac4Smrg			shift
1145e19dfac4Smrg			;;
1146e19dfac4Smrg
1147313a12fdSmrg      -\?|-h)		func_usage				;;
1148313a12fdSmrg      --help)		func_help				;;
1149313a12fdSmrg      --version)	func_version				;;
1150313a12fdSmrg
1151e19dfac4Smrg      # Separate optargs to long options:
1152313a12fdSmrg      --*=*)
1153313a12fdSmrg			func_split_long_opt "$opt"
1154313a12fdSmrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155e19dfac4Smrg			shift
1156e19dfac4Smrg			;;
1157e19dfac4Smrg
1158313a12fdSmrg      # Separate non-argument short options:
1159313a12fdSmrg      -\?*|-h*|-n*|-v*)
1160313a12fdSmrg			func_split_short_opt "$opt"
1161313a12fdSmrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
1162313a12fdSmrg			shift
1163e19dfac4Smrg			;;
1164313a12fdSmrg
1165313a12fdSmrg      --)		break					;;
1166313a12fdSmrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
1167313a12fdSmrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168e19dfac4Smrg    esac
1169e19dfac4Smrg  done
1170e19dfac4Smrg
1171313a12fdSmrg  # Validate options:
1172313a12fdSmrg
1173313a12fdSmrg  # save first non-option argument
1174313a12fdSmrg  if test "$#" -gt 0; then
1175313a12fdSmrg    nonopt="$opt"
1176313a12fdSmrg    shift
1177313a12fdSmrg  fi
1178313a12fdSmrg
1179313a12fdSmrg  # preserve --debug
1180313a12fdSmrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181e19dfac4Smrg
1182e19dfac4Smrg  case $host in
1183e19dfac4Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184e19dfac4Smrg      # don't eliminate duplications in $postdeps and $predeps
1185e19dfac4Smrg      opt_duplicate_compiler_generated_deps=:
118627702724Smrg      ;;
118727702724Smrg    *)
1188313a12fdSmrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189e19dfac4Smrg      ;;
1190e19dfac4Smrg  esac
119127702724Smrg
1192313a12fdSmrg  $opt_help || {
1193313a12fdSmrg    # Sanity checks first:
1194313a12fdSmrg    func_check_version_match
1195e19dfac4Smrg
1196313a12fdSmrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1197313a12fdSmrg      func_fatal_configuration "not configured to build any kind of library"
1198e19dfac4Smrg    fi
1199e19dfac4Smrg
1200313a12fdSmrg    # Darwin sucks
1201313a12fdSmrg    eval std_shrext=\"$shrext_cmds\"
1202e19dfac4Smrg
1203313a12fdSmrg    # Only execute mode is allowed to have -dlopen flags.
1204313a12fdSmrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
1205313a12fdSmrg      func_error "unrecognized option \`-dlopen'"
1206313a12fdSmrg      $ECHO "$help" 1>&2
1207313a12fdSmrg      exit $EXIT_FAILURE
1208313a12fdSmrg    fi
120927702724Smrg
1210313a12fdSmrg    # Change the help message to a mode-specific one.
1211313a12fdSmrg    generic_help="$help"
1212313a12fdSmrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
1213313a12fdSmrg  }
1214e19dfac4Smrg
1215e19dfac4Smrg
1216313a12fdSmrg  # Bail if the options were screwed
1217313a12fdSmrg  $exit_cmd $EXIT_FAILURE
1218313a12fdSmrg}
1219e19dfac4Smrg
1220e19dfac4Smrg
122127702724Smrg
122227702724Smrg
1223313a12fdSmrg## ----------- ##
1224313a12fdSmrg##    Main.    ##
1225313a12fdSmrg## ----------- ##
122627702724Smrg
1227e19dfac4Smrg# func_lalib_p file
1228e19dfac4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
1230e19dfac4Smrg# determined imposters.
1231e19dfac4Smrgfunc_lalib_p ()
1232e19dfac4Smrg{
1233e19dfac4Smrg    test -f "$1" &&
1234e19dfac4Smrg      $SED -e 4q "$1" 2>/dev/null \
1235e19dfac4Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236e19dfac4Smrg}
123727702724Smrg
1238e19dfac4Smrg# func_lalib_unsafe_p file
1239e19dfac4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240e19dfac4Smrg# This function implements the same check as func_lalib_p without
1241e19dfac4Smrg# resorting to external programs.  To this end, it redirects stdin and
1242e19dfac4Smrg# closes it afterwards, without saving the original file descriptor.
1243e19dfac4Smrg# As a safety measure, use it only where a negative result would be
1244e19dfac4Smrg# fatal anyway.  Works if `file' does not exist.
1245e19dfac4Smrgfunc_lalib_unsafe_p ()
1246e19dfac4Smrg{
1247e19dfac4Smrg    lalib_p=no
1248e19dfac4Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249e19dfac4Smrg	for lalib_p_l in 1 2 3 4
1250e19dfac4Smrg	do
1251e19dfac4Smrg	    read lalib_p_line
1252e19dfac4Smrg	    case "$lalib_p_line" in
1253e19dfac4Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254e19dfac4Smrg	    esac
1255e19dfac4Smrg	done
1256e19dfac4Smrg	exec 0<&5 5<&-
1257e19dfac4Smrg    fi
1258e19dfac4Smrg    test "$lalib_p" = yes
1259e19dfac4Smrg}
126027702724Smrg
1261e19dfac4Smrg# func_ltwrapper_script_p file
1262e19dfac4Smrg# True iff FILE is a libtool wrapper script
1263e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
1264e19dfac4Smrg# determined imposters.
1265e19dfac4Smrgfunc_ltwrapper_script_p ()
1266e19dfac4Smrg{
1267e19dfac4Smrg    func_lalib_p "$1"
1268e19dfac4Smrg}
126927702724Smrg
1270e19dfac4Smrg# func_ltwrapper_executable_p file
1271e19dfac4Smrg# True iff FILE is a libtool wrapper executable
1272e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
1273e19dfac4Smrg# determined imposters.
1274e19dfac4Smrgfunc_ltwrapper_executable_p ()
1275e19dfac4Smrg{
1276e19dfac4Smrg    func_ltwrapper_exec_suffix=
1277e19dfac4Smrg    case $1 in
1278e19dfac4Smrg    *.exe) ;;
1279e19dfac4Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280e19dfac4Smrg    esac
1281e19dfac4Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282e19dfac4Smrg}
128327702724Smrg
1284e19dfac4Smrg# func_ltwrapper_scriptname file
1285e19dfac4Smrg# Assumes file is an ltwrapper_executable
1286e19dfac4Smrg# uses $file to determine the appropriate filename for a
1287e19dfac4Smrg# temporary ltwrapper_script.
1288e19dfac4Smrgfunc_ltwrapper_scriptname ()
1289e19dfac4Smrg{
1290313a12fdSmrg    func_dirname_and_basename "$1" "" "."
1291313a12fdSmrg    func_stripname '' '.exe' "$func_basename_result"
1292313a12fdSmrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293e19dfac4Smrg}
129427702724Smrg
1295e19dfac4Smrg# func_ltwrapper_p file
1296e19dfac4Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1297e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
1298e19dfac4Smrg# determined imposters.
1299e19dfac4Smrgfunc_ltwrapper_p ()
1300e19dfac4Smrg{
1301e19dfac4Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302e19dfac4Smrg}
130327702724Smrg
130427702724Smrg
1305e19dfac4Smrg# func_execute_cmds commands fail_cmd
1306e19dfac4Smrg# Execute tilde-delimited COMMANDS.
1307e19dfac4Smrg# If FAIL_CMD is given, eval that upon failure.
1308e19dfac4Smrg# FAIL_CMD may read-access the current command in variable CMD!
1309e19dfac4Smrgfunc_execute_cmds ()
1310e19dfac4Smrg{
1311e19dfac4Smrg    $opt_debug
1312e19dfac4Smrg    save_ifs=$IFS; IFS='~'
1313e19dfac4Smrg    for cmd in $1; do
1314e19dfac4Smrg      IFS=$save_ifs
1315e19dfac4Smrg      eval cmd=\"$cmd\"
1316e19dfac4Smrg      func_show_eval "$cmd" "${2-:}"
1317e19dfac4Smrg    done
1318e19dfac4Smrg    IFS=$save_ifs
1319e19dfac4Smrg}
1320e19dfac4Smrg
1321e19dfac4Smrg
1322e19dfac4Smrg# func_source file
1323e19dfac4Smrg# Source FILE, adding directory component if necessary.
1324e19dfac4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325e19dfac4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326e19dfac4Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327e19dfac4Smrg# `FILE.' does not work on cygwin managed mounts.
1328e19dfac4Smrgfunc_source ()
1329e19dfac4Smrg{
1330e19dfac4Smrg    $opt_debug
1331e19dfac4Smrg    case $1 in
1332e19dfac4Smrg    */* | *\\*)	. "$1" ;;
1333e19dfac4Smrg    *)		. "./$1" ;;
1334e19dfac4Smrg    esac
1335e19dfac4Smrg}
1336e19dfac4Smrg
1337e19dfac4Smrg
1338313a12fdSmrg# func_resolve_sysroot PATH
1339313a12fdSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
1340313a12fdSmrg# func_resolve_sysroot_result
1341313a12fdSmrgfunc_resolve_sysroot ()
1342313a12fdSmrg{
1343313a12fdSmrg  func_resolve_sysroot_result=$1
1344313a12fdSmrg  case $func_resolve_sysroot_result in
1345313a12fdSmrg  =*)
1346313a12fdSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
1347313a12fdSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1348313a12fdSmrg    ;;
1349313a12fdSmrg  esac
1350313a12fdSmrg}
1351313a12fdSmrg
1352313a12fdSmrg# func_replace_sysroot PATH
1353313a12fdSmrg# If PATH begins with the sysroot, replace it with = and
1354313a12fdSmrg# store the result into func_replace_sysroot_result.
1355313a12fdSmrgfunc_replace_sysroot ()
1356313a12fdSmrg{
1357313a12fdSmrg  case "$lt_sysroot:$1" in
1358313a12fdSmrg  ?*:"$lt_sysroot"*)
1359313a12fdSmrg    func_stripname "$lt_sysroot" '' "$1"
1360313a12fdSmrg    func_replace_sysroot_result="=$func_stripname_result"
1361313a12fdSmrg    ;;
1362313a12fdSmrg  *)
1363313a12fdSmrg    # Including no sysroot.
1364313a12fdSmrg    func_replace_sysroot_result=$1
1365313a12fdSmrg    ;;
1366313a12fdSmrg  esac
1367313a12fdSmrg}
1368313a12fdSmrg
1369e19dfac4Smrg# func_infer_tag arg
1370e19dfac4Smrg# Infer tagged configuration to use if any are available and
1371e19dfac4Smrg# if one wasn't chosen via the "--tag" command line option.
1372e19dfac4Smrg# Only attempt this if the compiler in the base compile
1373e19dfac4Smrg# command doesn't match the default compiler.
1374e19dfac4Smrg# arg is usually of the form 'gcc ...'
1375e19dfac4Smrgfunc_infer_tag ()
1376e19dfac4Smrg{
1377e19dfac4Smrg    $opt_debug
1378e19dfac4Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1379e19dfac4Smrg      CC_quoted=
1380e19dfac4Smrg      for arg in $CC; do
1381313a12fdSmrg	func_append_quoted CC_quoted "$arg"
1382e19dfac4Smrg      done
1383313a12fdSmrg      CC_expanded=`func_echo_all $CC`
1384313a12fdSmrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385e19dfac4Smrg      case $@ in
1386e19dfac4Smrg      # Blanks in the command may have been stripped by the calling shell,
1387e19dfac4Smrg      # but not from the CC environment variable when configure was run.
1388313a12fdSmrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1389313a12fdSmrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390e19dfac4Smrg      # Blanks at the start of $base_compile will cause this to fail
1391e19dfac4Smrg      # if we don't check for them as well.
1392e19dfac4Smrg      *)
1393e19dfac4Smrg	for z in $available_tags; do
1394e19dfac4Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395e19dfac4Smrg	    # Evaluate the configuration.
1396e19dfac4Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397e19dfac4Smrg	    CC_quoted=
1398e19dfac4Smrg	    for arg in $CC; do
1399e19dfac4Smrg	      # Double-quote args containing other shell metacharacters.
1400313a12fdSmrg	      func_append_quoted CC_quoted "$arg"
1401e19dfac4Smrg	    done
1402313a12fdSmrg	    CC_expanded=`func_echo_all $CC`
1403313a12fdSmrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404e19dfac4Smrg	    case "$@ " in
1405313a12fdSmrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1406313a12fdSmrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407e19dfac4Smrg	      # The compiler in the base compile command matches
1408e19dfac4Smrg	      # the one in the tagged configuration.
1409e19dfac4Smrg	      # Assume this is the tagged configuration we want.
1410e19dfac4Smrg	      tagname=$z
1411e19dfac4Smrg	      break
1412e19dfac4Smrg	      ;;
141327702724Smrg	    esac
1414e19dfac4Smrg	  fi
1415e19dfac4Smrg	done
1416e19dfac4Smrg	# If $tagname still isn't set, then no tagged configuration
1417e19dfac4Smrg	# was found and let the user know that the "--tag" command
1418e19dfac4Smrg	# line option must be used.
1419e19dfac4Smrg	if test -z "$tagname"; then
1420e19dfac4Smrg	  func_echo "unable to infer tagged configuration"
1421e19dfac4Smrg	  func_fatal_error "specify a tag with \`--tag'"
1422e19dfac4Smrg#	else
1423e19dfac4Smrg#	  func_verbose "using $tagname tagged configuration"
1424e19dfac4Smrg	fi
1425e19dfac4Smrg	;;
1426e19dfac4Smrg      esac
1427e19dfac4Smrg    fi
1428e19dfac4Smrg}
1429e19dfac4Smrg
1430e19dfac4Smrg
1431e19dfac4Smrg
1432e19dfac4Smrg# func_write_libtool_object output_name pic_name nonpic_name
1433e19dfac4Smrg# Create a libtool object file (analogous to a ".la" file),
1434e19dfac4Smrg# but don't create it if we're doing a dry run.
1435e19dfac4Smrgfunc_write_libtool_object ()
1436e19dfac4Smrg{
1437e19dfac4Smrg    write_libobj=${1}
1438e19dfac4Smrg    if test "$build_libtool_libs" = yes; then
1439e19dfac4Smrg      write_lobj=\'${2}\'
1440e19dfac4Smrg    else
1441e19dfac4Smrg      write_lobj=none
1442e19dfac4Smrg    fi
1443e19dfac4Smrg
1444e19dfac4Smrg    if test "$build_old_libs" = yes; then
1445e19dfac4Smrg      write_oldobj=\'${3}\'
1446e19dfac4Smrg    else
1447e19dfac4Smrg      write_oldobj=none
1448e19dfac4Smrg    fi
1449e19dfac4Smrg
1450e19dfac4Smrg    $opt_dry_run || {
1451e19dfac4Smrg      cat >${write_libobj}T <<EOF
1452e19dfac4Smrg# $write_libobj - a libtool object file
1453e19dfac4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454e19dfac4Smrg#
1455e19dfac4Smrg# Please DO NOT delete this file!
1456e19dfac4Smrg# It is necessary for linking the library.
1457e19dfac4Smrg
1458e19dfac4Smrg# Name of the PIC object.
1459e19dfac4Smrgpic_object=$write_lobj
1460e19dfac4Smrg
1461e19dfac4Smrg# Name of the non-PIC object
1462e19dfac4Smrgnon_pic_object=$write_oldobj
1463e19dfac4Smrg
1464e19dfac4SmrgEOF
1465e19dfac4Smrg      $MV "${write_libobj}T" "${write_libobj}"
1466e19dfac4Smrg    }
1467e19dfac4Smrg}
1468e19dfac4Smrg
1469313a12fdSmrg
1470313a12fdSmrg##################################################
1471313a12fdSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1472313a12fdSmrg##################################################
1473313a12fdSmrg
1474313a12fdSmrg# func_convert_core_file_wine_to_w32 ARG
1475313a12fdSmrg# Helper function used by file name conversion functions when $build is *nix,
1476313a12fdSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1477313a12fdSmrg# correctly configured wine environment available, with the winepath program
1478313a12fdSmrg# in $build's $PATH.
1479313a12fdSmrg#
1480313a12fdSmrg# ARG is the $build file name to be converted to w32 format.
1481313a12fdSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1482313a12fdSmrg# be empty on error (or when ARG is empty)
1483313a12fdSmrgfunc_convert_core_file_wine_to_w32 ()
1484313a12fdSmrg{
1485313a12fdSmrg  $opt_debug
1486313a12fdSmrg  func_convert_core_file_wine_to_w32_result="$1"
1487313a12fdSmrg  if test -n "$1"; then
1488313a12fdSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
1489313a12fdSmrg    # are forced to check the contents of stdout. On the other hand, if the
1490313a12fdSmrg    # command is not found, the shell will set an exit code of 127 and print
1491313a12fdSmrg    # *an error message* to stdout. So we must check for both error code of
1492313a12fdSmrg    # zero AND non-empty stdout, which explains the odd construction:
1493313a12fdSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
1494313a12fdSmrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1495313a12fdSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
1496313a12fdSmrg        $SED -e "$lt_sed_naive_backslashify"`
1497313a12fdSmrg    else
1498313a12fdSmrg      func_convert_core_file_wine_to_w32_result=
1499313a12fdSmrg    fi
1500313a12fdSmrg  fi
1501313a12fdSmrg}
1502313a12fdSmrg# end: func_convert_core_file_wine_to_w32
1503313a12fdSmrg
1504313a12fdSmrg
1505313a12fdSmrg# func_convert_core_path_wine_to_w32 ARG
1506313a12fdSmrg# Helper function used by path conversion functions when $build is *nix, and
1507313a12fdSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1508313a12fdSmrg# configured wine environment available, with the winepath program in $build's
1509313a12fdSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
1510313a12fdSmrg#
1511313a12fdSmrg# ARG is path to be converted from $build format to win32.
1512313a12fdSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
1513313a12fdSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
1514313a12fdSmrg# are convertible, then the result may be empty.
1515313a12fdSmrgfunc_convert_core_path_wine_to_w32 ()
1516313a12fdSmrg{
1517313a12fdSmrg  $opt_debug
1518313a12fdSmrg  # unfortunately, winepath doesn't convert paths, only file names
1519313a12fdSmrg  func_convert_core_path_wine_to_w32_result=""
1520313a12fdSmrg  if test -n "$1"; then
1521313a12fdSmrg    oldIFS=$IFS
1522313a12fdSmrg    IFS=:
1523313a12fdSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
1524313a12fdSmrg      IFS=$oldIFS
1525313a12fdSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
1526313a12fdSmrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1527313a12fdSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
1528313a12fdSmrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1529313a12fdSmrg        else
1530313a12fdSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1531313a12fdSmrg        fi
1532313a12fdSmrg      fi
1533313a12fdSmrg    done
1534313a12fdSmrg    IFS=$oldIFS
1535313a12fdSmrg  fi
1536313a12fdSmrg}
1537313a12fdSmrg# end: func_convert_core_path_wine_to_w32
1538313a12fdSmrg
1539313a12fdSmrg
1540313a12fdSmrg# func_cygpath ARGS...
1541313a12fdSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1542313a12fdSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1543313a12fdSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1544313a12fdSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
1545313a12fdSmrg# file name or path is assumed to be in w32 format, as previously converted
1546313a12fdSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1547313a12fdSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
1548313a12fdSmrg# Cygwin format). Returns an empty string on error.
1549313a12fdSmrg#
1550313a12fdSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
1551313a12fdSmrg# be converted.
1552313a12fdSmrg#
1553313a12fdSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1554313a12fdSmrg# environment variable; do not put it in $PATH.
1555313a12fdSmrgfunc_cygpath ()
1556313a12fdSmrg{
1557313a12fdSmrg  $opt_debug
1558313a12fdSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1559313a12fdSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1560313a12fdSmrg    if test "$?" -ne 0; then
1561313a12fdSmrg      # on failure, ensure result is empty
1562313a12fdSmrg      func_cygpath_result=
1563313a12fdSmrg    fi
1564313a12fdSmrg  else
1565313a12fdSmrg    func_cygpath_result=
1566313a12fdSmrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1567313a12fdSmrg  fi
1568313a12fdSmrg}
1569313a12fdSmrg#end: func_cygpath
1570313a12fdSmrg
1571313a12fdSmrg
1572313a12fdSmrg# func_convert_core_msys_to_w32 ARG
1573313a12fdSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
1574313a12fdSmrg# result in func_convert_core_msys_to_w32_result.
1575313a12fdSmrgfunc_convert_core_msys_to_w32 ()
1576313a12fdSmrg{
1577313a12fdSmrg  $opt_debug
1578313a12fdSmrg  # awkward: cmd appends spaces to result
1579313a12fdSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
1580313a12fdSmrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1581313a12fdSmrg}
1582313a12fdSmrg#end: func_convert_core_msys_to_w32
1583313a12fdSmrg
1584313a12fdSmrg
1585313a12fdSmrg# func_convert_file_check ARG1 ARG2
1586313a12fdSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
1587313a12fdSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
1588313a12fdSmrg# func_to_host_file_result to ARG1).
1589313a12fdSmrgfunc_convert_file_check ()
1590313a12fdSmrg{
1591313a12fdSmrg  $opt_debug
1592313a12fdSmrg  if test -z "$2" && test -n "$1" ; then
1593313a12fdSmrg    func_error "Could not determine host file name corresponding to"
1594313a12fdSmrg    func_error "  \`$1'"
1595313a12fdSmrg    func_error "Continuing, but uninstalled executables may not work."
1596313a12fdSmrg    # Fallback:
1597313a12fdSmrg    func_to_host_file_result="$1"
1598313a12fdSmrg  fi
1599313a12fdSmrg}
1600313a12fdSmrg# end func_convert_file_check
1601313a12fdSmrg
1602313a12fdSmrg
1603313a12fdSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1604313a12fdSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
1605313a12fdSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1606313a12fdSmrg# func_to_host_file_result to a simplistic fallback value (see below).
1607313a12fdSmrgfunc_convert_path_check ()
1608313a12fdSmrg{
1609313a12fdSmrg  $opt_debug
1610313a12fdSmrg  if test -z "$4" && test -n "$3"; then
1611313a12fdSmrg    func_error "Could not determine the host path corresponding to"
1612313a12fdSmrg    func_error "  \`$3'"
1613313a12fdSmrg    func_error "Continuing, but uninstalled executables may not work."
1614313a12fdSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
1615313a12fdSmrg    # should not be "improved".  See libtool.info.
1616313a12fdSmrg    if test "x$1" != "x$2"; then
1617313a12fdSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
1618313a12fdSmrg      func_to_host_path_result=`echo "$3" |
1619313a12fdSmrg        $SED -e "$lt_replace_pathsep_chars"`
1620313a12fdSmrg    else
1621313a12fdSmrg      func_to_host_path_result="$3"
1622313a12fdSmrg    fi
1623313a12fdSmrg  fi
1624313a12fdSmrg}
1625313a12fdSmrg# end func_convert_path_check
1626313a12fdSmrg
1627313a12fdSmrg
1628313a12fdSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1629313a12fdSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1630313a12fdSmrg# and appending REPL if ORIG matches BACKPAT.
1631313a12fdSmrgfunc_convert_path_front_back_pathsep ()
1632313a12fdSmrg{
1633313a12fdSmrg  $opt_debug
1634313a12fdSmrg  case $4 in
1635313a12fdSmrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1636313a12fdSmrg    ;;
1637313a12fdSmrg  esac
1638313a12fdSmrg  case $4 in
1639313a12fdSmrg  $2 ) func_append func_to_host_path_result "$3"
1640313a12fdSmrg    ;;
1641313a12fdSmrg  esac
1642313a12fdSmrg}
1643313a12fdSmrg# end func_convert_path_front_back_pathsep
1644313a12fdSmrg
1645313a12fdSmrg
1646313a12fdSmrg##################################################
1647313a12fdSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
1648313a12fdSmrg##################################################
1649313a12fdSmrg# invoked via `$to_host_file_cmd ARG'
1650313a12fdSmrg#
1651313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format.
1652313a12fdSmrg# Result will be available in $func_to_host_file_result.
1653313a12fdSmrg
1654313a12fdSmrg
1655313a12fdSmrg# func_to_host_file ARG
1656313a12fdSmrg# Converts the file name ARG from $build format to $host format. Return result
1657313a12fdSmrg# in func_to_host_file_result.
1658313a12fdSmrgfunc_to_host_file ()
1659313a12fdSmrg{
1660313a12fdSmrg  $opt_debug
1661313a12fdSmrg  $to_host_file_cmd "$1"
1662313a12fdSmrg}
1663313a12fdSmrg# end func_to_host_file
1664313a12fdSmrg
1665313a12fdSmrg
1666313a12fdSmrg# func_to_tool_file ARG LAZY
1667313a12fdSmrg# converts the file name ARG from $build format to toolchain format. Return
1668313a12fdSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
1669313a12fdSmrg# in (the comma separated) LAZY, no conversion takes place.
1670313a12fdSmrgfunc_to_tool_file ()
1671313a12fdSmrg{
1672313a12fdSmrg  $opt_debug
1673313a12fdSmrg  case ,$2, in
1674313a12fdSmrg    *,"$to_tool_file_cmd",*)
1675313a12fdSmrg      func_to_tool_file_result=$1
1676313a12fdSmrg      ;;
1677313a12fdSmrg    *)
1678313a12fdSmrg      $to_tool_file_cmd "$1"
1679313a12fdSmrg      func_to_tool_file_result=$func_to_host_file_result
1680313a12fdSmrg      ;;
1681313a12fdSmrg  esac
1682313a12fdSmrg}
1683313a12fdSmrg# end func_to_tool_file
1684313a12fdSmrg
1685313a12fdSmrg
1686313a12fdSmrg# func_convert_file_noop ARG
1687313a12fdSmrg# Copy ARG to func_to_host_file_result.
1688313a12fdSmrgfunc_convert_file_noop ()
1689313a12fdSmrg{
1690313a12fdSmrg  func_to_host_file_result="$1"
1691313a12fdSmrg}
1692313a12fdSmrg# end func_convert_file_noop
1693313a12fdSmrg
1694313a12fdSmrg
1695313a12fdSmrg# func_convert_file_msys_to_w32 ARG
1696313a12fdSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1697313a12fdSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1698313a12fdSmrg# func_to_host_file_result.
1699313a12fdSmrgfunc_convert_file_msys_to_w32 ()
1700313a12fdSmrg{
1701313a12fdSmrg  $opt_debug
1702313a12fdSmrg  func_to_host_file_result="$1"
1703313a12fdSmrg  if test -n "$1"; then
1704313a12fdSmrg    func_convert_core_msys_to_w32 "$1"
1705313a12fdSmrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1706313a12fdSmrg  fi
1707313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1708313a12fdSmrg}
1709313a12fdSmrg# end func_convert_file_msys_to_w32
1710313a12fdSmrg
1711313a12fdSmrg
1712313a12fdSmrg# func_convert_file_cygwin_to_w32 ARG
1713313a12fdSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
1714313a12fdSmrg# func_to_host_file_result.
1715313a12fdSmrgfunc_convert_file_cygwin_to_w32 ()
1716313a12fdSmrg{
1717313a12fdSmrg  $opt_debug
1718313a12fdSmrg  func_to_host_file_result="$1"
1719313a12fdSmrg  if test -n "$1"; then
1720313a12fdSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1721313a12fdSmrg    # LT_CYGPATH in this case.
1722313a12fdSmrg    func_to_host_file_result=`cygpath -m "$1"`
1723313a12fdSmrg  fi
1724313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1725313a12fdSmrg}
1726313a12fdSmrg# end func_convert_file_cygwin_to_w32
1727313a12fdSmrg
1728313a12fdSmrg
1729313a12fdSmrg# func_convert_file_nix_to_w32 ARG
1730313a12fdSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1731313a12fdSmrg# and a working winepath. Returns result in func_to_host_file_result.
1732313a12fdSmrgfunc_convert_file_nix_to_w32 ()
1733313a12fdSmrg{
1734313a12fdSmrg  $opt_debug
1735313a12fdSmrg  func_to_host_file_result="$1"
1736313a12fdSmrg  if test -n "$1"; then
1737313a12fdSmrg    func_convert_core_file_wine_to_w32 "$1"
1738313a12fdSmrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1739313a12fdSmrg  fi
1740313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1741313a12fdSmrg}
1742313a12fdSmrg# end func_convert_file_nix_to_w32
1743313a12fdSmrg
1744313a12fdSmrg
1745313a12fdSmrg# func_convert_file_msys_to_cygwin ARG
1746313a12fdSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1747313a12fdSmrg# Returns result in func_to_host_file_result.
1748313a12fdSmrgfunc_convert_file_msys_to_cygwin ()
1749313a12fdSmrg{
1750313a12fdSmrg  $opt_debug
1751313a12fdSmrg  func_to_host_file_result="$1"
1752313a12fdSmrg  if test -n "$1"; then
1753313a12fdSmrg    func_convert_core_msys_to_w32 "$1"
1754313a12fdSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
1755313a12fdSmrg    func_to_host_file_result="$func_cygpath_result"
1756313a12fdSmrg  fi
1757313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1758313a12fdSmrg}
1759313a12fdSmrg# end func_convert_file_msys_to_cygwin
1760313a12fdSmrg
1761313a12fdSmrg
1762313a12fdSmrg# func_convert_file_nix_to_cygwin ARG
1763313a12fdSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1764313a12fdSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1765313a12fdSmrg# in func_to_host_file_result.
1766313a12fdSmrgfunc_convert_file_nix_to_cygwin ()
1767313a12fdSmrg{
1768313a12fdSmrg  $opt_debug
1769313a12fdSmrg  func_to_host_file_result="$1"
1770313a12fdSmrg  if test -n "$1"; then
1771313a12fdSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1772313a12fdSmrg    func_convert_core_file_wine_to_w32 "$1"
1773313a12fdSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
1774313a12fdSmrg    func_to_host_file_result="$func_cygpath_result"
1775313a12fdSmrg  fi
1776313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1777313a12fdSmrg}
1778313a12fdSmrg# end func_convert_file_nix_to_cygwin
1779313a12fdSmrg
1780313a12fdSmrg
1781313a12fdSmrg#############################################
1782313a12fdSmrg# $build to $host PATH CONVERSION FUNCTIONS #
1783313a12fdSmrg#############################################
1784313a12fdSmrg# invoked via `$to_host_path_cmd ARG'
1785313a12fdSmrg#
1786313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format.
1787313a12fdSmrg# The result will be available in $func_to_host_path_result.
1788313a12fdSmrg#
1789313a12fdSmrg# Path separators are also converted from $build format to $host format.  If
1790313a12fdSmrg# ARG begins or ends with a path separator character, it is preserved (but
1791313a12fdSmrg# converted to $host format) on output.
1792313a12fdSmrg#
1793313a12fdSmrg# All path conversion functions are named using the following convention:
1794313a12fdSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
1795313a12fdSmrg#   path conversion function         : func_convert_path_X_to_Y ()
1796313a12fdSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
1797313a12fdSmrg# same.  If conversion functions are added for new $build/$host combinations,
1798313a12fdSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1799313a12fdSmrg# will break.
1800313a12fdSmrg
1801313a12fdSmrg
1802313a12fdSmrg# func_init_to_host_path_cmd
1803313a12fdSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1804313a12fdSmrg# appropriate value, based on the value of $to_host_file_cmd.
1805313a12fdSmrgto_host_path_cmd=
1806313a12fdSmrgfunc_init_to_host_path_cmd ()
1807313a12fdSmrg{
1808313a12fdSmrg  $opt_debug
1809313a12fdSmrg  if test -z "$to_host_path_cmd"; then
1810313a12fdSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
1811313a12fdSmrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1812313a12fdSmrg  fi
1813313a12fdSmrg}
1814313a12fdSmrg
1815313a12fdSmrg
1816313a12fdSmrg# func_to_host_path ARG
1817313a12fdSmrg# Converts the path ARG from $build format to $host format. Return result
1818313a12fdSmrg# in func_to_host_path_result.
1819313a12fdSmrgfunc_to_host_path ()
1820313a12fdSmrg{
1821313a12fdSmrg  $opt_debug
1822313a12fdSmrg  func_init_to_host_path_cmd
1823313a12fdSmrg  $to_host_path_cmd "$1"
1824313a12fdSmrg}
1825313a12fdSmrg# end func_to_host_path
1826313a12fdSmrg
1827313a12fdSmrg
1828313a12fdSmrg# func_convert_path_noop ARG
1829313a12fdSmrg# Copy ARG to func_to_host_path_result.
1830313a12fdSmrgfunc_convert_path_noop ()
1831313a12fdSmrg{
1832313a12fdSmrg  func_to_host_path_result="$1"
1833313a12fdSmrg}
1834313a12fdSmrg# end func_convert_path_noop
1835313a12fdSmrg
1836313a12fdSmrg
1837313a12fdSmrg# func_convert_path_msys_to_w32 ARG
1838313a12fdSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1839313a12fdSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1840313a12fdSmrg# func_to_host_path_result.
1841313a12fdSmrgfunc_convert_path_msys_to_w32 ()
1842313a12fdSmrg{
1843313a12fdSmrg  $opt_debug
1844313a12fdSmrg  func_to_host_path_result="$1"
1845313a12fdSmrg  if test -n "$1"; then
1846313a12fdSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
1847313a12fdSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1848313a12fdSmrg    # and winepath ignores them completely.
1849313a12fdSmrg    func_stripname : : "$1"
1850313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
1851313a12fdSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1852313a12fdSmrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1853313a12fdSmrg    func_convert_path_check : ";" \
1854313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1855313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1856313a12fdSmrg  fi
1857313a12fdSmrg}
1858313a12fdSmrg# end func_convert_path_msys_to_w32
1859313a12fdSmrg
1860313a12fdSmrg
1861313a12fdSmrg# func_convert_path_cygwin_to_w32 ARG
1862313a12fdSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
1863313a12fdSmrg# func_to_host_file_result.
1864313a12fdSmrgfunc_convert_path_cygwin_to_w32 ()
1865313a12fdSmrg{
1866313a12fdSmrg  $opt_debug
1867313a12fdSmrg  func_to_host_path_result="$1"
1868313a12fdSmrg  if test -n "$1"; then
1869313a12fdSmrg    # See func_convert_path_msys_to_w32:
1870313a12fdSmrg    func_stripname : : "$1"
1871313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
1872313a12fdSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1873313a12fdSmrg    func_convert_path_check : ";" \
1874313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1875313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1876313a12fdSmrg  fi
1877313a12fdSmrg}
1878313a12fdSmrg# end func_convert_path_cygwin_to_w32
1879313a12fdSmrg
1880313a12fdSmrg
1881313a12fdSmrg# func_convert_path_nix_to_w32 ARG
1882313a12fdSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1883313a12fdSmrg# a working winepath.  Returns result in func_to_host_file_result.
1884313a12fdSmrgfunc_convert_path_nix_to_w32 ()
1885313a12fdSmrg{
1886313a12fdSmrg  $opt_debug
1887313a12fdSmrg  func_to_host_path_result="$1"
1888313a12fdSmrg  if test -n "$1"; then
1889313a12fdSmrg    # See func_convert_path_msys_to_w32:
1890313a12fdSmrg    func_stripname : : "$1"
1891313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
1892313a12fdSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1893313a12fdSmrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1894313a12fdSmrg    func_convert_path_check : ";" \
1895313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1896313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1897313a12fdSmrg  fi
1898313a12fdSmrg}
1899313a12fdSmrg# end func_convert_path_nix_to_w32
1900313a12fdSmrg
1901313a12fdSmrg
1902313a12fdSmrg# func_convert_path_msys_to_cygwin ARG
1903313a12fdSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1904313a12fdSmrg# Returns result in func_to_host_file_result.
1905313a12fdSmrgfunc_convert_path_msys_to_cygwin ()
1906313a12fdSmrg{
1907313a12fdSmrg  $opt_debug
1908313a12fdSmrg  func_to_host_path_result="$1"
1909313a12fdSmrg  if test -n "$1"; then
1910313a12fdSmrg    # See func_convert_path_msys_to_w32:
1911313a12fdSmrg    func_stripname : : "$1"
1912313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
1913313a12fdSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1914313a12fdSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
1915313a12fdSmrg    func_to_host_path_result="$func_cygpath_result"
1916313a12fdSmrg    func_convert_path_check : : \
1917313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1918313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1919313a12fdSmrg  fi
1920313a12fdSmrg}
1921313a12fdSmrg# end func_convert_path_msys_to_cygwin
1922313a12fdSmrg
1923313a12fdSmrg
1924313a12fdSmrg# func_convert_path_nix_to_cygwin ARG
1925313a12fdSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1926313a12fdSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1927313a12fdSmrg# func_to_host_file_result.
1928313a12fdSmrgfunc_convert_path_nix_to_cygwin ()
1929313a12fdSmrg{
1930313a12fdSmrg  $opt_debug
1931313a12fdSmrg  func_to_host_path_result="$1"
1932313a12fdSmrg  if test -n "$1"; then
1933313a12fdSmrg    # Remove leading and trailing path separator characters from
1934313a12fdSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
1935313a12fdSmrg    # into '.;' and ';.', and winepath ignores them completely.
1936313a12fdSmrg    func_stripname : : "$1"
1937313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
1938313a12fdSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1939313a12fdSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
1940313a12fdSmrg    func_to_host_path_result="$func_cygpath_result"
1941313a12fdSmrg    func_convert_path_check : : \
1942313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1943313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1944313a12fdSmrg  fi
1945313a12fdSmrg}
1946313a12fdSmrg# end func_convert_path_nix_to_cygwin
1947313a12fdSmrg
1948313a12fdSmrg
1949e19dfac4Smrg# func_mode_compile arg...
1950e19dfac4Smrgfunc_mode_compile ()
1951e19dfac4Smrg{
1952e19dfac4Smrg    $opt_debug
1953e19dfac4Smrg    # Get the compilation command and the source file.
1954e19dfac4Smrg    base_compile=
1955e19dfac4Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956e19dfac4Smrg    suppress_opt=yes
1957e19dfac4Smrg    suppress_output=
1958e19dfac4Smrg    arg_mode=normal
1959e19dfac4Smrg    libobj=
1960e19dfac4Smrg    later=
1961e19dfac4Smrg    pie_flag=
1962e19dfac4Smrg
1963e19dfac4Smrg    for arg
1964e19dfac4Smrg    do
1965e19dfac4Smrg      case $arg_mode in
1966e19dfac4Smrg      arg  )
1967e19dfac4Smrg	# do not "continue".  Instead, add this to base_compile
1968e19dfac4Smrg	lastarg="$arg"
1969e19dfac4Smrg	arg_mode=normal
1970e19dfac4Smrg	;;
1971e19dfac4Smrg
1972e19dfac4Smrg      target )
1973e19dfac4Smrg	libobj="$arg"
1974e19dfac4Smrg	arg_mode=normal
1975e19dfac4Smrg	continue
1976e19dfac4Smrg	;;
1977e19dfac4Smrg
1978e19dfac4Smrg      normal )
1979e19dfac4Smrg	# Accept any command-line options.
1980e19dfac4Smrg	case $arg in
1981e19dfac4Smrg	-o)
1982e19dfac4Smrg	  test -n "$libobj" && \
1983e19dfac4Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984e19dfac4Smrg	  arg_mode=target
1985e19dfac4Smrg	  continue
1986e19dfac4Smrg	  ;;
1987e19dfac4Smrg
1988e19dfac4Smrg	-pie | -fpie | -fPIE)
1989313a12fdSmrg          func_append pie_flag " $arg"
1990e19dfac4Smrg	  continue
1991e19dfac4Smrg	  ;;
1992e19dfac4Smrg
1993e19dfac4Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1994313a12fdSmrg	  func_append later " $arg"
1995e19dfac4Smrg	  continue
1996e19dfac4Smrg	  ;;
1997e19dfac4Smrg
1998e19dfac4Smrg	-no-suppress)
1999e19dfac4Smrg	  suppress_opt=no
2000e19dfac4Smrg	  continue
2001e19dfac4Smrg	  ;;
2002e19dfac4Smrg
2003e19dfac4Smrg	-Xcompiler)
2004e19dfac4Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005e19dfac4Smrg	  continue      #  The current "srcfile" will either be retained or
2006e19dfac4Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007e19dfac4Smrg
2008e19dfac4Smrg	-Wc,*)
2009e19dfac4Smrg	  func_stripname '-Wc,' '' "$arg"
2010e19dfac4Smrg	  args=$func_stripname_result
2011e19dfac4Smrg	  lastarg=
2012e19dfac4Smrg	  save_ifs="$IFS"; IFS=','
2013e19dfac4Smrg	  for arg in $args; do
2014e19dfac4Smrg	    IFS="$save_ifs"
2015313a12fdSmrg	    func_append_quoted lastarg "$arg"
201627702724Smrg	  done
201727702724Smrg	  IFS="$save_ifs"
2018e19dfac4Smrg	  func_stripname ' ' '' "$lastarg"
2019e19dfac4Smrg	  lastarg=$func_stripname_result
202027702724Smrg
202127702724Smrg	  # Add the arguments to base_compile.
2022313a12fdSmrg	  func_append base_compile " $lastarg"
202327702724Smrg	  continue
202427702724Smrg	  ;;
202527702724Smrg
2026e19dfac4Smrg	*)
202727702724Smrg	  # Accept the current argument as the source file.
202827702724Smrg	  # The previous "srcfile" becomes the current argument.
202927702724Smrg	  #
203027702724Smrg	  lastarg="$srcfile"
203127702724Smrg	  srcfile="$arg"
203227702724Smrg	  ;;
203327702724Smrg	esac  #  case $arg
203427702724Smrg	;;
203527702724Smrg      esac    #  case $arg_mode
203627702724Smrg
203727702724Smrg      # Aesthetically quote the previous argument.
2038313a12fdSmrg      func_append_quoted base_compile "$lastarg"
203927702724Smrg    done # for arg
204027702724Smrg
204127702724Smrg    case $arg_mode in
204227702724Smrg    arg)
2043e19dfac4Smrg      func_fatal_error "you must specify an argument for -Xcompile"
204427702724Smrg      ;;
204527702724Smrg    target)
2046e19dfac4Smrg      func_fatal_error "you must specify a target with \`-o'"
204727702724Smrg      ;;
204827702724Smrg    *)
204927702724Smrg      # Get the name of the library object.
2050e19dfac4Smrg      test -z "$libobj" && {
2051e19dfac4Smrg	func_basename "$srcfile"
2052e19dfac4Smrg	libobj="$func_basename_result"
2053e19dfac4Smrg      }
205427702724Smrg      ;;
205527702724Smrg    esac
205627702724Smrg
205727702724Smrg    # Recognize several different file suffixes.
205827702724Smrg    # If the user specifies -o file.o, it is replaced with file.lo
205927702724Smrg    case $libobj in
2060e19dfac4Smrg    *.[cCFSifmso] | \
2061e19dfac4Smrg    *.ada | *.adb | *.ads | *.asm | \
2062e19dfac4Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063313a12fdSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064e19dfac4Smrg      func_xform "$libobj"
2065e19dfac4Smrg      libobj=$func_xform_result
2066e19dfac4Smrg      ;;
206727702724Smrg    esac
206827702724Smrg
206927702724Smrg    case $libobj in
2070e19dfac4Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
207127702724Smrg    *)
2072e19dfac4Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
207327702724Smrg      ;;
207427702724Smrg    esac
207527702724Smrg
207627702724Smrg    func_infer_tag $base_compile
207727702724Smrg
207827702724Smrg    for arg in $later; do
207927702724Smrg      case $arg in
2080e19dfac4Smrg      -shared)
2081e19dfac4Smrg	test "$build_libtool_libs" != yes && \
2082e19dfac4Smrg	  func_fatal_configuration "can not build a shared library"
2083e19dfac4Smrg	build_old_libs=no
2084e19dfac4Smrg	continue
2085e19dfac4Smrg	;;
2086e19dfac4Smrg
208727702724Smrg      -static)
2088e19dfac4Smrg	build_libtool_libs=no
208927702724Smrg	build_old_libs=yes
209027702724Smrg	continue
209127702724Smrg	;;
209227702724Smrg
209327702724Smrg      -prefer-pic)
209427702724Smrg	pic_mode=yes
209527702724Smrg	continue
209627702724Smrg	;;
209727702724Smrg
209827702724Smrg      -prefer-non-pic)
209927702724Smrg	pic_mode=no
210027702724Smrg	continue
210127702724Smrg	;;
210227702724Smrg      esac
210327702724Smrg    done
210427702724Smrg
2105e19dfac4Smrg    func_quote_for_eval "$libobj"
2106e19dfac4Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107e19dfac4Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108e19dfac4Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109e19dfac4Smrg    func_dirname_and_basename "$obj" "/" ""
2110e19dfac4Smrg    objname="$func_basename_result"
2111e19dfac4Smrg    xdir="$func_dirname_result"
211227702724Smrg    lobj=${xdir}$objdir/$objname
211327702724Smrg
2114e19dfac4Smrg    test -z "$base_compile" && \
2115e19dfac4Smrg      func_fatal_help "you must specify a compilation command"
211627702724Smrg
211727702724Smrg    # Delete any leftover library objects.
211827702724Smrg    if test "$build_old_libs" = yes; then
211927702724Smrg      removelist="$obj $lobj $libobj ${libobj}T"
212027702724Smrg    else
212127702724Smrg      removelist="$lobj $libobj ${libobj}T"
212227702724Smrg    fi
212327702724Smrg
212427702724Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
212527702724Smrg    case $host_os in
2126e19dfac4Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
212727702724Smrg      pic_mode=default
212827702724Smrg      ;;
212927702724Smrg    esac
213027702724Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
213127702724Smrg      # non-PIC code in shared libraries is not supported
213227702724Smrg      pic_mode=default
213327702724Smrg    fi
213427702724Smrg
213527702724Smrg    # Calculate the filename of the output object if compiler does
213627702724Smrg    # not support -o with -c
213727702724Smrg    if test "$compiler_c_o" = no; then
2138313a12fdSmrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
213927702724Smrg      lockfile="$output_obj.lock"
214027702724Smrg    else
214127702724Smrg      output_obj=
214227702724Smrg      need_locks=no
214327702724Smrg      lockfile=
214427702724Smrg    fi
214527702724Smrg
214627702724Smrg    # Lock this critical section if it is needed
214727702724Smrg    # We use this script file to make the link, it avoids creating a new file
214827702724Smrg    if test "$need_locks" = yes; then
2149e19dfac4Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150e19dfac4Smrg	func_echo "Waiting for $lockfile to be removed"
215127702724Smrg	sleep 2
215227702724Smrg      done
215327702724Smrg    elif test "$need_locks" = warn; then
215427702724Smrg      if test -f "$lockfile"; then
2155e19dfac4Smrg	$ECHO "\
215627702724Smrg*** ERROR, $lockfile exists and contains:
215727702724Smrg`cat $lockfile 2>/dev/null`
215827702724Smrg
215927702724SmrgThis indicates that another process is trying to use the same
216027702724Smrgtemporary object file, and libtool could not work around it because
216127702724Smrgyour compiler does not support \`-c' and \`-o' together.  If you
216227702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
216327702724Smrgavoid parallel builds (make -j) in this platform, or get a better
216427702724Smrgcompiler."
216527702724Smrg
2166e19dfac4Smrg	$opt_dry_run || $RM $removelist
216727702724Smrg	exit $EXIT_FAILURE
216827702724Smrg      fi
2169313a12fdSmrg      func_append removelist " $output_obj"
2170e19dfac4Smrg      $ECHO "$srcfile" > "$lockfile"
217127702724Smrg    fi
217227702724Smrg
2173e19dfac4Smrg    $opt_dry_run || $RM $removelist
2174313a12fdSmrg    func_append removelist " $lockfile"
2175e19dfac4Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176e19dfac4Smrg
2177313a12fdSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2178313a12fdSmrg    srcfile=$func_to_tool_file_result
2179e19dfac4Smrg    func_quote_for_eval "$srcfile"
2180e19dfac4Smrg    qsrcfile=$func_quote_for_eval_result
218127702724Smrg
218227702724Smrg    # Only build a PIC object if we are building libtool libraries.
218327702724Smrg    if test "$build_libtool_libs" = yes; then
218427702724Smrg      # Without this assignment, base_compile gets emptied.
218527702724Smrg      fbsd_hideous_sh_bug=$base_compile
218627702724Smrg
218727702724Smrg      if test "$pic_mode" != no; then
218827702724Smrg	command="$base_compile $qsrcfile $pic_flag"
218927702724Smrg      else
219027702724Smrg	# Don't build PIC code
219127702724Smrg	command="$base_compile $qsrcfile"
219227702724Smrg      fi
219327702724Smrg
2194e19dfac4Smrg      func_mkdir_p "$xdir$objdir"
219527702724Smrg
219627702724Smrg      if test -z "$output_obj"; then
219727702724Smrg	# Place PIC objects in $objdir
2198313a12fdSmrg	func_append command " -o $lobj"
219927702724Smrg      fi
220027702724Smrg
2201e19dfac4Smrg      func_show_eval_locale "$command"	\
2202e19dfac4Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
220327702724Smrg
220427702724Smrg      if test "$need_locks" = warn &&
220527702724Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206e19dfac4Smrg	$ECHO "\
220727702724Smrg*** ERROR, $lockfile contains:
220827702724Smrg`cat $lockfile 2>/dev/null`
220927702724Smrg
221027702724Smrgbut it should contain:
221127702724Smrg$srcfile
221227702724Smrg
221327702724SmrgThis indicates that another process is trying to use the same
221427702724Smrgtemporary object file, and libtool could not work around it because
221527702724Smrgyour compiler does not support \`-c' and \`-o' together.  If you
221627702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
221727702724Smrgavoid parallel builds (make -j) in this platform, or get a better
221827702724Smrgcompiler."
221927702724Smrg
2220e19dfac4Smrg	$opt_dry_run || $RM $removelist
222127702724Smrg	exit $EXIT_FAILURE
222227702724Smrg      fi
222327702724Smrg
222427702724Smrg      # Just move the object if needed, then go on to compile the next one
222527702724Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226e19dfac4Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227e19dfac4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
222827702724Smrg      fi
222927702724Smrg
223027702724Smrg      # Allow error messages only from the first compilation.
223127702724Smrg      if test "$suppress_opt" = yes; then
2232e19dfac4Smrg	suppress_output=' >/dev/null 2>&1'
223327702724Smrg      fi
223427702724Smrg    fi
223527702724Smrg
223627702724Smrg    # Only build a position-dependent object if we build old libraries.
223727702724Smrg    if test "$build_old_libs" = yes; then
223827702724Smrg      if test "$pic_mode" != yes; then
223927702724Smrg	# Don't build PIC code
2240e19dfac4Smrg	command="$base_compile $qsrcfile$pie_flag"
224127702724Smrg      else
224227702724Smrg	command="$base_compile $qsrcfile $pic_flag"
224327702724Smrg      fi
224427702724Smrg      if test "$compiler_c_o" = yes; then
2245313a12fdSmrg	func_append command " -o $obj"
224627702724Smrg      fi
224727702724Smrg
224827702724Smrg      # Suppress compiler output if we already did a PIC compilation.
2249313a12fdSmrg      func_append command "$suppress_output"
2250e19dfac4Smrg      func_show_eval_locale "$command" \
2251e19dfac4Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
225227702724Smrg
225327702724Smrg      if test "$need_locks" = warn &&
225427702724Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255e19dfac4Smrg	$ECHO "\
225627702724Smrg*** ERROR, $lockfile contains:
225727702724Smrg`cat $lockfile 2>/dev/null`
225827702724Smrg
225927702724Smrgbut it should contain:
226027702724Smrg$srcfile
226127702724Smrg
226227702724SmrgThis indicates that another process is trying to use the same
226327702724Smrgtemporary object file, and libtool could not work around it because
226427702724Smrgyour compiler does not support \`-c' and \`-o' together.  If you
226527702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
226627702724Smrgavoid parallel builds (make -j) in this platform, or get a better
226727702724Smrgcompiler."
226827702724Smrg
2269e19dfac4Smrg	$opt_dry_run || $RM $removelist
227027702724Smrg	exit $EXIT_FAILURE
227127702724Smrg      fi
227227702724Smrg
227327702724Smrg      # Just move the object if needed
227427702724Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275e19dfac4Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276e19dfac4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
227727702724Smrg      fi
227827702724Smrg    fi
227927702724Smrg
2280e19dfac4Smrg    $opt_dry_run || {
2281e19dfac4Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
228227702724Smrg
2283e19dfac4Smrg      # Unlock the critical section if it was locked
2284e19dfac4Smrg      if test "$need_locks" != no; then
2285e19dfac4Smrg	removelist=$lockfile
2286e19dfac4Smrg        $RM "$lockfile"
2287e19dfac4Smrg      fi
2288e19dfac4Smrg    }
228927702724Smrg
229027702724Smrg    exit $EXIT_SUCCESS
2291e19dfac4Smrg}
229227702724Smrg
2293e19dfac4Smrg$opt_help || {
2294313a12fdSmrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295e19dfac4Smrg}
229627702724Smrg
2297e19dfac4Smrgfunc_mode_help ()
2298e19dfac4Smrg{
2299e19dfac4Smrg    # We need to display help for each of the modes.
2300313a12fdSmrg    case $opt_mode in
2301e19dfac4Smrg      "")
2302e19dfac4Smrg        # Generic help is extracted from the usage comments
2303e19dfac4Smrg        # at the start of this file.
2304e19dfac4Smrg        func_help
2305e19dfac4Smrg        ;;
230627702724Smrg
2307e19dfac4Smrg      clean)
2308e19dfac4Smrg        $ECHO \
2309e19dfac4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
231027702724Smrg
2311e19dfac4SmrgRemove files from the build directory.
231227702724Smrg
2313e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE
2314e19dfac4Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315e19dfac4Smrgto RM.
231627702724Smrg
2317e19dfac4SmrgIf FILE is a libtool library, object or program, all the files associated
2318e19dfac4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319e19dfac4Smrg        ;;
232027702724Smrg
2321e19dfac4Smrg      compile)
2322e19dfac4Smrg      $ECHO \
2323e19dfac4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
232427702724Smrg
2325e19dfac4SmrgCompile a source file into a libtool library object.
232627702724Smrg
2327e19dfac4SmrgThis mode accepts the following additional options:
232827702724Smrg
2329e19dfac4Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330e19dfac4Smrg  -no-suppress      do not suppress compiler output for multiple passes
2331313a12fdSmrg  -prefer-pic       try to build PIC objects only
2332313a12fdSmrg  -prefer-non-pic   try to build non-PIC objects only
2333e19dfac4Smrg  -shared           do not build a \`.o' file suitable for static linking
2334e19dfac4Smrg  -static           only build a \`.o' file suitable for static linking
2335313a12fdSmrg  -Wc,FLAG          pass FLAG directly to the compiler
233627702724Smrg
2337e19dfac4SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338e19dfac4Smrgfrom the given SOURCEFILE.
233927702724Smrg
2340e19dfac4SmrgThe output file name is determined by removing the directory component from
2341e19dfac4SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342e19dfac4Smrglibrary object suffix, \`.lo'."
2343e19dfac4Smrg        ;;
234427702724Smrg
2345e19dfac4Smrg      execute)
2346e19dfac4Smrg        $ECHO \
2347e19dfac4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
234827702724Smrg
2349e19dfac4SmrgAutomatically set library path, then run a program.
235027702724Smrg
2351e19dfac4SmrgThis mode accepts the following additional options:
235227702724Smrg
2353e19dfac4Smrg  -dlopen FILE      add the directory containing FILE to the library path
235427702724Smrg
2355e19dfac4SmrgThis mode sets the library path environment variable according to \`-dlopen'
2356e19dfac4Smrgflags.
235727702724Smrg
2358e19dfac4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359e19dfac4Smrginto their corresponding uninstalled binary, and any of their required library
2360e19dfac4Smrgdirectories are added to the library path.
236127702724Smrg
2362e19dfac4SmrgThen, COMMAND is executed, with ARGS as arguments."
2363e19dfac4Smrg        ;;
236427702724Smrg
2365e19dfac4Smrg      finish)
2366e19dfac4Smrg        $ECHO \
2367e19dfac4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
236827702724Smrg
2369e19dfac4SmrgComplete the installation of libtool libraries.
237027702724Smrg
2371e19dfac4SmrgEach LIBDIR is a directory that contains libtool libraries.
237227702724Smrg
2373e19dfac4SmrgThe commands that this mode executes may require superuser privileges.  Use
2374e19dfac4Smrgthe \`--dry-run' option if you just want to see what would be executed."
2375e19dfac4Smrg        ;;
237627702724Smrg
2377e19dfac4Smrg      install)
2378e19dfac4Smrg        $ECHO \
2379e19dfac4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
238027702724Smrg
2381e19dfac4SmrgInstall executables or libraries.
238227702724Smrg
2383e19dfac4SmrgINSTALL-COMMAND is the installation command.  The first component should be
2384e19dfac4Smrgeither the \`install' or \`cp' program.
238527702724Smrg
2386e19dfac4SmrgThe following components of INSTALL-COMMAND are treated specially:
238727702724Smrg
2388313a12fdSmrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
238927702724Smrg
2390e19dfac4SmrgThe rest of the components are interpreted as arguments to that command (only
2391e19dfac4SmrgBSD-compatible install options are recognized)."
2392e19dfac4Smrg        ;;
239327702724Smrg
2394e19dfac4Smrg      link)
2395e19dfac4Smrg        $ECHO \
2396e19dfac4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
239727702724Smrg
2398e19dfac4SmrgLink object files or libraries together to form another library, or to
2399e19dfac4Smrgcreate an executable program.
240027702724Smrg
2401e19dfac4SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402e19dfac4Smrga program from several object files.
240327702724Smrg
2404e19dfac4SmrgThe following components of LINK-COMMAND are treated specially:
240527702724Smrg
2406e19dfac4Smrg  -all-static       do not do any dynamic linking at all
2407e19dfac4Smrg  -avoid-version    do not add a version suffix if possible
2408313a12fdSmrg  -bindir BINDIR    specify path to binaries directory (for systems where
2409313a12fdSmrg                    libraries must be found in the PATH setting at runtime)
2410e19dfac4Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411e19dfac4Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412e19dfac4Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413e19dfac4Smrg  -export-symbols SYMFILE
2414e19dfac4Smrg                    try to export only the symbols listed in SYMFILE
2415e19dfac4Smrg  -export-symbols-regex REGEX
2416e19dfac4Smrg                    try to export only the symbols matching REGEX
2417e19dfac4Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2418e19dfac4Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419e19dfac4Smrg  -module           build a library that can dlopened
2420e19dfac4Smrg  -no-fast-install  disable the fast-install mode
2421e19dfac4Smrg  -no-install       link a not-installable executable
2422e19dfac4Smrg  -no-undefined     declare that a library does not refer to external symbols
2423e19dfac4Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424e19dfac4Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425e19dfac4Smrg  -precious-files-regex REGEX
2426e19dfac4Smrg                    don't remove output files matching REGEX
2427e19dfac4Smrg  -release RELEASE  specify package release information
2428e19dfac4Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429e19dfac4Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430e19dfac4Smrg  -shared           only do dynamic linking of libtool libraries
2431e19dfac4Smrg  -shrext SUFFIX    override the standard shared library file extension
2432e19dfac4Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433e19dfac4Smrg  -static-libtool-libs
2434e19dfac4Smrg                    do not do any dynamic linking of libtool libraries
2435e19dfac4Smrg  -version-info CURRENT[:REVISION[:AGE]]
2436e19dfac4Smrg                    specify library version info [each variable defaults to 0]
2437e19dfac4Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
2438313a12fdSmrg  -Wc,FLAG
2439313a12fdSmrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2440313a12fdSmrg  -Wl,FLAG
2441313a12fdSmrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2442313a12fdSmrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
244327702724Smrg
2444e19dfac4SmrgAll other options (arguments beginning with \`-') are ignored.
244527702724Smrg
2446e19dfac4SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447e19dfac4Smrgtreated as uninstalled libtool libraries, other files are standard or library
2448e19dfac4Smrgobject files.
244927702724Smrg
2450e19dfac4SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451e19dfac4Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452e19dfac4Smrgrequired, except when creating a convenience library.
245327702724Smrg
2454e19dfac4SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455e19dfac4Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
245627702724Smrg
2457e19dfac4SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458e19dfac4Smrgis created, otherwise an executable program is created."
245927702724Smrg        ;;
246027702724Smrg
2461e19dfac4Smrg      uninstall)
2462e19dfac4Smrg        $ECHO \
2463e19dfac4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
246427702724Smrg
2465e19dfac4SmrgRemove libraries from an installation directory.
246627702724Smrg
2467e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE
2468e19dfac4Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469e19dfac4Smrgto RM.
247027702724Smrg
2471e19dfac4SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472e19dfac4SmrgOtherwise, only FILE itself is deleted using RM."
2473e19dfac4Smrg        ;;
247427702724Smrg
2475e19dfac4Smrg      *)
2476313a12fdSmrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477e19dfac4Smrg        ;;
2478e19dfac4Smrg    esac
247927702724Smrg
2480313a12fdSmrg    echo
2481e19dfac4Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482e19dfac4Smrg}
248327702724Smrg
2484313a12fdSmrg# Now that we've collected a possible --mode arg, show help if necessary
2485313a12fdSmrgif $opt_help; then
2486313a12fdSmrg  if test "$opt_help" = :; then
2487313a12fdSmrg    func_mode_help
2488313a12fdSmrg  else
2489313a12fdSmrg    {
2490313a12fdSmrg      func_help noexit
2491313a12fdSmrg      for opt_mode in compile link execute install finish uninstall clean; do
2492313a12fdSmrg	func_mode_help
2493313a12fdSmrg      done
2494313a12fdSmrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2495313a12fdSmrg    {
2496313a12fdSmrg      func_help noexit
2497313a12fdSmrg      for opt_mode in compile link execute install finish uninstall clean; do
2498313a12fdSmrg	echo
2499313a12fdSmrg	func_mode_help
2500313a12fdSmrg      done
2501313a12fdSmrg    } |
2502313a12fdSmrg    sed '1d
2503313a12fdSmrg      /^When reporting/,/^Report/{
2504313a12fdSmrg	H
2505313a12fdSmrg	d
2506313a12fdSmrg      }
2507313a12fdSmrg      $x
2508313a12fdSmrg      /information about other modes/d
2509313a12fdSmrg      /more detailed .*MODE/d
2510313a12fdSmrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2511313a12fdSmrg  fi
2512313a12fdSmrg  exit $?
2513313a12fdSmrgfi
251427702724Smrg
251527702724Smrg
2516e19dfac4Smrg# func_mode_execute arg...
2517e19dfac4Smrgfunc_mode_execute ()
2518e19dfac4Smrg{
2519e19dfac4Smrg    $opt_debug
2520e19dfac4Smrg    # The first argument is the command name.
2521e19dfac4Smrg    cmd="$nonopt"
2522e19dfac4Smrg    test -z "$cmd" && \
2523e19dfac4Smrg      func_fatal_help "you must specify a COMMAND"
252427702724Smrg
2525e19dfac4Smrg    # Handle -dlopen flags immediately.
2526313a12fdSmrg    for file in $opt_dlopen; do
2527e19dfac4Smrg      test -f "$file" \
2528e19dfac4Smrg	|| func_fatal_help "\`$file' is not a file"
252927702724Smrg
2530e19dfac4Smrg      dir=
2531e19dfac4Smrg      case $file in
2532e19dfac4Smrg      *.la)
2533313a12fdSmrg	func_resolve_sysroot "$file"
2534313a12fdSmrg	file=$func_resolve_sysroot_result
2535313a12fdSmrg
2536e19dfac4Smrg	# Check to see that this really is a libtool archive.
2537e19dfac4Smrg	func_lalib_unsafe_p "$file" \
2538e19dfac4Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
253927702724Smrg
2540e19dfac4Smrg	# Read the libtool library.
2541e19dfac4Smrg	dlname=
2542e19dfac4Smrg	library_names=
2543e19dfac4Smrg	func_source "$file"
254427702724Smrg
2545e19dfac4Smrg	# Skip this library if it cannot be dlopened.
2546e19dfac4Smrg	if test -z "$dlname"; then
2547e19dfac4Smrg	  # Warn if it was a shared library.
2548e19dfac4Smrg	  test -n "$library_names" && \
2549e19dfac4Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550e19dfac4Smrg	  continue
2551e19dfac4Smrg	fi
255227702724Smrg
2553e19dfac4Smrg	func_dirname "$file" "" "."
2554e19dfac4Smrg	dir="$func_dirname_result"
255527702724Smrg
2556e19dfac4Smrg	if test -f "$dir/$objdir/$dlname"; then
2557313a12fdSmrg	  func_append dir "/$objdir"
2558e19dfac4Smrg	else
2559e19dfac4Smrg	  if test ! -f "$dir/$dlname"; then
2560e19dfac4Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561e19dfac4Smrg	  fi
2562e19dfac4Smrg	fi
256327702724Smrg	;;
256427702724Smrg
2565e19dfac4Smrg      *.lo)
2566e19dfac4Smrg	# Just add the directory containing the .lo file.
2567e19dfac4Smrg	func_dirname "$file" "" "."
2568e19dfac4Smrg	dir="$func_dirname_result"
256927702724Smrg	;;
257027702724Smrg
2571e19dfac4Smrg      *)
2572e19dfac4Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
257327702724Smrg	continue
257427702724Smrg	;;
2575e19dfac4Smrg      esac
257627702724Smrg
2577e19dfac4Smrg      # Get the absolute pathname.
2578e19dfac4Smrg      absdir=`cd "$dir" && pwd`
2579e19dfac4Smrg      test -n "$absdir" && dir="$absdir"
258027702724Smrg
2581e19dfac4Smrg      # Now add the directory to shlibpath_var.
2582e19dfac4Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2583e19dfac4Smrg	eval "$shlibpath_var=\"\$dir\""
2584e19dfac4Smrg      else
2585e19dfac4Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586e19dfac4Smrg      fi
2587e19dfac4Smrg    done
258827702724Smrg
2589e19dfac4Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2590e19dfac4Smrg    # rather than running their programs.
2591e19dfac4Smrg    libtool_execute_magic="$magic"
259227702724Smrg
2593e19dfac4Smrg    # Check if any of the arguments is a wrapper script.
2594e19dfac4Smrg    args=
2595e19dfac4Smrg    for file
2596e19dfac4Smrg    do
2597e19dfac4Smrg      case $file in
2598313a12fdSmrg      -* | *.la | *.lo ) ;;
2599e19dfac4Smrg      *)
2600e19dfac4Smrg	# Do a test to see if this is really a libtool program.
2601e19dfac4Smrg	if func_ltwrapper_script_p "$file"; then
2602e19dfac4Smrg	  func_source "$file"
2603e19dfac4Smrg	  # Transform arg to wrapped name.
2604e19dfac4Smrg	  file="$progdir/$program"
2605e19dfac4Smrg	elif func_ltwrapper_executable_p "$file"; then
2606e19dfac4Smrg	  func_ltwrapper_scriptname "$file"
2607e19dfac4Smrg	  func_source "$func_ltwrapper_scriptname_result"
2608e19dfac4Smrg	  # Transform arg to wrapped name.
2609e19dfac4Smrg	  file="$progdir/$program"
2610e19dfac4Smrg	fi
2611e19dfac4Smrg	;;
2612e19dfac4Smrg      esac
2613e19dfac4Smrg      # Quote arguments (to preserve shell metacharacters).
2614313a12fdSmrg      func_append_quoted args "$file"
2615e19dfac4Smrg    done
261627702724Smrg
2617e19dfac4Smrg    if test "X$opt_dry_run" = Xfalse; then
2618e19dfac4Smrg      if test -n "$shlibpath_var"; then
2619e19dfac4Smrg	# Export the shlibpath_var.
2620e19dfac4Smrg	eval "export $shlibpath_var"
2621e19dfac4Smrg      fi
262227702724Smrg
2623e19dfac4Smrg      # Restore saved environment variables
2624e19dfac4Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625e19dfac4Smrg      do
2626e19dfac4Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627e19dfac4Smrg                $lt_var=\$save_$lt_var; export $lt_var
2628e19dfac4Smrg	      else
2629e19dfac4Smrg		$lt_unset $lt_var
2630e19dfac4Smrg	      fi"
2631e19dfac4Smrg      done
263227702724Smrg
2633e19dfac4Smrg      # Now prepare to actually exec the command.
2634e19dfac4Smrg      exec_cmd="\$cmd$args"
2635e19dfac4Smrg    else
2636e19dfac4Smrg      # Display what would be done.
2637e19dfac4Smrg      if test -n "$shlibpath_var"; then
2638e19dfac4Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
2639313a12fdSmrg	echo "export $shlibpath_var"
2640e19dfac4Smrg      fi
2641e19dfac4Smrg      $ECHO "$cmd$args"
2642e19dfac4Smrg      exit $EXIT_SUCCESS
2643e19dfac4Smrg    fi
2644e19dfac4Smrg}
264527702724Smrg
2646313a12fdSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
264727702724Smrg
264827702724Smrg
2649e19dfac4Smrg# func_mode_finish arg...
2650e19dfac4Smrgfunc_mode_finish ()
2651e19dfac4Smrg{
2652e19dfac4Smrg    $opt_debug
2653313a12fdSmrg    libs=
2654313a12fdSmrg    libdirs=
2655e19dfac4Smrg    admincmds=
265627702724Smrg
2657313a12fdSmrg    for opt in "$nonopt" ${1+"$@"}
2658313a12fdSmrg    do
2659313a12fdSmrg      if test -d "$opt"; then
2660313a12fdSmrg	func_append libdirs " $opt"
2661313a12fdSmrg
2662313a12fdSmrg      elif test -f "$opt"; then
2663313a12fdSmrg	if func_lalib_unsafe_p "$opt"; then
2664313a12fdSmrg	  func_append libs " $opt"
2665313a12fdSmrg	else
2666313a12fdSmrg	  func_warning "\`$opt' is not a valid libtool archive"
2667313a12fdSmrg	fi
2668313a12fdSmrg
2669313a12fdSmrg      else
2670313a12fdSmrg	func_fatal_error "invalid argument \`$opt'"
2671313a12fdSmrg      fi
2672313a12fdSmrg    done
2673313a12fdSmrg
2674313a12fdSmrg    if test -n "$libs"; then
2675313a12fdSmrg      if test -n "$lt_sysroot"; then
2676313a12fdSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2677313a12fdSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2678313a12fdSmrg      else
2679313a12fdSmrg        sysroot_cmd=
2680313a12fdSmrg      fi
2681313a12fdSmrg
2682313a12fdSmrg      # Remove sysroot references
2683313a12fdSmrg      if $opt_dry_run; then
2684313a12fdSmrg        for lib in $libs; do
2685313a12fdSmrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2686313a12fdSmrg        done
2687313a12fdSmrg      else
2688313a12fdSmrg        tmpdir=`func_mktempdir`
2689313a12fdSmrg        for lib in $libs; do
2690313a12fdSmrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2691313a12fdSmrg	    > $tmpdir/tmp-la
2692313a12fdSmrg	  mv -f $tmpdir/tmp-la $lib
2693313a12fdSmrg	done
2694313a12fdSmrg        ${RM}r "$tmpdir"
2695313a12fdSmrg      fi
2696313a12fdSmrg    fi
269727702724Smrg
2698313a12fdSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699e19dfac4Smrg      for libdir in $libdirs; do
2700e19dfac4Smrg	if test -n "$finish_cmds"; then
2701e19dfac4Smrg	  # Do each command in the finish commands.
2702e19dfac4Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703e19dfac4Smrg'"$cmd"'"'
2704e19dfac4Smrg	fi
2705e19dfac4Smrg	if test -n "$finish_eval"; then
2706e19dfac4Smrg	  # Do the single finish_eval.
2707e19dfac4Smrg	  eval cmds=\"$finish_eval\"
2708313a12fdSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709e19dfac4Smrg       $cmds"
2710e19dfac4Smrg	fi
2711e19dfac4Smrg      done
2712e19dfac4Smrg    fi
271327702724Smrg
2714e19dfac4Smrg    # Exit here if they wanted silent mode.
2715e19dfac4Smrg    $opt_silent && exit $EXIT_SUCCESS
271627702724Smrg
2717313a12fdSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2718313a12fdSmrg      echo "----------------------------------------------------------------------"
2719313a12fdSmrg      echo "Libraries have been installed in:"
2720313a12fdSmrg      for libdir in $libdirs; do
2721313a12fdSmrg	$ECHO "   $libdir"
2722313a12fdSmrg      done
2723313a12fdSmrg      echo
2724313a12fdSmrg      echo "If you ever happen to want to link against installed libraries"
2725313a12fdSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
2726313a12fdSmrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2727313a12fdSmrg      echo "flag during linking and do at least one of the following:"
2728313a12fdSmrg      if test -n "$shlibpath_var"; then
2729313a12fdSmrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2730313a12fdSmrg	echo "     during execution"
2731313a12fdSmrg      fi
2732313a12fdSmrg      if test -n "$runpath_var"; then
2733313a12fdSmrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2734313a12fdSmrg	echo "     during linking"
2735313a12fdSmrg      fi
2736313a12fdSmrg      if test -n "$hardcode_libdir_flag_spec"; then
2737313a12fdSmrg	libdir=LIBDIR
2738313a12fdSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739313a12fdSmrg
2740313a12fdSmrg	$ECHO "   - use the \`$flag' linker flag"
2741313a12fdSmrg      fi
2742313a12fdSmrg      if test -n "$admincmds"; then
2743313a12fdSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
2744313a12fdSmrg      fi
2745313a12fdSmrg      if test -f /etc/ld.so.conf; then
2746313a12fdSmrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2747313a12fdSmrg      fi
2748313a12fdSmrg      echo
274927702724Smrg
2750313a12fdSmrg      echo "See any operating system documentation about shared libraries for"
2751313a12fdSmrg      case $host in
2752313a12fdSmrg	solaris2.[6789]|solaris2.1[0-9])
2753313a12fdSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2754313a12fdSmrg	  echo "pages."
2755313a12fdSmrg	  ;;
2756313a12fdSmrg	*)
2757313a12fdSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2758313a12fdSmrg	  ;;
2759313a12fdSmrg      esac
2760313a12fdSmrg      echo "----------------------------------------------------------------------"
2761e19dfac4Smrg    fi
2762e19dfac4Smrg    exit $EXIT_SUCCESS
2763e19dfac4Smrg}
276427702724Smrg
2765313a12fdSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
276627702724Smrg
276727702724Smrg
2768e19dfac4Smrg# func_mode_install arg...
2769e19dfac4Smrgfunc_mode_install ()
2770e19dfac4Smrg{
2771e19dfac4Smrg    $opt_debug
2772e19dfac4Smrg    # There may be an optional sh(1) argument at the beginning of
2773e19dfac4Smrg    # install_prog (especially on Windows NT).
2774e19dfac4Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775e19dfac4Smrg       # Allow the use of GNU shtool's install command.
2776313a12fdSmrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777e19dfac4Smrg      # Aesthetically quote it.
2778e19dfac4Smrg      func_quote_for_eval "$nonopt"
2779e19dfac4Smrg      install_prog="$func_quote_for_eval_result "
2780e19dfac4Smrg      arg=$1
2781e19dfac4Smrg      shift
2782e19dfac4Smrg    else
2783e19dfac4Smrg      install_prog=
2784e19dfac4Smrg      arg=$nonopt
2785e19dfac4Smrg    fi
278627702724Smrg
2787e19dfac4Smrg    # The real first argument should be the name of the installation program.
2788e19dfac4Smrg    # Aesthetically quote it.
2789e19dfac4Smrg    func_quote_for_eval "$arg"
2790313a12fdSmrg    func_append install_prog "$func_quote_for_eval_result"
2791313a12fdSmrg    install_shared_prog=$install_prog
2792313a12fdSmrg    case " $install_prog " in
2793313a12fdSmrg      *[\\\ /]cp\ *) install_cp=: ;;
2794313a12fdSmrg      *) install_cp=false ;;
2795313a12fdSmrg    esac
2796e19dfac4Smrg
2797e19dfac4Smrg    # We need to accept at least all the BSD install flags.
2798e19dfac4Smrg    dest=
2799e19dfac4Smrg    files=
2800e19dfac4Smrg    opts=
2801e19dfac4Smrg    prev=
2802e19dfac4Smrg    install_type=
2803e19dfac4Smrg    isdir=no
2804e19dfac4Smrg    stripme=
2805313a12fdSmrg    no_mode=:
2806e19dfac4Smrg    for arg
2807e19dfac4Smrg    do
2808313a12fdSmrg      arg2=
2809e19dfac4Smrg      if test -n "$dest"; then
2810313a12fdSmrg	func_append files " $dest"
2811e19dfac4Smrg	dest=$arg
2812e19dfac4Smrg	continue
281327702724Smrg      fi
281427702724Smrg
2815e19dfac4Smrg      case $arg in
2816e19dfac4Smrg      -d) isdir=yes ;;
2817e19dfac4Smrg      -f)
2818313a12fdSmrg	if $install_cp; then :; else
2819313a12fdSmrg	  prev=$arg
2820313a12fdSmrg	fi
2821e19dfac4Smrg	;;
2822e19dfac4Smrg      -g | -m | -o)
2823e19dfac4Smrg	prev=$arg
2824e19dfac4Smrg	;;
2825e19dfac4Smrg      -s)
2826e19dfac4Smrg	stripme=" -s"
2827e19dfac4Smrg	continue
2828e19dfac4Smrg	;;
2829e19dfac4Smrg      -*)
2830e19dfac4Smrg	;;
2831e19dfac4Smrg      *)
2832e19dfac4Smrg	# If the previous option needed an argument, then skip it.
2833e19dfac4Smrg	if test -n "$prev"; then
2834313a12fdSmrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2835313a12fdSmrg	    arg2=$install_override_mode
2836313a12fdSmrg	    no_mode=false
2837313a12fdSmrg	  fi
2838e19dfac4Smrg	  prev=
2839e19dfac4Smrg	else
2840e19dfac4Smrg	  dest=$arg
2841e19dfac4Smrg	  continue
2842e19dfac4Smrg	fi
2843e19dfac4Smrg	;;
2844e19dfac4Smrg      esac
284527702724Smrg
2846e19dfac4Smrg      # Aesthetically quote the argument.
2847e19dfac4Smrg      func_quote_for_eval "$arg"
2848313a12fdSmrg      func_append install_prog " $func_quote_for_eval_result"
2849313a12fdSmrg      if test -n "$arg2"; then
2850313a12fdSmrg	func_quote_for_eval "$arg2"
2851313a12fdSmrg      fi
2852313a12fdSmrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853e19dfac4Smrg    done
285427702724Smrg
2855e19dfac4Smrg    test -z "$install_prog" && \
2856e19dfac4Smrg      func_fatal_help "you must specify an install program"
285727702724Smrg
2858e19dfac4Smrg    test -n "$prev" && \
2859e19dfac4Smrg      func_fatal_help "the \`$prev' option requires an argument"
286027702724Smrg
2861313a12fdSmrg    if test -n "$install_override_mode" && $no_mode; then
2862313a12fdSmrg      if $install_cp; then :; else
2863313a12fdSmrg	func_quote_for_eval "$install_override_mode"
2864313a12fdSmrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
2865313a12fdSmrg      fi
2866313a12fdSmrg    fi
2867313a12fdSmrg
2868e19dfac4Smrg    if test -z "$files"; then
2869e19dfac4Smrg      if test -z "$dest"; then
2870e19dfac4Smrg	func_fatal_help "no file or destination specified"
2871e19dfac4Smrg      else
2872e19dfac4Smrg	func_fatal_help "you must specify a destination"
287327702724Smrg      fi
287427702724Smrg    fi
287527702724Smrg
2876e19dfac4Smrg    # Strip any trailing slash from the destination.
2877e19dfac4Smrg    func_stripname '' '/' "$dest"
2878e19dfac4Smrg    dest=$func_stripname_result
287927702724Smrg
2880e19dfac4Smrg    # Check to see that the destination is a directory.
2881e19dfac4Smrg    test -d "$dest" && isdir=yes
2882e19dfac4Smrg    if test "$isdir" = yes; then
2883e19dfac4Smrg      destdir="$dest"
2884e19dfac4Smrg      destname=
2885e19dfac4Smrg    else
2886e19dfac4Smrg      func_dirname_and_basename "$dest" "" "."
2887e19dfac4Smrg      destdir="$func_dirname_result"
2888e19dfac4Smrg      destname="$func_basename_result"
2889e19dfac4Smrg
2890e19dfac4Smrg      # Not a directory, so check to see that there is only one file specified.
2891e19dfac4Smrg      set dummy $files; shift
2892e19dfac4Smrg      test "$#" -gt 1 && \
2893e19dfac4Smrg	func_fatal_help "\`$dest' is not a directory"
2894e19dfac4Smrg    fi
2895e19dfac4Smrg    case $destdir in
2896e19dfac4Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
289727702724Smrg    *)
2898e19dfac4Smrg      for file in $files; do
2899e19dfac4Smrg	case $file in
2900e19dfac4Smrg	*.lo) ;;
2901e19dfac4Smrg	*)
2902e19dfac4Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903e19dfac4Smrg	  ;;
2904e19dfac4Smrg	esac
2905e19dfac4Smrg      done
290627702724Smrg      ;;
290727702724Smrg    esac
290827702724Smrg
2909e19dfac4Smrg    # This variable tells wrapper scripts just to set variables rather
2910e19dfac4Smrg    # than running their programs.
2911e19dfac4Smrg    libtool_install_magic="$magic"
291227702724Smrg
2913e19dfac4Smrg    staticlibs=
2914e19dfac4Smrg    future_libdirs=
2915e19dfac4Smrg    current_libdirs=
2916e19dfac4Smrg    for file in $files; do
291727702724Smrg
2918e19dfac4Smrg      # Do each installation.
2919e19dfac4Smrg      case $file in
2920e19dfac4Smrg      *.$libext)
2921e19dfac4Smrg	# Do the static libraries later.
2922313a12fdSmrg	func_append staticlibs " $file"
2923e19dfac4Smrg	;;
2924e19dfac4Smrg
2925e19dfac4Smrg      *.la)
2926313a12fdSmrg	func_resolve_sysroot "$file"
2927313a12fdSmrg	file=$func_resolve_sysroot_result
2928313a12fdSmrg
2929e19dfac4Smrg	# Check to see that this really is a libtool archive.
2930e19dfac4Smrg	func_lalib_unsafe_p "$file" \
2931e19dfac4Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932e19dfac4Smrg
2933e19dfac4Smrg	library_names=
2934e19dfac4Smrg	old_library=
2935e19dfac4Smrg	relink_command=
2936e19dfac4Smrg	func_source "$file"
2937e19dfac4Smrg
2938e19dfac4Smrg	# Add the libdir to current_libdirs if it is the destination.
2939e19dfac4Smrg	if test "X$destdir" = "X$libdir"; then
2940e19dfac4Smrg	  case "$current_libdirs " in
2941e19dfac4Smrg	  *" $libdir "*) ;;
2942313a12fdSmrg	  *) func_append current_libdirs " $libdir" ;;
294327702724Smrg	  esac
2944e19dfac4Smrg	else
2945e19dfac4Smrg	  # Note the libdir as a future libdir.
2946e19dfac4Smrg	  case "$future_libdirs " in
2947e19dfac4Smrg	  *" $libdir "*) ;;
2948313a12fdSmrg	  *) func_append future_libdirs " $libdir" ;;
2949e19dfac4Smrg	  esac
2950e19dfac4Smrg	fi
295127702724Smrg
2952e19dfac4Smrg	func_dirname "$file" "/" ""
2953e19dfac4Smrg	dir="$func_dirname_result"
2954313a12fdSmrg	func_append dir "$objdir"
2955e19dfac4Smrg
2956e19dfac4Smrg	if test -n "$relink_command"; then
2957e19dfac4Smrg	  # Determine the prefix the user has applied to our future dir.
2958313a12fdSmrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959e19dfac4Smrg
2960e19dfac4Smrg	  # Don't allow the user to place us outside of our expected
2961e19dfac4Smrg	  # location b/c this prevents finding dependent libraries that
2962e19dfac4Smrg	  # are installed to the same prefix.
2963e19dfac4Smrg	  # At present, this check doesn't affect windows .dll's that
2964e19dfac4Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2965e19dfac4Smrg	  # but it's something to keep an eye on.
2966e19dfac4Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2967e19dfac4Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968e19dfac4Smrg
2969e19dfac4Smrg	  if test -n "$inst_prefix_dir"; then
2970e19dfac4Smrg	    # Stick the inst_prefix_dir data into the link command.
2971313a12fdSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972e19dfac4Smrg	  else
2973313a12fdSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974e19dfac4Smrg	  fi
2975e19dfac4Smrg
2976e19dfac4Smrg	  func_warning "relinking \`$file'"
2977e19dfac4Smrg	  func_show_eval "$relink_command" \
2978e19dfac4Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979e19dfac4Smrg	fi
2980e19dfac4Smrg
2981e19dfac4Smrg	# See the names of the shared library.
2982e19dfac4Smrg	set dummy $library_names; shift
2983e19dfac4Smrg	if test -n "$1"; then
2984e19dfac4Smrg	  realname="$1"
2985e19dfac4Smrg	  shift
2986e19dfac4Smrg
2987e19dfac4Smrg	  srcname="$realname"
2988e19dfac4Smrg	  test -n "$relink_command" && srcname="$realname"T
2989e19dfac4Smrg
2990e19dfac4Smrg	  # Install the shared library and build the symlinks.
2991313a12fdSmrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992e19dfac4Smrg	      'exit $?'
2993e19dfac4Smrg	  tstripme="$stripme"
2994e19dfac4Smrg	  case $host_os in
2995e19dfac4Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2996e19dfac4Smrg	    case $realname in
2997e19dfac4Smrg	    *.dll.a)
2998e19dfac4Smrg	      tstripme=""
2999e19dfac4Smrg	      ;;
3000e19dfac4Smrg	    esac
300127702724Smrg	    ;;
300227702724Smrg	  esac
3003e19dfac4Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004e19dfac4Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
300527702724Smrg	  fi
3006e19dfac4Smrg
3007e19dfac4Smrg	  if test "$#" -gt 0; then
3008e19dfac4Smrg	    # Delete the old symlinks, and create new ones.
3009e19dfac4Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010e19dfac4Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011e19dfac4Smrg	    # so we also need to try rm && ln -s.
3012e19dfac4Smrg	    for linkname
3013e19dfac4Smrg	    do
3014e19dfac4Smrg	      test "$linkname" != "$realname" \
3015e19dfac4Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
301627702724Smrg	    done
301727702724Smrg	  fi
301827702724Smrg
3019e19dfac4Smrg	  # Do each command in the postinstall commands.
3020e19dfac4Smrg	  lib="$destdir/$realname"
3021e19dfac4Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
302227702724Smrg	fi
302327702724Smrg
3024e19dfac4Smrg	# Install the pseudo-library for information purposes.
3025e19dfac4Smrg	func_basename "$file"
3026e19dfac4Smrg	name="$func_basename_result"
3027e19dfac4Smrg	instname="$dir/$name"i
3028e19dfac4Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
302927702724Smrg
3030e19dfac4Smrg	# Maybe install the static library, too.
3031313a12fdSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032e19dfac4Smrg	;;
303327702724Smrg
3034e19dfac4Smrg      *.lo)
3035e19dfac4Smrg	# Install (i.e. copy) a libtool object.
303627702724Smrg
3037e19dfac4Smrg	# Figure out destination file name, if it wasn't already specified.
3038e19dfac4Smrg	if test -n "$destname"; then
3039e19dfac4Smrg	  destfile="$destdir/$destname"
3040e19dfac4Smrg	else
3041e19dfac4Smrg	  func_basename "$file"
3042e19dfac4Smrg	  destfile="$func_basename_result"
3043e19dfac4Smrg	  destfile="$destdir/$destfile"
3044e19dfac4Smrg	fi
3045e19dfac4Smrg
3046e19dfac4Smrg	# Deduce the name of the destination old-style object file.
3047e19dfac4Smrg	case $destfile in
3048e19dfac4Smrg	*.lo)
3049e19dfac4Smrg	  func_lo2o "$destfile"
3050e19dfac4Smrg	  staticdest=$func_lo2o_result
3051e19dfac4Smrg	  ;;
3052e19dfac4Smrg	*.$objext)
3053e19dfac4Smrg	  staticdest="$destfile"
3054e19dfac4Smrg	  destfile=
3055e19dfac4Smrg	  ;;
3056e19dfac4Smrg	*)
3057e19dfac4Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058e19dfac4Smrg	  ;;
305927702724Smrg	esac
306027702724Smrg
3061e19dfac4Smrg	# Install the libtool object if requested.
3062e19dfac4Smrg	test -n "$destfile" && \
3063e19dfac4Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064e19dfac4Smrg
3065e19dfac4Smrg	# Install the old object if enabled.
3066e19dfac4Smrg	if test "$build_old_libs" = yes; then
3067e19dfac4Smrg	  # Deduce the name of the old-style object file.
3068e19dfac4Smrg	  func_lo2o "$file"
3069e19dfac4Smrg	  staticobj=$func_lo2o_result
3070e19dfac4Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
307127702724Smrg	fi
3072e19dfac4Smrg	exit $EXIT_SUCCESS
3073e19dfac4Smrg	;;
307427702724Smrg
3075e19dfac4Smrg      *)
3076e19dfac4Smrg	# Figure out destination file name, if it wasn't already specified.
3077e19dfac4Smrg	if test -n "$destname"; then
3078e19dfac4Smrg	  destfile="$destdir/$destname"
3079e19dfac4Smrg	else
3080e19dfac4Smrg	  func_basename "$file"
3081e19dfac4Smrg	  destfile="$func_basename_result"
3082e19dfac4Smrg	  destfile="$destdir/$destfile"
3083e19dfac4Smrg	fi
3084e19dfac4Smrg
3085e19dfac4Smrg	# If the file is missing, and there is a .exe on the end, strip it
3086e19dfac4Smrg	# because it is most likely a libtool script we actually want to
3087e19dfac4Smrg	# install
3088e19dfac4Smrg	stripped_ext=""
3089e19dfac4Smrg	case $file in
3090e19dfac4Smrg	  *.exe)
3091e19dfac4Smrg	    if test ! -f "$file"; then
3092e19dfac4Smrg	      func_stripname '' '.exe' "$file"
3093e19dfac4Smrg	      file=$func_stripname_result
3094e19dfac4Smrg	      stripped_ext=".exe"
309527702724Smrg	    fi
3096e19dfac4Smrg	    ;;
3097e19dfac4Smrg	esac
309827702724Smrg
3099e19dfac4Smrg	# Do a test to see if this is really a libtool program.
3100e19dfac4Smrg	case $host in
3101e19dfac4Smrg	*cygwin* | *mingw*)
3102e19dfac4Smrg	    if func_ltwrapper_executable_p "$file"; then
3103e19dfac4Smrg	      func_ltwrapper_scriptname "$file"
3104e19dfac4Smrg	      wrapper=$func_ltwrapper_scriptname_result
3105e19dfac4Smrg	    else
3106e19dfac4Smrg	      func_stripname '' '.exe' "$file"
3107e19dfac4Smrg	      wrapper=$func_stripname_result
3108e19dfac4Smrg	    fi
3109e19dfac4Smrg	    ;;
3110e19dfac4Smrg	*)
3111e19dfac4Smrg	    wrapper=$file
3112e19dfac4Smrg	    ;;
3113e19dfac4Smrg	esac
3114e19dfac4Smrg	if func_ltwrapper_script_p "$wrapper"; then
3115e19dfac4Smrg	  notinst_deplibs=
3116e19dfac4Smrg	  relink_command=
311727702724Smrg
3118e19dfac4Smrg	  func_source "$wrapper"
311927702724Smrg
3120e19dfac4Smrg	  # Check the variables that should have been set.
3121e19dfac4Smrg	  test -z "$generated_by_libtool_version" && \
3122e19dfac4Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123e19dfac4Smrg
3124e19dfac4Smrg	  finalize=yes
3125e19dfac4Smrg	  for lib in $notinst_deplibs; do
3126e19dfac4Smrg	    # Check to see that each library is installed.
3127e19dfac4Smrg	    libdir=
3128e19dfac4Smrg	    if test -f "$lib"; then
3129e19dfac4Smrg	      func_source "$lib"
3130e19dfac4Smrg	    fi
3131313a12fdSmrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132e19dfac4Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3133e19dfac4Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134e19dfac4Smrg	      finalize=no
3135e19dfac4Smrg	    fi
3136e19dfac4Smrg	  done
3137e19dfac4Smrg
3138e19dfac4Smrg	  relink_command=
3139e19dfac4Smrg	  func_source "$wrapper"
3140e19dfac4Smrg
3141e19dfac4Smrg	  outputname=
3142e19dfac4Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143e19dfac4Smrg	    $opt_dry_run || {
3144e19dfac4Smrg	      if test "$finalize" = yes; then
3145e19dfac4Smrg	        tmpdir=`func_mktempdir`
3146e19dfac4Smrg		func_basename "$file$stripped_ext"
3147e19dfac4Smrg		file="$func_basename_result"
3148e19dfac4Smrg	        outputname="$tmpdir/$file"
3149e19dfac4Smrg	        # Replace the output file specification.
3150313a12fdSmrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151e19dfac4Smrg
3152e19dfac4Smrg	        $opt_silent || {
3153e19dfac4Smrg	          func_quote_for_expand "$relink_command"
3154e19dfac4Smrg		  eval "func_echo $func_quote_for_expand_result"
3155e19dfac4Smrg	        }
3156e19dfac4Smrg	        if eval "$relink_command"; then :
3157e19dfac4Smrg	          else
3158e19dfac4Smrg		  func_error "error: relink \`$file' with the above command before installing it"
3159e19dfac4Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160e19dfac4Smrg		  continue
3161e19dfac4Smrg	        fi
3162e19dfac4Smrg	        file="$outputname"
3163e19dfac4Smrg	      else
3164e19dfac4Smrg	        func_warning "cannot relink \`$file'"
3165e19dfac4Smrg	      fi
3166e19dfac4Smrg	    }
316727702724Smrg	  else
3168e19dfac4Smrg	    # Install the binary that we compiled earlier.
3169313a12fdSmrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
317027702724Smrg	  fi
3171e19dfac4Smrg	fi
317227702724Smrg
3173e19dfac4Smrg	# remove .exe since cygwin /usr/bin/install will append another
3174e19dfac4Smrg	# one anyway
3175e19dfac4Smrg	case $install_prog,$host in
3176e19dfac4Smrg	*/usr/bin/install*,*cygwin*)
3177e19dfac4Smrg	  case $file:$destfile in
3178e19dfac4Smrg	  *.exe:*.exe)
3179e19dfac4Smrg	    # this is ok
3180e19dfac4Smrg	    ;;
3181e19dfac4Smrg	  *.exe:*)
3182e19dfac4Smrg	    destfile=$destfile.exe
3183e19dfac4Smrg	    ;;
3184e19dfac4Smrg	  *:*.exe)
3185e19dfac4Smrg	    func_stripname '' '.exe' "$destfile"
3186e19dfac4Smrg	    destfile=$func_stripname_result
3187e19dfac4Smrg	    ;;
3188e19dfac4Smrg	  esac
318927702724Smrg	  ;;
319027702724Smrg	esac
3191e19dfac4Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192e19dfac4Smrg	$opt_dry_run || if test -n "$outputname"; then
3193e19dfac4Smrg	  ${RM}r "$tmpdir"
3194e19dfac4Smrg	fi
3195e19dfac4Smrg	;;
3196e19dfac4Smrg      esac
3197e19dfac4Smrg    done
319827702724Smrg
3199e19dfac4Smrg    for file in $staticlibs; do
3200e19dfac4Smrg      func_basename "$file"
3201e19dfac4Smrg      name="$func_basename_result"
320227702724Smrg
3203e19dfac4Smrg      # Set up the ranlib parameters.
3204e19dfac4Smrg      oldlib="$destdir/$name"
3205313a12fdSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206313a12fdSmrg      tool_oldlib=$func_to_tool_file_result
320727702724Smrg
3208e19dfac4Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
320927702724Smrg
3210e19dfac4Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
3211313a12fdSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212e19dfac4Smrg      fi
321327702724Smrg
3214e19dfac4Smrg      # Do each command in the postinstall commands.
3215e19dfac4Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216e19dfac4Smrg    done
321727702724Smrg
3218e19dfac4Smrg    test -n "$future_libdirs" && \
3219e19dfac4Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
322027702724Smrg
3221e19dfac4Smrg    if test -n "$current_libdirs"; then
3222e19dfac4Smrg      # Maybe just do a dry run.
3223e19dfac4Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224e19dfac4Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225e19dfac4Smrg    else
3226e19dfac4Smrg      exit $EXIT_SUCCESS
3227e19dfac4Smrg    fi
3228e19dfac4Smrg}
322927702724Smrg
3230313a12fdSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
323127702724Smrg
323227702724Smrg
3233e19dfac4Smrg# func_generate_dlsyms outputname originator pic_p
3234e19dfac4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235e19dfac4Smrg# a dlpreopen symbol table.
3236e19dfac4Smrgfunc_generate_dlsyms ()
3237e19dfac4Smrg{
3238e19dfac4Smrg    $opt_debug
3239e19dfac4Smrg    my_outputname="$1"
3240e19dfac4Smrg    my_originator="$2"
3241e19dfac4Smrg    my_pic_p="${3-no}"
3242e19dfac4Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243e19dfac4Smrg    my_dlsyms=
3244e19dfac4Smrg
3245e19dfac4Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246e19dfac4Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247e19dfac4Smrg	my_dlsyms="${my_outputname}S.c"
3248e19dfac4Smrg      else
3249e19dfac4Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3250e19dfac4Smrg      fi
3251e19dfac4Smrg    fi
325227702724Smrg
3253e19dfac4Smrg    if test -n "$my_dlsyms"; then
3254e19dfac4Smrg      case $my_dlsyms in
3255e19dfac4Smrg      "") ;;
3256e19dfac4Smrg      *.c)
3257e19dfac4Smrg	# Discover the nlist of each of the dlfiles.
3258e19dfac4Smrg	nlist="$output_objdir/${my_outputname}.nm"
3259e19dfac4Smrg
3260e19dfac4Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261e19dfac4Smrg
3262e19dfac4Smrg	# Parse the name list into a source file.
3263e19dfac4Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264e19dfac4Smrg
3265e19dfac4Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266e19dfac4Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267e19dfac4Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268e19dfac4Smrg
3269e19dfac4Smrg#ifdef __cplusplus
3270e19dfac4Smrgextern \"C\" {
3271e19dfac4Smrg#endif
3272e19dfac4Smrg
3273313a12fdSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3274313a12fdSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3275313a12fdSmrg#endif
3276313a12fdSmrg
3277313a12fdSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
3278313a12fdSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
3279313a12fdSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
3280313a12fdSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3281313a12fdSmrg# define LT_DLSYM_CONST
3282313a12fdSmrg#elif defined(__osf__)
3283313a12fdSmrg/* This system does not cope well with relocations in const data.  */
3284313a12fdSmrg# define LT_DLSYM_CONST
3285313a12fdSmrg#else
3286313a12fdSmrg# define LT_DLSYM_CONST const
3287313a12fdSmrg#endif
3288313a12fdSmrg
3289e19dfac4Smrg/* External symbol declarations for the compiler. */\
3290e19dfac4Smrg"
3291e19dfac4Smrg
3292e19dfac4Smrg	if test "$dlself" = yes; then
3293e19dfac4Smrg	  func_verbose "generating symbol list for \`$output'"
3294e19dfac4Smrg
3295e19dfac4Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296e19dfac4Smrg
3297e19dfac4Smrg	  # Add our own program objects to the symbol list.
3298313a12fdSmrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299e19dfac4Smrg	  for progfile in $progfiles; do
3300313a12fdSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
3301313a12fdSmrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3302313a12fdSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303e19dfac4Smrg	  done
3304e19dfac4Smrg
3305e19dfac4Smrg	  if test -n "$exclude_expsyms"; then
3306e19dfac4Smrg	    $opt_dry_run || {
3307e19dfac4Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
3309e19dfac4Smrg	    }
331027702724Smrg	  fi
331127702724Smrg
3312e19dfac4Smrg	  if test -n "$export_symbols_regex"; then
3313e19dfac4Smrg	    $opt_dry_run || {
3314e19dfac4Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
3316e19dfac4Smrg	    }
331727702724Smrg	  fi
3318e19dfac4Smrg
3319e19dfac4Smrg	  # Prepare the list of exported symbols
3320e19dfac4Smrg	  if test -z "$export_symbols"; then
3321e19dfac4Smrg	    export_symbols="$output_objdir/$outputname.exp"
3322e19dfac4Smrg	    $opt_dry_run || {
3323e19dfac4Smrg	      $RM $export_symbols
3324e19dfac4Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325e19dfac4Smrg	      case $host in
3326e19dfac4Smrg	      *cygwin* | *mingw* | *cegcc* )
3327e19dfac4Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328e19dfac4Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329e19dfac4Smrg	        ;;
333027702724Smrg	      esac
3331e19dfac4Smrg	    }
3332e19dfac4Smrg	  else
3333e19dfac4Smrg	    $opt_dry_run || {
3334e19dfac4Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335e19dfac4Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
3337e19dfac4Smrg	      case $host in
3338313a12fdSmrg	        *cygwin* | *mingw* | *cegcc* )
3339e19dfac4Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340e19dfac4Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341e19dfac4Smrg	          ;;
334227702724Smrg	      esac
3343e19dfac4Smrg	    }
334427702724Smrg	  fi
3345e19dfac4Smrg	fi
334627702724Smrg
3347e19dfac4Smrg	for dlprefile in $dlprefiles; do
3348e19dfac4Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349e19dfac4Smrg	  func_basename "$dlprefile"
3350e19dfac4Smrg	  name="$func_basename_result"
3351313a12fdSmrg          case $host in
3352313a12fdSmrg	    *cygwin* | *mingw* | *cegcc* )
3353313a12fdSmrg	      # if an import library, we need to obtain dlname
3354313a12fdSmrg	      if func_win32_import_lib_p "$dlprefile"; then
3355313a12fdSmrg	        func_tr_sh "$dlprefile"
3356313a12fdSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
3357313a12fdSmrg	        dlprefile_dlbasename=""
3358313a12fdSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3359313a12fdSmrg	          # Use subshell, to avoid clobbering current variable values
3360313a12fdSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
3361313a12fdSmrg	          if test -n "$dlprefile_dlname" ; then
3362313a12fdSmrg	            func_basename "$dlprefile_dlname"
3363313a12fdSmrg	            dlprefile_dlbasename="$func_basename_result"
3364313a12fdSmrg	          else
3365313a12fdSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
3366313a12fdSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
3367313a12fdSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3368313a12fdSmrg	          fi
3369313a12fdSmrg	        fi
3370313a12fdSmrg	        $opt_dry_run || {
3371313a12fdSmrg	          if test -n "$dlprefile_dlbasename" ; then
3372313a12fdSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3373313a12fdSmrg	          else
3374313a12fdSmrg	            func_warning "Could not compute DLL name from $name"
3375313a12fdSmrg	            eval '$ECHO ": $name " >> "$nlist"'
3376313a12fdSmrg	          fi
3377313a12fdSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3378313a12fdSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3379313a12fdSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3380313a12fdSmrg	        }
3381313a12fdSmrg	      else # not an import lib
3382313a12fdSmrg	        $opt_dry_run || {
3383313a12fdSmrg	          eval '$ECHO ": $name " >> "$nlist"'
3384313a12fdSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3385313a12fdSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3386313a12fdSmrg	        }
3387313a12fdSmrg	      fi
3388313a12fdSmrg	    ;;
3389313a12fdSmrg	    *)
3390313a12fdSmrg	      $opt_dry_run || {
3391313a12fdSmrg	        eval '$ECHO ": $name " >> "$nlist"'
3392313a12fdSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3393313a12fdSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3394313a12fdSmrg	      }
3395313a12fdSmrg	    ;;
3396313a12fdSmrg          esac
3397e19dfac4Smrg	done
339827702724Smrg
3399e19dfac4Smrg	$opt_dry_run || {
3400e19dfac4Smrg	  # Make sure we have at least an empty file.
3401e19dfac4Smrg	  test -f "$nlist" || : > "$nlist"
340227702724Smrg
3403e19dfac4Smrg	  if test -n "$exclude_expsyms"; then
3404e19dfac4Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405e19dfac4Smrg	    $MV "$nlist"T "$nlist"
340627702724Smrg	  fi
340727702724Smrg
3408e19dfac4Smrg	  # Try sorting and uniquifying the output.
3409e19dfac4Smrg	  if $GREP -v "^: " < "$nlist" |
3410e19dfac4Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411e19dfac4Smrg		sort -k 3
341227702724Smrg	      else
3413e19dfac4Smrg		sort +2
3414e19dfac4Smrg	      fi |
3415e19dfac4Smrg	      uniq > "$nlist"S; then
3416e19dfac4Smrg	    :
341727702724Smrg	  else
3418e19dfac4Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
341927702724Smrg	  fi
342027702724Smrg
3421e19dfac4Smrg	  if test -f "$nlist"S; then
3422e19dfac4Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
342327702724Smrg	  else
3424313a12fdSmrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
342527702724Smrg	  fi
342627702724Smrg
3427313a12fdSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
342827702724Smrg
3429e19dfac4Smrg/* The mapping between symbol names and symbols.  */
3430e19dfac4Smrgtypedef struct {
3431e19dfac4Smrg  const char *name;
3432e19dfac4Smrg  void *address;
3433e19dfac4Smrg} lt_dlsymlist;
3434313a12fdSmrgextern LT_DLSYM_CONST lt_dlsymlist
3435e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[];
3436313a12fdSmrgLT_DLSYM_CONST lt_dlsymlist
3437e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
3438e19dfac4Smrg{\
3439e19dfac4Smrg  { \"$my_originator\", (void *) 0 },"
3440e19dfac4Smrg
3441e19dfac4Smrg	  case $need_lib_prefix in
3442e19dfac4Smrg	  no)
3443e19dfac4Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444e19dfac4Smrg	    ;;
3445e19dfac4Smrg	  *)
3446e19dfac4Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447e19dfac4Smrg	    ;;
3448e19dfac4Smrg	  esac
3449313a12fdSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450e19dfac4Smrg  {0, (void *) 0}
3451e19dfac4Smrg};
3452e19dfac4Smrg
3453e19dfac4Smrg/* This works around a problem in FreeBSD linker */
3454e19dfac4Smrg#ifdef FREEBSD_WORKAROUND
3455e19dfac4Smrgstatic const void *lt_preloaded_setup() {
3456e19dfac4Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457e19dfac4Smrg}
3458e19dfac4Smrg#endif
3459e19dfac4Smrg
3460e19dfac4Smrg#ifdef __cplusplus
3461e19dfac4Smrg}
3462e19dfac4Smrg#endif\
3463e19dfac4Smrg"
3464e19dfac4Smrg	} # !$opt_dry_run
3465e19dfac4Smrg
3466e19dfac4Smrg	pic_flag_for_symtable=
3467e19dfac4Smrg	case "$compile_command " in
3468e19dfac4Smrg	*" -static "*) ;;
3469e19dfac4Smrg	*)
3470e19dfac4Smrg	  case $host in
3471e19dfac4Smrg	  # compiling the symbol table file with pic_flag works around
3472e19dfac4Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473e19dfac4Smrg	  # linked before any other PIC object.  But we must not use
3474e19dfac4Smrg	  # pic_flag when linking with -static.  The problem exists in
3475e19dfac4Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476313a12fdSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477e19dfac4Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478e19dfac4Smrg	  *-*-hpux*)
3479e19dfac4Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480e19dfac4Smrg	  *)
3481e19dfac4Smrg	    if test "X$my_pic_p" != Xno; then
3482e19dfac4Smrg	      pic_flag_for_symtable=" $pic_flag"
348327702724Smrg	    fi
3484e19dfac4Smrg	    ;;
3485e19dfac4Smrg	  esac
3486e19dfac4Smrg	  ;;
3487e19dfac4Smrg	esac
3488e19dfac4Smrg	symtab_cflags=
3489e19dfac4Smrg	for arg in $LTCFLAGS; do
3490e19dfac4Smrg	  case $arg in
3491e19dfac4Smrg	  -pie | -fpie | -fPIE) ;;
3492313a12fdSmrg	  *) func_append symtab_cflags " $arg" ;;
3493e19dfac4Smrg	  esac
3494e19dfac4Smrg	done
349527702724Smrg
3496e19dfac4Smrg	# Now compile the dynamic symbol file.
3497e19dfac4Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
349827702724Smrg
3499e19dfac4Smrg	# Clean up the generated files.
3500e19dfac4Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501e19dfac4Smrg
3502e19dfac4Smrg	# Transform the symbol file into the correct name.
3503e19dfac4Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504e19dfac4Smrg	case $host in
3505e19dfac4Smrg	*cygwin* | *mingw* | *cegcc* )
3506e19dfac4Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
3507313a12fdSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3508313a12fdSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509e19dfac4Smrg	  else
3510313a12fdSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3511313a12fdSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512e19dfac4Smrg	  fi
3513e19dfac4Smrg	  ;;
3514e19dfac4Smrg	*)
3515313a12fdSmrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3516313a12fdSmrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351727702724Smrg	  ;;
351827702724Smrg	esac
3519e19dfac4Smrg	;;
3520e19dfac4Smrg      *)
3521e19dfac4Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522e19dfac4Smrg	;;
3523e19dfac4Smrg      esac
3524e19dfac4Smrg    else
3525e19dfac4Smrg      # We keep going just in case the user didn't refer to
3526e19dfac4Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527e19dfac4Smrg      # really was required.
3528e19dfac4Smrg
3529e19dfac4Smrg      # Nullify the symbol file.
3530313a12fdSmrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3531313a12fdSmrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
353227702724Smrg    fi
3533e19dfac4Smrg}
353427702724Smrg
3535e19dfac4Smrg# func_win32_libid arg
3536e19dfac4Smrg# return the library type of file 'arg'
3537e19dfac4Smrg#
3538e19dfac4Smrg# Need a lot of goo to handle *both* DLLs and import libs
3539e19dfac4Smrg# Has to be a shell function in order to 'eat' the argument
3540e19dfac4Smrg# that is supplied when $file_magic_command is called.
3541313a12fdSmrg# Despite the name, also deal with 64 bit binaries.
3542e19dfac4Smrgfunc_win32_libid ()
3543e19dfac4Smrg{
3544e19dfac4Smrg  $opt_debug
3545e19dfac4Smrg  win32_libid_type="unknown"
3546e19dfac4Smrg  win32_fileres=`file -L $1 2>/dev/null`
3547e19dfac4Smrg  case $win32_fileres in
3548e19dfac4Smrg  *ar\ archive\ import\ library*) # definitely import
3549e19dfac4Smrg    win32_libid_type="x86 archive import"
3550e19dfac4Smrg    ;;
3551e19dfac4Smrg  *ar\ archive*) # could be an import, or static
3552313a12fdSmrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553e19dfac4Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3554313a12fdSmrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
3555313a12fdSmrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
3556313a12fdSmrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557e19dfac4Smrg	$SED -n -e '
3558e19dfac4Smrg	    1,100{
3559e19dfac4Smrg		/ I /{
3560e19dfac4Smrg		    s,.*,import,
3561e19dfac4Smrg		    p
3562e19dfac4Smrg		    q
3563e19dfac4Smrg		}
3564e19dfac4Smrg	    }'`
3565e19dfac4Smrg      case $win32_nmres in
3566e19dfac4Smrg      import*)  win32_libid_type="x86 archive import";;
3567e19dfac4Smrg      *)        win32_libid_type="x86 archive static";;
3568e19dfac4Smrg      esac
3569e19dfac4Smrg    fi
3570e19dfac4Smrg    ;;
3571e19dfac4Smrg  *DLL*)
3572e19dfac4Smrg    win32_libid_type="x86 DLL"
3573e19dfac4Smrg    ;;
3574e19dfac4Smrg  *executable*) # but shell scripts are "executable" too...
3575e19dfac4Smrg    case $win32_fileres in
3576e19dfac4Smrg    *MS\ Windows\ PE\ Intel*)
3577e19dfac4Smrg      win32_libid_type="x86 DLL"
3578e19dfac4Smrg      ;;
3579e19dfac4Smrg    esac
3580e19dfac4Smrg    ;;
3581e19dfac4Smrg  esac
3582e19dfac4Smrg  $ECHO "$win32_libid_type"
3583e19dfac4Smrg}
358427702724Smrg
3585313a12fdSmrg# func_cygming_dll_for_implib ARG
3586313a12fdSmrg#
3587313a12fdSmrg# Platform-specific function to extract the
3588313a12fdSmrg# name of the DLL associated with the specified
3589313a12fdSmrg# import library ARG.
3590313a12fdSmrg# Invoked by eval'ing the libtool variable
3591313a12fdSmrg#    $sharedlib_from_linklib_cmd
3592313a12fdSmrg# Result is available in the variable
3593313a12fdSmrg#    $sharedlib_from_linklib_result
3594313a12fdSmrgfunc_cygming_dll_for_implib ()
3595313a12fdSmrg{
3596313a12fdSmrg  $opt_debug
3597313a12fdSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3598313a12fdSmrg}
3599313a12fdSmrg
3600313a12fdSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3601313a12fdSmrg#
3602313a12fdSmrg# The is the core of a fallback implementation of a
3603313a12fdSmrg# platform-specific function to extract the name of the
3604313a12fdSmrg# DLL associated with the specified import library LIBNAME.
3605313a12fdSmrg#
3606313a12fdSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
3607313a12fdSmrg# on the platform and compiler that created the implib.
3608313a12fdSmrg#
3609313a12fdSmrg# Echos the name of the DLL associated with the
3610313a12fdSmrg# specified import library.
3611313a12fdSmrgfunc_cygming_dll_for_implib_fallback_core ()
3612313a12fdSmrg{
3613313a12fdSmrg  $opt_debug
3614313a12fdSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3615313a12fdSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3616313a12fdSmrg    $SED '/^Contents of section '"$match_literal"':/{
3617313a12fdSmrg      # Place marker at beginning of archive member dllname section
3618313a12fdSmrg      s/.*/====MARK====/
3619313a12fdSmrg      p
3620313a12fdSmrg      d
3621313a12fdSmrg    }
3622313a12fdSmrg    # These lines can sometimes be longer than 43 characters, but
3623313a12fdSmrg    # are always uninteresting
3624313a12fdSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
3625313a12fdSmrg    /^In archive [^:]*:/d
3626313a12fdSmrg    # Ensure marker is printed
3627313a12fdSmrg    /^====MARK====/p
3628313a12fdSmrg    # Remove all lines with less than 43 characters
3629313a12fdSmrg    /^.\{43\}/!d
3630313a12fdSmrg    # From remaining lines, remove first 43 characters
3631313a12fdSmrg    s/^.\{43\}//' |
3632313a12fdSmrg    $SED -n '
3633313a12fdSmrg      # Join marker and all lines until next marker into a single line
3634313a12fdSmrg      /^====MARK====/ b para
3635313a12fdSmrg      H
3636313a12fdSmrg      $ b para
3637313a12fdSmrg      b
3638313a12fdSmrg      :para
3639313a12fdSmrg      x
3640313a12fdSmrg      s/\n//g
3641313a12fdSmrg      # Remove the marker
3642313a12fdSmrg      s/^====MARK====//
3643313a12fdSmrg      # Remove trailing dots and whitespace
3644313a12fdSmrg      s/[\. \t]*$//
3645313a12fdSmrg      # Print
3646313a12fdSmrg      /./p' |
3647313a12fdSmrg    # we now have a list, one entry per line, of the stringified
3648313a12fdSmrg    # contents of the appropriate section of all members of the
3649313a12fdSmrg    # archive which possess that section. Heuristic: eliminate
3650313a12fdSmrg    # all those which have a first or second character that is
3651313a12fdSmrg    # a '.' (that is, objdump's representation of an unprintable
3652313a12fdSmrg    # character.) This should work for all archives with less than
3653313a12fdSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
3654313a12fdSmrg    # begins with a literal '.' or a single character followed by
3655313a12fdSmrg    # a '.'.
3656313a12fdSmrg    #
3657313a12fdSmrg    # Of those that remain, print the first one.
3658313a12fdSmrg    $SED -e '/^\./d;/^.\./d;q'
3659313a12fdSmrg}
3660313a12fdSmrg
3661313a12fdSmrg# func_cygming_gnu_implib_p ARG
3662313a12fdSmrg# This predicate returns with zero status (TRUE) if
3663313a12fdSmrg# ARG is a GNU/binutils-style import library. Returns
3664313a12fdSmrg# with nonzero status (FALSE) otherwise.
3665313a12fdSmrgfunc_cygming_gnu_implib_p ()
3666313a12fdSmrg{
3667313a12fdSmrg  $opt_debug
3668313a12fdSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3669313a12fdSmrg  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)$'`
3670313a12fdSmrg  test -n "$func_cygming_gnu_implib_tmp"
3671313a12fdSmrg}
3672313a12fdSmrg
3673313a12fdSmrg# func_cygming_ms_implib_p ARG
3674313a12fdSmrg# This predicate returns with zero status (TRUE) if
3675313a12fdSmrg# ARG is an MS-style import library. Returns
3676313a12fdSmrg# with nonzero status (FALSE) otherwise.
3677313a12fdSmrgfunc_cygming_ms_implib_p ()
3678313a12fdSmrg{
3679313a12fdSmrg  $opt_debug
3680313a12fdSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3681313a12fdSmrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
3682313a12fdSmrg  test -n "$func_cygming_ms_implib_tmp"
3683313a12fdSmrg}
3684313a12fdSmrg
3685313a12fdSmrg# func_cygming_dll_for_implib_fallback ARG
3686313a12fdSmrg# Platform-specific function to extract the
3687313a12fdSmrg# name of the DLL associated with the specified
3688313a12fdSmrg# import library ARG.
3689313a12fdSmrg#
3690313a12fdSmrg# This fallback implementation is for use when $DLLTOOL
3691313a12fdSmrg# does not support the --identify-strict option.
3692313a12fdSmrg# Invoked by eval'ing the libtool variable
3693313a12fdSmrg#    $sharedlib_from_linklib_cmd
3694313a12fdSmrg# Result is available in the variable
3695313a12fdSmrg#    $sharedlib_from_linklib_result
3696313a12fdSmrgfunc_cygming_dll_for_implib_fallback ()
3697313a12fdSmrg{
3698313a12fdSmrg  $opt_debug
3699313a12fdSmrg  if func_cygming_gnu_implib_p "$1" ; then
3700313a12fdSmrg    # binutils import library
3701313a12fdSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
3702313a12fdSmrg  elif func_cygming_ms_implib_p "$1" ; then
3703313a12fdSmrg    # ms-generated import library
3704313a12fdSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3705313a12fdSmrg  else
3706313a12fdSmrg    # unknown
3707313a12fdSmrg    sharedlib_from_linklib_result=""
3708313a12fdSmrg  fi
3709313a12fdSmrg}
371027702724Smrg
371127702724Smrg
3712e19dfac4Smrg# func_extract_an_archive dir oldlib
3713e19dfac4Smrgfunc_extract_an_archive ()
3714e19dfac4Smrg{
3715e19dfac4Smrg    $opt_debug
3716e19dfac4Smrg    f_ex_an_ar_dir="$1"; shift
3717e19dfac4Smrg    f_ex_an_ar_oldlib="$1"
3718313a12fdSmrg    if test "$lock_old_archive_extraction" = yes; then
3719313a12fdSmrg      lockfile=$f_ex_an_ar_oldlib.lock
3720313a12fdSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3721313a12fdSmrg	func_echo "Waiting for $lockfile to be removed"
3722313a12fdSmrg	sleep 2
3723313a12fdSmrg      done
3724313a12fdSmrg    fi
3725313a12fdSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3726313a12fdSmrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
3727313a12fdSmrg    if test "$lock_old_archive_extraction" = yes; then
3728313a12fdSmrg      $opt_dry_run || rm -f "$lockfile"
3729313a12fdSmrg    fi
3730e19dfac4Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731e19dfac4Smrg     :
3732e19dfac4Smrg    else
3733e19dfac4Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734e19dfac4Smrg    fi
3735e19dfac4Smrg}
373627702724Smrg
373727702724Smrg
3738e19dfac4Smrg# func_extract_archives gentop oldlib ...
3739e19dfac4Smrgfunc_extract_archives ()
3740e19dfac4Smrg{
3741e19dfac4Smrg    $opt_debug
3742e19dfac4Smrg    my_gentop="$1"; shift
3743e19dfac4Smrg    my_oldlibs=${1+"$@"}
3744e19dfac4Smrg    my_oldobjs=""
3745e19dfac4Smrg    my_xlib=""
3746e19dfac4Smrg    my_xabs=""
3747e19dfac4Smrg    my_xdir=""
374827702724Smrg
3749e19dfac4Smrg    for my_xlib in $my_oldlibs; do
3750e19dfac4Smrg      # Extract the objects.
3751e19dfac4Smrg      case $my_xlib in
3752e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753e19dfac4Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754e19dfac4Smrg      esac
3755e19dfac4Smrg      func_basename "$my_xlib"
3756e19dfac4Smrg      my_xlib="$func_basename_result"
3757e19dfac4Smrg      my_xlib_u=$my_xlib
3758e19dfac4Smrg      while :; do
3759e19dfac4Smrg        case " $extracted_archives " in
3760e19dfac4Smrg	*" $my_xlib_u "*)
3761e19dfac4Smrg	  func_arith $extracted_serial + 1
3762e19dfac4Smrg	  extracted_serial=$func_arith_result
3763e19dfac4Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764e19dfac4Smrg	*) break ;;
3765e19dfac4Smrg	esac
3766e19dfac4Smrg      done
3767e19dfac4Smrg      extracted_archives="$extracted_archives $my_xlib_u"
3768e19dfac4Smrg      my_xdir="$my_gentop/$my_xlib_u"
376927702724Smrg
3770e19dfac4Smrg      func_mkdir_p "$my_xdir"
377127702724Smrg
3772e19dfac4Smrg      case $host in
3773e19dfac4Smrg      *-darwin*)
3774e19dfac4Smrg	func_verbose "Extracting $my_xabs"
3775e19dfac4Smrg	# Do not bother doing anything if just a dry run
3776e19dfac4Smrg	$opt_dry_run || {
3777e19dfac4Smrg	  darwin_orig_dir=`pwd`
3778e19dfac4Smrg	  cd $my_xdir || exit $?
3779e19dfac4Smrg	  darwin_archive=$my_xabs
3780e19dfac4Smrg	  darwin_curdir=`pwd`
3781e19dfac4Smrg	  darwin_base_archive=`basename "$darwin_archive"`
3782e19dfac4Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783e19dfac4Smrg	  if test -n "$darwin_arches"; then
3784e19dfac4Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785e19dfac4Smrg	    darwin_arch=
3786e19dfac4Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787e19dfac4Smrg	    for darwin_arch in  $darwin_arches ; do
3788e19dfac4Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789e19dfac4Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790e19dfac4Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791e19dfac4Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792e19dfac4Smrg	      cd "$darwin_curdir"
3793e19dfac4Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794e19dfac4Smrg	    done # $darwin_arches
3795e19dfac4Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796e19dfac4Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797e19dfac4Smrg	    darwin_file=
3798e19dfac4Smrg	    darwin_files=
3799e19dfac4Smrg	    for darwin_file in $darwin_filelist; do
3800313a12fdSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801e19dfac4Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802e19dfac4Smrg	    done # $darwin_filelist
3803e19dfac4Smrg	    $RM -rf unfat-$$
3804e19dfac4Smrg	    cd "$darwin_orig_dir"
3805e19dfac4Smrg	  else
3806e19dfac4Smrg	    cd $darwin_orig_dir
3807e19dfac4Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808e19dfac4Smrg	  fi # $darwin_arches
3809e19dfac4Smrg	} # !$opt_dry_run
3810e19dfac4Smrg	;;
3811e19dfac4Smrg      *)
3812e19dfac4Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813e19dfac4Smrg	;;
381427702724Smrg      esac
3815313a12fdSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816e19dfac4Smrg    done
381727702724Smrg
3818e19dfac4Smrg    func_extract_archives_result="$my_oldobjs"
3819e19dfac4Smrg}
382027702724Smrg
382127702724Smrg
3822313a12fdSmrg# func_emit_wrapper [arg=no]
3823313a12fdSmrg#
3824313a12fdSmrg# Emit a libtool wrapper script on stdout.
3825313a12fdSmrg# Don't directly open a file because we may want to
3826313a12fdSmrg# incorporate the script contents within a cygwin/mingw
3827313a12fdSmrg# wrapper executable.  Must ONLY be called from within
3828313a12fdSmrg# func_mode_link because it depends on a number of variables
3829313a12fdSmrg# set therein.
3830e19dfac4Smrg#
3831313a12fdSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3832313a12fdSmrg# variable will take.  If 'yes', then the emitted script
3833313a12fdSmrg# will assume that the directory in which it is stored is
3834313a12fdSmrg# the $objdir directory.  This is a cygwin/mingw-specific
3835313a12fdSmrg# behavior.
3836313a12fdSmrgfunc_emit_wrapper ()
3837e19dfac4Smrg{
3838313a12fdSmrg	func_emit_wrapper_arg1=${1-no}
383927702724Smrg
3840e19dfac4Smrg	$ECHO "\
3841e19dfac4Smrg#! $SHELL
384227702724Smrg
3843e19dfac4Smrg# $output - temporary wrapper script for $objdir/$outputname
3844e19dfac4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845e19dfac4Smrg#
3846e19dfac4Smrg# The $output program cannot be directly executed until all the libtool
3847e19dfac4Smrg# libraries that it depends on are installed.
3848e19dfac4Smrg#
3849e19dfac4Smrg# This wrapper script should never be moved out of the build directory.
3850e19dfac4Smrg# If it is, it will not operate correctly.
385127702724Smrg
3852e19dfac4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853e19dfac4Smrg# metacharacters that are still active within double-quoted strings.
3854e19dfac4Smrgsed_quote_subst='$sed_quote_subst'
385527702724Smrg
3856e19dfac4Smrg# Be Bourne compatible
3857e19dfac4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858e19dfac4Smrg  emulate sh
3859e19dfac4Smrg  NULLCMD=:
3860e19dfac4Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861e19dfac4Smrg  # is contrary to our usage.  Disable this feature.
3862e19dfac4Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863e19dfac4Smrg  setopt NO_GLOB_SUBST
3864e19dfac4Smrgelse
3865e19dfac4Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866e19dfac4Smrgfi
3867e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh
386927702724Smrg
3870e19dfac4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871e19dfac4Smrg# if CDPATH is set.
3872e19dfac4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
387327702724Smrg
3874e19dfac4Smrgrelink_command=\"$relink_command\"
387527702724Smrg
3876e19dfac4Smrg# This environment variable determines our operation mode.
3877e19dfac4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878e19dfac4Smrg  # install mode needs the following variables:
3879e19dfac4Smrg  generated_by_libtool_version='$macro_version'
3880e19dfac4Smrg  notinst_deplibs='$notinst_deplibs'
3881e19dfac4Smrgelse
3882e19dfac4Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883e19dfac4Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3884313a12fdSmrg    file=\"\$0\""
3885313a12fdSmrg
3886313a12fdSmrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3887313a12fdSmrg    $ECHO "\
3888313a12fdSmrg
3889313a12fdSmrg# A function that is used when there is no print builtin or printf.
3890313a12fdSmrgfunc_fallback_echo ()
3891313a12fdSmrg{
3892313a12fdSmrg  eval 'cat <<_LTECHO_EOF
3893313a12fdSmrg\$1
3894313a12fdSmrg_LTECHO_EOF'
3895313a12fdSmrg}
3896313a12fdSmrg    ECHO=\"$qECHO\"
3897313a12fdSmrg  fi
3898313a12fdSmrg
3899313a12fdSmrg# Very basic option parsing. These options are (a) specific to
3900313a12fdSmrg# the libtool wrapper, (b) are identical between the wrapper
3901313a12fdSmrg# /script/ and the wrapper /executable/ which is used only on
3902313a12fdSmrg# windows platforms, and (c) all begin with the string "--lt-"
3903313a12fdSmrg# (application programs are unlikely to have options which match
3904313a12fdSmrg# this pattern).
3905313a12fdSmrg#
3906313a12fdSmrg# There are only two supported options: --lt-debug and
3907313a12fdSmrg# --lt-dump-script. There is, deliberately, no --lt-help.
3908313a12fdSmrg#
3909313a12fdSmrg# The first argument to this parsing function should be the
3910313a12fdSmrg# script's $0 value, followed by "$@".
3911313a12fdSmrglt_option_debug=
3912313a12fdSmrgfunc_parse_lt_options ()
3913313a12fdSmrg{
3914313a12fdSmrg  lt_script_arg0=\$0
3915313a12fdSmrg  shift
3916313a12fdSmrg  for lt_opt
3917313a12fdSmrg  do
3918313a12fdSmrg    case \"\$lt_opt\" in
3919313a12fdSmrg    --lt-debug) lt_option_debug=1 ;;
3920313a12fdSmrg    --lt-dump-script)
3921313a12fdSmrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3922313a12fdSmrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3923313a12fdSmrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3924313a12fdSmrg        cat \"\$lt_dump_D/\$lt_dump_F\"
3925313a12fdSmrg        exit 0
3926313a12fdSmrg      ;;
3927313a12fdSmrg    --lt-*)
3928313a12fdSmrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3929313a12fdSmrg        exit 1
3930313a12fdSmrg      ;;
3931313a12fdSmrg    esac
3932313a12fdSmrg  done
3933313a12fdSmrg
3934313a12fdSmrg  # Print the debug banner immediately:
3935313a12fdSmrg  if test -n \"\$lt_option_debug\"; then
3936313a12fdSmrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3937313a12fdSmrg  fi
3938313a12fdSmrg}
3939313a12fdSmrg
3940313a12fdSmrg# Used when --lt-debug. Prints its arguments to stdout
3941313a12fdSmrg# (redirection is the responsibility of the caller)
3942313a12fdSmrgfunc_lt_dump_args ()
3943313a12fdSmrg{
3944313a12fdSmrg  lt_dump_args_N=1;
3945313a12fdSmrg  for lt_arg
3946313a12fdSmrg  do
3947313a12fdSmrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3948313a12fdSmrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3949313a12fdSmrg  done
3950313a12fdSmrg}
3951313a12fdSmrg
3952313a12fdSmrg# Core function for launching the target application
3953313a12fdSmrgfunc_exec_program_core ()
3954313a12fdSmrg{
3955e19dfac4Smrg"
3956313a12fdSmrg  case $host in
3957313a12fdSmrg  # Backslashes separate directories on plain windows
3958313a12fdSmrg  *-*-mingw | *-*-os2* | *-cegcc*)
3959313a12fdSmrg    $ECHO "\
3960313a12fdSmrg      if test -n \"\$lt_option_debug\"; then
3961313a12fdSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3962313a12fdSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3963313a12fdSmrg      fi
3964313a12fdSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3965313a12fdSmrg"
3966313a12fdSmrg    ;;
3967313a12fdSmrg
3968313a12fdSmrg  *)
3969313a12fdSmrg    $ECHO "\
3970313a12fdSmrg      if test -n \"\$lt_option_debug\"; then
3971313a12fdSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3972313a12fdSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3973313a12fdSmrg      fi
3974313a12fdSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3975313a12fdSmrg"
3976313a12fdSmrg    ;;
3977313a12fdSmrg  esac
3978313a12fdSmrg  $ECHO "\
3979313a12fdSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3980313a12fdSmrg      exit 1
3981313a12fdSmrg}
3982313a12fdSmrg
3983313a12fdSmrg# A function to encapsulate launching the target application
3984313a12fdSmrg# Strips options in the --lt-* namespace from \$@ and
3985313a12fdSmrg# launches target application with the remaining arguments.
3986313a12fdSmrgfunc_exec_program ()
3987313a12fdSmrg{
3988313a12fdSmrg  case \" \$* \" in
3989313a12fdSmrg  *\\ --lt-*)
3990313a12fdSmrg    for lt_wr_arg
3991313a12fdSmrg    do
3992313a12fdSmrg      case \$lt_wr_arg in
3993313a12fdSmrg      --lt-*) ;;
3994313a12fdSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995313a12fdSmrg      esac
3996313a12fdSmrg      shift
3997313a12fdSmrg    done ;;
3998313a12fdSmrg  esac
3999313a12fdSmrg  func_exec_program_core \${1+\"\$@\"}
4000313a12fdSmrg}
4001313a12fdSmrg
4002313a12fdSmrg  # Parse options
4003313a12fdSmrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
400427702724Smrg
4005e19dfac4Smrg  # Find the directory that this script lives in.
4006313a12fdSmrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007e19dfac4Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
400827702724Smrg
4009e19dfac4Smrg  # Follow symbolic links until we get to the real thisdir.
4010313a12fdSmrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011e19dfac4Smrg  while test -n \"\$file\"; do
4012313a12fdSmrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
401327702724Smrg
4014e19dfac4Smrg    # If there was a directory component, then change thisdir.
4015e19dfac4Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4016e19dfac4Smrg      case \"\$destdir\" in
4017e19dfac4Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018e19dfac4Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019e19dfac4Smrg      esac
4020e19dfac4Smrg    fi
402127702724Smrg
4022313a12fdSmrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4023313a12fdSmrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024e19dfac4Smrg  done
402527702724Smrg
4026e19dfac4Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4027e19dfac4Smrg  # the cwrapper.
4028313a12fdSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029e19dfac4Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030e19dfac4Smrg    # special case for '.'
4031e19dfac4Smrg    if test \"\$thisdir\" = \".\"; then
4032e19dfac4Smrg      thisdir=\`pwd\`
4033e19dfac4Smrg    fi
4034e19dfac4Smrg    # remove .libs from thisdir
4035e19dfac4Smrg    case \"\$thisdir\" in
4036313a12fdSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037e19dfac4Smrg    $objdir )   thisdir=. ;;
4038e19dfac4Smrg    esac
4039e19dfac4Smrg  fi
404027702724Smrg
4041e19dfac4Smrg  # Try to get the absolute directory name.
4042e19dfac4Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043e19dfac4Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044e19dfac4Smrg"
404527702724Smrg
4046e19dfac4Smrg	if test "$fast_install" = yes; then
4047e19dfac4Smrg	  $ECHO "\
4048e19dfac4Smrg  program=lt-'$outputname'$exeext
4049e19dfac4Smrg  progdir=\"\$thisdir/$objdir\"
405027702724Smrg
4051e19dfac4Smrg  if test ! -f \"\$progdir/\$program\" ||
4052e19dfac4Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053e19dfac4Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
405427702724Smrg
4055e19dfac4Smrg    file=\"\$\$-\$program\"
405627702724Smrg
4057e19dfac4Smrg    if test ! -d \"\$progdir\"; then
4058e19dfac4Smrg      $MKDIR \"\$progdir\"
4059e19dfac4Smrg    else
4060e19dfac4Smrg      $RM \"\$progdir/\$file\"
4061e19dfac4Smrg    fi"
406227702724Smrg
4063e19dfac4Smrg	  $ECHO "\
406427702724Smrg
4065e19dfac4Smrg    # relink executable if necessary
4066e19dfac4Smrg    if test -n \"\$relink_command\"; then
4067e19dfac4Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068e19dfac4Smrg      else
4069e19dfac4Smrg	$ECHO \"\$relink_command_output\" >&2
4070e19dfac4Smrg	$RM \"\$progdir/\$file\"
4071e19dfac4Smrg	exit 1
4072e19dfac4Smrg      fi
4073e19dfac4Smrg    fi
407427702724Smrg
4075e19dfac4Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076e19dfac4Smrg    { $RM \"\$progdir/\$program\";
4077e19dfac4Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078e19dfac4Smrg    $RM \"\$progdir/\$file\"
4079e19dfac4Smrg  fi"
4080e19dfac4Smrg	else
4081e19dfac4Smrg	  $ECHO "\
4082e19dfac4Smrg  program='$outputname'
4083e19dfac4Smrg  progdir=\"\$thisdir/$objdir\"
4084e19dfac4Smrg"
4085e19dfac4Smrg	fi
408627702724Smrg
4087e19dfac4Smrg	$ECHO "\
408827702724Smrg
4089e19dfac4Smrg  if test -f \"\$progdir/\$program\"; then"
409027702724Smrg
4091313a12fdSmrg	# fixup the dll searchpath if we need to.
4092313a12fdSmrg	#
4093313a12fdSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
4094313a12fdSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
4095313a12fdSmrg	# libraries must come first.
4096313a12fdSmrg	if test -n "$dllsearchpath"; then
4097313a12fdSmrg	  $ECHO "\
4098313a12fdSmrg    # Add the dll search path components to the executable PATH
4099313a12fdSmrg    PATH=$dllsearchpath:\$PATH
4100313a12fdSmrg"
4101313a12fdSmrg	fi
4102313a12fdSmrg
4103e19dfac4Smrg	# Export our shlibpath_var if we have one.
4104e19dfac4Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105e19dfac4Smrg	  $ECHO "\
4106e19dfac4Smrg    # Add our own library path to $shlibpath_var
4107e19dfac4Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
410827702724Smrg
4109e19dfac4Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110e19dfac4Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
4111313a12fdSmrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
411227702724Smrg
4113e19dfac4Smrg    export $shlibpath_var
4114e19dfac4Smrg"
411527702724Smrg	fi
411627702724Smrg
4117e19dfac4Smrg	$ECHO "\
4118e19dfac4Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119e19dfac4Smrg      # Run the actual program with our arguments.
4120313a12fdSmrg      func_exec_program \${1+\"\$@\"}
4121e19dfac4Smrg    fi
4122e19dfac4Smrg  else
4123e19dfac4Smrg    # The program doesn't exist.
4124e19dfac4Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125e19dfac4Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4126313a12fdSmrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127e19dfac4Smrg    exit 1
4128e19dfac4Smrg  fi
4129e19dfac4Smrgfi\
4130e19dfac4Smrg"
4131e19dfac4Smrg}
413227702724Smrg
413327702724Smrg
4134e19dfac4Smrg# func_emit_cwrapperexe_src
4135e19dfac4Smrg# emit the source code for a wrapper executable on stdout
4136e19dfac4Smrg# Must ONLY be called from within func_mode_link because
4137e19dfac4Smrg# it depends on a number of variable set therein.
4138e19dfac4Smrgfunc_emit_cwrapperexe_src ()
4139e19dfac4Smrg{
4140e19dfac4Smrg	cat <<EOF
414127702724Smrg
4142e19dfac4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143e19dfac4Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
414427702724Smrg
4145e19dfac4Smrg   The $output program cannot be directly executed until all the libtool
4146e19dfac4Smrg   libraries that it depends on are installed.
414727702724Smrg
4148e19dfac4Smrg   This wrapper executable should never be moved out of the build directory.
4149e19dfac4Smrg   If it is, it will not operate correctly.
4150e19dfac4Smrg*/
4151e19dfac4SmrgEOF
4152e19dfac4Smrg	    cat <<"EOF"
4153313a12fdSmrg#ifdef _MSC_VER
4154313a12fdSmrg# define _CRT_SECURE_NO_DEPRECATE 1
4155313a12fdSmrg#endif
4156e19dfac4Smrg#include <stdio.h>
4157e19dfac4Smrg#include <stdlib.h>
4158e19dfac4Smrg#ifdef _MSC_VER
4159e19dfac4Smrg# include <direct.h>
4160e19dfac4Smrg# include <process.h>
4161e19dfac4Smrg# include <io.h>
4162e19dfac4Smrg#else
4163e19dfac4Smrg# include <unistd.h>
4164e19dfac4Smrg# include <stdint.h>
4165e19dfac4Smrg# ifdef __CYGWIN__
4166e19dfac4Smrg#  include <io.h>
4167e19dfac4Smrg# endif
4168e19dfac4Smrg#endif
4169e19dfac4Smrg#include <malloc.h>
4170e19dfac4Smrg#include <stdarg.h>
4171e19dfac4Smrg#include <assert.h>
4172e19dfac4Smrg#include <string.h>
4173e19dfac4Smrg#include <ctype.h>
4174e19dfac4Smrg#include <errno.h>
4175e19dfac4Smrg#include <fcntl.h>
4176e19dfac4Smrg#include <sys/stat.h>
4177e19dfac4Smrg
4178313a12fdSmrg/* declarations of non-ANSI functions */
4179313a12fdSmrg#if defined(__MINGW32__)
4180313a12fdSmrg# ifdef __STRICT_ANSI__
4181313a12fdSmrgint _putenv (const char *);
4182313a12fdSmrg# endif
4183313a12fdSmrg#elif defined(__CYGWIN__)
4184313a12fdSmrg# ifdef __STRICT_ANSI__
4185313a12fdSmrgchar *realpath (const char *, char *);
4186313a12fdSmrgint putenv (char *);
4187313a12fdSmrgint setenv (const char *, const char *, int);
4188313a12fdSmrg# endif
4189313a12fdSmrg/* #elif defined (other platforms) ... */
4190313a12fdSmrg#endif
4191313a12fdSmrg
4192313a12fdSmrg/* portability defines, excluding path handling macros */
4193313a12fdSmrg#if defined(_MSC_VER)
4194313a12fdSmrg# define setmode _setmode
4195313a12fdSmrg# define stat    _stat
4196313a12fdSmrg# define chmod   _chmod
4197313a12fdSmrg# define getcwd  _getcwd
4198313a12fdSmrg# define putenv  _putenv
4199313a12fdSmrg# define S_IXUSR _S_IEXEC
4200313a12fdSmrg# ifndef _INTPTR_T_DEFINED
4201313a12fdSmrg#  define _INTPTR_T_DEFINED
4202313a12fdSmrg#  define intptr_t int
4203313a12fdSmrg# endif
4204313a12fdSmrg#elif defined(__MINGW32__)
4205313a12fdSmrg# define setmode _setmode
4206313a12fdSmrg# define stat    _stat
4207313a12fdSmrg# define chmod   _chmod
4208313a12fdSmrg# define getcwd  _getcwd
4209313a12fdSmrg# define putenv  _putenv
4210313a12fdSmrg#elif defined(__CYGWIN__)
4211313a12fdSmrg# define HAVE_SETENV
4212313a12fdSmrg# define FOPEN_WB "wb"
4213313a12fdSmrg/* #elif defined (other platforms) ... */
4214313a12fdSmrg#endif
4215313a12fdSmrg
4216e19dfac4Smrg#if defined(PATH_MAX)
4217e19dfac4Smrg# define LT_PATHMAX PATH_MAX
4218e19dfac4Smrg#elif defined(MAXPATHLEN)
4219e19dfac4Smrg# define LT_PATHMAX MAXPATHLEN
4220e19dfac4Smrg#else
4221e19dfac4Smrg# define LT_PATHMAX 1024
4222e19dfac4Smrg#endif
4223e19dfac4Smrg
4224e19dfac4Smrg#ifndef S_IXOTH
4225e19dfac4Smrg# define S_IXOTH 0
4226e19dfac4Smrg#endif
4227e19dfac4Smrg#ifndef S_IXGRP
4228e19dfac4Smrg# define S_IXGRP 0
4229e19dfac4Smrg#endif
4230e19dfac4Smrg
4231313a12fdSmrg/* path handling portability macros */
4232e19dfac4Smrg#ifndef DIR_SEPARATOR
4233e19dfac4Smrg# define DIR_SEPARATOR '/'
4234e19dfac4Smrg# define PATH_SEPARATOR ':'
4235e19dfac4Smrg#endif
4236e19dfac4Smrg
4237e19dfac4Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238e19dfac4Smrg  defined (__OS2__)
4239e19dfac4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240e19dfac4Smrg# define FOPEN_WB "wb"
4241e19dfac4Smrg# ifndef DIR_SEPARATOR_2
4242e19dfac4Smrg#  define DIR_SEPARATOR_2 '\\'
4243e19dfac4Smrg# endif
4244e19dfac4Smrg# ifndef PATH_SEPARATOR_2
4245e19dfac4Smrg#  define PATH_SEPARATOR_2 ';'
4246e19dfac4Smrg# endif
4247e19dfac4Smrg#endif
4248e19dfac4Smrg
4249e19dfac4Smrg#ifndef DIR_SEPARATOR_2
4250e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251e19dfac4Smrg#else /* DIR_SEPARATOR_2 */
4252e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) \
4253e19dfac4Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254e19dfac4Smrg#endif /* DIR_SEPARATOR_2 */
4255e19dfac4Smrg
4256e19dfac4Smrg#ifndef PATH_SEPARATOR_2
4257e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258e19dfac4Smrg#else /* PATH_SEPARATOR_2 */
4259e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260e19dfac4Smrg#endif /* PATH_SEPARATOR_2 */
4261e19dfac4Smrg
4262e19dfac4Smrg#ifndef FOPEN_WB
4263e19dfac4Smrg# define FOPEN_WB "w"
4264e19dfac4Smrg#endif
4265e19dfac4Smrg#ifndef _O_BINARY
4266e19dfac4Smrg# define _O_BINARY 0
4267e19dfac4Smrg#endif
4268e19dfac4Smrg
4269e19dfac4Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270e19dfac4Smrg#define XFREE(stale) do { \
4271e19dfac4Smrg  if (stale) { free ((void *) stale); stale = 0; } \
4272e19dfac4Smrg} while (0)
4273e19dfac4Smrg
4274313a12fdSmrg#if defined(LT_DEBUGWRAPPER)
4275313a12fdSmrgstatic int lt_debug = 1;
4276e19dfac4Smrg#else
4277313a12fdSmrgstatic int lt_debug = 0;
4278e19dfac4Smrg#endif
4279e19dfac4Smrg
4280313a12fdSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281e19dfac4Smrg
4282e19dfac4Smrgvoid *xmalloc (size_t num);
4283e19dfac4Smrgchar *xstrdup (const char *string);
4284e19dfac4Smrgconst char *base_name (const char *name);
4285e19dfac4Smrgchar *find_executable (const char *wrapper);
4286e19dfac4Smrgchar *chase_symlinks (const char *pathspec);
4287e19dfac4Smrgint make_executable (const char *path);
4288e19dfac4Smrgint check_executable (const char *path);
4289e19dfac4Smrgchar *strendzap (char *str, const char *pat);
4290313a12fdSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4291313a12fdSmrgvoid lt_fatal (const char *file, int line, const char *message, ...);
4292313a12fdSmrgstatic const char *nonnull (const char *s);
4293313a12fdSmrgstatic const char *nonempty (const char *s);
4294e19dfac4Smrgvoid lt_setenv (const char *name, const char *value);
4295e19dfac4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296e19dfac4Smrgvoid lt_update_exe_path (const char *name, const char *value);
4297e19dfac4Smrgvoid lt_update_lib_path (const char *name, const char *value);
4298313a12fdSmrgchar **prepare_spawn (char **argv);
4299313a12fdSmrgvoid lt_dump_script (FILE *f);
4300e19dfac4SmrgEOF
4301e19dfac4Smrg
4302e19dfac4Smrg	    cat <<EOF
4303313a12fdSmrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304e19dfac4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305e19dfac4SmrgEOF
4306e19dfac4Smrg
4307e19dfac4Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4308313a12fdSmrg              func_to_host_path "$temp_rpath"
4309e19dfac4Smrg	      cat <<EOF
4310313a12fdSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
431127702724SmrgEOF
431227702724Smrg	    else
4313e19dfac4Smrg	      cat <<"EOF"
4314e19dfac4Smrgconst char * LIB_PATH_VALUE   = "";
4315e19dfac4SmrgEOF
431627702724Smrg	    fi
4317e19dfac4Smrg
4318e19dfac4Smrg	    if test -n "$dllsearchpath"; then
4319313a12fdSmrg              func_to_host_path "$dllsearchpath:"
4320e19dfac4Smrg	      cat <<EOF
4321e19dfac4Smrgconst char * EXE_PATH_VARNAME = "PATH";
4322313a12fdSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323e19dfac4SmrgEOF
432427702724Smrg	    else
4325e19dfac4Smrg	      cat <<"EOF"
4326e19dfac4Smrgconst char * EXE_PATH_VARNAME = "";
4327e19dfac4Smrgconst char * EXE_PATH_VALUE   = "";
4328e19dfac4SmrgEOF
432927702724Smrg	    fi
4330e19dfac4Smrg
4331e19dfac4Smrg	    if test "$fast_install" = yes; then
4332e19dfac4Smrg	      cat <<EOF
4333e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334e19dfac4SmrgEOF
433527702724Smrg	    else
4336e19dfac4Smrg	      cat <<EOF
4337e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338e19dfac4SmrgEOF
433927702724Smrg	    fi
434027702724Smrg
434127702724Smrg
4342e19dfac4Smrg	    cat <<"EOF"
434327702724Smrg
4344e19dfac4Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
434527702724Smrg
4346e19dfac4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347e19dfac4Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4348313a12fdSmrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
434927702724Smrg
4350e19dfac4Smrgint
4351e19dfac4Smrgmain (int argc, char *argv[])
4352e19dfac4Smrg{
4353e19dfac4Smrg  char **newargz;
4354e19dfac4Smrg  int  newargc;
4355e19dfac4Smrg  char *tmp_pathspec;
4356e19dfac4Smrg  char *actual_cwrapper_path;
4357e19dfac4Smrg  char *actual_cwrapper_name;
4358e19dfac4Smrg  char *target_name;
4359e19dfac4Smrg  char *lt_argv_zero;
4360e19dfac4Smrg  intptr_t rval = 127;
436127702724Smrg
4362e19dfac4Smrg  int i;
436327702724Smrg
4364e19dfac4Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
4365313a12fdSmrg  newargz = XMALLOC (char *, argc + 1);
436627702724Smrg
4367313a12fdSmrg  /* very simple arg parsing; don't want to rely on getopt
4368313a12fdSmrg   * also, copy all non cwrapper options to newargz, except
4369313a12fdSmrg   * argz[0], which is handled differently
4370313a12fdSmrg   */
4371313a12fdSmrg  newargc=0;
4372e19dfac4Smrg  for (i = 1; i < argc; i++)
4373e19dfac4Smrg    {
4374e19dfac4Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375e19dfac4Smrg	{
4376e19dfac4SmrgEOF
4377e19dfac4Smrg	    case "$host" in
4378e19dfac4Smrg	      *mingw* | *cygwin* )
4379e19dfac4Smrg		# make stdout use "unix" line endings
4380e19dfac4Smrg		echo "          setmode(1,_O_BINARY);"
4381e19dfac4Smrg		;;
4382e19dfac4Smrg	      esac
438327702724Smrg
4384e19dfac4Smrg	    cat <<"EOF"
4385313a12fdSmrg	  lt_dump_script (stdout);
4386e19dfac4Smrg	  return 0;
4387e19dfac4Smrg	}
4388313a12fdSmrg      if (strcmp (argv[i], debug_opt) == 0)
4389313a12fdSmrg	{
4390313a12fdSmrg          lt_debug = 1;
4391313a12fdSmrg          continue;
4392313a12fdSmrg	}
4393313a12fdSmrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4394313a12fdSmrg        {
4395313a12fdSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4396313a12fdSmrg             namespace, but it is not one of the ones we know about and
4397313a12fdSmrg             have already dealt with, above (inluding dump-script), then
4398313a12fdSmrg             report an error. Otherwise, targets might begin to believe
4399313a12fdSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4400313a12fdSmrg             namespace. The first time any user complains about this, we'll
4401313a12fdSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4402313a12fdSmrg             or a configure.ac-settable value.
4403313a12fdSmrg           */
4404313a12fdSmrg          lt_fatal (__FILE__, __LINE__,
4405313a12fdSmrg		    "unrecognized %s option: '%s'",
4406313a12fdSmrg                    ltwrapper_option_prefix, argv[i]);
4407313a12fdSmrg        }
4408313a12fdSmrg      /* otherwise ... */
4409313a12fdSmrg      newargz[++newargc] = xstrdup (argv[i]);
4410e19dfac4Smrg    }
4411313a12fdSmrg  newargz[++newargc] = NULL;
4412313a12fdSmrg
4413313a12fdSmrgEOF
4414313a12fdSmrg	    cat <<EOF
4415313a12fdSmrg  /* The GNU banner must be the first non-error debug message */
4416313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4417313a12fdSmrgEOF
4418313a12fdSmrg	    cat <<"EOF"
4419313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4420313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
442127702724Smrg
4422e19dfac4Smrg  tmp_pathspec = find_executable (argv[0]);
4423e19dfac4Smrg  if (tmp_pathspec == NULL)
4424313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4425313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
4426313a12fdSmrg                  "(main) found exe (before symlink chase) at: %s\n",
4427313a12fdSmrg		  tmp_pathspec);
4428e19dfac4Smrg
4429e19dfac4Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4430313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
4431313a12fdSmrg                  "(main) found exe (after symlink chase) at: %s\n",
4432313a12fdSmrg		  actual_cwrapper_path);
4433e19dfac4Smrg  XFREE (tmp_pathspec);
4434e19dfac4Smrg
4435313a12fdSmrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436e19dfac4Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437e19dfac4Smrg
4438e19dfac4Smrg  /* wrapper name transforms */
4439e19dfac4Smrg  strendzap (actual_cwrapper_name, ".exe");
4440e19dfac4Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441e19dfac4Smrg  XFREE (actual_cwrapper_name);
4442e19dfac4Smrg  actual_cwrapper_name = tmp_pathspec;
4443e19dfac4Smrg  tmp_pathspec = 0;
4444e19dfac4Smrg
4445e19dfac4Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446e19dfac4Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447e19dfac4Smrg  strendzap (target_name, ".exe");
4448e19dfac4Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449e19dfac4Smrg  XFREE (target_name);
4450e19dfac4Smrg  target_name = tmp_pathspec;
4451e19dfac4Smrg  tmp_pathspec = 0;
4452e19dfac4Smrg
4453313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
4454313a12fdSmrg		  "(main) libtool target name: %s\n",
4455313a12fdSmrg		  target_name);
4456e19dfac4SmrgEOF
445727702724Smrg
4458e19dfac4Smrg	    cat <<EOF
4459e19dfac4Smrg  newargz[0] =
4460e19dfac4Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461e19dfac4Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462e19dfac4Smrg  strcpy (newargz[0], actual_cwrapper_path);
4463e19dfac4Smrg  strcat (newargz[0], "$objdir");
4464e19dfac4Smrg  strcat (newargz[0], "/");
4465e19dfac4SmrgEOF
446627702724Smrg
4467e19dfac4Smrg	    cat <<"EOF"
4468e19dfac4Smrg  /* stop here, and copy so we don't have to do this twice */
4469e19dfac4Smrg  tmp_pathspec = xstrdup (newargz[0]);
447027702724Smrg
4471e19dfac4Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472e19dfac4Smrg  strcat (newargz[0], actual_cwrapper_name);
447327702724Smrg
4474e19dfac4Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475e19dfac4Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476e19dfac4Smrg  XFREE (tmp_pathspec);
4477e19dfac4Smrg  tmp_pathspec = NULL;
4478e19dfac4SmrgEOF
447927702724Smrg
4480e19dfac4Smrg	    case $host_os in
4481e19dfac4Smrg	      mingw*)
4482e19dfac4Smrg	    cat <<"EOF"
4483e19dfac4Smrg  {
4484e19dfac4Smrg    char* p;
4485e19dfac4Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486e19dfac4Smrg      {
4487e19dfac4Smrg	*p = '/';
4488e19dfac4Smrg      }
4489e19dfac4Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490e19dfac4Smrg      {
4491e19dfac4Smrg	*p = '/';
4492e19dfac4Smrg      }
4493e19dfac4Smrg  }
4494e19dfac4SmrgEOF
4495e19dfac4Smrg	    ;;
4496e19dfac4Smrg	    esac
449727702724Smrg
4498e19dfac4Smrg	    cat <<"EOF"
4499e19dfac4Smrg  XFREE (target_name);
4500e19dfac4Smrg  XFREE (actual_cwrapper_path);
4501e19dfac4Smrg  XFREE (actual_cwrapper_name);
450227702724Smrg
4503e19dfac4Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504e19dfac4Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4505313a12fdSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4506313a12fdSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4507313a12fdSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
4508313a12fdSmrg     libraries must come first. */
4509e19dfac4Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4510313a12fdSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
451127702724Smrg
4512313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4513313a12fdSmrg		  nonnull (lt_argv_zero));
4514e19dfac4Smrg  for (i = 0; i < newargc; i++)
4515e19dfac4Smrg    {
4516313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4517313a12fdSmrg		      i, nonnull (newargz[i]));
4518e19dfac4Smrg    }
451927702724Smrg
4520e19dfac4SmrgEOF
452127702724Smrg
4522e19dfac4Smrg	    case $host_os in
4523e19dfac4Smrg	      mingw*)
4524e19dfac4Smrg		cat <<"EOF"
4525e19dfac4Smrg  /* execv doesn't actually work on mingw as expected on unix */
4526313a12fdSmrg  newargz = prepare_spawn (newargz);
4527e19dfac4Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528e19dfac4Smrg  if (rval == -1)
4529e19dfac4Smrg    {
4530e19dfac4Smrg      /* failed to start process */
4531313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__,
4532313a12fdSmrg		      "(main) failed to launch target \"%s\": %s\n",
4533313a12fdSmrg		      lt_argv_zero, nonnull (strerror (errno)));
4534e19dfac4Smrg      return 127;
4535e19dfac4Smrg    }
4536e19dfac4Smrg  return rval;
4537e19dfac4SmrgEOF
4538e19dfac4Smrg		;;
4539e19dfac4Smrg	      *)
4540e19dfac4Smrg		cat <<"EOF"
4541e19dfac4Smrg  execv (lt_argv_zero, newargz);
4542e19dfac4Smrg  return rval; /* =127, but avoids unused variable warning */
4543e19dfac4SmrgEOF
4544e19dfac4Smrg		;;
4545e19dfac4Smrg	    esac
454627702724Smrg
4547e19dfac4Smrg	    cat <<"EOF"
4548e19dfac4Smrg}
454927702724Smrg
4550e19dfac4Smrgvoid *
4551e19dfac4Smrgxmalloc (size_t num)
4552e19dfac4Smrg{
4553e19dfac4Smrg  void *p = (void *) malloc (num);
4554e19dfac4Smrg  if (!p)
4555313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
455627702724Smrg
4557e19dfac4Smrg  return p;
4558e19dfac4Smrg}
455927702724Smrg
4560e19dfac4Smrgchar *
4561e19dfac4Smrgxstrdup (const char *string)
4562e19dfac4Smrg{
4563e19dfac4Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564e19dfac4Smrg			  string) : NULL;
4565e19dfac4Smrg}
456627702724Smrg
4567e19dfac4Smrgconst char *
4568e19dfac4Smrgbase_name (const char *name)
4569e19dfac4Smrg{
4570e19dfac4Smrg  const char *base;
457127702724Smrg
4572e19dfac4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573e19dfac4Smrg  /* Skip over the disk name in MSDOS pathnames. */
4574e19dfac4Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575e19dfac4Smrg    name += 2;
4576e19dfac4Smrg#endif
457727702724Smrg
4578e19dfac4Smrg  for (base = name; *name; name++)
4579e19dfac4Smrg    if (IS_DIR_SEPARATOR (*name))
4580e19dfac4Smrg      base = name + 1;
4581e19dfac4Smrg  return base;
4582e19dfac4Smrg}
458327702724Smrg
4584e19dfac4Smrgint
4585e19dfac4Smrgcheck_executable (const char *path)
4586e19dfac4Smrg{
4587e19dfac4Smrg  struct stat st;
458827702724Smrg
4589313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4590313a12fdSmrg                  nonempty (path));
4591e19dfac4Smrg  if ((!path) || (!*path))
4592e19dfac4Smrg    return 0;
459327702724Smrg
4594e19dfac4Smrg  if ((stat (path, &st) >= 0)
4595e19dfac4Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596e19dfac4Smrg    return 1;
4597e19dfac4Smrg  else
4598e19dfac4Smrg    return 0;
4599e19dfac4Smrg}
460027702724Smrg
4601e19dfac4Smrgint
4602e19dfac4Smrgmake_executable (const char *path)
4603e19dfac4Smrg{
4604e19dfac4Smrg  int rval = 0;
4605e19dfac4Smrg  struct stat st;
460627702724Smrg
4607313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4608313a12fdSmrg                  nonempty (path));
4609e19dfac4Smrg  if ((!path) || (!*path))
4610e19dfac4Smrg    return 0;
461127702724Smrg
4612e19dfac4Smrg  if (stat (path, &st) >= 0)
4613e19dfac4Smrg    {
4614e19dfac4Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615e19dfac4Smrg    }
4616e19dfac4Smrg  return rval;
4617e19dfac4Smrg}
461827702724Smrg
4619e19dfac4Smrg/* Searches for the full path of the wrapper.  Returns
4620e19dfac4Smrg   newly allocated full path name if found, NULL otherwise
4621e19dfac4Smrg   Does not chase symlinks, even on platforms that support them.
4622e19dfac4Smrg*/
4623e19dfac4Smrgchar *
4624e19dfac4Smrgfind_executable (const char *wrapper)
4625e19dfac4Smrg{
4626e19dfac4Smrg  int has_slash = 0;
4627e19dfac4Smrg  const char *p;
4628e19dfac4Smrg  const char *p_next;
4629e19dfac4Smrg  /* static buffer for getcwd */
4630e19dfac4Smrg  char tmp[LT_PATHMAX + 1];
4631e19dfac4Smrg  int tmp_len;
4632e19dfac4Smrg  char *concat_name;
463327702724Smrg
4634313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4635313a12fdSmrg                  nonempty (wrapper));
463627702724Smrg
4637e19dfac4Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638e19dfac4Smrg    return NULL;
463927702724Smrg
4640e19dfac4Smrg  /* Absolute path? */
4641e19dfac4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642e19dfac4Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643e19dfac4Smrg    {
4644e19dfac4Smrg      concat_name = xstrdup (wrapper);
4645e19dfac4Smrg      if (check_executable (concat_name))
4646e19dfac4Smrg	return concat_name;
4647e19dfac4Smrg      XFREE (concat_name);
4648e19dfac4Smrg    }
4649e19dfac4Smrg  else
4650e19dfac4Smrg    {
4651e19dfac4Smrg#endif
4652e19dfac4Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653e19dfac4Smrg	{
4654e19dfac4Smrg	  concat_name = xstrdup (wrapper);
4655e19dfac4Smrg	  if (check_executable (concat_name))
4656e19dfac4Smrg	    return concat_name;
4657e19dfac4Smrg	  XFREE (concat_name);
4658e19dfac4Smrg	}
4659e19dfac4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660e19dfac4Smrg    }
4661e19dfac4Smrg#endif
466227702724Smrg
4663e19dfac4Smrg  for (p = wrapper; *p; p++)
4664e19dfac4Smrg    if (*p == '/')
4665e19dfac4Smrg      {
4666e19dfac4Smrg	has_slash = 1;
4667e19dfac4Smrg	break;
4668e19dfac4Smrg      }
4669e19dfac4Smrg  if (!has_slash)
4670e19dfac4Smrg    {
4671e19dfac4Smrg      /* no slashes; search PATH */
4672e19dfac4Smrg      const char *path = getenv ("PATH");
4673e19dfac4Smrg      if (path != NULL)
4674e19dfac4Smrg	{
4675e19dfac4Smrg	  for (p = path; *p; p = p_next)
4676e19dfac4Smrg	    {
4677e19dfac4Smrg	      const char *q;
4678e19dfac4Smrg	      size_t p_len;
4679e19dfac4Smrg	      for (q = p; *q; q++)
4680e19dfac4Smrg		if (IS_PATH_SEPARATOR (*q))
4681e19dfac4Smrg		  break;
4682e19dfac4Smrg	      p_len = q - p;
4683e19dfac4Smrg	      p_next = (*q == '\0' ? q : q + 1);
4684e19dfac4Smrg	      if (p_len == 0)
4685e19dfac4Smrg		{
4686e19dfac4Smrg		  /* empty path: current directory */
4687e19dfac4Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4688313a12fdSmrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4689313a12fdSmrg                              nonnull (strerror (errno)));
4690e19dfac4Smrg		  tmp_len = strlen (tmp);
4691e19dfac4Smrg		  concat_name =
4692e19dfac4Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693e19dfac4Smrg		  memcpy (concat_name, tmp, tmp_len);
4694e19dfac4Smrg		  concat_name[tmp_len] = '/';
4695e19dfac4Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696e19dfac4Smrg		}
4697e19dfac4Smrg	      else
4698e19dfac4Smrg		{
4699e19dfac4Smrg		  concat_name =
4700e19dfac4Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701e19dfac4Smrg		  memcpy (concat_name, p, p_len);
4702e19dfac4Smrg		  concat_name[p_len] = '/';
4703e19dfac4Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4704e19dfac4Smrg		}
4705e19dfac4Smrg	      if (check_executable (concat_name))
4706e19dfac4Smrg		return concat_name;
4707e19dfac4Smrg	      XFREE (concat_name);
4708e19dfac4Smrg	    }
4709e19dfac4Smrg	}
4710e19dfac4Smrg      /* not found in PATH; assume curdir */
4711e19dfac4Smrg    }
4712e19dfac4Smrg  /* Relative path | not found in path: prepend cwd */
4713e19dfac4Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
4714313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4715313a12fdSmrg              nonnull (strerror (errno)));
4716e19dfac4Smrg  tmp_len = strlen (tmp);
4717e19dfac4Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718e19dfac4Smrg  memcpy (concat_name, tmp, tmp_len);
4719e19dfac4Smrg  concat_name[tmp_len] = '/';
4720e19dfac4Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
472127702724Smrg
4722e19dfac4Smrg  if (check_executable (concat_name))
4723e19dfac4Smrg    return concat_name;
4724e19dfac4Smrg  XFREE (concat_name);
4725e19dfac4Smrg  return NULL;
4726e19dfac4Smrg}
472727702724Smrg
4728e19dfac4Smrgchar *
4729e19dfac4Smrgchase_symlinks (const char *pathspec)
4730e19dfac4Smrg{
4731e19dfac4Smrg#ifndef S_ISLNK
4732e19dfac4Smrg  return xstrdup (pathspec);
4733e19dfac4Smrg#else
4734e19dfac4Smrg  char buf[LT_PATHMAX];
4735e19dfac4Smrg  struct stat s;
4736e19dfac4Smrg  char *tmp_pathspec = xstrdup (pathspec);
4737e19dfac4Smrg  char *p;
4738e19dfac4Smrg  int has_symlinks = 0;
4739e19dfac4Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740e19dfac4Smrg    {
4741313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__,
4742313a12fdSmrg		      "checking path component for symlinks: %s\n",
4743313a12fdSmrg		      tmp_pathspec);
4744e19dfac4Smrg      if (lstat (tmp_pathspec, &s) == 0)
4745e19dfac4Smrg	{
4746e19dfac4Smrg	  if (S_ISLNK (s.st_mode) != 0)
4747e19dfac4Smrg	    {
4748e19dfac4Smrg	      has_symlinks = 1;
4749e19dfac4Smrg	      break;
4750e19dfac4Smrg	    }
475127702724Smrg
4752e19dfac4Smrg	  /* search backwards for last DIR_SEPARATOR */
4753e19dfac4Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754e19dfac4Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755e19dfac4Smrg	    p--;
4756e19dfac4Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757e19dfac4Smrg	    {
4758e19dfac4Smrg	      /* no more DIR_SEPARATORS left */
4759e19dfac4Smrg	      break;
4760e19dfac4Smrg	    }
4761e19dfac4Smrg	  *p = '\0';
4762e19dfac4Smrg	}
4763e19dfac4Smrg      else
4764e19dfac4Smrg	{
4765313a12fdSmrg	  lt_fatal (__FILE__, __LINE__,
4766313a12fdSmrg		    "error accessing file \"%s\": %s",
4767313a12fdSmrg		    tmp_pathspec, nonnull (strerror (errno)));
4768e19dfac4Smrg	}
4769e19dfac4Smrg    }
4770e19dfac4Smrg  XFREE (tmp_pathspec);
477127702724Smrg
4772e19dfac4Smrg  if (!has_symlinks)
4773e19dfac4Smrg    {
4774e19dfac4Smrg      return xstrdup (pathspec);
4775e19dfac4Smrg    }
477627702724Smrg
4777e19dfac4Smrg  tmp_pathspec = realpath (pathspec, buf);
4778e19dfac4Smrg  if (tmp_pathspec == 0)
4779e19dfac4Smrg    {
4780313a12fdSmrg      lt_fatal (__FILE__, __LINE__,
4781313a12fdSmrg		"could not follow symlinks for %s", pathspec);
4782e19dfac4Smrg    }
4783e19dfac4Smrg  return xstrdup (tmp_pathspec);
4784e19dfac4Smrg#endif
4785e19dfac4Smrg}
478627702724Smrg
4787e19dfac4Smrgchar *
4788e19dfac4Smrgstrendzap (char *str, const char *pat)
4789e19dfac4Smrg{
4790e19dfac4Smrg  size_t len, patlen;
479127702724Smrg
4792e19dfac4Smrg  assert (str != NULL);
4793e19dfac4Smrg  assert (pat != NULL);
479427702724Smrg
4795e19dfac4Smrg  len = strlen (str);
4796e19dfac4Smrg  patlen = strlen (pat);
479727702724Smrg
4798e19dfac4Smrg  if (patlen <= len)
4799e19dfac4Smrg    {
4800e19dfac4Smrg      str += len - patlen;
4801e19dfac4Smrg      if (strcmp (str, pat) == 0)
4802e19dfac4Smrg	*str = '\0';
4803e19dfac4Smrg    }
4804e19dfac4Smrg  return str;
4805e19dfac4Smrg}
480627702724Smrg
4807313a12fdSmrgvoid
4808313a12fdSmrglt_debugprintf (const char *file, int line, const char *fmt, ...)
4809313a12fdSmrg{
4810313a12fdSmrg  va_list args;
4811313a12fdSmrg  if (lt_debug)
4812313a12fdSmrg    {
4813313a12fdSmrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4814313a12fdSmrg      va_start (args, fmt);
4815313a12fdSmrg      (void) vfprintf (stderr, fmt, args);
4816313a12fdSmrg      va_end (args);
4817313a12fdSmrg    }
4818313a12fdSmrg}
4819313a12fdSmrg
4820e19dfac4Smrgstatic void
4821313a12fdSmrglt_error_core (int exit_status, const char *file,
4822313a12fdSmrg	       int line, const char *mode,
4823e19dfac4Smrg	       const char *message, va_list ap)
4824e19dfac4Smrg{
4825313a12fdSmrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826e19dfac4Smrg  vfprintf (stderr, message, ap);
4827e19dfac4Smrg  fprintf (stderr, ".\n");
482827702724Smrg
4829e19dfac4Smrg  if (exit_status >= 0)
4830e19dfac4Smrg    exit (exit_status);
4831e19dfac4Smrg}
483227702724Smrg
4833e19dfac4Smrgvoid
4834313a12fdSmrglt_fatal (const char *file, int line, const char *message, ...)
4835e19dfac4Smrg{
4836e19dfac4Smrg  va_list ap;
4837e19dfac4Smrg  va_start (ap, message);
4838313a12fdSmrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839e19dfac4Smrg  va_end (ap);
4840e19dfac4Smrg}
484127702724Smrg
4842313a12fdSmrgstatic const char *
4843313a12fdSmrgnonnull (const char *s)
4844313a12fdSmrg{
4845313a12fdSmrg  return s ? s : "(null)";
4846313a12fdSmrg}
4847313a12fdSmrg
4848313a12fdSmrgstatic const char *
4849313a12fdSmrgnonempty (const char *s)
4850313a12fdSmrg{
4851313a12fdSmrg  return (s && !*s) ? "(empty)" : nonnull (s);
4852313a12fdSmrg}
4853313a12fdSmrg
4854e19dfac4Smrgvoid
4855e19dfac4Smrglt_setenv (const char *name, const char *value)
4856e19dfac4Smrg{
4857313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
4858313a12fdSmrg		  "(lt_setenv) setting '%s' to '%s'\n",
4859313a12fdSmrg                  nonnull (name), nonnull (value));
4860e19dfac4Smrg  {
4861e19dfac4Smrg#ifdef HAVE_SETENV
4862e19dfac4Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863e19dfac4Smrg    char *str = xstrdup (value);
4864e19dfac4Smrg    setenv (name, str, 1);
4865e19dfac4Smrg#else
4866e19dfac4Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867e19dfac4Smrg    char *str = XMALLOC (char, len);
4868e19dfac4Smrg    sprintf (str, "%s=%s", name, value);
4869e19dfac4Smrg    if (putenv (str) != EXIT_SUCCESS)
4870e19dfac4Smrg      {
4871e19dfac4Smrg        XFREE (str);
4872e19dfac4Smrg      }
4873e19dfac4Smrg#endif
4874e19dfac4Smrg  }
4875e19dfac4Smrg}
487627702724Smrg
4877e19dfac4Smrgchar *
4878e19dfac4Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879e19dfac4Smrg{
4880e19dfac4Smrg  char *new_value;
4881e19dfac4Smrg  if (orig_value && *orig_value)
4882e19dfac4Smrg    {
4883e19dfac4Smrg      int orig_value_len = strlen (orig_value);
4884e19dfac4Smrg      int add_len = strlen (add);
4885e19dfac4Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886e19dfac4Smrg      if (to_end)
4887e19dfac4Smrg        {
4888e19dfac4Smrg          strcpy (new_value, orig_value);
4889e19dfac4Smrg          strcpy (new_value + orig_value_len, add);
4890e19dfac4Smrg        }
4891e19dfac4Smrg      else
4892e19dfac4Smrg        {
4893e19dfac4Smrg          strcpy (new_value, add);
4894e19dfac4Smrg          strcpy (new_value + add_len, orig_value);
4895e19dfac4Smrg        }
4896e19dfac4Smrg    }
4897e19dfac4Smrg  else
4898e19dfac4Smrg    {
4899e19dfac4Smrg      new_value = xstrdup (add);
4900e19dfac4Smrg    }
4901e19dfac4Smrg  return new_value;
4902e19dfac4Smrg}
490327702724Smrg
4904e19dfac4Smrgvoid
4905e19dfac4Smrglt_update_exe_path (const char *name, const char *value)
4906e19dfac4Smrg{
4907313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
4908313a12fdSmrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4909313a12fdSmrg                  nonnull (name), nonnull (value));
491027702724Smrg
4911e19dfac4Smrg  if (name && *name && value && *value)
4912e19dfac4Smrg    {
4913e19dfac4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914e19dfac4Smrg      /* some systems can't cope with a ':'-terminated path #' */
4915e19dfac4Smrg      int len = strlen (new_value);
4916e19dfac4Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917e19dfac4Smrg        {
4918e19dfac4Smrg          new_value[len-1] = '\0';
4919e19dfac4Smrg        }
4920e19dfac4Smrg      lt_setenv (name, new_value);
4921e19dfac4Smrg      XFREE (new_value);
4922e19dfac4Smrg    }
4923e19dfac4Smrg}
492427702724Smrg
4925e19dfac4Smrgvoid
4926e19dfac4Smrglt_update_lib_path (const char *name, const char *value)
4927e19dfac4Smrg{
4928313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
4929313a12fdSmrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4930313a12fdSmrg                  nonnull (name), nonnull (value));
493127702724Smrg
4932e19dfac4Smrg  if (name && *name && value && *value)
4933e19dfac4Smrg    {
4934e19dfac4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935e19dfac4Smrg      lt_setenv (name, new_value);
4936e19dfac4Smrg      XFREE (new_value);
4937e19dfac4Smrg    }
4938e19dfac4Smrg}
493927702724Smrg
4940313a12fdSmrgEOF
4941313a12fdSmrg	    case $host_os in
4942313a12fdSmrg	      mingw*)
4943313a12fdSmrg		cat <<"EOF"
4944313a12fdSmrg
4945313a12fdSmrg/* Prepares an argument vector before calling spawn().
4946313a12fdSmrg   Note that spawn() does not by itself call the command interpreter
4947313a12fdSmrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4948313a12fdSmrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4949313a12fdSmrg         GetVersionEx(&v);
4950313a12fdSmrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4951313a12fdSmrg      }) ? "cmd.exe" : "command.com").
4952313a12fdSmrg   Instead it simply concatenates the arguments, separated by ' ', and calls
4953313a12fdSmrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4954313a12fdSmrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4955313a12fdSmrg   special way:
4956313a12fdSmrg   - Space and tab are interpreted as delimiters. They are not treated as
4957313a12fdSmrg     delimiters if they are surrounded by double quotes: "...".
4958313a12fdSmrg   - Unescaped double quotes are removed from the input. Their only effect is
4959313a12fdSmrg     that within double quotes, space and tab are treated like normal
4960313a12fdSmrg     characters.
4961313a12fdSmrg   - Backslashes not followed by double quotes are not special.
4962313a12fdSmrg   - But 2*n+1 backslashes followed by a double quote become
4963313a12fdSmrg     n backslashes followed by a double quote (n >= 0):
4964313a12fdSmrg       \" -> "
4965313a12fdSmrg       \\\" -> \"
4966313a12fdSmrg       \\\\\" -> \\"
4967313a12fdSmrg */
4968313a12fdSmrg#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"
4969313a12fdSmrg#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"
4970313a12fdSmrgchar **
4971313a12fdSmrgprepare_spawn (char **argv)
4972313a12fdSmrg{
4973313a12fdSmrg  size_t argc;
4974313a12fdSmrg  char **new_argv;
4975313a12fdSmrg  size_t i;
4976313a12fdSmrg
4977313a12fdSmrg  /* Count number of arguments.  */
4978313a12fdSmrg  for (argc = 0; argv[argc] != NULL; argc++)
4979313a12fdSmrg    ;
4980313a12fdSmrg
4981313a12fdSmrg  /* Allocate new argument vector.  */
4982313a12fdSmrg  new_argv = XMALLOC (char *, argc + 1);
4983313a12fdSmrg
4984313a12fdSmrg  /* Put quoted arguments into the new argument vector.  */
4985313a12fdSmrg  for (i = 0; i < argc; i++)
4986313a12fdSmrg    {
4987313a12fdSmrg      const char *string = argv[i];
4988313a12fdSmrg
4989313a12fdSmrg      if (string[0] == '\0')
4990313a12fdSmrg	new_argv[i] = xstrdup ("\"\"");
4991313a12fdSmrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4992313a12fdSmrg	{
4993313a12fdSmrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4994313a12fdSmrg	  size_t length;
4995313a12fdSmrg	  unsigned int backslashes;
4996313a12fdSmrg	  const char *s;
4997313a12fdSmrg	  char *quoted_string;
4998313a12fdSmrg	  char *p;
4999313a12fdSmrg
5000313a12fdSmrg	  length = 0;
5001313a12fdSmrg	  backslashes = 0;
5002313a12fdSmrg	  if (quote_around)
5003313a12fdSmrg	    length++;
5004313a12fdSmrg	  for (s = string; *s != '\0'; s++)
5005313a12fdSmrg	    {
5006313a12fdSmrg	      char c = *s;
5007313a12fdSmrg	      if (c == '"')
5008313a12fdSmrg		length += backslashes + 1;
5009313a12fdSmrg	      length++;
5010313a12fdSmrg	      if (c == '\\')
5011313a12fdSmrg		backslashes++;
5012313a12fdSmrg	      else
5013313a12fdSmrg		backslashes = 0;
5014313a12fdSmrg	    }
5015313a12fdSmrg	  if (quote_around)
5016313a12fdSmrg	    length += backslashes + 1;
5017313a12fdSmrg
5018313a12fdSmrg	  quoted_string = XMALLOC (char, length + 1);
5019313a12fdSmrg
5020313a12fdSmrg	  p = quoted_string;
5021313a12fdSmrg	  backslashes = 0;
5022313a12fdSmrg	  if (quote_around)
5023313a12fdSmrg	    *p++ = '"';
5024313a12fdSmrg	  for (s = string; *s != '\0'; s++)
5025313a12fdSmrg	    {
5026313a12fdSmrg	      char c = *s;
5027313a12fdSmrg	      if (c == '"')
5028313a12fdSmrg		{
5029313a12fdSmrg		  unsigned int j;
5030313a12fdSmrg		  for (j = backslashes + 1; j > 0; j--)
5031313a12fdSmrg		    *p++ = '\\';
5032313a12fdSmrg		}
5033313a12fdSmrg	      *p++ = c;
5034313a12fdSmrg	      if (c == '\\')
5035313a12fdSmrg		backslashes++;
5036313a12fdSmrg	      else
5037313a12fdSmrg		backslashes = 0;
5038313a12fdSmrg	    }
5039313a12fdSmrg	  if (quote_around)
5040313a12fdSmrg	    {
5041313a12fdSmrg	      unsigned int j;
5042313a12fdSmrg	      for (j = backslashes; j > 0; j--)
5043313a12fdSmrg		*p++ = '\\';
5044313a12fdSmrg	      *p++ = '"';
5045313a12fdSmrg	    }
5046313a12fdSmrg	  *p = '\0';
5047313a12fdSmrg
5048313a12fdSmrg	  new_argv[i] = quoted_string;
5049313a12fdSmrg	}
5050313a12fdSmrg      else
5051313a12fdSmrg	new_argv[i] = (char *) string;
5052313a12fdSmrg    }
5053313a12fdSmrg  new_argv[argc] = NULL;
5054313a12fdSmrg
5055313a12fdSmrg  return new_argv;
5056313a12fdSmrg}
5057313a12fdSmrgEOF
5058313a12fdSmrg		;;
5059313a12fdSmrg	    esac
506027702724Smrg
5061313a12fdSmrg            cat <<"EOF"
5062313a12fdSmrgvoid lt_dump_script (FILE* f)
5063313a12fdSmrg{
5064313a12fdSmrgEOF
5065313a12fdSmrg	    func_emit_wrapper yes |
5066313a12fdSmrg	      $SED -n -e '
5067313a12fdSmrgs/^\(.\{79\}\)\(..*\)/\1\
5068313a12fdSmrg\2/
5069313a12fdSmrgh
5070313a12fdSmrgs/\([\\"]\)/\\\1/g
5071313a12fdSmrgs/$/\\n/
5072313a12fdSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
5073313a12fdSmrgg
5074313a12fdSmrgD'
5075313a12fdSmrg            cat <<"EOF"
5076313a12fdSmrg}
5077e19dfac4SmrgEOF
5078e19dfac4Smrg}
5079e19dfac4Smrg# end: func_emit_cwrapperexe_src
508027702724Smrg
5081313a12fdSmrg# func_win32_import_lib_p ARG
5082313a12fdSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd
5083313a12fdSmrgfunc_win32_import_lib_p ()
5084313a12fdSmrg{
5085313a12fdSmrg    $opt_debug
5086313a12fdSmrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5087313a12fdSmrg    *import*) : ;;
5088313a12fdSmrg    *) false ;;
5089313a12fdSmrg    esac
5090313a12fdSmrg}
5091313a12fdSmrg
5092e19dfac4Smrg# func_mode_link arg...
5093e19dfac4Smrgfunc_mode_link ()
5094e19dfac4Smrg{
5095e19dfac4Smrg    $opt_debug
5096e19dfac4Smrg    case $host in
5097e19dfac4Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098e19dfac4Smrg      # It is impossible to link a dll without this setting, and
5099e19dfac4Smrg      # we shouldn't force the makefile maintainer to figure out
5100e19dfac4Smrg      # which system we are compiling for in order to pass an extra
5101e19dfac4Smrg      # flag for every libtool invocation.
5102e19dfac4Smrg      # allow_undefined=no
510327702724Smrg
5104e19dfac4Smrg      # FIXME: Unfortunately, there are problems with the above when trying
5105e19dfac4Smrg      # to make a dll which has undefined symbols, in which case not
5106e19dfac4Smrg      # even a static library is built.  For now, we need to specify
5107e19dfac4Smrg      # -no-undefined on the libtool link line when we can be certain
5108e19dfac4Smrg      # that all symbols are satisfied, otherwise we get a static library.
5109e19dfac4Smrg      allow_undefined=yes
5110e19dfac4Smrg      ;;
5111e19dfac4Smrg    *)
5112e19dfac4Smrg      allow_undefined=yes
5113e19dfac4Smrg      ;;
5114e19dfac4Smrg    esac
5115e19dfac4Smrg    libtool_args=$nonopt
5116e19dfac4Smrg    base_compile="$nonopt $@"
5117e19dfac4Smrg    compile_command=$nonopt
5118e19dfac4Smrg    finalize_command=$nonopt
511927702724Smrg
5120e19dfac4Smrg    compile_rpath=
5121e19dfac4Smrg    finalize_rpath=
5122e19dfac4Smrg    compile_shlibpath=
5123e19dfac4Smrg    finalize_shlibpath=
5124e19dfac4Smrg    convenience=
5125e19dfac4Smrg    old_convenience=
5126e19dfac4Smrg    deplibs=
5127e19dfac4Smrg    old_deplibs=
5128e19dfac4Smrg    compiler_flags=
5129e19dfac4Smrg    linker_flags=
5130e19dfac4Smrg    dllsearchpath=
5131e19dfac4Smrg    lib_search_path=`pwd`
5132e19dfac4Smrg    inst_prefix_dir=
5133e19dfac4Smrg    new_inherited_linker_flags=
513427702724Smrg
5135e19dfac4Smrg    avoid_version=no
5136313a12fdSmrg    bindir=
5137e19dfac4Smrg    dlfiles=
5138e19dfac4Smrg    dlprefiles=
5139e19dfac4Smrg    dlself=no
5140e19dfac4Smrg    export_dynamic=no
5141e19dfac4Smrg    export_symbols=
5142e19dfac4Smrg    export_symbols_regex=
5143e19dfac4Smrg    generated=
5144e19dfac4Smrg    libobjs=
5145e19dfac4Smrg    ltlibs=
5146e19dfac4Smrg    module=no
5147e19dfac4Smrg    no_install=no
5148e19dfac4Smrg    objs=
5149e19dfac4Smrg    non_pic_objects=
5150e19dfac4Smrg    precious_files_regex=
5151e19dfac4Smrg    prefer_static_libs=no
5152e19dfac4Smrg    preload=no
5153e19dfac4Smrg    prev=
5154e19dfac4Smrg    prevarg=
5155e19dfac4Smrg    release=
5156e19dfac4Smrg    rpath=
5157e19dfac4Smrg    xrpath=
5158e19dfac4Smrg    perm_rpath=
5159e19dfac4Smrg    temp_rpath=
5160e19dfac4Smrg    thread_safe=no
5161e19dfac4Smrg    vinfo=
5162e19dfac4Smrg    vinfo_number=no
5163e19dfac4Smrg    weak_libs=
5164e19dfac4Smrg    single_module="${wl}-single_module"
5165e19dfac4Smrg    func_infer_tag $base_compile
516627702724Smrg
5167e19dfac4Smrg    # We need to know -static, to get the right output filenames.
5168e19dfac4Smrg    for arg
5169e19dfac4Smrg    do
5170e19dfac4Smrg      case $arg in
5171e19dfac4Smrg      -shared)
5172e19dfac4Smrg	test "$build_libtool_libs" != yes && \
5173e19dfac4Smrg	  func_fatal_configuration "can not build a shared library"
5174e19dfac4Smrg	build_old_libs=no
5175e19dfac4Smrg	break
5176e19dfac4Smrg	;;
5177e19dfac4Smrg      -all-static | -static | -static-libtool-libs)
5178e19dfac4Smrg	case $arg in
5179e19dfac4Smrg	-all-static)
5180e19dfac4Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181e19dfac4Smrg	    func_warning "complete static linking is impossible in this configuration"
518227702724Smrg	  fi
5183e19dfac4Smrg	  if test -n "$link_static_flag"; then
5184e19dfac4Smrg	    dlopen_self=$dlopen_self_static
518527702724Smrg	  fi
5186e19dfac4Smrg	  prefer_static_libs=yes
518727702724Smrg	  ;;
5188e19dfac4Smrg	-static)
5189e19dfac4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190e19dfac4Smrg	    dlopen_self=$dlopen_self_static
5191e19dfac4Smrg	  fi
5192e19dfac4Smrg	  prefer_static_libs=built
5193e19dfac4Smrg	  ;;
5194e19dfac4Smrg	-static-libtool-libs)
5195e19dfac4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196e19dfac4Smrg	    dlopen_self=$dlopen_self_static
5197e19dfac4Smrg	  fi
5198e19dfac4Smrg	  prefer_static_libs=yes
519927702724Smrg	  ;;
520027702724Smrg	esac
5201e19dfac4Smrg	build_libtool_libs=no
5202e19dfac4Smrg	build_old_libs=yes
5203e19dfac4Smrg	break
5204e19dfac4Smrg	;;
5205e19dfac4Smrg      esac
5206e19dfac4Smrg    done
520727702724Smrg
5208e19dfac4Smrg    # See if our shared archives depend on static archives.
5209e19dfac4Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
521027702724Smrg
5211e19dfac4Smrg    # Go through the arguments, transforming them on the way.
5212e19dfac4Smrg    while test "$#" -gt 0; do
5213e19dfac4Smrg      arg="$1"
5214e19dfac4Smrg      shift
5215e19dfac4Smrg      func_quote_for_eval "$arg"
5216e19dfac4Smrg      qarg=$func_quote_for_eval_unquoted_result
5217e19dfac4Smrg      func_append libtool_args " $func_quote_for_eval_result"
521827702724Smrg
5219e19dfac4Smrg      # If the previous option needs an argument, assign it.
5220e19dfac4Smrg      if test -n "$prev"; then
5221e19dfac4Smrg	case $prev in
5222e19dfac4Smrg	output)
5223e19dfac4Smrg	  func_append compile_command " @OUTPUT@"
5224e19dfac4Smrg	  func_append finalize_command " @OUTPUT@"
5225e19dfac4Smrg	  ;;
5226e19dfac4Smrg	esac
522727702724Smrg
5228e19dfac4Smrg	case $prev in
5229313a12fdSmrg	bindir)
5230313a12fdSmrg	  bindir="$arg"
5231313a12fdSmrg	  prev=
5232313a12fdSmrg	  continue
5233313a12fdSmrg	  ;;
5234e19dfac4Smrg	dlfiles|dlprefiles)
5235e19dfac4Smrg	  if test "$preload" = no; then
5236e19dfac4Smrg	    # Add the symbol object into the linking commands.
5237e19dfac4Smrg	    func_append compile_command " @SYMFILE@"
5238e19dfac4Smrg	    func_append finalize_command " @SYMFILE@"
5239e19dfac4Smrg	    preload=yes
5240e19dfac4Smrg	  fi
5241e19dfac4Smrg	  case $arg in
5242e19dfac4Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5243e19dfac4Smrg	  force)
5244e19dfac4Smrg	    if test "$dlself" = no; then
5245e19dfac4Smrg	      dlself=needless
5246e19dfac4Smrg	      export_dynamic=yes
5247e19dfac4Smrg	    fi
5248e19dfac4Smrg	    prev=
5249e19dfac4Smrg	    continue
5250e19dfac4Smrg	    ;;
5251e19dfac4Smrg	  self)
5252e19dfac4Smrg	    if test "$prev" = dlprefiles; then
5253e19dfac4Smrg	      dlself=yes
5254e19dfac4Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255e19dfac4Smrg	      dlself=yes
5256e19dfac4Smrg	    else
5257e19dfac4Smrg	      dlself=needless
5258e19dfac4Smrg	      export_dynamic=yes
5259e19dfac4Smrg	    fi
5260e19dfac4Smrg	    prev=
5261e19dfac4Smrg	    continue
526227702724Smrg	    ;;
526327702724Smrg	  *)
5264e19dfac4Smrg	    if test "$prev" = dlfiles; then
5265313a12fdSmrg	      func_append dlfiles " $arg"
5266e19dfac4Smrg	    else
5267313a12fdSmrg	      func_append dlprefiles " $arg"
5268e19dfac4Smrg	    fi
5269e19dfac4Smrg	    prev=
5270e19dfac4Smrg	    continue
527127702724Smrg	    ;;
527227702724Smrg	  esac
5273e19dfac4Smrg	  ;;
5274e19dfac4Smrg	expsyms)
5275e19dfac4Smrg	  export_symbols="$arg"
5276e19dfac4Smrg	  test -f "$arg" \
5277e19dfac4Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278e19dfac4Smrg	  prev=
5279e19dfac4Smrg	  continue
5280e19dfac4Smrg	  ;;
5281e19dfac4Smrg	expsyms_regex)
5282e19dfac4Smrg	  export_symbols_regex="$arg"
5283e19dfac4Smrg	  prev=
5284e19dfac4Smrg	  continue
5285e19dfac4Smrg	  ;;
5286e19dfac4Smrg	framework)
5287e19dfac4Smrg	  case $host in
5288e19dfac4Smrg	    *-*-darwin*)
5289e19dfac4Smrg	      case "$deplibs " in
5290e19dfac4Smrg		*" $qarg.ltframework "*) ;;
5291313a12fdSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292e19dfac4Smrg		   ;;
5293e19dfac4Smrg	      esac
5294e19dfac4Smrg	      ;;
5295e19dfac4Smrg	  esac
5296e19dfac4Smrg	  prev=
5297e19dfac4Smrg	  continue
5298e19dfac4Smrg	  ;;
5299e19dfac4Smrg	inst_prefix)
5300e19dfac4Smrg	  inst_prefix_dir="$arg"
5301e19dfac4Smrg	  prev=
5302e19dfac4Smrg	  continue
5303e19dfac4Smrg	  ;;
5304e19dfac4Smrg	objectlist)
5305e19dfac4Smrg	  if test -f "$arg"; then
5306e19dfac4Smrg	    save_arg=$arg
5307e19dfac4Smrg	    moreargs=
5308e19dfac4Smrg	    for fil in `cat "$save_arg"`
5309e19dfac4Smrg	    do
5310313a12fdSmrg#	      func_append moreargs " $fil"
5311e19dfac4Smrg	      arg=$fil
5312e19dfac4Smrg	      # A libtool-controlled object.
531327702724Smrg
5314e19dfac4Smrg	      # Check to see that this really is a libtool object.
5315e19dfac4Smrg	      if func_lalib_unsafe_p "$arg"; then
5316e19dfac4Smrg		pic_object=
5317e19dfac4Smrg		non_pic_object=
531827702724Smrg
5319e19dfac4Smrg		# Read the .lo file
5320e19dfac4Smrg		func_source "$arg"
532127702724Smrg
5322e19dfac4Smrg		if test -z "$pic_object" ||
5323e19dfac4Smrg		   test -z "$non_pic_object" ||
5324e19dfac4Smrg		   test "$pic_object" = none &&
5325e19dfac4Smrg		   test "$non_pic_object" = none; then
5326e19dfac4Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327e19dfac4Smrg		fi
532827702724Smrg
5329e19dfac4Smrg		# Extract subdirectory from the argument.
5330e19dfac4Smrg		func_dirname "$arg" "/" ""
5331e19dfac4Smrg		xdir="$func_dirname_result"
533227702724Smrg
5333e19dfac4Smrg		if test "$pic_object" != none; then
5334e19dfac4Smrg		  # Prepend the subdirectory the object is found in.
5335e19dfac4Smrg		  pic_object="$xdir$pic_object"
533627702724Smrg
5337e19dfac4Smrg		  if test "$prev" = dlfiles; then
5338e19dfac4Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5339313a12fdSmrg		      func_append dlfiles " $pic_object"
5340e19dfac4Smrg		      prev=
5341e19dfac4Smrg		      continue
5342e19dfac4Smrg		    else
5343e19dfac4Smrg		      # If libtool objects are unsupported, then we need to preload.
5344e19dfac4Smrg		      prev=dlprefiles
5345e19dfac4Smrg		    fi
5346e19dfac4Smrg		  fi
534727702724Smrg
5348e19dfac4Smrg		  # CHECK ME:  I think I busted this.  -Ossama
5349e19dfac4Smrg		  if test "$prev" = dlprefiles; then
5350e19dfac4Smrg		    # Preload the old-style object.
5351313a12fdSmrg		    func_append dlprefiles " $pic_object"
5352e19dfac4Smrg		    prev=
5353e19dfac4Smrg		  fi
535427702724Smrg
5355e19dfac4Smrg		  # A PIC object.
5356e19dfac4Smrg		  func_append libobjs " $pic_object"
5357e19dfac4Smrg		  arg="$pic_object"
5358e19dfac4Smrg		fi
535927702724Smrg
5360e19dfac4Smrg		# Non-PIC object.
5361e19dfac4Smrg		if test "$non_pic_object" != none; then
5362e19dfac4Smrg		  # Prepend the subdirectory the object is found in.
5363e19dfac4Smrg		  non_pic_object="$xdir$non_pic_object"
536427702724Smrg
5365e19dfac4Smrg		  # A standard non-PIC object
5366e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
5367e19dfac4Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368e19dfac4Smrg		    arg="$non_pic_object"
5369e19dfac4Smrg		  fi
5370e19dfac4Smrg		else
5371e19dfac4Smrg		  # If the PIC object exists, use it instead.
5372e19dfac4Smrg		  # $xdir was prepended to $pic_object above.
5373e19dfac4Smrg		  non_pic_object="$pic_object"
5374e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
5375e19dfac4Smrg		fi
5376e19dfac4Smrg	      else
5377e19dfac4Smrg		# Only an error if not doing a dry-run.
5378e19dfac4Smrg		if $opt_dry_run; then
5379e19dfac4Smrg		  # Extract subdirectory from the argument.
5380e19dfac4Smrg		  func_dirname "$arg" "/" ""
5381e19dfac4Smrg		  xdir="$func_dirname_result"
5382e19dfac4Smrg
5383e19dfac4Smrg		  func_lo2o "$arg"
5384e19dfac4Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385e19dfac4Smrg		  non_pic_object=$xdir$func_lo2o_result
5386e19dfac4Smrg		  func_append libobjs " $pic_object"
5387e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
5388e19dfac4Smrg	        else
5389e19dfac4Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390e19dfac4Smrg		fi
5391e19dfac4Smrg	      fi
5392e19dfac4Smrg	    done
5393e19dfac4Smrg	  else
5394e19dfac4Smrg	    func_fatal_error "link input file \`$arg' does not exist"
5395e19dfac4Smrg	  fi
5396e19dfac4Smrg	  arg=$save_arg
5397e19dfac4Smrg	  prev=
5398e19dfac4Smrg	  continue
5399e19dfac4Smrg	  ;;
5400e19dfac4Smrg	precious_regex)
5401e19dfac4Smrg	  precious_files_regex="$arg"
5402e19dfac4Smrg	  prev=
5403e19dfac4Smrg	  continue
5404e19dfac4Smrg	  ;;
5405e19dfac4Smrg	release)
5406e19dfac4Smrg	  release="-$arg"
5407e19dfac4Smrg	  prev=
5408e19dfac4Smrg	  continue
5409e19dfac4Smrg	  ;;
5410e19dfac4Smrg	rpath | xrpath)
5411e19dfac4Smrg	  # We need an absolute path.
5412e19dfac4Smrg	  case $arg in
5413e19dfac4Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414e19dfac4Smrg	  *)
5415e19dfac4Smrg	    func_fatal_error "only absolute run-paths are allowed"
5416e19dfac4Smrg	    ;;
5417e19dfac4Smrg	  esac
5418e19dfac4Smrg	  if test "$prev" = rpath; then
5419e19dfac4Smrg	    case "$rpath " in
5420e19dfac4Smrg	    *" $arg "*) ;;
5421313a12fdSmrg	    *) func_append rpath " $arg" ;;
5422e19dfac4Smrg	    esac
5423e19dfac4Smrg	  else
5424e19dfac4Smrg	    case "$xrpath " in
5425e19dfac4Smrg	    *" $arg "*) ;;
5426313a12fdSmrg	    *) func_append xrpath " $arg" ;;
5427e19dfac4Smrg	    esac
5428e19dfac4Smrg	  fi
5429e19dfac4Smrg	  prev=
5430e19dfac4Smrg	  continue
5431e19dfac4Smrg	  ;;
5432e19dfac4Smrg	shrext)
5433e19dfac4Smrg	  shrext_cmds="$arg"
5434e19dfac4Smrg	  prev=
5435e19dfac4Smrg	  continue
5436e19dfac4Smrg	  ;;
5437e19dfac4Smrg	weak)
5438313a12fdSmrg	  func_append weak_libs " $arg"
5439e19dfac4Smrg	  prev=
5440e19dfac4Smrg	  continue
5441e19dfac4Smrg	  ;;
5442e19dfac4Smrg	xcclinker)
5443313a12fdSmrg	  func_append linker_flags " $qarg"
5444313a12fdSmrg	  func_append compiler_flags " $qarg"
5445e19dfac4Smrg	  prev=
5446e19dfac4Smrg	  func_append compile_command " $qarg"
5447e19dfac4Smrg	  func_append finalize_command " $qarg"
5448e19dfac4Smrg	  continue
5449e19dfac4Smrg	  ;;
5450e19dfac4Smrg	xcompiler)
5451313a12fdSmrg	  func_append compiler_flags " $qarg"
5452e19dfac4Smrg	  prev=
5453e19dfac4Smrg	  func_append compile_command " $qarg"
5454e19dfac4Smrg	  func_append finalize_command " $qarg"
5455e19dfac4Smrg	  continue
5456e19dfac4Smrg	  ;;
5457e19dfac4Smrg	xlinker)
5458313a12fdSmrg	  func_append linker_flags " $qarg"
5459313a12fdSmrg	  func_append compiler_flags " $wl$qarg"
5460e19dfac4Smrg	  prev=
5461e19dfac4Smrg	  func_append compile_command " $wl$qarg"
5462e19dfac4Smrg	  func_append finalize_command " $wl$qarg"
5463e19dfac4Smrg	  continue
5464e19dfac4Smrg	  ;;
5465e19dfac4Smrg	*)
5466e19dfac4Smrg	  eval "$prev=\"\$arg\""
5467e19dfac4Smrg	  prev=
5468e19dfac4Smrg	  continue
5469e19dfac4Smrg	  ;;
547027702724Smrg	esac
5471e19dfac4Smrg      fi # test -n "$prev"
547227702724Smrg
5473e19dfac4Smrg      prevarg="$arg"
547427702724Smrg
5475e19dfac4Smrg      case $arg in
5476e19dfac4Smrg      -all-static)
5477e19dfac4Smrg	if test -n "$link_static_flag"; then
5478e19dfac4Smrg	  # See comment for -static flag below, for more details.
5479e19dfac4Smrg	  func_append compile_command " $link_static_flag"
5480e19dfac4Smrg	  func_append finalize_command " $link_static_flag"
5481e19dfac4Smrg	fi
5482e19dfac4Smrg	continue
5483e19dfac4Smrg	;;
548427702724Smrg
5485e19dfac4Smrg      -allow-undefined)
5486e19dfac4Smrg	# FIXME: remove this flag sometime in the future.
5487e19dfac4Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488e19dfac4Smrg	;;
548927702724Smrg
5490e19dfac4Smrg      -avoid-version)
5491e19dfac4Smrg	avoid_version=yes
5492e19dfac4Smrg	continue
5493e19dfac4Smrg	;;
549427702724Smrg
5495313a12fdSmrg      -bindir)
5496313a12fdSmrg	prev=bindir
5497313a12fdSmrg	continue
5498313a12fdSmrg	;;
5499313a12fdSmrg
5500e19dfac4Smrg      -dlopen)
5501e19dfac4Smrg	prev=dlfiles
5502e19dfac4Smrg	continue
5503e19dfac4Smrg	;;
550427702724Smrg
5505e19dfac4Smrg      -dlpreopen)
5506e19dfac4Smrg	prev=dlprefiles
5507e19dfac4Smrg	continue
5508e19dfac4Smrg	;;
550927702724Smrg
5510e19dfac4Smrg      -export-dynamic)
5511e19dfac4Smrg	export_dynamic=yes
5512e19dfac4Smrg	continue
5513e19dfac4Smrg	;;
551427702724Smrg
5515e19dfac4Smrg      -export-symbols | -export-symbols-regex)
5516e19dfac4Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517e19dfac4Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518e19dfac4Smrg	fi
5519e19dfac4Smrg	if test "X$arg" = "X-export-symbols"; then
5520e19dfac4Smrg	  prev=expsyms
5521e19dfac4Smrg	else
5522e19dfac4Smrg	  prev=expsyms_regex
5523e19dfac4Smrg	fi
5524e19dfac4Smrg	continue
5525e19dfac4Smrg	;;
552627702724Smrg
5527e19dfac4Smrg      -framework)
5528e19dfac4Smrg	prev=framework
5529e19dfac4Smrg	continue
5530e19dfac4Smrg	;;
553127702724Smrg
5532e19dfac4Smrg      -inst-prefix-dir)
5533e19dfac4Smrg	prev=inst_prefix
5534e19dfac4Smrg	continue
5535e19dfac4Smrg	;;
553627702724Smrg
5537e19dfac4Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538e19dfac4Smrg      # so, if we see these flags be careful not to treat them like -L
5539e19dfac4Smrg      -L[A-Z][A-Z]*:*)
5540e19dfac4Smrg	case $with_gcc/$host in
5541e19dfac4Smrg	no/*-*-irix* | /*-*-irix*)
5542e19dfac4Smrg	  func_append compile_command " $arg"
5543e19dfac4Smrg	  func_append finalize_command " $arg"
5544e19dfac4Smrg	  ;;
5545e19dfac4Smrg	esac
5546e19dfac4Smrg	continue
5547e19dfac4Smrg	;;
554827702724Smrg
5549e19dfac4Smrg      -L*)
5550313a12fdSmrg	func_stripname "-L" '' "$arg"
5551313a12fdSmrg	if test -z "$func_stripname_result"; then
5552e19dfac4Smrg	  if test "$#" -gt 0; then
5553e19dfac4Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554e19dfac4Smrg	  else
5555e19dfac4Smrg	    func_fatal_error "need path for \`-L' option"
5556e19dfac4Smrg	  fi
5557e19dfac4Smrg	fi
5558313a12fdSmrg	func_resolve_sysroot "$func_stripname_result"
5559313a12fdSmrg	dir=$func_resolve_sysroot_result
5560e19dfac4Smrg	# We need an absolute path.
5561e19dfac4Smrg	case $dir in
5562e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563e19dfac4Smrg	*)
5564e19dfac4Smrg	  absdir=`cd "$dir" && pwd`
5565e19dfac4Smrg	  test -z "$absdir" && \
5566e19dfac4Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567e19dfac4Smrg	  dir="$absdir"
5568e19dfac4Smrg	  ;;
5569e19dfac4Smrg	esac
5570e19dfac4Smrg	case "$deplibs " in
5571313a12fdSmrg	*" -L$dir "* | *" $arg "*)
5572313a12fdSmrg	  # Will only happen for absolute or sysroot arguments
5573313a12fdSmrg	  ;;
5574e19dfac4Smrg	*)
5575313a12fdSmrg	  # Preserve sysroot, but never include relative directories
5576313a12fdSmrg	  case $dir in
5577313a12fdSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5578313a12fdSmrg	    *) func_append deplibs " -L$dir" ;;
5579313a12fdSmrg	  esac
5580313a12fdSmrg	  func_append lib_search_path " $dir"
5581e19dfac4Smrg	  ;;
5582e19dfac4Smrg	esac
5583e19dfac4Smrg	case $host in
5584e19dfac4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5585313a12fdSmrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586e19dfac4Smrg	  case :$dllsearchpath: in
5587e19dfac4Smrg	  *":$dir:"*) ;;
5588e19dfac4Smrg	  ::) dllsearchpath=$dir;;
5589313a12fdSmrg	  *) func_append dllsearchpath ":$dir";;
5590e19dfac4Smrg	  esac
5591e19dfac4Smrg	  case :$dllsearchpath: in
5592e19dfac4Smrg	  *":$testbindir:"*) ;;
5593e19dfac4Smrg	  ::) dllsearchpath=$testbindir;;
5594313a12fdSmrg	  *) func_append dllsearchpath ":$testbindir";;
5595e19dfac4Smrg	  esac
5596e19dfac4Smrg	  ;;
5597e19dfac4Smrg	esac
5598e19dfac4Smrg	continue
5599e19dfac4Smrg	;;
560027702724Smrg
5601e19dfac4Smrg      -l*)
5602e19dfac4Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603e19dfac4Smrg	  case $host in
5604313a12fdSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605e19dfac4Smrg	    # These systems don't actually have a C or math library (as such)
5606e19dfac4Smrg	    continue
5607e19dfac4Smrg	    ;;
5608e19dfac4Smrg	  *-*-os2*)
5609e19dfac4Smrg	    # These systems don't actually have a C library (as such)
5610e19dfac4Smrg	    test "X$arg" = "X-lc" && continue
5611e19dfac4Smrg	    ;;
5612e19dfac4Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613e19dfac4Smrg	    # Do not include libc due to us having libc/libc_r.
5614e19dfac4Smrg	    test "X$arg" = "X-lc" && continue
5615e19dfac4Smrg	    ;;
5616e19dfac4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617e19dfac4Smrg	    # Rhapsody C and math libraries are in the System framework
5618313a12fdSmrg	    func_append deplibs " System.ltframework"
5619e19dfac4Smrg	    continue
5620e19dfac4Smrg	    ;;
5621e19dfac4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622e19dfac4Smrg	    # Causes problems with __ctype
5623e19dfac4Smrg	    test "X$arg" = "X-lc" && continue
5624e19dfac4Smrg	    ;;
5625e19dfac4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626e19dfac4Smrg	    # Compiler inserts libc in the correct place for threads to work
5627e19dfac4Smrg	    test "X$arg" = "X-lc" && continue
5628e19dfac4Smrg	    ;;
5629e19dfac4Smrg	  esac
5630e19dfac4Smrg	elif test "X$arg" = "X-lc_r"; then
5631e19dfac4Smrg	 case $host in
5632e19dfac4Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633e19dfac4Smrg	   # Do not include libc_r directly, use -pthread flag.
5634e19dfac4Smrg	   continue
5635e19dfac4Smrg	   ;;
5636e19dfac4Smrg	 esac
5637e19dfac4Smrg	fi
5638313a12fdSmrg	func_append deplibs " $arg"
5639e19dfac4Smrg	continue
5640e19dfac4Smrg	;;
564127702724Smrg
5642e19dfac4Smrg      -module)
5643e19dfac4Smrg	module=yes
5644e19dfac4Smrg	continue
5645e19dfac4Smrg	;;
564627702724Smrg
5647e19dfac4Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648e19dfac4Smrg      # classes, name mangling, and exception handling.
5649e19dfac4Smrg      # Darwin uses the -arch flag to determine output architecture.
5650313a12fdSmrg      -model|-arch|-isysroot|--sysroot)
5651313a12fdSmrg	func_append compiler_flags " $arg"
5652e19dfac4Smrg	func_append compile_command " $arg"
5653e19dfac4Smrg	func_append finalize_command " $arg"
5654e19dfac4Smrg	prev=xcompiler
5655e19dfac4Smrg	continue
5656e19dfac4Smrg	;;
565727702724Smrg
5658313a12fdSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659313a12fdSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
5660313a12fdSmrg	func_append compiler_flags " $arg"
5661e19dfac4Smrg	func_append compile_command " $arg"
5662e19dfac4Smrg	func_append finalize_command " $arg"
5663e19dfac4Smrg	case "$new_inherited_linker_flags " in
5664e19dfac4Smrg	    *" $arg "*) ;;
5665313a12fdSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666e19dfac4Smrg	esac
5667e19dfac4Smrg	continue
5668e19dfac4Smrg	;;
566927702724Smrg
5670e19dfac4Smrg      -multi_module)
5671e19dfac4Smrg	single_module="${wl}-multi_module"
5672e19dfac4Smrg	continue
5673e19dfac4Smrg	;;
567427702724Smrg
5675e19dfac4Smrg      -no-fast-install)
5676e19dfac4Smrg	fast_install=no
5677e19dfac4Smrg	continue
5678e19dfac4Smrg	;;
567927702724Smrg
5680e19dfac4Smrg      -no-install)
5681e19dfac4Smrg	case $host in
5682e19dfac4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683e19dfac4Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5684e19dfac4Smrg	  # and Darwin in order for the loader to find any dlls it needs.
5685e19dfac4Smrg	  func_warning "\`-no-install' is ignored for $host"
5686e19dfac4Smrg	  func_warning "assuming \`-no-fast-install' instead"
5687e19dfac4Smrg	  fast_install=no
5688e19dfac4Smrg	  ;;
5689e19dfac4Smrg	*) no_install=yes ;;
5690e19dfac4Smrg	esac
5691e19dfac4Smrg	continue
5692e19dfac4Smrg	;;
569327702724Smrg
5694e19dfac4Smrg      -no-undefined)
5695e19dfac4Smrg	allow_undefined=no
5696e19dfac4Smrg	continue
5697e19dfac4Smrg	;;
569827702724Smrg
5699e19dfac4Smrg      -objectlist)
5700e19dfac4Smrg	prev=objectlist
5701e19dfac4Smrg	continue
5702e19dfac4Smrg	;;
570327702724Smrg
5704e19dfac4Smrg      -o) prev=output ;;
570527702724Smrg
5706e19dfac4Smrg      -precious-files-regex)
5707e19dfac4Smrg	prev=precious_regex
5708e19dfac4Smrg	continue
5709e19dfac4Smrg	;;
571027702724Smrg
5711e19dfac4Smrg      -release)
5712e19dfac4Smrg	prev=release
5713e19dfac4Smrg	continue
5714e19dfac4Smrg	;;
571527702724Smrg
5716e19dfac4Smrg      -rpath)
5717e19dfac4Smrg	prev=rpath
5718e19dfac4Smrg	continue
5719e19dfac4Smrg	;;
572027702724Smrg
5721e19dfac4Smrg      -R)
5722e19dfac4Smrg	prev=xrpath
5723e19dfac4Smrg	continue
5724e19dfac4Smrg	;;
572527702724Smrg
5726e19dfac4Smrg      -R*)
5727e19dfac4Smrg	func_stripname '-R' '' "$arg"
5728e19dfac4Smrg	dir=$func_stripname_result
5729e19dfac4Smrg	# We need an absolute path.
5730e19dfac4Smrg	case $dir in
5731e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5732313a12fdSmrg	=*)
5733313a12fdSmrg	  func_stripname '=' '' "$dir"
5734313a12fdSmrg	  dir=$lt_sysroot$func_stripname_result
5735313a12fdSmrg	  ;;
5736e19dfac4Smrg	*)
5737e19dfac4Smrg	  func_fatal_error "only absolute run-paths are allowed"
5738e19dfac4Smrg	  ;;
5739e19dfac4Smrg	esac
5740e19dfac4Smrg	case "$xrpath " in
5741e19dfac4Smrg	*" $dir "*) ;;
5742313a12fdSmrg	*) func_append xrpath " $dir" ;;
5743e19dfac4Smrg	esac
5744e19dfac4Smrg	continue
5745e19dfac4Smrg	;;
574627702724Smrg
5747e19dfac4Smrg      -shared)
5748e19dfac4Smrg	# The effects of -shared are defined in a previous loop.
5749e19dfac4Smrg	continue
5750e19dfac4Smrg	;;
575127702724Smrg
5752e19dfac4Smrg      -shrext)
5753e19dfac4Smrg	prev=shrext
5754e19dfac4Smrg	continue
5755e19dfac4Smrg	;;
575627702724Smrg
5757e19dfac4Smrg      -static | -static-libtool-libs)
5758e19dfac4Smrg	# The effects of -static are defined in a previous loop.
5759e19dfac4Smrg	# We used to do the same as -all-static on platforms that
5760e19dfac4Smrg	# didn't have a PIC flag, but the assumption that the effects
5761e19dfac4Smrg	# would be equivalent was wrong.  It would break on at least
5762e19dfac4Smrg	# Digital Unix and AIX.
5763e19dfac4Smrg	continue
5764e19dfac4Smrg	;;
576527702724Smrg
5766e19dfac4Smrg      -thread-safe)
5767e19dfac4Smrg	thread_safe=yes
5768e19dfac4Smrg	continue
5769e19dfac4Smrg	;;
577027702724Smrg
5771e19dfac4Smrg      -version-info)
5772e19dfac4Smrg	prev=vinfo
5773e19dfac4Smrg	continue
5774e19dfac4Smrg	;;
577527702724Smrg
5776e19dfac4Smrg      -version-number)
5777e19dfac4Smrg	prev=vinfo
5778e19dfac4Smrg	vinfo_number=yes
5779e19dfac4Smrg	continue
5780e19dfac4Smrg	;;
578127702724Smrg
5782e19dfac4Smrg      -weak)
5783e19dfac4Smrg        prev=weak
5784e19dfac4Smrg	continue
5785e19dfac4Smrg	;;
578627702724Smrg
5787e19dfac4Smrg      -Wc,*)
5788e19dfac4Smrg	func_stripname '-Wc,' '' "$arg"
5789e19dfac4Smrg	args=$func_stripname_result
5790e19dfac4Smrg	arg=
5791e19dfac4Smrg	save_ifs="$IFS"; IFS=','
5792e19dfac4Smrg	for flag in $args; do
5793e19dfac4Smrg	  IFS="$save_ifs"
5794e19dfac4Smrg          func_quote_for_eval "$flag"
5795313a12fdSmrg	  func_append arg " $func_quote_for_eval_result"
5796313a12fdSmrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797e19dfac4Smrg	done
5798e19dfac4Smrg	IFS="$save_ifs"
5799e19dfac4Smrg	func_stripname ' ' '' "$arg"
5800e19dfac4Smrg	arg=$func_stripname_result
5801e19dfac4Smrg	;;
580227702724Smrg
5803e19dfac4Smrg      -Wl,*)
5804e19dfac4Smrg	func_stripname '-Wl,' '' "$arg"
5805e19dfac4Smrg	args=$func_stripname_result
5806e19dfac4Smrg	arg=
5807e19dfac4Smrg	save_ifs="$IFS"; IFS=','
5808e19dfac4Smrg	for flag in $args; do
5809e19dfac4Smrg	  IFS="$save_ifs"
5810e19dfac4Smrg          func_quote_for_eval "$flag"
5811313a12fdSmrg	  func_append arg " $wl$func_quote_for_eval_result"
5812313a12fdSmrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5813313a12fdSmrg	  func_append linker_flags " $func_quote_for_eval_result"
5814e19dfac4Smrg	done
5815e19dfac4Smrg	IFS="$save_ifs"
5816e19dfac4Smrg	func_stripname ' ' '' "$arg"
5817e19dfac4Smrg	arg=$func_stripname_result
5818e19dfac4Smrg	;;
581927702724Smrg
5820e19dfac4Smrg      -Xcompiler)
5821e19dfac4Smrg	prev=xcompiler
5822e19dfac4Smrg	continue
5823e19dfac4Smrg	;;
582427702724Smrg
5825e19dfac4Smrg      -Xlinker)
5826e19dfac4Smrg	prev=xlinker
5827e19dfac4Smrg	continue
5828e19dfac4Smrg	;;
582927702724Smrg
5830e19dfac4Smrg      -XCClinker)
5831e19dfac4Smrg	prev=xcclinker
5832e19dfac4Smrg	continue
5833e19dfac4Smrg	;;
583427702724Smrg
5835e19dfac4Smrg      # -msg_* for osf cc
5836e19dfac4Smrg      -msg_*)
5837e19dfac4Smrg	func_quote_for_eval "$arg"
5838e19dfac4Smrg	arg="$func_quote_for_eval_result"
5839e19dfac4Smrg	;;
584027702724Smrg
5841313a12fdSmrg      # Flags to be passed through unchanged, with rationale:
5842313a12fdSmrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5843313a12fdSmrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
5844313a12fdSmrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5845313a12fdSmrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5846313a12fdSmrg      # -q*                  compiler args for the IBM compiler
5847313a12fdSmrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5848313a12fdSmrg      # -F/path              path to uninstalled frameworks, gcc on darwin
5849313a12fdSmrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5850313a12fdSmrg      # @file                GCC response files
5851313a12fdSmrg      # -tp=*                Portland pgcc target processor selection
5852313a12fdSmrg      # --sysroot=*          for sysroot support
5853313a12fdSmrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854e19dfac4Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5855313a12fdSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
5856313a12fdSmrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857e19dfac4Smrg        func_quote_for_eval "$arg"
5858e19dfac4Smrg	arg="$func_quote_for_eval_result"
5859e19dfac4Smrg        func_append compile_command " $arg"
5860e19dfac4Smrg        func_append finalize_command " $arg"
5861313a12fdSmrg        func_append compiler_flags " $arg"
5862e19dfac4Smrg        continue
5863e19dfac4Smrg        ;;
586427702724Smrg
5865e19dfac4Smrg      # Some other compiler flag.
5866e19dfac4Smrg      -* | +*)
5867e19dfac4Smrg        func_quote_for_eval "$arg"
5868e19dfac4Smrg	arg="$func_quote_for_eval_result"
5869e19dfac4Smrg	;;
587027702724Smrg
5871e19dfac4Smrg      *.$objext)
5872e19dfac4Smrg	# A standard object.
5873313a12fdSmrg	func_append objs " $arg"
5874e19dfac4Smrg	;;
587527702724Smrg
5876e19dfac4Smrg      *.lo)
5877e19dfac4Smrg	# A libtool-controlled object.
587827702724Smrg
5879e19dfac4Smrg	# Check to see that this really is a libtool object.
5880e19dfac4Smrg	if func_lalib_unsafe_p "$arg"; then
5881e19dfac4Smrg	  pic_object=
5882e19dfac4Smrg	  non_pic_object=
5883e19dfac4Smrg
5884e19dfac4Smrg	  # Read the .lo file
5885e19dfac4Smrg	  func_source "$arg"
5886e19dfac4Smrg
5887e19dfac4Smrg	  if test -z "$pic_object" ||
5888e19dfac4Smrg	     test -z "$non_pic_object" ||
5889e19dfac4Smrg	     test "$pic_object" = none &&
5890e19dfac4Smrg	     test "$non_pic_object" = none; then
5891e19dfac4Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892e19dfac4Smrg	  fi
5893e19dfac4Smrg
5894e19dfac4Smrg	  # Extract subdirectory from the argument.
5895e19dfac4Smrg	  func_dirname "$arg" "/" ""
5896e19dfac4Smrg	  xdir="$func_dirname_result"
5897e19dfac4Smrg
5898e19dfac4Smrg	  if test "$pic_object" != none; then
5899e19dfac4Smrg	    # Prepend the subdirectory the object is found in.
5900e19dfac4Smrg	    pic_object="$xdir$pic_object"
5901e19dfac4Smrg
5902e19dfac4Smrg	    if test "$prev" = dlfiles; then
5903e19dfac4Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5904313a12fdSmrg		func_append dlfiles " $pic_object"
5905e19dfac4Smrg		prev=
5906e19dfac4Smrg		continue
5907e19dfac4Smrg	      else
5908e19dfac4Smrg		# If libtool objects are unsupported, then we need to preload.
5909e19dfac4Smrg		prev=dlprefiles
5910e19dfac4Smrg	      fi
5911e19dfac4Smrg	    fi
5912e19dfac4Smrg
5913e19dfac4Smrg	    # CHECK ME:  I think I busted this.  -Ossama
5914e19dfac4Smrg	    if test "$prev" = dlprefiles; then
5915e19dfac4Smrg	      # Preload the old-style object.
5916313a12fdSmrg	      func_append dlprefiles " $pic_object"
5917e19dfac4Smrg	      prev=
5918e19dfac4Smrg	    fi
5919e19dfac4Smrg
5920e19dfac4Smrg	    # A PIC object.
5921e19dfac4Smrg	    func_append libobjs " $pic_object"
5922e19dfac4Smrg	    arg="$pic_object"
5923e19dfac4Smrg	  fi
5924e19dfac4Smrg
5925e19dfac4Smrg	  # Non-PIC object.
5926e19dfac4Smrg	  if test "$non_pic_object" != none; then
5927e19dfac4Smrg	    # Prepend the subdirectory the object is found in.
5928e19dfac4Smrg	    non_pic_object="$xdir$non_pic_object"
5929e19dfac4Smrg
5930e19dfac4Smrg	    # A standard non-PIC object
5931e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
5932e19dfac4Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933e19dfac4Smrg	      arg="$non_pic_object"
5934e19dfac4Smrg	    fi
5935e19dfac4Smrg	  else
5936e19dfac4Smrg	    # If the PIC object exists, use it instead.
5937e19dfac4Smrg	    # $xdir was prepended to $pic_object above.
5938e19dfac4Smrg	    non_pic_object="$pic_object"
5939e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
5940e19dfac4Smrg	  fi
5941e19dfac4Smrg	else
5942e19dfac4Smrg	  # Only an error if not doing a dry-run.
5943e19dfac4Smrg	  if $opt_dry_run; then
5944e19dfac4Smrg	    # Extract subdirectory from the argument.
5945e19dfac4Smrg	    func_dirname "$arg" "/" ""
5946e19dfac4Smrg	    xdir="$func_dirname_result"
5947e19dfac4Smrg
5948e19dfac4Smrg	    func_lo2o "$arg"
5949e19dfac4Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950e19dfac4Smrg	    non_pic_object=$xdir$func_lo2o_result
5951e19dfac4Smrg	    func_append libobjs " $pic_object"
5952e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
5953e19dfac4Smrg	  else
5954e19dfac4Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955e19dfac4Smrg	  fi
5956e19dfac4Smrg	fi
5957e19dfac4Smrg	;;
5958e19dfac4Smrg
5959e19dfac4Smrg      *.$libext)
5960e19dfac4Smrg	# An archive.
5961313a12fdSmrg	func_append deplibs " $arg"
5962313a12fdSmrg	func_append old_deplibs " $arg"
5963e19dfac4Smrg	continue
5964e19dfac4Smrg	;;
5965e19dfac4Smrg
5966e19dfac4Smrg      *.la)
5967e19dfac4Smrg	# A libtool-controlled library.
5968e19dfac4Smrg
5969313a12fdSmrg	func_resolve_sysroot "$arg"
5970e19dfac4Smrg	if test "$prev" = dlfiles; then
5971e19dfac4Smrg	  # This library was specified with -dlopen.
5972313a12fdSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973e19dfac4Smrg	  prev=
5974e19dfac4Smrg	elif test "$prev" = dlprefiles; then
5975e19dfac4Smrg	  # The library was specified with -dlpreopen.
5976313a12fdSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977e19dfac4Smrg	  prev=
5978e19dfac4Smrg	else
5979313a12fdSmrg	  func_append deplibs " $func_resolve_sysroot_result"
5980e19dfac4Smrg	fi
5981e19dfac4Smrg	continue
5982e19dfac4Smrg	;;
5983e19dfac4Smrg
5984e19dfac4Smrg      # Some other compiler argument.
5985e19dfac4Smrg      *)
5986e19dfac4Smrg	# Unknown arguments in both finalize_command and compile_command need
5987e19dfac4Smrg	# to be aesthetically quoted because they are evaled later.
5988e19dfac4Smrg	func_quote_for_eval "$arg"
5989e19dfac4Smrg	arg="$func_quote_for_eval_result"
5990e19dfac4Smrg	;;
5991e19dfac4Smrg      esac # arg
5992e19dfac4Smrg
5993e19dfac4Smrg      # Now actually substitute the argument into the commands.
5994e19dfac4Smrg      if test -n "$arg"; then
5995e19dfac4Smrg	func_append compile_command " $arg"
5996e19dfac4Smrg	func_append finalize_command " $arg"
5997e19dfac4Smrg      fi
5998e19dfac4Smrg    done # argument parsing loop
5999e19dfac4Smrg
6000e19dfac4Smrg    test -n "$prev" && \
6001e19dfac4Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002e19dfac4Smrg
6003e19dfac4Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004e19dfac4Smrg      eval arg=\"$export_dynamic_flag_spec\"
6005e19dfac4Smrg      func_append compile_command " $arg"
6006e19dfac4Smrg      func_append finalize_command " $arg"
6007e19dfac4Smrg    fi
6008e19dfac4Smrg
6009e19dfac4Smrg    oldlibs=
6010e19dfac4Smrg    # calculate the name of the file, without its directory
6011e19dfac4Smrg    func_basename "$output"
6012e19dfac4Smrg    outputname="$func_basename_result"
6013e19dfac4Smrg    libobjs_save="$libobjs"
6014e19dfac4Smrg
6015e19dfac4Smrg    if test -n "$shlibpath_var"; then
6016e19dfac4Smrg      # get the directories listed in $shlibpath_var
6017313a12fdSmrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
601827702724Smrg    else
6019e19dfac4Smrg      shlib_search_path=
602027702724Smrg    fi
6021e19dfac4Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022e19dfac4Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
602327702724Smrg
6024e19dfac4Smrg    func_dirname "$output" "/" ""
6025e19dfac4Smrg    output_objdir="$func_dirname_result$objdir"
6026313a12fdSmrg    func_to_tool_file "$output_objdir/"
6027313a12fdSmrg    tool_output_objdir=$func_to_tool_file_result
6028e19dfac4Smrg    # Create the object directory.
6029e19dfac4Smrg    func_mkdir_p "$output_objdir"
603027702724Smrg
6031e19dfac4Smrg    # Determine the type of output
6032e19dfac4Smrg    case $output in
6033e19dfac4Smrg    "")
6034e19dfac4Smrg      func_fatal_help "you must specify an output file"
6035e19dfac4Smrg      ;;
6036e19dfac4Smrg    *.$libext) linkmode=oldlib ;;
6037e19dfac4Smrg    *.lo | *.$objext) linkmode=obj ;;
6038e19dfac4Smrg    *.la) linkmode=lib ;;
6039e19dfac4Smrg    *) linkmode=prog ;; # Anything else should be a program.
6040e19dfac4Smrg    esac
6041e19dfac4Smrg
6042e19dfac4Smrg    specialdeplibs=
6043e19dfac4Smrg
6044e19dfac4Smrg    libs=
6045e19dfac4Smrg    # Find all interdependent deplibs by searching for libraries
6046e19dfac4Smrg    # that are linked more than once (e.g. -la -lb -la)
6047e19dfac4Smrg    for deplib in $deplibs; do
6048313a12fdSmrg      if $opt_preserve_dup_deps ; then
6049e19dfac4Smrg	case "$libs " in
6050313a12fdSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051e19dfac4Smrg	esac
6052e19dfac4Smrg      fi
6053313a12fdSmrg      func_append libs " $deplib"
6054e19dfac4Smrg    done
6055e19dfac4Smrg
6056e19dfac4Smrg    if test "$linkmode" = lib; then
6057e19dfac4Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058e19dfac4Smrg
6059e19dfac4Smrg      # Compute libraries that are listed more than once in $predeps
6060e19dfac4Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061e19dfac4Smrg      # not to be eliminated).
6062e19dfac4Smrg      pre_post_deps=
6063e19dfac4Smrg      if $opt_duplicate_compiler_generated_deps; then
6064e19dfac4Smrg	for pre_post_dep in $predeps $postdeps; do
6065e19dfac4Smrg	  case "$pre_post_deps " in
6066313a12fdSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067e19dfac4Smrg	  esac
6068313a12fdSmrg	  func_append pre_post_deps " $pre_post_dep"
6069e19dfac4Smrg	done
6070e19dfac4Smrg      fi
6071e19dfac4Smrg      pre_post_deps=
6072e19dfac4Smrg    fi
6073e19dfac4Smrg
6074e19dfac4Smrg    deplibs=
6075e19dfac4Smrg    newdependency_libs=
6076e19dfac4Smrg    newlib_search_path=
6077e19dfac4Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078e19dfac4Smrg    notinst_deplibs= # not-installed libtool libraries
6079e19dfac4Smrg    notinst_path= # paths that contain not-installed libtool libraries
6080e19dfac4Smrg
6081e19dfac4Smrg    case $linkmode in
6082e19dfac4Smrg    lib)
6083e19dfac4Smrg	passes="conv dlpreopen link"
6084e19dfac4Smrg	for file in $dlfiles $dlprefiles; do
6085e19dfac4Smrg	  case $file in
6086e19dfac4Smrg	  *.la) ;;
6087e19dfac4Smrg	  *)
6088e19dfac4Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089e19dfac4Smrg	    ;;
6090e19dfac4Smrg	  esac
6091e19dfac4Smrg	done
6092e19dfac4Smrg	;;
6093e19dfac4Smrg    prog)
6094e19dfac4Smrg	compile_deplibs=
6095e19dfac4Smrg	finalize_deplibs=
6096e19dfac4Smrg	alldeplibs=no
6097e19dfac4Smrg	newdlfiles=
6098e19dfac4Smrg	newdlprefiles=
6099e19dfac4Smrg	passes="conv scan dlopen dlpreopen link"
6100e19dfac4Smrg	;;
6101e19dfac4Smrg    *)  passes="conv"
6102e19dfac4Smrg	;;
6103e19dfac4Smrg    esac
6104e19dfac4Smrg
6105e19dfac4Smrg    for pass in $passes; do
6106e19dfac4Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107e19dfac4Smrg      # so that -L comes before libs that need it for instance...
6108e19dfac4Smrg      if test "$linkmode,$pass" = "lib,link"; then
6109e19dfac4Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110e19dfac4Smrg	##        order, and fix it there properly
6111e19dfac4Smrg        tmp_deplibs=
6112e19dfac4Smrg	for deplib in $deplibs; do
6113e19dfac4Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114e19dfac4Smrg	done
6115e19dfac4Smrg	deplibs="$tmp_deplibs"
6116e19dfac4Smrg      fi
6117e19dfac4Smrg
6118e19dfac4Smrg      if test "$linkmode,$pass" = "lib,link" ||
6119e19dfac4Smrg	 test "$linkmode,$pass" = "prog,scan"; then
6120e19dfac4Smrg	libs="$deplibs"
6121e19dfac4Smrg	deplibs=
6122e19dfac4Smrg      fi
6123e19dfac4Smrg      if test "$linkmode" = prog; then
6124e19dfac4Smrg	case $pass in
6125e19dfac4Smrg	dlopen) libs="$dlfiles" ;;
6126e19dfac4Smrg	dlpreopen) libs="$dlprefiles" ;;
6127313a12fdSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128e19dfac4Smrg	esac
6129e19dfac4Smrg      fi
6130e19dfac4Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131e19dfac4Smrg	# Collect and forward deplibs of preopened libtool libs
6132e19dfac4Smrg	for lib in $dlprefiles; do
6133e19dfac4Smrg	  # Ignore non-libtool-libs
6134e19dfac4Smrg	  dependency_libs=
6135313a12fdSmrg	  func_resolve_sysroot "$lib"
6136e19dfac4Smrg	  case $lib in
6137313a12fdSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138e19dfac4Smrg	  esac
6139e19dfac4Smrg
6140e19dfac4Smrg	  # Collect preopened libtool deplibs, except any this library
6141e19dfac4Smrg	  # has declared as weak libs
6142e19dfac4Smrg	  for deplib in $dependency_libs; do
6143313a12fdSmrg	    func_basename "$deplib"
6144313a12fdSmrg            deplib_base=$func_basename_result
6145e19dfac4Smrg	    case " $weak_libs " in
6146e19dfac4Smrg	    *" $deplib_base "*) ;;
6147313a12fdSmrg	    *) func_append deplibs " $deplib" ;;
6148e19dfac4Smrg	    esac
6149e19dfac4Smrg	  done
6150e19dfac4Smrg	done
6151e19dfac4Smrg	libs="$dlprefiles"
6152e19dfac4Smrg      fi
6153e19dfac4Smrg      if test "$pass" = dlopen; then
6154e19dfac4Smrg	# Collect dlpreopened libraries
6155e19dfac4Smrg	save_deplibs="$deplibs"
6156e19dfac4Smrg	deplibs=
6157e19dfac4Smrg      fi
6158e19dfac4Smrg
6159e19dfac4Smrg      for deplib in $libs; do
6160e19dfac4Smrg	lib=
6161e19dfac4Smrg	found=no
6162e19dfac4Smrg	case $deplib in
6163313a12fdSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6164313a12fdSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165e19dfac4Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6166e19dfac4Smrg	    compile_deplibs="$deplib $compile_deplibs"
6167e19dfac4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168e19dfac4Smrg	  else
6169313a12fdSmrg	    func_append compiler_flags " $deplib"
6170e19dfac4Smrg	    if test "$linkmode" = lib ; then
6171e19dfac4Smrg		case "$new_inherited_linker_flags " in
6172e19dfac4Smrg		    *" $deplib "*) ;;
6173313a12fdSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174e19dfac4Smrg		esac
6175e19dfac4Smrg	    fi
6176e19dfac4Smrg	  fi
6177e19dfac4Smrg	  continue
6178e19dfac4Smrg	  ;;
6179e19dfac4Smrg	-l*)
6180e19dfac4Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181e19dfac4Smrg	    func_warning "\`-l' is ignored for archives/objects"
6182e19dfac4Smrg	    continue
6183e19dfac4Smrg	  fi
6184e19dfac4Smrg	  func_stripname '-l' '' "$deplib"
6185e19dfac4Smrg	  name=$func_stripname_result
6186e19dfac4Smrg	  if test "$linkmode" = lib; then
6187e19dfac4Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188e19dfac4Smrg	  else
6189e19dfac4Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190e19dfac4Smrg	  fi
6191e19dfac4Smrg	  for searchdir in $searchdirs; do
6192e19dfac4Smrg	    for search_ext in .la $std_shrext .so .a; do
6193e19dfac4Smrg	      # Search the libtool library
6194e19dfac4Smrg	      lib="$searchdir/lib${name}${search_ext}"
6195e19dfac4Smrg	      if test -f "$lib"; then
6196e19dfac4Smrg		if test "$search_ext" = ".la"; then
6197e19dfac4Smrg		  found=yes
6198e19dfac4Smrg		else
6199e19dfac4Smrg		  found=no
6200e19dfac4Smrg		fi
6201e19dfac4Smrg		break 2
6202e19dfac4Smrg	      fi
6203e19dfac4Smrg	    done
6204e19dfac4Smrg	  done
6205e19dfac4Smrg	  if test "$found" != yes; then
6206e19dfac4Smrg	    # deplib doesn't seem to be a libtool library
6207e19dfac4Smrg	    if test "$linkmode,$pass" = "prog,link"; then
6208e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6209e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6210e19dfac4Smrg	    else
6211e19dfac4Smrg	      deplibs="$deplib $deplibs"
6212e19dfac4Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213e19dfac4Smrg	    fi
6214e19dfac4Smrg	    continue
6215e19dfac4Smrg	  else # deplib is a libtool library
6216e19dfac4Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217e19dfac4Smrg	    # We need to do some special things here, and not later.
6218e19dfac4Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219e19dfac4Smrg	      case " $predeps $postdeps " in
6220e19dfac4Smrg	      *" $deplib "*)
6221e19dfac4Smrg		if func_lalib_p "$lib"; then
6222e19dfac4Smrg		  library_names=
6223e19dfac4Smrg		  old_library=
6224e19dfac4Smrg		  func_source "$lib"
6225e19dfac4Smrg		  for l in $old_library $library_names; do
6226e19dfac4Smrg		    ll="$l"
6227e19dfac4Smrg		  done
6228e19dfac4Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6229e19dfac4Smrg		    found=no
6230e19dfac4Smrg		    func_dirname "$lib" "" "."
6231e19dfac4Smrg		    ladir="$func_dirname_result"
6232e19dfac4Smrg		    lib=$ladir/$old_library
6233e19dfac4Smrg		    if test "$linkmode,$pass" = "prog,link"; then
6234e19dfac4Smrg		      compile_deplibs="$deplib $compile_deplibs"
6235e19dfac4Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236e19dfac4Smrg		    else
6237e19dfac4Smrg		      deplibs="$deplib $deplibs"
6238e19dfac4Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239e19dfac4Smrg		    fi
6240e19dfac4Smrg		    continue
6241e19dfac4Smrg		  fi
6242e19dfac4Smrg		fi
6243e19dfac4Smrg		;;
6244e19dfac4Smrg	      *) ;;
6245e19dfac4Smrg	      esac
6246e19dfac4Smrg	    fi
6247e19dfac4Smrg	  fi
6248e19dfac4Smrg	  ;; # -l
6249e19dfac4Smrg	*.ltframework)
6250e19dfac4Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6251e19dfac4Smrg	    compile_deplibs="$deplib $compile_deplibs"
6252e19dfac4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253e19dfac4Smrg	  else
6254e19dfac4Smrg	    deplibs="$deplib $deplibs"
6255e19dfac4Smrg	    if test "$linkmode" = lib ; then
6256e19dfac4Smrg		case "$new_inherited_linker_flags " in
6257e19dfac4Smrg		    *" $deplib "*) ;;
6258313a12fdSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259e19dfac4Smrg		esac
6260e19dfac4Smrg	    fi
6261e19dfac4Smrg	  fi
6262e19dfac4Smrg	  continue
6263e19dfac4Smrg	  ;;
6264e19dfac4Smrg	-L*)
6265e19dfac4Smrg	  case $linkmode in
6266e19dfac4Smrg	  lib)
6267e19dfac4Smrg	    deplibs="$deplib $deplibs"
6268e19dfac4Smrg	    test "$pass" = conv && continue
6269e19dfac4Smrg	    newdependency_libs="$deplib $newdependency_libs"
6270e19dfac4Smrg	    func_stripname '-L' '' "$deplib"
6271313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
6272313a12fdSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273e19dfac4Smrg	    ;;
6274e19dfac4Smrg	  prog)
6275e19dfac4Smrg	    if test "$pass" = conv; then
6276e19dfac4Smrg	      deplibs="$deplib $deplibs"
6277e19dfac4Smrg	      continue
6278e19dfac4Smrg	    fi
6279e19dfac4Smrg	    if test "$pass" = scan; then
6280e19dfac4Smrg	      deplibs="$deplib $deplibs"
6281e19dfac4Smrg	    else
6282e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6283e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284e19dfac4Smrg	    fi
6285e19dfac4Smrg	    func_stripname '-L' '' "$deplib"
6286313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
6287313a12fdSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288e19dfac4Smrg	    ;;
6289e19dfac4Smrg	  *)
6290e19dfac4Smrg	    func_warning "\`-L' is ignored for archives/objects"
6291e19dfac4Smrg	    ;;
6292e19dfac4Smrg	  esac # linkmode
6293e19dfac4Smrg	  continue
6294e19dfac4Smrg	  ;; # -L
6295e19dfac4Smrg	-R*)
6296e19dfac4Smrg	  if test "$pass" = link; then
6297e19dfac4Smrg	    func_stripname '-R' '' "$deplib"
6298313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
6299313a12fdSmrg	    dir=$func_resolve_sysroot_result
6300e19dfac4Smrg	    # Make sure the xrpath contains only unique directories.
6301e19dfac4Smrg	    case "$xrpath " in
6302e19dfac4Smrg	    *" $dir "*) ;;
6303313a12fdSmrg	    *) func_append xrpath " $dir" ;;
6304e19dfac4Smrg	    esac
6305e19dfac4Smrg	  fi
6306e19dfac4Smrg	  deplibs="$deplib $deplibs"
6307e19dfac4Smrg	  continue
6308e19dfac4Smrg	  ;;
6309313a12fdSmrg	*.la)
6310313a12fdSmrg	  func_resolve_sysroot "$deplib"
6311313a12fdSmrg	  lib=$func_resolve_sysroot_result
6312313a12fdSmrg	  ;;
6313e19dfac4Smrg	*.$libext)
6314e19dfac4Smrg	  if test "$pass" = conv; then
6315e19dfac4Smrg	    deplibs="$deplib $deplibs"
6316e19dfac4Smrg	    continue
6317e19dfac4Smrg	  fi
6318e19dfac4Smrg	  case $linkmode in
6319e19dfac4Smrg	  lib)
6320e19dfac4Smrg	    # Linking convenience modules into shared libraries is allowed,
6321e19dfac4Smrg	    # but linking other static libraries is non-portable.
6322e19dfac4Smrg	    case " $dlpreconveniencelibs " in
6323e19dfac4Smrg	    *" $deplib "*) ;;
6324e19dfac4Smrg	    *)
6325e19dfac4Smrg	      valid_a_lib=no
6326e19dfac4Smrg	      case $deplibs_check_method in
6327e19dfac4Smrg		match_pattern*)
6328e19dfac4Smrg		  set dummy $deplibs_check_method; shift
6329e19dfac4Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6330313a12fdSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331e19dfac4Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332e19dfac4Smrg		    valid_a_lib=yes
6333e19dfac4Smrg		  fi
6334e19dfac4Smrg		;;
6335e19dfac4Smrg		pass_all)
6336e19dfac4Smrg		  valid_a_lib=yes
6337e19dfac4Smrg		;;
6338e19dfac4Smrg	      esac
6339e19dfac4Smrg	      if test "$valid_a_lib" != yes; then
6340313a12fdSmrg		echo
6341e19dfac4Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6342313a12fdSmrg		echo "*** I have the capability to make that library automatically link in when"
6343313a12fdSmrg		echo "*** you link to this library.  But I can only do this if you have a"
6344313a12fdSmrg		echo "*** shared version of the library, which you do not appear to have"
6345313a12fdSmrg		echo "*** because the file extensions .$libext of this argument makes me believe"
6346313a12fdSmrg		echo "*** that it is just a static archive that I should not use here."
6347e19dfac4Smrg	      else
6348313a12fdSmrg		echo
6349e19dfac4Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
6350e19dfac4Smrg		$ECHO "*** static library $deplib is not portable!"
6351e19dfac4Smrg		deplibs="$deplib $deplibs"
6352e19dfac4Smrg	      fi
6353e19dfac4Smrg	      ;;
6354e19dfac4Smrg	    esac
6355e19dfac4Smrg	    continue
6356e19dfac4Smrg	    ;;
6357e19dfac4Smrg	  prog)
6358e19dfac4Smrg	    if test "$pass" != link; then
6359e19dfac4Smrg	      deplibs="$deplib $deplibs"
6360e19dfac4Smrg	    else
6361e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6362e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363e19dfac4Smrg	    fi
6364e19dfac4Smrg	    continue
6365e19dfac4Smrg	    ;;
6366e19dfac4Smrg	  esac # linkmode
6367e19dfac4Smrg	  ;; # *.$libext
6368e19dfac4Smrg	*.lo | *.$objext)
6369e19dfac4Smrg	  if test "$pass" = conv; then
6370e19dfac4Smrg	    deplibs="$deplib $deplibs"
6371e19dfac4Smrg	  elif test "$linkmode" = prog; then
6372e19dfac4Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373e19dfac4Smrg	      # If there is no dlopen support or we're linking statically,
6374e19dfac4Smrg	      # we need to preload.
6375313a12fdSmrg	      func_append newdlprefiles " $deplib"
6376e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6377e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378e19dfac4Smrg	    else
6379313a12fdSmrg	      func_append newdlfiles " $deplib"
6380e19dfac4Smrg	    fi
6381e19dfac4Smrg	  fi
6382e19dfac4Smrg	  continue
6383e19dfac4Smrg	  ;;
6384e19dfac4Smrg	%DEPLIBS%)
6385e19dfac4Smrg	  alldeplibs=yes
6386e19dfac4Smrg	  continue
6387e19dfac4Smrg	  ;;
6388e19dfac4Smrg	esac # case $deplib
6389e19dfac4Smrg
6390e19dfac4Smrg	if test "$found" = yes || test -f "$lib"; then :
6391e19dfac4Smrg	else
6392e19dfac4Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393e19dfac4Smrg	fi
6394e19dfac4Smrg
6395e19dfac4Smrg	# Check to see that this really is a libtool archive.
6396e19dfac4Smrg	func_lalib_unsafe_p "$lib" \
6397e19dfac4Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398e19dfac4Smrg
6399e19dfac4Smrg	func_dirname "$lib" "" "."
6400e19dfac4Smrg	ladir="$func_dirname_result"
6401e19dfac4Smrg
6402e19dfac4Smrg	dlname=
6403e19dfac4Smrg	dlopen=
6404e19dfac4Smrg	dlpreopen=
6405e19dfac4Smrg	libdir=
6406e19dfac4Smrg	library_names=
6407e19dfac4Smrg	old_library=
6408e19dfac4Smrg	inherited_linker_flags=
6409e19dfac4Smrg	# If the library was installed with an old release of libtool,
6410e19dfac4Smrg	# it will not redefine variables installed, or shouldnotlink
6411e19dfac4Smrg	installed=yes
6412e19dfac4Smrg	shouldnotlink=no
6413e19dfac4Smrg	avoidtemprpath=
6414e19dfac4Smrg
6415e19dfac4Smrg
6416e19dfac4Smrg	# Read the .la file
6417e19dfac4Smrg	func_source "$lib"
6418e19dfac4Smrg
6419e19dfac4Smrg	# Convert "-framework foo" to "foo.ltframework"
6420e19dfac4Smrg	if test -n "$inherited_linker_flags"; then
6421313a12fdSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422e19dfac4Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423e19dfac4Smrg	    case " $new_inherited_linker_flags " in
6424e19dfac4Smrg	      *" $tmp_inherited_linker_flag "*) ;;
6425313a12fdSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426e19dfac4Smrg	    esac
6427e19dfac4Smrg	  done
6428e19dfac4Smrg	fi
6429313a12fdSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430e19dfac4Smrg	if test "$linkmode,$pass" = "lib,link" ||
6431e19dfac4Smrg	   test "$linkmode,$pass" = "prog,scan" ||
6432e19dfac4Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6433313a12fdSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6434313a12fdSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435e19dfac4Smrg	fi
6436e19dfac4Smrg
6437e19dfac4Smrg	if test "$pass" = conv; then
6438e19dfac4Smrg	  # Only check for convenience libraries
6439e19dfac4Smrg	  deplibs="$lib $deplibs"
6440e19dfac4Smrg	  if test -z "$libdir"; then
6441e19dfac4Smrg	    if test -z "$old_library"; then
6442e19dfac4Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443e19dfac4Smrg	    fi
6444e19dfac4Smrg	    # It is a libtool convenience library, so add in its objects.
6445313a12fdSmrg	    func_append convenience " $ladir/$objdir/$old_library"
6446313a12fdSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6447e19dfac4Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448e19dfac4Smrg	    func_fatal_error "\`$lib' is not a convenience library"
6449e19dfac4Smrg	  fi
6450313a12fdSmrg	  tmp_libs=
6451313a12fdSmrg	  for deplib in $dependency_libs; do
6452313a12fdSmrg	    deplibs="$deplib $deplibs"
6453313a12fdSmrg	    if $opt_preserve_dup_deps ; then
6454313a12fdSmrg	      case "$tmp_libs " in
6455313a12fdSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456313a12fdSmrg	      esac
6457313a12fdSmrg	    fi
6458313a12fdSmrg	    func_append tmp_libs " $deplib"
6459313a12fdSmrg	  done
6460e19dfac4Smrg	  continue
6461e19dfac4Smrg	fi # $pass = conv
6462e19dfac4Smrg
6463e19dfac4Smrg
6464e19dfac4Smrg	# Get the name of the library we link against.
6465e19dfac4Smrg	linklib=
6466313a12fdSmrg	if test -n "$old_library" &&
6467313a12fdSmrg	   { test "$prefer_static_libs" = yes ||
6468313a12fdSmrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6469313a12fdSmrg	  linklib=$old_library
6470313a12fdSmrg	else
6471313a12fdSmrg	  for l in $old_library $library_names; do
6472313a12fdSmrg	    linklib="$l"
6473313a12fdSmrg	  done
6474313a12fdSmrg	fi
6475e19dfac4Smrg	if test -z "$linklib"; then
6476e19dfac4Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477e19dfac4Smrg	fi
6478e19dfac4Smrg
6479e19dfac4Smrg	# This library was specified with -dlopen.
6480e19dfac4Smrg	if test "$pass" = dlopen; then
6481e19dfac4Smrg	  if test -z "$libdir"; then
6482e19dfac4Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483e19dfac4Smrg	  fi
6484e19dfac4Smrg	  if test -z "$dlname" ||
6485e19dfac4Smrg	     test "$dlopen_support" != yes ||
6486e19dfac4Smrg	     test "$build_libtool_libs" = no; then
6487e19dfac4Smrg	    # If there is no dlname, no dlopen support or we're linking
6488e19dfac4Smrg	    # statically, we need to preload.  We also need to preload any
6489e19dfac4Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490e19dfac4Smrg	    # bomb out in the load deplibs phase.
6491313a12fdSmrg	    func_append dlprefiles " $lib $dependency_libs"
6492e19dfac4Smrg	  else
6493313a12fdSmrg	    func_append newdlfiles " $lib"
6494e19dfac4Smrg	  fi
6495e19dfac4Smrg	  continue
6496e19dfac4Smrg	fi # $pass = dlopen
6497e19dfac4Smrg
6498e19dfac4Smrg	# We need an absolute path.
6499e19dfac4Smrg	case $ladir in
6500e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501e19dfac4Smrg	*)
6502e19dfac4Smrg	  abs_ladir=`cd "$ladir" && pwd`
6503e19dfac4Smrg	  if test -z "$abs_ladir"; then
6504e19dfac4Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505e19dfac4Smrg	    func_warning "passing it literally to the linker, although it might fail"
6506e19dfac4Smrg	    abs_ladir="$ladir"
6507e19dfac4Smrg	  fi
6508e19dfac4Smrg	  ;;
6509e19dfac4Smrg	esac
6510e19dfac4Smrg	func_basename "$lib"
6511e19dfac4Smrg	laname="$func_basename_result"
6512e19dfac4Smrg
6513e19dfac4Smrg	# Find the relevant object directory and library name.
6514e19dfac4Smrg	if test "X$installed" = Xyes; then
6515313a12fdSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516e19dfac4Smrg	    func_warning "library \`$lib' was moved."
6517e19dfac4Smrg	    dir="$ladir"
6518e19dfac4Smrg	    absdir="$abs_ladir"
6519e19dfac4Smrg	    libdir="$abs_ladir"
6520e19dfac4Smrg	  else
6521313a12fdSmrg	    dir="$lt_sysroot$libdir"
6522313a12fdSmrg	    absdir="$lt_sysroot$libdir"
6523e19dfac4Smrg	  fi
6524e19dfac4Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525e19dfac4Smrg	else
6526e19dfac4Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527e19dfac4Smrg	    dir="$ladir"
6528e19dfac4Smrg	    absdir="$abs_ladir"
6529e19dfac4Smrg	    # Remove this search path later
6530313a12fdSmrg	    func_append notinst_path " $abs_ladir"
6531e19dfac4Smrg	  else
6532e19dfac4Smrg	    dir="$ladir/$objdir"
6533e19dfac4Smrg	    absdir="$abs_ladir/$objdir"
6534e19dfac4Smrg	    # Remove this search path later
6535313a12fdSmrg	    func_append notinst_path " $abs_ladir"
6536e19dfac4Smrg	  fi
6537e19dfac4Smrg	fi # $installed = yes
6538e19dfac4Smrg	func_stripname 'lib' '.la' "$laname"
6539e19dfac4Smrg	name=$func_stripname_result
6540e19dfac4Smrg
6541e19dfac4Smrg	# This library was specified with -dlpreopen.
6542e19dfac4Smrg	if test "$pass" = dlpreopen; then
6543e19dfac4Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6544e19dfac4Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545e19dfac4Smrg	  fi
6546313a12fdSmrg	  case "$host" in
6547313a12fdSmrg	    # special handling for platforms with PE-DLLs.
6548313a12fdSmrg	    *cygwin* | *mingw* | *cegcc* )
6549313a12fdSmrg	      # Linker will automatically link against shared library if both
6550313a12fdSmrg	      # static and shared are present.  Therefore, ensure we extract
6551313a12fdSmrg	      # symbols from the import library if a shared library is present
6552313a12fdSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
6553313a12fdSmrg	      # this by putting the import library name into $newdlprefiles.
6554313a12fdSmrg	      # We recover the dlopen module name by 'saving' the la file
6555313a12fdSmrg	      # name in a special purpose variable, and (later) extracting the
6556313a12fdSmrg	      # dlname from the la file.
6557313a12fdSmrg	      if test -n "$dlname"; then
6558313a12fdSmrg	        func_tr_sh "$dir/$linklib"
6559313a12fdSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6560313a12fdSmrg	        func_append newdlprefiles " $dir/$linklib"
6561313a12fdSmrg	      else
6562313a12fdSmrg	        func_append newdlprefiles " $dir/$old_library"
6563313a12fdSmrg	        # Keep a list of preopened convenience libraries to check
6564313a12fdSmrg	        # that they are being used correctly in the link pass.
6565313a12fdSmrg	        test -z "$libdir" && \
6566313a12fdSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6567313a12fdSmrg	      fi
6568313a12fdSmrg	    ;;
6569313a12fdSmrg	    * )
6570313a12fdSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6571313a12fdSmrg	      # are required to link).
6572313a12fdSmrg	      if test -n "$old_library"; then
6573313a12fdSmrg	        func_append newdlprefiles " $dir/$old_library"
6574313a12fdSmrg	        # Keep a list of preopened convenience libraries to check
6575313a12fdSmrg	        # that they are being used correctly in the link pass.
6576313a12fdSmrg	        test -z "$libdir" && \
6577313a12fdSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6578313a12fdSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6579313a12fdSmrg	      elif test -n "$dlname"; then
6580313a12fdSmrg	        func_append newdlprefiles " $dir/$dlname"
6581313a12fdSmrg	      else
6582313a12fdSmrg	        func_append newdlprefiles " $dir/$linklib"
6583313a12fdSmrg	      fi
6584313a12fdSmrg	    ;;
6585313a12fdSmrg	  esac
6586e19dfac4Smrg	fi # $pass = dlpreopen
6587e19dfac4Smrg
6588e19dfac4Smrg	if test -z "$libdir"; then
6589e19dfac4Smrg	  # Link the convenience library
6590e19dfac4Smrg	  if test "$linkmode" = lib; then
6591e19dfac4Smrg	    deplibs="$dir/$old_library $deplibs"
6592e19dfac4Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593e19dfac4Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594e19dfac4Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595e19dfac4Smrg	  else
6596e19dfac4Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597e19dfac4Smrg	  fi
6598e19dfac4Smrg	  continue
6599e19dfac4Smrg	fi
6600e19dfac4Smrg
6601e19dfac4Smrg
6602e19dfac4Smrg	if test "$linkmode" = prog && test "$pass" != link; then
6603313a12fdSmrg	  func_append newlib_search_path " $ladir"
6604e19dfac4Smrg	  deplibs="$lib $deplibs"
6605e19dfac4Smrg
6606e19dfac4Smrg	  linkalldeplibs=no
6607e19dfac4Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608e19dfac4Smrg	     test "$build_libtool_libs" = no; then
6609e19dfac4Smrg	    linkalldeplibs=yes
6610e19dfac4Smrg	  fi
6611e19dfac4Smrg
6612e19dfac4Smrg	  tmp_libs=
6613e19dfac4Smrg	  for deplib in $dependency_libs; do
6614e19dfac4Smrg	    case $deplib in
6615e19dfac4Smrg	    -L*) func_stripname '-L' '' "$deplib"
6616313a12fdSmrg	         func_resolve_sysroot "$func_stripname_result"
6617313a12fdSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618e19dfac4Smrg		 ;;
6619e19dfac4Smrg	    esac
6620e19dfac4Smrg	    # Need to link against all dependency_libs?
6621e19dfac4Smrg	    if test "$linkalldeplibs" = yes; then
6622e19dfac4Smrg	      deplibs="$deplib $deplibs"
6623e19dfac4Smrg	    else
6624e19dfac4Smrg	      # Need to hardcode shared library paths
6625e19dfac4Smrg	      # or/and link against static libraries
6626e19dfac4Smrg	      newdependency_libs="$deplib $newdependency_libs"
6627e19dfac4Smrg	    fi
6628313a12fdSmrg	    if $opt_preserve_dup_deps ; then
6629e19dfac4Smrg	      case "$tmp_libs " in
6630313a12fdSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631e19dfac4Smrg	      esac
6632e19dfac4Smrg	    fi
6633313a12fdSmrg	    func_append tmp_libs " $deplib"
6634e19dfac4Smrg	  done # for deplib
6635e19dfac4Smrg	  continue
6636e19dfac4Smrg	fi # $linkmode = prog...
6637e19dfac4Smrg
6638e19dfac4Smrg	if test "$linkmode,$pass" = "prog,link"; then
6639e19dfac4Smrg	  if test -n "$library_names" &&
6640e19dfac4Smrg	     { { test "$prefer_static_libs" = no ||
6641e19dfac4Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642e19dfac4Smrg	       test -z "$old_library"; }; then
6643e19dfac4Smrg	    # We need to hardcode the library path
6644e19dfac4Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645e19dfac4Smrg	      # Make sure the rpath contains only unique directories.
6646e19dfac4Smrg	      case "$temp_rpath:" in
6647e19dfac4Smrg	      *"$absdir:"*) ;;
6648313a12fdSmrg	      *) func_append temp_rpath "$absdir:" ;;
6649e19dfac4Smrg	      esac
6650e19dfac4Smrg	    fi
6651e19dfac4Smrg
6652e19dfac4Smrg	    # Hardcode the library path.
6653e19dfac4Smrg	    # Skip directories that are in the system default run-time
6654e19dfac4Smrg	    # search path.
6655e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
6656e19dfac4Smrg	    *" $absdir "*) ;;
6657e19dfac4Smrg	    *)
6658e19dfac4Smrg	      case "$compile_rpath " in
6659e19dfac4Smrg	      *" $absdir "*) ;;
6660313a12fdSmrg	      *) func_append compile_rpath " $absdir" ;;
6661e19dfac4Smrg	      esac
6662e19dfac4Smrg	      ;;
6663e19dfac4Smrg	    esac
6664e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
6665e19dfac4Smrg	    *" $libdir "*) ;;
6666e19dfac4Smrg	    *)
6667e19dfac4Smrg	      case "$finalize_rpath " in
6668e19dfac4Smrg	      *" $libdir "*) ;;
6669313a12fdSmrg	      *) func_append finalize_rpath " $libdir" ;;
6670e19dfac4Smrg	      esac
6671e19dfac4Smrg	      ;;
6672e19dfac4Smrg	    esac
6673e19dfac4Smrg	  fi # $linkmode,$pass = prog,link...
6674e19dfac4Smrg
6675e19dfac4Smrg	  if test "$alldeplibs" = yes &&
6676e19dfac4Smrg	     { test "$deplibs_check_method" = pass_all ||
6677e19dfac4Smrg	       { test "$build_libtool_libs" = yes &&
6678e19dfac4Smrg		 test -n "$library_names"; }; }; then
6679e19dfac4Smrg	    # We only need to search for static libraries
6680e19dfac4Smrg	    continue
6681e19dfac4Smrg	  fi
6682e19dfac4Smrg	fi
6683e19dfac4Smrg
6684e19dfac4Smrg	link_static=no # Whether the deplib will be linked statically
6685e19dfac4Smrg	use_static_libs=$prefer_static_libs
6686e19dfac4Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687e19dfac4Smrg	  use_static_libs=no
6688e19dfac4Smrg	fi
6689e19dfac4Smrg	if test -n "$library_names" &&
6690e19dfac4Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691e19dfac4Smrg	  case $host in
6692e19dfac4Smrg	  *cygwin* | *mingw* | *cegcc*)
6693e19dfac4Smrg	      # No point in relinking DLLs because paths are not encoded
6694313a12fdSmrg	      func_append notinst_deplibs " $lib"
6695e19dfac4Smrg	      need_relink=no
6696e19dfac4Smrg	    ;;
6697e19dfac4Smrg	  *)
6698e19dfac4Smrg	    if test "$installed" = no; then
6699313a12fdSmrg	      func_append notinst_deplibs " $lib"
6700e19dfac4Smrg	      need_relink=yes
6701e19dfac4Smrg	    fi
6702e19dfac4Smrg	    ;;
6703e19dfac4Smrg	  esac
6704e19dfac4Smrg	  # This is a shared library
6705e19dfac4Smrg
6706e19dfac4Smrg	  # Warn about portability, can't link against -module's on some
6707e19dfac4Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6708e19dfac4Smrg	  dlopenmodule=""
6709e19dfac4Smrg	  for dlpremoduletest in $dlprefiles; do
6710e19dfac4Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
6711e19dfac4Smrg	      dlopenmodule="$dlpremoduletest"
6712e19dfac4Smrg	      break
6713e19dfac4Smrg	    fi
6714e19dfac4Smrg	  done
6715e19dfac4Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6716313a12fdSmrg	    echo
6717e19dfac4Smrg	    if test "$linkmode" = prog; then
6718e19dfac4Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719e19dfac4Smrg	    else
6720e19dfac4Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721e19dfac4Smrg	    fi
6722e19dfac4Smrg	    $ECHO "*** $linklib is not portable!"
6723e19dfac4Smrg	  fi
6724e19dfac4Smrg	  if test "$linkmode" = lib &&
6725e19dfac4Smrg	     test "$hardcode_into_libs" = yes; then
6726e19dfac4Smrg	    # Hardcode the library path.
6727e19dfac4Smrg	    # Skip directories that are in the system default run-time
6728e19dfac4Smrg	    # search path.
6729e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
6730e19dfac4Smrg	    *" $absdir "*) ;;
6731e19dfac4Smrg	    *)
6732e19dfac4Smrg	      case "$compile_rpath " in
6733e19dfac4Smrg	      *" $absdir "*) ;;
6734313a12fdSmrg	      *) func_append compile_rpath " $absdir" ;;
6735e19dfac4Smrg	      esac
6736e19dfac4Smrg	      ;;
6737e19dfac4Smrg	    esac
6738e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
6739e19dfac4Smrg	    *" $libdir "*) ;;
6740e19dfac4Smrg	    *)
6741e19dfac4Smrg	      case "$finalize_rpath " in
6742e19dfac4Smrg	      *" $libdir "*) ;;
6743313a12fdSmrg	      *) func_append finalize_rpath " $libdir" ;;
6744e19dfac4Smrg	      esac
6745e19dfac4Smrg	      ;;
6746e19dfac4Smrg	    esac
6747e19dfac4Smrg	  fi
6748e19dfac4Smrg
6749e19dfac4Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750e19dfac4Smrg	    # figure out the soname
6751e19dfac4Smrg	    set dummy $library_names
6752e19dfac4Smrg	    shift
6753e19dfac4Smrg	    realname="$1"
6754e19dfac4Smrg	    shift
6755e19dfac4Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756e19dfac4Smrg	    # use dlname if we got it. it's perfectly good, no?
6757e19dfac4Smrg	    if test -n "$dlname"; then
6758e19dfac4Smrg	      soname="$dlname"
6759e19dfac4Smrg	    elif test -n "$soname_spec"; then
6760e19dfac4Smrg	      # bleh windows
6761e19dfac4Smrg	      case $host in
6762e19dfac4Smrg	      *cygwin* | mingw* | *cegcc*)
6763e19dfac4Smrg	        func_arith $current - $age
6764e19dfac4Smrg		major=$func_arith_result
6765e19dfac4Smrg		versuffix="-$major"
6766e19dfac4Smrg		;;
6767e19dfac4Smrg	      esac
6768e19dfac4Smrg	      eval soname=\"$soname_spec\"
6769e19dfac4Smrg	    else
6770e19dfac4Smrg	      soname="$realname"
6771e19dfac4Smrg	    fi
6772e19dfac4Smrg
6773e19dfac4Smrg	    # Make a new name for the extract_expsyms_cmds to use
6774e19dfac4Smrg	    soroot="$soname"
6775e19dfac4Smrg	    func_basename "$soroot"
6776e19dfac4Smrg	    soname="$func_basename_result"
6777e19dfac4Smrg	    func_stripname 'lib' '.dll' "$soname"
6778e19dfac4Smrg	    newlib=libimp-$func_stripname_result.a
6779e19dfac4Smrg
6780e19dfac4Smrg	    # If the library has no export list, then create one now
6781e19dfac4Smrg	    if test -f "$output_objdir/$soname-def"; then :
6782e19dfac4Smrg	    else
6783e19dfac4Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784e19dfac4Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785e19dfac4Smrg	    fi
6786e19dfac4Smrg
6787e19dfac4Smrg	    # Create $newlib
6788e19dfac4Smrg	    if test -f "$output_objdir/$newlib"; then :; else
6789e19dfac4Smrg	      func_verbose "generating import library for \`$soname'"
6790e19dfac4Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791e19dfac4Smrg	    fi
6792e19dfac4Smrg	    # make sure the library variables are pointing to the new library
6793e19dfac4Smrg	    dir=$output_objdir
6794e19dfac4Smrg	    linklib=$newlib
6795e19dfac4Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796e19dfac4Smrg
6797313a12fdSmrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798e19dfac4Smrg	    add_shlibpath=
6799e19dfac4Smrg	    add_dir=
6800e19dfac4Smrg	    add=
6801e19dfac4Smrg	    lib_linked=yes
6802e19dfac4Smrg	    case $hardcode_action in
6803e19dfac4Smrg	    immediate | unsupported)
6804e19dfac4Smrg	      if test "$hardcode_direct" = no; then
6805e19dfac4Smrg		add="$dir/$linklib"
6806e19dfac4Smrg		case $host in
6807e19dfac4Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808e19dfac4Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809e19dfac4Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810e19dfac4Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811e19dfac4Smrg		  *-*-darwin* )
6812e19dfac4Smrg		    # if the lib is a (non-dlopened) module then we can not
6813e19dfac4Smrg		    # link against it, someone is ignoring the earlier warnings
6814e19dfac4Smrg		    if /usr/bin/file -L $add 2> /dev/null |
6815e19dfac4Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816e19dfac4Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6817e19dfac4Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818e19dfac4Smrg			if test -z "$old_library" ; then
6819313a12fdSmrg			  echo
6820313a12fdSmrg			  echo "*** And there doesn't seem to be a static archive available"
6821313a12fdSmrg			  echo "*** The link will probably fail, sorry"
6822e19dfac4Smrg			else
6823e19dfac4Smrg			  add="$dir/$old_library"
6824e19dfac4Smrg			fi
6825e19dfac4Smrg		      elif test -n "$old_library"; then
6826e19dfac4Smrg			add="$dir/$old_library"
6827e19dfac4Smrg		      fi
6828e19dfac4Smrg		    fi
6829e19dfac4Smrg		esac
6830e19dfac4Smrg	      elif test "$hardcode_minus_L" = no; then
6831e19dfac4Smrg		case $host in
6832e19dfac4Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833e19dfac4Smrg		esac
6834e19dfac4Smrg		add_dir="-L$dir"
6835e19dfac4Smrg		add="-l$name"
6836e19dfac4Smrg	      elif test "$hardcode_shlibpath_var" = no; then
6837e19dfac4Smrg		add_shlibpath="$dir"
6838e19dfac4Smrg		add="-l$name"
6839e19dfac4Smrg	      else
6840e19dfac4Smrg		lib_linked=no
6841e19dfac4Smrg	      fi
6842e19dfac4Smrg	      ;;
6843e19dfac4Smrg	    relink)
6844e19dfac4Smrg	      if test "$hardcode_direct" = yes &&
6845e19dfac4Smrg	         test "$hardcode_direct_absolute" = no; then
6846e19dfac4Smrg		add="$dir/$linklib"
6847e19dfac4Smrg	      elif test "$hardcode_minus_L" = yes; then
6848313a12fdSmrg		add_dir="-L$absdir"
6849e19dfac4Smrg		# Try looking first in the location we're being installed to.
6850e19dfac4Smrg		if test -n "$inst_prefix_dir"; then
6851e19dfac4Smrg		  case $libdir in
6852e19dfac4Smrg		    [\\/]*)
6853313a12fdSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854e19dfac4Smrg		      ;;
6855e19dfac4Smrg		  esac
6856e19dfac4Smrg		fi
6857e19dfac4Smrg		add="-l$name"
6858e19dfac4Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
6859e19dfac4Smrg		add_shlibpath="$dir"
6860e19dfac4Smrg		add="-l$name"
6861e19dfac4Smrg	      else
6862e19dfac4Smrg		lib_linked=no
6863e19dfac4Smrg	      fi
6864e19dfac4Smrg	      ;;
6865e19dfac4Smrg	    *) lib_linked=no ;;
6866e19dfac4Smrg	    esac
6867e19dfac4Smrg
6868e19dfac4Smrg	    if test "$lib_linked" != yes; then
6869e19dfac4Smrg	      func_fatal_configuration "unsupported hardcode properties"
6870e19dfac4Smrg	    fi
6871e19dfac4Smrg
6872e19dfac4Smrg	    if test -n "$add_shlibpath"; then
6873e19dfac4Smrg	      case :$compile_shlibpath: in
6874e19dfac4Smrg	      *":$add_shlibpath:"*) ;;
6875313a12fdSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876e19dfac4Smrg	      esac
6877e19dfac4Smrg	    fi
6878e19dfac4Smrg	    if test "$linkmode" = prog; then
6879e19dfac4Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880e19dfac4Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881e19dfac4Smrg	    else
6882e19dfac4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883e19dfac4Smrg	      test -n "$add" && deplibs="$add $deplibs"
6884e19dfac4Smrg	      if test "$hardcode_direct" != yes &&
6885e19dfac4Smrg		 test "$hardcode_minus_L" != yes &&
6886e19dfac4Smrg		 test "$hardcode_shlibpath_var" = yes; then
6887e19dfac4Smrg		case :$finalize_shlibpath: in
6888e19dfac4Smrg		*":$libdir:"*) ;;
6889313a12fdSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890e19dfac4Smrg		esac
6891e19dfac4Smrg	      fi
6892e19dfac4Smrg	    fi
6893e19dfac4Smrg	  fi
6894e19dfac4Smrg
6895313a12fdSmrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896e19dfac4Smrg	    add_shlibpath=
6897e19dfac4Smrg	    add_dir=
6898e19dfac4Smrg	    add=
6899e19dfac4Smrg	    # Finalize command for both is simple: just hardcode it.
6900e19dfac4Smrg	    if test "$hardcode_direct" = yes &&
6901e19dfac4Smrg	       test "$hardcode_direct_absolute" = no; then
6902e19dfac4Smrg	      add="$libdir/$linklib"
6903e19dfac4Smrg	    elif test "$hardcode_minus_L" = yes; then
6904e19dfac4Smrg	      add_dir="-L$libdir"
6905e19dfac4Smrg	      add="-l$name"
6906e19dfac4Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907e19dfac4Smrg	      case :$finalize_shlibpath: in
6908e19dfac4Smrg	      *":$libdir:"*) ;;
6909313a12fdSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910e19dfac4Smrg	      esac
6911e19dfac4Smrg	      add="-l$name"
6912e19dfac4Smrg	    elif test "$hardcode_automatic" = yes; then
6913e19dfac4Smrg	      if test -n "$inst_prefix_dir" &&
6914e19dfac4Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915e19dfac4Smrg		add="$inst_prefix_dir$libdir/$linklib"
6916e19dfac4Smrg	      else
6917e19dfac4Smrg		add="$libdir/$linklib"
6918e19dfac4Smrg	      fi
6919e19dfac4Smrg	    else
6920e19dfac4Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
6921e19dfac4Smrg	      add_dir="-L$libdir"
6922e19dfac4Smrg	      # Try looking first in the location we're being installed to.
6923e19dfac4Smrg	      if test -n "$inst_prefix_dir"; then
6924e19dfac4Smrg		case $libdir in
6925e19dfac4Smrg		  [\\/]*)
6926313a12fdSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927e19dfac4Smrg		    ;;
6928e19dfac4Smrg		esac
6929e19dfac4Smrg	      fi
6930e19dfac4Smrg	      add="-l$name"
6931e19dfac4Smrg	    fi
6932e19dfac4Smrg
6933e19dfac4Smrg	    if test "$linkmode" = prog; then
6934e19dfac4Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935e19dfac4Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936e19dfac4Smrg	    else
6937e19dfac4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938e19dfac4Smrg	      test -n "$add" && deplibs="$add $deplibs"
6939e19dfac4Smrg	    fi
6940e19dfac4Smrg	  fi
6941e19dfac4Smrg	elif test "$linkmode" = prog; then
6942e19dfac4Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943e19dfac4Smrg	  # is not unsupported.  This is valid on all known static and
6944e19dfac4Smrg	  # shared platforms.
6945e19dfac4Smrg	  if test "$hardcode_direct" != unsupported; then
6946e19dfac4Smrg	    test -n "$old_library" && linklib="$old_library"
6947e19dfac4Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948e19dfac4Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949e19dfac4Smrg	  else
6950e19dfac4Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951e19dfac4Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952e19dfac4Smrg	  fi
6953e19dfac4Smrg	elif test "$build_libtool_libs" = yes; then
6954e19dfac4Smrg	  # Not a shared library
6955e19dfac4Smrg	  if test "$deplibs_check_method" != pass_all; then
6956e19dfac4Smrg	    # We're trying link a shared library against a static one
6957e19dfac4Smrg	    # but the system doesn't support it.
6958e19dfac4Smrg
6959e19dfac4Smrg	    # Just print a warning and add the library to dependency_libs so
6960e19dfac4Smrg	    # that the program can be linked against the static library.
6961313a12fdSmrg	    echo
6962e19dfac4Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6963313a12fdSmrg	    echo "*** I have the capability to make that library automatically link in when"
6964313a12fdSmrg	    echo "*** you link to this library.  But I can only do this if you have a"
6965313a12fdSmrg	    echo "*** shared version of the library, which you do not appear to have."
6966e19dfac4Smrg	    if test "$module" = yes; then
6967313a12fdSmrg	      echo "*** But as you try to build a module library, libtool will still create "
6968313a12fdSmrg	      echo "*** a static module, that should work as long as the dlopening application"
6969313a12fdSmrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970e19dfac4Smrg	      if test -z "$global_symbol_pipe"; then
6971313a12fdSmrg		echo
6972313a12fdSmrg		echo "*** However, this would only work if libtool was able to extract symbol"
6973313a12fdSmrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6974313a12fdSmrg		echo "*** not find such a program.  So, this module is probably useless."
6975313a12fdSmrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976e19dfac4Smrg	      fi
6977e19dfac4Smrg	      if test "$build_old_libs" = no; then
6978e19dfac4Smrg		build_libtool_libs=module
6979e19dfac4Smrg		build_old_libs=yes
6980e19dfac4Smrg	      else
6981e19dfac4Smrg		build_libtool_libs=no
6982e19dfac4Smrg	      fi
6983e19dfac4Smrg	    fi
6984e19dfac4Smrg	  else
6985e19dfac4Smrg	    deplibs="$dir/$old_library $deplibs"
6986e19dfac4Smrg	    link_static=yes
6987e19dfac4Smrg	  fi
6988e19dfac4Smrg	fi # link shared/static library?
6989e19dfac4Smrg
6990e19dfac4Smrg	if test "$linkmode" = lib; then
6991e19dfac4Smrg	  if test -n "$dependency_libs" &&
6992e19dfac4Smrg	     { test "$hardcode_into_libs" != yes ||
6993e19dfac4Smrg	       test "$build_old_libs" = yes ||
6994e19dfac4Smrg	       test "$link_static" = yes; }; then
6995e19dfac4Smrg	    # Extract -R from dependency_libs
6996e19dfac4Smrg	    temp_deplibs=
6997e19dfac4Smrg	    for libdir in $dependency_libs; do
6998e19dfac4Smrg	      case $libdir in
6999e19dfac4Smrg	      -R*) func_stripname '-R' '' "$libdir"
7000e19dfac4Smrg	           temp_xrpath=$func_stripname_result
7001e19dfac4Smrg		   case " $xrpath " in
7002e19dfac4Smrg		   *" $temp_xrpath "*) ;;
7003313a12fdSmrg		   *) func_append xrpath " $temp_xrpath";;
7004e19dfac4Smrg		   esac;;
7005313a12fdSmrg	      *) func_append temp_deplibs " $libdir";;
7006e19dfac4Smrg	      esac
7007e19dfac4Smrg	    done
7008e19dfac4Smrg	    dependency_libs="$temp_deplibs"
7009e19dfac4Smrg	  fi
7010e19dfac4Smrg
7011313a12fdSmrg	  func_append newlib_search_path " $absdir"
7012e19dfac4Smrg	  # Link against this library
7013e19dfac4Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014e19dfac4Smrg	  # ... and its dependency_libs
7015e19dfac4Smrg	  tmp_libs=
7016e19dfac4Smrg	  for deplib in $dependency_libs; do
7017e19dfac4Smrg	    newdependency_libs="$deplib $newdependency_libs"
7018313a12fdSmrg	    case $deplib in
7019313a12fdSmrg              -L*) func_stripname '-L' '' "$deplib"
7020313a12fdSmrg                   func_resolve_sysroot "$func_stripname_result";;
7021313a12fdSmrg              *) func_resolve_sysroot "$deplib" ;;
7022313a12fdSmrg            esac
7023313a12fdSmrg	    if $opt_preserve_dup_deps ; then
7024e19dfac4Smrg	      case "$tmp_libs " in
7025313a12fdSmrg	      *" $func_resolve_sysroot_result "*)
7026313a12fdSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027e19dfac4Smrg	      esac
7028e19dfac4Smrg	    fi
7029313a12fdSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030e19dfac4Smrg	  done
7031e19dfac4Smrg
7032e19dfac4Smrg	  if test "$link_all_deplibs" != no; then
7033e19dfac4Smrg	    # Add the search paths of all dependency libraries
7034e19dfac4Smrg	    for deplib in $dependency_libs; do
703500084f2cSmrg	      path=
7036e19dfac4Smrg	      case $deplib in
7037e19dfac4Smrg	      -L*) path="$deplib" ;;
7038e19dfac4Smrg	      *.la)
7039313a12fdSmrg	        func_resolve_sysroot "$deplib"
7040313a12fdSmrg	        deplib=$func_resolve_sysroot_result
7041e19dfac4Smrg	        func_dirname "$deplib" "" "."
7042313a12fdSmrg		dir=$func_dirname_result
7043e19dfac4Smrg		# We need an absolute path.
7044e19dfac4Smrg		case $dir in
7045e19dfac4Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046e19dfac4Smrg		*)
7047e19dfac4Smrg		  absdir=`cd "$dir" && pwd`
7048e19dfac4Smrg		  if test -z "$absdir"; then
7049e19dfac4Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7050e19dfac4Smrg		    absdir="$dir"
7051e19dfac4Smrg		  fi
7052e19dfac4Smrg		  ;;
7053e19dfac4Smrg		esac
7054e19dfac4Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055e19dfac4Smrg		case $host in
7056e19dfac4Smrg		*-*-darwin*)
7057e19dfac4Smrg		  depdepl=
7058e19dfac4Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059e19dfac4Smrg		  if test -n "$deplibrary_names" ; then
7060e19dfac4Smrg		    for tmp in $deplibrary_names ; do
7061e19dfac4Smrg		      depdepl=$tmp
7062e19dfac4Smrg		    done
7063e19dfac4Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7064e19dfac4Smrg		      depdepl="$absdir/$objdir/$depdepl"
7065e19dfac4Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066e19dfac4Smrg                      if test -z "$darwin_install_name"; then
7067e19dfac4Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068e19dfac4Smrg                      fi
7069313a12fdSmrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
7070313a12fdSmrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071e19dfac4Smrg		      path=
7072e19dfac4Smrg		    fi
7073e19dfac4Smrg		  fi
7074e19dfac4Smrg		  ;;
7075e19dfac4Smrg		*)
7076e19dfac4Smrg		  path="-L$absdir/$objdir"
7077e19dfac4Smrg		  ;;
7078e19dfac4Smrg		esac
7079e19dfac4Smrg		else
7080e19dfac4Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081e19dfac4Smrg		  test -z "$libdir" && \
7082e19dfac4Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083e19dfac4Smrg		  test "$absdir" != "$libdir" && \
7084e19dfac4Smrg		    func_warning "\`$deplib' seems to be moved"
7085e19dfac4Smrg
7086e19dfac4Smrg		  path="-L$absdir"
7087e19dfac4Smrg		fi
7088e19dfac4Smrg		;;
7089e19dfac4Smrg	      esac
7090e19dfac4Smrg	      case " $deplibs " in
7091e19dfac4Smrg	      *" $path "*) ;;
7092e19dfac4Smrg	      *) deplibs="$path $deplibs" ;;
7093e19dfac4Smrg	      esac
7094e19dfac4Smrg	    done
7095e19dfac4Smrg	  fi # link_all_deplibs != no
7096e19dfac4Smrg	fi # linkmode = lib
7097e19dfac4Smrg      done # for deplib in $libs
7098e19dfac4Smrg      if test "$pass" = link; then
7099e19dfac4Smrg	if test "$linkmode" = "prog"; then
7100e19dfac4Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101e19dfac4Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102e19dfac4Smrg	else
7103313a12fdSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104e19dfac4Smrg	fi
7105e19dfac4Smrg      fi
7106e19dfac4Smrg      dependency_libs="$newdependency_libs"
7107e19dfac4Smrg      if test "$pass" = dlpreopen; then
7108e19dfac4Smrg	# Link the dlpreopened libraries before other libraries
7109e19dfac4Smrg	for deplib in $save_deplibs; do
7110e19dfac4Smrg	  deplibs="$deplib $deplibs"
7111e19dfac4Smrg	done
7112e19dfac4Smrg      fi
7113e19dfac4Smrg      if test "$pass" != dlopen; then
7114e19dfac4Smrg	if test "$pass" != conv; then
7115e19dfac4Smrg	  # Make sure lib_search_path contains only unique directories.
7116e19dfac4Smrg	  lib_search_path=
7117e19dfac4Smrg	  for dir in $newlib_search_path; do
7118e19dfac4Smrg	    case "$lib_search_path " in
7119e19dfac4Smrg	    *" $dir "*) ;;
7120313a12fdSmrg	    *) func_append lib_search_path " $dir" ;;
7121e19dfac4Smrg	    esac
7122e19dfac4Smrg	  done
7123e19dfac4Smrg	  newlib_search_path=
7124e19dfac4Smrg	fi
7125e19dfac4Smrg
7126e19dfac4Smrg	if test "$linkmode,$pass" != "prog,link"; then
7127e19dfac4Smrg	  vars="deplibs"
7128e19dfac4Smrg	else
7129e19dfac4Smrg	  vars="compile_deplibs finalize_deplibs"
7130e19dfac4Smrg	fi
7131e19dfac4Smrg	for var in $vars dependency_libs; do
7132e19dfac4Smrg	  # Add libraries to $var in reverse order
7133e19dfac4Smrg	  eval tmp_libs=\"\$$var\"
7134e19dfac4Smrg	  new_libs=
7135e19dfac4Smrg	  for deplib in $tmp_libs; do
7136e19dfac4Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7137e19dfac4Smrg	    #        that some nasty dependency loop isn't accidentally
7138e19dfac4Smrg	    #        broken:
7139e19dfac4Smrg	    #new_libs="$deplib $new_libs"
7140e19dfac4Smrg	    # Pragmatically, this seems to cause very few problems in
7141e19dfac4Smrg	    # practice:
7142e19dfac4Smrg	    case $deplib in
7143e19dfac4Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7144e19dfac4Smrg	    -R*) ;;
7145e19dfac4Smrg	    *)
7146e19dfac4Smrg	      # And here is the reason: when a library appears more
7147e19dfac4Smrg	      # than once as an explicit dependence of a library, or
7148e19dfac4Smrg	      # is implicitly linked in more than once by the
7149e19dfac4Smrg	      # compiler, it is considered special, and multiple
7150e19dfac4Smrg	      # occurrences thereof are not removed.  Compare this
7151e19dfac4Smrg	      # with having the same library being listed as a
7152e19dfac4Smrg	      # dependency of multiple other libraries: in this case,
7153e19dfac4Smrg	      # we know (pedantically, we assume) the library does not
7154e19dfac4Smrg	      # need to be listed more than once, so we keep only the
7155e19dfac4Smrg	      # last copy.  This is not always right, but it is rare
7156e19dfac4Smrg	      # enough that we require users that really mean to play
7157e19dfac4Smrg	      # such unportable linking tricks to link the library
7158e19dfac4Smrg	      # using -Wl,-lname, so that libtool does not consider it
7159e19dfac4Smrg	      # for duplicate removal.
7160e19dfac4Smrg	      case " $specialdeplibs " in
7161e19dfac4Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162e19dfac4Smrg	      *)
7163e19dfac4Smrg		case " $new_libs " in
7164e19dfac4Smrg		*" $deplib "*) ;;
7165e19dfac4Smrg		*) new_libs="$deplib $new_libs" ;;
7166e19dfac4Smrg		esac
7167e19dfac4Smrg		;;
7168e19dfac4Smrg	      esac
7169e19dfac4Smrg	      ;;
7170e19dfac4Smrg	    esac
7171e19dfac4Smrg	  done
7172e19dfac4Smrg	  tmp_libs=
7173e19dfac4Smrg	  for deplib in $new_libs; do
7174e19dfac4Smrg	    case $deplib in
7175e19dfac4Smrg	    -L*)
7176e19dfac4Smrg	      case " $tmp_libs " in
7177e19dfac4Smrg	      *" $deplib "*) ;;
7178313a12fdSmrg	      *) func_append tmp_libs " $deplib" ;;
7179e19dfac4Smrg	      esac
7180e19dfac4Smrg	      ;;
7181313a12fdSmrg	    *) func_append tmp_libs " $deplib" ;;
7182e19dfac4Smrg	    esac
7183e19dfac4Smrg	  done
7184e19dfac4Smrg	  eval $var=\"$tmp_libs\"
7185e19dfac4Smrg	done # for var
7186e19dfac4Smrg      fi
7187e19dfac4Smrg      # Last step: remove runtime libs from dependency_libs
7188e19dfac4Smrg      # (they stay in deplibs)
7189e19dfac4Smrg      tmp_libs=
7190e19dfac4Smrg      for i in $dependency_libs ; do
7191e19dfac4Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192e19dfac4Smrg	*" $i "*)
7193e19dfac4Smrg	  i=""
7194e19dfac4Smrg	  ;;
7195e19dfac4Smrg	esac
7196e19dfac4Smrg	if test -n "$i" ; then
7197313a12fdSmrg	  func_append tmp_libs " $i"
7198e19dfac4Smrg	fi
7199e19dfac4Smrg      done
7200e19dfac4Smrg      dependency_libs=$tmp_libs
7201e19dfac4Smrg    done # for pass
7202e19dfac4Smrg    if test "$linkmode" = prog; then
7203e19dfac4Smrg      dlfiles="$newdlfiles"
7204e19dfac4Smrg    fi
7205e19dfac4Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206e19dfac4Smrg      dlprefiles="$newdlprefiles"
7207e19dfac4Smrg    fi
7208e19dfac4Smrg
7209e19dfac4Smrg    case $linkmode in
7210e19dfac4Smrg    oldlib)
7211e19dfac4Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212e19dfac4Smrg	func_warning "\`-dlopen' is ignored for archives"
7213e19dfac4Smrg      fi
7214e19dfac4Smrg
7215e19dfac4Smrg      case " $deplibs" in
7216e19dfac4Smrg      *\ -l* | *\ -L*)
7217e19dfac4Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218e19dfac4Smrg      esac
7219e19dfac4Smrg
7220e19dfac4Smrg      test -n "$rpath" && \
7221e19dfac4Smrg	func_warning "\`-rpath' is ignored for archives"
7222e19dfac4Smrg
7223e19dfac4Smrg      test -n "$xrpath" && \
7224e19dfac4Smrg	func_warning "\`-R' is ignored for archives"
7225e19dfac4Smrg
7226e19dfac4Smrg      test -n "$vinfo" && \
7227e19dfac4Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228e19dfac4Smrg
7229e19dfac4Smrg      test -n "$release" && \
7230e19dfac4Smrg	func_warning "\`-release' is ignored for archives"
7231e19dfac4Smrg
7232e19dfac4Smrg      test -n "$export_symbols$export_symbols_regex" && \
7233e19dfac4Smrg	func_warning "\`-export-symbols' is ignored for archives"
7234e19dfac4Smrg
7235e19dfac4Smrg      # Now set the variables for building old libraries.
7236e19dfac4Smrg      build_libtool_libs=no
7237e19dfac4Smrg      oldlibs="$output"
7238313a12fdSmrg      func_append objs "$old_deplibs"
7239e19dfac4Smrg      ;;
7240e19dfac4Smrg
7241e19dfac4Smrg    lib)
7242e19dfac4Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243e19dfac4Smrg      case $outputname in
7244e19dfac4Smrg      lib*)
7245e19dfac4Smrg	func_stripname 'lib' '.la' "$outputname"
7246e19dfac4Smrg	name=$func_stripname_result
7247e19dfac4Smrg	eval shared_ext=\"$shrext_cmds\"
7248e19dfac4Smrg	eval libname=\"$libname_spec\"
7249e19dfac4Smrg	;;
7250e19dfac4Smrg      *)
7251e19dfac4Smrg	test "$module" = no && \
7252e19dfac4Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253e19dfac4Smrg
7254e19dfac4Smrg	if test "$need_lib_prefix" != no; then
7255e19dfac4Smrg	  # Add the "lib" prefix for modules if required
7256e19dfac4Smrg	  func_stripname '' '.la' "$outputname"
7257e19dfac4Smrg	  name=$func_stripname_result
7258e19dfac4Smrg	  eval shared_ext=\"$shrext_cmds\"
7259e19dfac4Smrg	  eval libname=\"$libname_spec\"
7260e19dfac4Smrg	else
7261e19dfac4Smrg	  func_stripname '' '.la' "$outputname"
7262e19dfac4Smrg	  libname=$func_stripname_result
7263e19dfac4Smrg	fi
7264e19dfac4Smrg	;;
7265e19dfac4Smrg      esac
7266e19dfac4Smrg
7267e19dfac4Smrg      if test -n "$objs"; then
7268e19dfac4Smrg	if test "$deplibs_check_method" != pass_all; then
7269e19dfac4Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270e19dfac4Smrg	else
7271313a12fdSmrg	  echo
7272e19dfac4Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273e19dfac4Smrg	  $ECHO "*** objects $objs is not portable!"
7274313a12fdSmrg	  func_append libobjs " $objs"
7275e19dfac4Smrg	fi
7276e19dfac4Smrg      fi
7277e19dfac4Smrg
7278e19dfac4Smrg      test "$dlself" != no && \
7279e19dfac4Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280e19dfac4Smrg
7281e19dfac4Smrg      set dummy $rpath
7282e19dfac4Smrg      shift
7283e19dfac4Smrg      test "$#" -gt 1 && \
7284e19dfac4Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285e19dfac4Smrg
7286e19dfac4Smrg      install_libdir="$1"
7287e19dfac4Smrg
7288e19dfac4Smrg      oldlibs=
7289e19dfac4Smrg      if test -z "$rpath"; then
7290e19dfac4Smrg	if test "$build_libtool_libs" = yes; then
7291e19dfac4Smrg	  # Building a libtool convenience library.
7292e19dfac4Smrg	  # Some compilers have problems with a `.al' extension so
7293e19dfac4Smrg	  # convenience libraries should have the same extension an
7294e19dfac4Smrg	  # archive normally would.
7295e19dfac4Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296e19dfac4Smrg	  build_libtool_libs=convenience
7297e19dfac4Smrg	  build_old_libs=yes
7298e19dfac4Smrg	fi
7299e19dfac4Smrg
7300e19dfac4Smrg	test -n "$vinfo" && \
7301e19dfac4Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302e19dfac4Smrg
7303e19dfac4Smrg	test -n "$release" && \
7304e19dfac4Smrg	  func_warning "\`-release' is ignored for convenience libraries"
7305e19dfac4Smrg      else
7306e19dfac4Smrg
7307e19dfac4Smrg	# Parse the version information argument.
7308e19dfac4Smrg	save_ifs="$IFS"; IFS=':'
7309e19dfac4Smrg	set dummy $vinfo 0 0 0
7310e19dfac4Smrg	shift
7311e19dfac4Smrg	IFS="$save_ifs"
7312e19dfac4Smrg
7313e19dfac4Smrg	test -n "$7" && \
7314e19dfac4Smrg	  func_fatal_help "too many parameters to \`-version-info'"
7315e19dfac4Smrg
7316e19dfac4Smrg	# convert absolute version numbers to libtool ages
7317e19dfac4Smrg	# this retains compatibility with .la files and attempts
7318e19dfac4Smrg	# to make the code below a bit more comprehensible
7319e19dfac4Smrg
7320e19dfac4Smrg	case $vinfo_number in
7321e19dfac4Smrg	yes)
7322e19dfac4Smrg	  number_major="$1"
7323e19dfac4Smrg	  number_minor="$2"
7324e19dfac4Smrg	  number_revision="$3"
7325e19dfac4Smrg	  #
7326e19dfac4Smrg	  # There are really only two kinds -- those that
7327e19dfac4Smrg	  # use the current revision as the major version
7328e19dfac4Smrg	  # and those that subtract age and use age as
7329e19dfac4Smrg	  # a minor version.  But, then there is irix
7330e19dfac4Smrg	  # which has an extra 1 added just for fun
7331e19dfac4Smrg	  #
7332e19dfac4Smrg	  case $version_type in
7333313a12fdSmrg	  # correct linux to gnu/linux during the next big refactor
7334e19dfac4Smrg	  darwin|linux|osf|windows|none)
7335e19dfac4Smrg	    func_arith $number_major + $number_minor
7336e19dfac4Smrg	    current=$func_arith_result
7337e19dfac4Smrg	    age="$number_minor"
7338e19dfac4Smrg	    revision="$number_revision"
7339e19dfac4Smrg	    ;;
7340313a12fdSmrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7341e19dfac4Smrg	    current="$number_major"
7342e19dfac4Smrg	    revision="$number_minor"
7343e19dfac4Smrg	    age="0"
7344e19dfac4Smrg	    ;;
7345e19dfac4Smrg	  irix|nonstopux)
7346e19dfac4Smrg	    func_arith $number_major + $number_minor
7347e19dfac4Smrg	    current=$func_arith_result
7348e19dfac4Smrg	    age="$number_minor"
7349e19dfac4Smrg	    revision="$number_minor"
7350e19dfac4Smrg	    lt_irix_increment=no
7351e19dfac4Smrg	    ;;
7352e19dfac4Smrg	  esac
7353e19dfac4Smrg	  ;;
7354e19dfac4Smrg	no)
7355e19dfac4Smrg	  current="$1"
7356e19dfac4Smrg	  revision="$2"
7357e19dfac4Smrg	  age="$3"
7358e19dfac4Smrg	  ;;
7359e19dfac4Smrg	esac
7360e19dfac4Smrg
7361e19dfac4Smrg	# Check that each of the things are valid numbers.
7362e19dfac4Smrg	case $current in
7363e19dfac4Smrg	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]) ;;
7364e19dfac4Smrg	*)
7365e19dfac4Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366e19dfac4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367e19dfac4Smrg	  ;;
7368e19dfac4Smrg	esac
7369e19dfac4Smrg
7370e19dfac4Smrg	case $revision in
7371e19dfac4Smrg	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]) ;;
7372e19dfac4Smrg	*)
7373e19dfac4Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374e19dfac4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375e19dfac4Smrg	  ;;
7376e19dfac4Smrg	esac
7377e19dfac4Smrg
7378e19dfac4Smrg	case $age in
7379e19dfac4Smrg	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]) ;;
7380e19dfac4Smrg	*)
7381e19dfac4Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
7382e19dfac4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383e19dfac4Smrg	  ;;
7384e19dfac4Smrg	esac
7385e19dfac4Smrg
7386e19dfac4Smrg	if test "$age" -gt "$current"; then
7387e19dfac4Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388e19dfac4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389e19dfac4Smrg	fi
7390e19dfac4Smrg
7391e19dfac4Smrg	# Calculate the version variables.
7392e19dfac4Smrg	major=
7393e19dfac4Smrg	versuffix=
7394e19dfac4Smrg	verstring=
7395e19dfac4Smrg	case $version_type in
7396e19dfac4Smrg	none) ;;
7397e19dfac4Smrg
7398e19dfac4Smrg	darwin)
7399e19dfac4Smrg	  # Like Linux, but with the current version available in
7400e19dfac4Smrg	  # verstring for coding it into the library header
7401e19dfac4Smrg	  func_arith $current - $age
7402e19dfac4Smrg	  major=.$func_arith_result
7403e19dfac4Smrg	  versuffix="$major.$age.$revision"
7404e19dfac4Smrg	  # Darwin ld doesn't like 0 for these options...
7405e19dfac4Smrg	  func_arith $current + 1
7406e19dfac4Smrg	  minor_current=$func_arith_result
7407e19dfac4Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408e19dfac4Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409e19dfac4Smrg	  ;;
7410e19dfac4Smrg
7411e19dfac4Smrg	freebsd-aout)
7412e19dfac4Smrg	  major=".$current"
7413e19dfac4Smrg	  versuffix=".$current.$revision";
7414e19dfac4Smrg	  ;;
7415e19dfac4Smrg
7416e19dfac4Smrg	freebsd-elf)
7417e19dfac4Smrg	  major=".$current"
7418e19dfac4Smrg	  versuffix=".$current"
7419e19dfac4Smrg	  ;;
7420e19dfac4Smrg
7421e19dfac4Smrg	irix | nonstopux)
7422e19dfac4Smrg	  if test "X$lt_irix_increment" = "Xno"; then
7423e19dfac4Smrg	    func_arith $current - $age
7424e19dfac4Smrg	  else
7425e19dfac4Smrg	    func_arith $current - $age + 1
7426e19dfac4Smrg	  fi
7427e19dfac4Smrg	  major=$func_arith_result
7428e19dfac4Smrg
7429e19dfac4Smrg	  case $version_type in
7430e19dfac4Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7431e19dfac4Smrg	    *)         verstring_prefix=sgi ;;
7432e19dfac4Smrg	  esac
7433e19dfac4Smrg	  verstring="$verstring_prefix$major.$revision"
7434e19dfac4Smrg
7435e19dfac4Smrg	  # Add in all the interfaces that we are compatible with.
7436e19dfac4Smrg	  loop=$revision
7437e19dfac4Smrg	  while test "$loop" -ne 0; do
7438e19dfac4Smrg	    func_arith $revision - $loop
7439e19dfac4Smrg	    iface=$func_arith_result
7440e19dfac4Smrg	    func_arith $loop - 1
7441e19dfac4Smrg	    loop=$func_arith_result
7442e19dfac4Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443e19dfac4Smrg	  done
7444e19dfac4Smrg
7445e19dfac4Smrg	  # Before this point, $major must not contain `.'.
7446e19dfac4Smrg	  major=.$major
7447e19dfac4Smrg	  versuffix="$major.$revision"
7448e19dfac4Smrg	  ;;
7449e19dfac4Smrg
7450313a12fdSmrg	linux) # correct to gnu/linux during the next big refactor
7451e19dfac4Smrg	  func_arith $current - $age
7452e19dfac4Smrg	  major=.$func_arith_result
7453e19dfac4Smrg	  versuffix="$major.$age.$revision"
7454e19dfac4Smrg	  ;;
7455e19dfac4Smrg
7456e19dfac4Smrg	osf)
7457e19dfac4Smrg	  func_arith $current - $age
7458e19dfac4Smrg	  major=.$func_arith_result
7459e19dfac4Smrg	  versuffix=".$current.$age.$revision"
7460e19dfac4Smrg	  verstring="$current.$age.$revision"
7461e19dfac4Smrg
7462e19dfac4Smrg	  # Add in all the interfaces that we are compatible with.
7463e19dfac4Smrg	  loop=$age
7464e19dfac4Smrg	  while test "$loop" -ne 0; do
7465e19dfac4Smrg	    func_arith $current - $loop
7466e19dfac4Smrg	    iface=$func_arith_result
7467e19dfac4Smrg	    func_arith $loop - 1
7468e19dfac4Smrg	    loop=$func_arith_result
7469e19dfac4Smrg	    verstring="$verstring:${iface}.0"
7470e19dfac4Smrg	  done
7471e19dfac4Smrg
7472e19dfac4Smrg	  # Make executables depend on our current version.
7473313a12fdSmrg	  func_append verstring ":${current}.0"
7474e19dfac4Smrg	  ;;
7475e19dfac4Smrg
7476e19dfac4Smrg	qnx)
7477e19dfac4Smrg	  major=".$current"
7478e19dfac4Smrg	  versuffix=".$current"
7479e19dfac4Smrg	  ;;
7480e19dfac4Smrg
7481e19dfac4Smrg	sunos)
7482e19dfac4Smrg	  major=".$current"
7483e19dfac4Smrg	  versuffix=".$current.$revision"
7484e19dfac4Smrg	  ;;
7485e19dfac4Smrg
7486e19dfac4Smrg	windows)
7487e19dfac4Smrg	  # Use '-' rather than '.', since we only want one
7488e19dfac4Smrg	  # extension on DOS 8.3 filesystems.
7489e19dfac4Smrg	  func_arith $current - $age
7490e19dfac4Smrg	  major=$func_arith_result
7491e19dfac4Smrg	  versuffix="-$major"
7492e19dfac4Smrg	  ;;
7493e19dfac4Smrg
7494e19dfac4Smrg	*)
7495e19dfac4Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496e19dfac4Smrg	  ;;
7497e19dfac4Smrg	esac
7498e19dfac4Smrg
7499e19dfac4Smrg	# Clear the version info if we defaulted, and they specified a release.
7500e19dfac4Smrg	if test -z "$vinfo" && test -n "$release"; then
7501e19dfac4Smrg	  major=
7502e19dfac4Smrg	  case $version_type in
7503e19dfac4Smrg	  darwin)
7504e19dfac4Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505e19dfac4Smrg	    # problems, so we reset it completely
7506e19dfac4Smrg	    verstring=
7507e19dfac4Smrg	    ;;
7508e19dfac4Smrg	  *)
7509e19dfac4Smrg	    verstring="0.0"
7510e19dfac4Smrg	    ;;
7511e19dfac4Smrg	  esac
7512e19dfac4Smrg	  if test "$need_version" = no; then
7513e19dfac4Smrg	    versuffix=
7514e19dfac4Smrg	  else
7515e19dfac4Smrg	    versuffix=".0.0"
7516e19dfac4Smrg	  fi
7517e19dfac4Smrg	fi
7518e19dfac4Smrg
7519e19dfac4Smrg	# Remove version info from name if versioning should be avoided
7520e19dfac4Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521e19dfac4Smrg	  major=
7522e19dfac4Smrg	  versuffix=
7523e19dfac4Smrg	  verstring=""
7524e19dfac4Smrg	fi
7525e19dfac4Smrg
7526e19dfac4Smrg	# Check to see if the archive will have undefined symbols.
7527e19dfac4Smrg	if test "$allow_undefined" = yes; then
7528e19dfac4Smrg	  if test "$allow_undefined_flag" = unsupported; then
7529e19dfac4Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7530e19dfac4Smrg	    build_libtool_libs=no
7531e19dfac4Smrg	    build_old_libs=yes
7532e19dfac4Smrg	  fi
7533e19dfac4Smrg	else
7534e19dfac4Smrg	  # Don't allow undefined symbols.
7535e19dfac4Smrg	  allow_undefined_flag="$no_undefined_flag"
7536e19dfac4Smrg	fi
7537e19dfac4Smrg
7538e19dfac4Smrg      fi
7539e19dfac4Smrg
7540e19dfac4Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
7541313a12fdSmrg      func_append libobjs " $symfileobj"
7542e19dfac4Smrg      test "X$libobjs" = "X " && libobjs=
7543e19dfac4Smrg
7544313a12fdSmrg      if test "$opt_mode" != relink; then
7545e19dfac4Smrg	# Remove our outputs, but don't remove object files since they
7546e19dfac4Smrg	# may have been created when compiling PIC objects.
7547e19dfac4Smrg	removelist=
7548e19dfac4Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549e19dfac4Smrg	for p in $tempremovelist; do
7550e19dfac4Smrg	  case $p in
7551e19dfac4Smrg	    *.$objext | *.gcno)
7552e19dfac4Smrg	       ;;
7553e19dfac4Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554e19dfac4Smrg	       if test "X$precious_files_regex" != "X"; then
7555e19dfac4Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556e19dfac4Smrg		 then
7557e19dfac4Smrg		   continue
7558e19dfac4Smrg		 fi
7559e19dfac4Smrg	       fi
7560313a12fdSmrg	       func_append removelist " $p"
7561e19dfac4Smrg	       ;;
7562e19dfac4Smrg	    *) ;;
7563e19dfac4Smrg	  esac
7564e19dfac4Smrg	done
7565e19dfac4Smrg	test -n "$removelist" && \
7566e19dfac4Smrg	  func_show_eval "${RM}r \$removelist"
7567e19dfac4Smrg      fi
7568e19dfac4Smrg
7569e19dfac4Smrg      # Now set the variables for building old libraries.
7570e19dfac4Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7571313a12fdSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572e19dfac4Smrg
7573e19dfac4Smrg	# Transform .lo files to .o files.
7574313a12fdSmrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575e19dfac4Smrg      fi
7576e19dfac4Smrg
7577e19dfac4Smrg      # Eliminate all temporary directories.
7578e19dfac4Smrg      #for path in $notinst_path; do
7579313a12fdSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7580313a12fdSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7581313a12fdSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582e19dfac4Smrg      #done
7583e19dfac4Smrg
7584e19dfac4Smrg      if test -n "$xrpath"; then
7585e19dfac4Smrg	# If the user specified any rpath flags, then add them.
7586e19dfac4Smrg	temp_xrpath=
7587e19dfac4Smrg	for libdir in $xrpath; do
7588313a12fdSmrg	  func_replace_sysroot "$libdir"
7589313a12fdSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590e19dfac4Smrg	  case "$finalize_rpath " in
7591e19dfac4Smrg	  *" $libdir "*) ;;
7592313a12fdSmrg	  *) func_append finalize_rpath " $libdir" ;;
7593e19dfac4Smrg	  esac
7594e19dfac4Smrg	done
7595e19dfac4Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596e19dfac4Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597e19dfac4Smrg	fi
7598e19dfac4Smrg      fi
7599e19dfac4Smrg
7600e19dfac4Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601e19dfac4Smrg      old_dlfiles="$dlfiles"
7602e19dfac4Smrg      dlfiles=
7603e19dfac4Smrg      for lib in $old_dlfiles; do
7604e19dfac4Smrg	case " $dlprefiles $dlfiles " in
7605e19dfac4Smrg	*" $lib "*) ;;
7606313a12fdSmrg	*) func_append dlfiles " $lib" ;;
7607e19dfac4Smrg	esac
7608e19dfac4Smrg      done
7609e19dfac4Smrg
7610e19dfac4Smrg      # Make sure dlprefiles contains only unique files
7611e19dfac4Smrg      old_dlprefiles="$dlprefiles"
7612e19dfac4Smrg      dlprefiles=
7613e19dfac4Smrg      for lib in $old_dlprefiles; do
7614e19dfac4Smrg	case "$dlprefiles " in
7615e19dfac4Smrg	*" $lib "*) ;;
7616313a12fdSmrg	*) func_append dlprefiles " $lib" ;;
7617e19dfac4Smrg	esac
7618e19dfac4Smrg      done
7619e19dfac4Smrg
7620e19dfac4Smrg      if test "$build_libtool_libs" = yes; then
7621e19dfac4Smrg	if test -n "$rpath"; then
7622e19dfac4Smrg	  case $host in
7623313a12fdSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624e19dfac4Smrg	    # these systems don't actually have a c library (as such)!
7625e19dfac4Smrg	    ;;
7626e19dfac4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627e19dfac4Smrg	    # Rhapsody C library is in the System framework
7628313a12fdSmrg	    func_append deplibs " System.ltframework"
7629e19dfac4Smrg	    ;;
7630e19dfac4Smrg	  *-*-netbsd*)
7631e19dfac4Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7632e19dfac4Smrg	    ;;
7633e19dfac4Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634e19dfac4Smrg	    # Do not include libc due to us having libc/libc_r.
7635e19dfac4Smrg	    ;;
7636e19dfac4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637e19dfac4Smrg	    # Causes problems with __ctype
7638e19dfac4Smrg	    ;;
7639e19dfac4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640e19dfac4Smrg	    # Compiler inserts libc in the correct place for threads to work
7641e19dfac4Smrg	    ;;
7642e19dfac4Smrg	  *)
7643e19dfac4Smrg	    # Add libc to deplibs on all other systems if necessary.
7644e19dfac4Smrg	    if test "$build_libtool_need_lc" = "yes"; then
7645313a12fdSmrg	      func_append deplibs " -lc"
7646e19dfac4Smrg	    fi
7647e19dfac4Smrg	    ;;
7648e19dfac4Smrg	  esac
7649e19dfac4Smrg	fi
7650e19dfac4Smrg
7651e19dfac4Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7652e19dfac4Smrg	name_save=$name
7653e19dfac4Smrg	libname_save=$libname
7654e19dfac4Smrg	release_save=$release
7655e19dfac4Smrg	versuffix_save=$versuffix
7656e19dfac4Smrg	major_save=$major
7657e19dfac4Smrg	# I'm not sure if I'm treating the release correctly.  I think
7658e19dfac4Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659e19dfac4Smrg	# add it in twice.  Is that correct?
7660e19dfac4Smrg	release=""
7661e19dfac4Smrg	versuffix=""
7662e19dfac4Smrg	major=""
7663e19dfac4Smrg	newdeplibs=
7664e19dfac4Smrg	droppeddeps=no
7665e19dfac4Smrg	case $deplibs_check_method in
7666e19dfac4Smrg	pass_all)
7667e19dfac4Smrg	  # Don't check for shared/static.  Everything works.
7668e19dfac4Smrg	  # This might be a little naive.  We might want to check
7669e19dfac4Smrg	  # whether the library exists or not.  But this is on
7670e19dfac4Smrg	  # osf3 & osf4 and I'm not really sure... Just
7671e19dfac4Smrg	  # implementing what was already the behavior.
7672e19dfac4Smrg	  newdeplibs=$deplibs
7673e19dfac4Smrg	  ;;
7674e19dfac4Smrg	test_compile)
7675e19dfac4Smrg	  # This code stresses the "libraries are programs" paradigm to its
7676e19dfac4Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677e19dfac4Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7678e19dfac4Smrg	  # whether they linked in statically or dynamically with ldd.
7679e19dfac4Smrg	  $opt_dry_run || $RM conftest.c
7680e19dfac4Smrg	  cat > conftest.c <<EOF
7681e19dfac4Smrg	  int main() { return 0; }
7682e19dfac4SmrgEOF
7683e19dfac4Smrg	  $opt_dry_run || $RM conftest
7684e19dfac4Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685e19dfac4Smrg	    ldd_output=`ldd conftest`
7686e19dfac4Smrg	    for i in $deplibs; do
7687e19dfac4Smrg	      case $i in
7688e19dfac4Smrg	      -l*)
7689e19dfac4Smrg		func_stripname -l '' "$i"
7690e19dfac4Smrg		name=$func_stripname_result
7691e19dfac4Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692e19dfac4Smrg		  case " $predeps $postdeps " in
7693e19dfac4Smrg		  *" $i "*)
7694313a12fdSmrg		    func_append newdeplibs " $i"
7695e19dfac4Smrg		    i=""
7696e19dfac4Smrg		    ;;
7697e19dfac4Smrg		  esac
7698e19dfac4Smrg		fi
7699e19dfac4Smrg		if test -n "$i" ; then
7700e19dfac4Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701e19dfac4Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702e19dfac4Smrg		  set dummy $deplib_matches; shift
7703e19dfac4Smrg		  deplib_match=$1
7704e19dfac4Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7705313a12fdSmrg		    func_append newdeplibs " $i"
7706e19dfac4Smrg		  else
7707e19dfac4Smrg		    droppeddeps=yes
7708313a12fdSmrg		    echo
7709e19dfac4Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7710313a12fdSmrg		    echo "*** I have the capability to make that library automatically link in when"
7711313a12fdSmrg		    echo "*** you link to this library.  But I can only do this if you have a"
7712313a12fdSmrg		    echo "*** shared version of the library, which I believe you do not have"
7713313a12fdSmrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
7714313a12fdSmrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715e19dfac4Smrg		  fi
7716e19dfac4Smrg		fi
7717e19dfac4Smrg		;;
7718e19dfac4Smrg	      *)
7719313a12fdSmrg		func_append newdeplibs " $i"
7720e19dfac4Smrg		;;
7721e19dfac4Smrg	      esac
7722e19dfac4Smrg	    done
7723e19dfac4Smrg	  else
7724e19dfac4Smrg	    # Error occurred in the first compile.  Let's try to salvage
7725e19dfac4Smrg	    # the situation: Compile a separate program for each library.
7726e19dfac4Smrg	    for i in $deplibs; do
7727e19dfac4Smrg	      case $i in
7728e19dfac4Smrg	      -l*)
7729e19dfac4Smrg		func_stripname -l '' "$i"
7730e19dfac4Smrg		name=$func_stripname_result
7731e19dfac4Smrg		$opt_dry_run || $RM conftest
7732e19dfac4Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733e19dfac4Smrg		  ldd_output=`ldd conftest`
7734e19dfac4Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735e19dfac4Smrg		    case " $predeps $postdeps " in
7736e19dfac4Smrg		    *" $i "*)
7737313a12fdSmrg		      func_append newdeplibs " $i"
7738e19dfac4Smrg		      i=""
7739e19dfac4Smrg		      ;;
7740e19dfac4Smrg		    esac
7741e19dfac4Smrg		  fi
7742e19dfac4Smrg		  if test -n "$i" ; then
7743e19dfac4Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744e19dfac4Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745e19dfac4Smrg		    set dummy $deplib_matches; shift
7746e19dfac4Smrg		    deplib_match=$1
7747e19dfac4Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7748313a12fdSmrg		      func_append newdeplibs " $i"
7749e19dfac4Smrg		    else
7750e19dfac4Smrg		      droppeddeps=yes
7751313a12fdSmrg		      echo
7752e19dfac4Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7753313a12fdSmrg		      echo "*** I have the capability to make that library automatically link in when"
7754313a12fdSmrg		      echo "*** you link to this library.  But I can only do this if you have a"
7755313a12fdSmrg		      echo "*** shared version of the library, which you do not appear to have"
7756313a12fdSmrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
7757313a12fdSmrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758e19dfac4Smrg		    fi
7759e19dfac4Smrg		  fi
7760e19dfac4Smrg		else
7761e19dfac4Smrg		  droppeddeps=yes
7762313a12fdSmrg		  echo
7763e19dfac4Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7764313a12fdSmrg		  echo "*** make it link in!  You will probably need to install it or some"
7765313a12fdSmrg		  echo "*** library that it depends on before this library will be fully"
7766313a12fdSmrg		  echo "*** functional.  Installing it before continuing would be even better."
7767e19dfac4Smrg		fi
7768e19dfac4Smrg		;;
7769e19dfac4Smrg	      *)
7770313a12fdSmrg		func_append newdeplibs " $i"
7771e19dfac4Smrg		;;
7772e19dfac4Smrg	      esac
7773e19dfac4Smrg	    done
7774e19dfac4Smrg	  fi
7775e19dfac4Smrg	  ;;
7776e19dfac4Smrg	file_magic*)
7777e19dfac4Smrg	  set dummy $deplibs_check_method; shift
7778e19dfac4Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779e19dfac4Smrg	  for a_deplib in $deplibs; do
7780e19dfac4Smrg	    case $a_deplib in
7781e19dfac4Smrg	    -l*)
7782e19dfac4Smrg	      func_stripname -l '' "$a_deplib"
7783e19dfac4Smrg	      name=$func_stripname_result
7784e19dfac4Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785e19dfac4Smrg		case " $predeps $postdeps " in
7786e19dfac4Smrg		*" $a_deplib "*)
7787313a12fdSmrg		  func_append newdeplibs " $a_deplib"
7788e19dfac4Smrg		  a_deplib=""
7789e19dfac4Smrg		  ;;
7790e19dfac4Smrg		esac
7791e19dfac4Smrg	      fi
7792e19dfac4Smrg	      if test -n "$a_deplib" ; then
7793e19dfac4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7794313a12fdSmrg		if test -n "$file_magic_glob"; then
7795313a12fdSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7796313a12fdSmrg		else
7797313a12fdSmrg		  libnameglob=$libname
7798313a12fdSmrg		fi
7799313a12fdSmrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800e19dfac4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7801313a12fdSmrg		  if test "$want_nocaseglob" = yes; then
7802313a12fdSmrg		    shopt -s nocaseglob
7803313a12fdSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7804313a12fdSmrg		    $nocaseglob
7805313a12fdSmrg		  else
7806313a12fdSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7807313a12fdSmrg		  fi
7808e19dfac4Smrg		  for potent_lib in $potential_libs; do
7809e19dfac4Smrg		      # Follow soft links.
7810e19dfac4Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811e19dfac4Smrg			 $GREP " -> " >/dev/null; then
7812e19dfac4Smrg			continue
7813e19dfac4Smrg		      fi
7814e19dfac4Smrg		      # The statement above tries to avoid entering an
7815e19dfac4Smrg		      # endless loop below, in case of cyclic links.
7816e19dfac4Smrg		      # We might still enter an endless loop, since a link
7817e19dfac4Smrg		      # loop can be closed while we follow links,
7818e19dfac4Smrg		      # but so what?
7819e19dfac4Smrg		      potlib="$potent_lib"
7820e19dfac4Smrg		      while test -h "$potlib" 2>/dev/null; do
7821e19dfac4Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822e19dfac4Smrg			case $potliblink in
7823e19dfac4Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
7824313a12fdSmrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825e19dfac4Smrg			esac
7826e19dfac4Smrg		      done
7827e19dfac4Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828e19dfac4Smrg			 $SED -e 10q |
7829e19dfac4Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
7830313a12fdSmrg			func_append newdeplibs " $a_deplib"
7831e19dfac4Smrg			a_deplib=""
7832e19dfac4Smrg			break 2
7833e19dfac4Smrg		      fi
7834e19dfac4Smrg		  done
7835e19dfac4Smrg		done
7836e19dfac4Smrg	      fi
7837e19dfac4Smrg	      if test -n "$a_deplib" ; then
7838e19dfac4Smrg		droppeddeps=yes
7839313a12fdSmrg		echo
7840e19dfac4Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7841313a12fdSmrg		echo "*** I have the capability to make that library automatically link in when"
7842313a12fdSmrg		echo "*** you link to this library.  But I can only do this if you have a"
7843313a12fdSmrg		echo "*** shared version of the library, which you do not appear to have"
7844313a12fdSmrg		echo "*** because I did check the linker path looking for a file starting"
7845e19dfac4Smrg		if test -z "$potlib" ; then
7846e19dfac4Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847e19dfac4Smrg		else
7848e19dfac4Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849e19dfac4Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850e19dfac4Smrg		fi
7851e19dfac4Smrg	      fi
7852e19dfac4Smrg	      ;;
7853e19dfac4Smrg	    *)
7854e19dfac4Smrg	      # Add a -L argument.
7855313a12fdSmrg	      func_append newdeplibs " $a_deplib"
7856e19dfac4Smrg	      ;;
7857e19dfac4Smrg	    esac
7858e19dfac4Smrg	  done # Gone through all deplibs.
7859e19dfac4Smrg	  ;;
7860e19dfac4Smrg	match_pattern*)
7861e19dfac4Smrg	  set dummy $deplibs_check_method; shift
7862e19dfac4Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863e19dfac4Smrg	  for a_deplib in $deplibs; do
7864e19dfac4Smrg	    case $a_deplib in
7865e19dfac4Smrg	    -l*)
7866e19dfac4Smrg	      func_stripname -l '' "$a_deplib"
7867e19dfac4Smrg	      name=$func_stripname_result
7868e19dfac4Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869e19dfac4Smrg		case " $predeps $postdeps " in
7870e19dfac4Smrg		*" $a_deplib "*)
7871313a12fdSmrg		  func_append newdeplibs " $a_deplib"
7872e19dfac4Smrg		  a_deplib=""
7873e19dfac4Smrg		  ;;
7874e19dfac4Smrg		esac
7875e19dfac4Smrg	      fi
7876e19dfac4Smrg	      if test -n "$a_deplib" ; then
7877e19dfac4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878e19dfac4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879e19dfac4Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880e19dfac4Smrg		  for potent_lib in $potential_libs; do
7881e19dfac4Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
7882313a12fdSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883e19dfac4Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
7884313a12fdSmrg		      func_append newdeplibs " $a_deplib"
7885e19dfac4Smrg		      a_deplib=""
7886e19dfac4Smrg		      break 2
7887e19dfac4Smrg		    fi
7888e19dfac4Smrg		  done
7889e19dfac4Smrg		done
7890e19dfac4Smrg	      fi
7891e19dfac4Smrg	      if test -n "$a_deplib" ; then
7892e19dfac4Smrg		droppeddeps=yes
7893313a12fdSmrg		echo
7894e19dfac4Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7895313a12fdSmrg		echo "*** I have the capability to make that library automatically link in when"
7896313a12fdSmrg		echo "*** you link to this library.  But I can only do this if you have a"
7897313a12fdSmrg		echo "*** shared version of the library, which you do not appear to have"
7898313a12fdSmrg		echo "*** because I did check the linker path looking for a file starting"
7899e19dfac4Smrg		if test -z "$potlib" ; then
7900e19dfac4Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901e19dfac4Smrg		else
7902e19dfac4Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903e19dfac4Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904e19dfac4Smrg		fi
7905e19dfac4Smrg	      fi
7906e19dfac4Smrg	      ;;
7907e19dfac4Smrg	    *)
7908e19dfac4Smrg	      # Add a -L argument.
7909313a12fdSmrg	      func_append newdeplibs " $a_deplib"
7910e19dfac4Smrg	      ;;
7911e19dfac4Smrg	    esac
7912e19dfac4Smrg	  done # Gone through all deplibs.
7913e19dfac4Smrg	  ;;
7914e19dfac4Smrg	none | unknown | *)
7915e19dfac4Smrg	  newdeplibs=""
7916313a12fdSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917e19dfac4Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918e19dfac4Smrg	    for i in $predeps $postdeps ; do
7919e19dfac4Smrg	      # can't use Xsed below, because $i might contain '/'
7920313a12fdSmrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921e19dfac4Smrg	    done
7922e19dfac4Smrg	  fi
7923313a12fdSmrg	  case $tmp_deplibs in
7924313a12fdSmrg	  *[!\	\ ]*)
7925313a12fdSmrg	    echo
7926e19dfac4Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
7927313a12fdSmrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928e19dfac4Smrg	    else
7929313a12fdSmrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930e19dfac4Smrg	    fi
7931313a12fdSmrg	    echo "*** All declared inter-library dependencies are being dropped."
7932e19dfac4Smrg	    droppeddeps=yes
7933313a12fdSmrg	    ;;
7934313a12fdSmrg	  esac
7935e19dfac4Smrg	  ;;
7936e19dfac4Smrg	esac
7937e19dfac4Smrg	versuffix=$versuffix_save
7938e19dfac4Smrg	major=$major_save
7939e19dfac4Smrg	release=$release_save
7940e19dfac4Smrg	libname=$libname_save
7941e19dfac4Smrg	name=$name_save
7942e19dfac4Smrg
7943e19dfac4Smrg	case $host in
7944e19dfac4Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7945e19dfac4Smrg	  # On Rhapsody replace the C library with the System framework
7946313a12fdSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947e19dfac4Smrg	  ;;
7948e19dfac4Smrg	esac
7949e19dfac4Smrg
7950e19dfac4Smrg	if test "$droppeddeps" = yes; then
7951e19dfac4Smrg	  if test "$module" = yes; then
7952313a12fdSmrg	    echo
7953313a12fdSmrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954e19dfac4Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7955313a12fdSmrg	    echo "*** a static module, that should work as long as the dlopening"
7956313a12fdSmrg	    echo "*** application is linked with the -dlopen flag."
7957e19dfac4Smrg	    if test -z "$global_symbol_pipe"; then
7958313a12fdSmrg	      echo
7959313a12fdSmrg	      echo "*** However, this would only work if libtool was able to extract symbol"
7960313a12fdSmrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7961313a12fdSmrg	      echo "*** not find such a program.  So, this module is probably useless."
7962313a12fdSmrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963e19dfac4Smrg	    fi
7964e19dfac4Smrg	    if test "$build_old_libs" = no; then
7965e19dfac4Smrg	      oldlibs="$output_objdir/$libname.$libext"
7966e19dfac4Smrg	      build_libtool_libs=module
7967e19dfac4Smrg	      build_old_libs=yes
7968e19dfac4Smrg	    else
7969e19dfac4Smrg	      build_libtool_libs=no
7970e19dfac4Smrg	    fi
7971e19dfac4Smrg	  else
7972313a12fdSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
7973313a12fdSmrg	    echo "*** automatically added whenever a program is linked with this library"
7974313a12fdSmrg	    echo "*** or is declared to -dlopen it."
7975e19dfac4Smrg
7976e19dfac4Smrg	    if test "$allow_undefined" = no; then
7977313a12fdSmrg	      echo
7978313a12fdSmrg	      echo "*** Since this library must not contain undefined symbols,"
7979313a12fdSmrg	      echo "*** because either the platform does not support them or"
7980313a12fdSmrg	      echo "*** it was explicitly requested with -no-undefined,"
7981313a12fdSmrg	      echo "*** libtool will only create a static version of it."
7982e19dfac4Smrg	      if test "$build_old_libs" = no; then
7983e19dfac4Smrg		oldlibs="$output_objdir/$libname.$libext"
7984e19dfac4Smrg		build_libtool_libs=module
7985e19dfac4Smrg		build_old_libs=yes
7986e19dfac4Smrg	      else
7987e19dfac4Smrg		build_libtool_libs=no
7988e19dfac4Smrg	      fi
7989e19dfac4Smrg	    fi
7990e19dfac4Smrg	  fi
7991e19dfac4Smrg	fi
7992e19dfac4Smrg	# Done checking deplibs!
7993e19dfac4Smrg	deplibs=$newdeplibs
7994e19dfac4Smrg      fi
7995e19dfac4Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996e19dfac4Smrg      case $host in
7997e19dfac4Smrg	*-*-darwin*)
7998313a12fdSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7999313a12fdSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8000313a12fdSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001e19dfac4Smrg	  ;;
8002e19dfac4Smrg      esac
8003e19dfac4Smrg
8004e19dfac4Smrg      # move library search paths that coincide with paths to not yet
8005e19dfac4Smrg      # installed libraries to the beginning of the library search list
8006e19dfac4Smrg      new_libs=
8007e19dfac4Smrg      for path in $notinst_path; do
8008e19dfac4Smrg	case " $new_libs " in
8009e19dfac4Smrg	*" -L$path/$objdir "*) ;;
8010e19dfac4Smrg	*)
8011e19dfac4Smrg	  case " $deplibs " in
8012e19dfac4Smrg	  *" -L$path/$objdir "*)
8013313a12fdSmrg	    func_append new_libs " -L$path/$objdir" ;;
8014e19dfac4Smrg	  esac
8015e19dfac4Smrg	  ;;
8016e19dfac4Smrg	esac
8017e19dfac4Smrg      done
8018e19dfac4Smrg      for deplib in $deplibs; do
8019e19dfac4Smrg	case $deplib in
8020e19dfac4Smrg	-L*)
8021e19dfac4Smrg	  case " $new_libs " in
8022e19dfac4Smrg	  *" $deplib "*) ;;
8023313a12fdSmrg	  *) func_append new_libs " $deplib" ;;
8024e19dfac4Smrg	  esac
8025e19dfac4Smrg	  ;;
8026313a12fdSmrg	*) func_append new_libs " $deplib" ;;
8027e19dfac4Smrg	esac
8028e19dfac4Smrg      done
8029e19dfac4Smrg      deplibs="$new_libs"
8030e19dfac4Smrg
8031e19dfac4Smrg      # All the library-specific variables (install_libdir is set above).
8032e19dfac4Smrg      library_names=
8033e19dfac4Smrg      old_library=
8034e19dfac4Smrg      dlname=
8035e19dfac4Smrg
8036e19dfac4Smrg      # Test again, we may have decided not to build it any more
8037e19dfac4Smrg      if test "$build_libtool_libs" = yes; then
8038313a12fdSmrg	# Remove ${wl} instances when linking with ld.
8039313a12fdSmrg	# FIXME: should test the right _cmds variable.
8040313a12fdSmrg	case $archive_cmds in
8041313a12fdSmrg	  *\$LD\ *) wl= ;;
8042313a12fdSmrg        esac
8043e19dfac4Smrg	if test "$hardcode_into_libs" = yes; then
8044e19dfac4Smrg	  # Hardcode the library paths
8045e19dfac4Smrg	  hardcode_libdirs=
8046e19dfac4Smrg	  dep_rpath=
8047e19dfac4Smrg	  rpath="$finalize_rpath"
8048313a12fdSmrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049e19dfac4Smrg	  for libdir in $rpath; do
8050e19dfac4Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051e19dfac4Smrg	      if test -n "$hardcode_libdir_separator"; then
8052313a12fdSmrg		func_replace_sysroot "$libdir"
8053313a12fdSmrg		libdir=$func_replace_sysroot_result
8054e19dfac4Smrg		if test -z "$hardcode_libdirs"; then
8055e19dfac4Smrg		  hardcode_libdirs="$libdir"
8056e19dfac4Smrg		else
8057e19dfac4Smrg		  # Just accumulate the unique libdirs.
8058e19dfac4Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059e19dfac4Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060e19dfac4Smrg		    ;;
8061e19dfac4Smrg		  *)
8062313a12fdSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063e19dfac4Smrg		    ;;
8064e19dfac4Smrg		  esac
8065e19dfac4Smrg		fi
8066e19dfac4Smrg	      else
8067e19dfac4Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
8068313a12fdSmrg		func_append dep_rpath " $flag"
8069e19dfac4Smrg	      fi
8070e19dfac4Smrg	    elif test -n "$runpath_var"; then
8071e19dfac4Smrg	      case "$perm_rpath " in
8072e19dfac4Smrg	      *" $libdir "*) ;;
8073313a12fdSmrg	      *) func_append perm_rpath " $libdir" ;;
8074e19dfac4Smrg	      esac
8075e19dfac4Smrg	    fi
8076e19dfac4Smrg	  done
8077e19dfac4Smrg	  # Substitute the hardcoded libdirs into the rpath.
8078e19dfac4Smrg	  if test -n "$hardcode_libdir_separator" &&
8079e19dfac4Smrg	     test -n "$hardcode_libdirs"; then
8080e19dfac4Smrg	    libdir="$hardcode_libdirs"
8081313a12fdSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082e19dfac4Smrg	  fi
8083e19dfac4Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084e19dfac4Smrg	    # We should set the runpath_var.
8085e19dfac4Smrg	    rpath=
8086e19dfac4Smrg	    for dir in $perm_rpath; do
8087313a12fdSmrg	      func_append rpath "$dir:"
8088e19dfac4Smrg	    done
8089e19dfac4Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090e19dfac4Smrg	  fi
8091e19dfac4Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092e19dfac4Smrg	fi
809327702724Smrg
8094e19dfac4Smrg	shlibpath="$finalize_shlibpath"
8095313a12fdSmrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096e19dfac4Smrg	if test -n "$shlibpath"; then
8097e19dfac4Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098e19dfac4Smrg	fi
809927702724Smrg
8100e19dfac4Smrg	# Get the real and link names of the library.
8101e19dfac4Smrg	eval shared_ext=\"$shrext_cmds\"
8102e19dfac4Smrg	eval library_names=\"$library_names_spec\"
8103e19dfac4Smrg	set dummy $library_names
8104e19dfac4Smrg	shift
8105e19dfac4Smrg	realname="$1"
8106e19dfac4Smrg	shift
810727702724Smrg
8108e19dfac4Smrg	if test -n "$soname_spec"; then
8109e19dfac4Smrg	  eval soname=\"$soname_spec\"
8110e19dfac4Smrg	else
8111e19dfac4Smrg	  soname="$realname"
8112e19dfac4Smrg	fi
8113e19dfac4Smrg	if test -z "$dlname"; then
8114e19dfac4Smrg	  dlname=$soname
8115e19dfac4Smrg	fi
811627702724Smrg
8117e19dfac4Smrg	lib="$output_objdir/$realname"
8118e19dfac4Smrg	linknames=
8119e19dfac4Smrg	for link
8120e19dfac4Smrg	do
8121313a12fdSmrg	  func_append linknames " $link"
8122e19dfac4Smrg	done
812327702724Smrg
8124e19dfac4Smrg	# Use standard objects if they are pic
8125313a12fdSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126e19dfac4Smrg	test "X$libobjs" = "X " && libobjs=
812727702724Smrg
8128e19dfac4Smrg	delfiles=
8129e19dfac4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130e19dfac4Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131e19dfac4Smrg	  export_symbols="$output_objdir/$libname.uexp"
8132313a12fdSmrg	  func_append delfiles " $export_symbols"
8133e19dfac4Smrg	fi
813427702724Smrg
8135e19dfac4Smrg	orig_export_symbols=
8136e19dfac4Smrg	case $host_os in
8137e19dfac4Smrg	cygwin* | mingw* | cegcc*)
8138e19dfac4Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139e19dfac4Smrg	    # exporting using user supplied symfile
8140e19dfac4Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141e19dfac4Smrg	      # and it's NOT already a .def file. Must figure out
8142e19dfac4Smrg	      # which of the given symbols are data symbols and tag
8143e19dfac4Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8144e19dfac4Smrg	      # export_symbols gets reassigned inside the "prepare
8145e19dfac4Smrg	      # the list of exported symbols" if statement, so the
8146e19dfac4Smrg	      # include_expsyms logic still works.
8147e19dfac4Smrg	      orig_export_symbols="$export_symbols"
8148e19dfac4Smrg	      export_symbols=
8149e19dfac4Smrg	      always_export_symbols=yes
8150e19dfac4Smrg	    fi
8151e19dfac4Smrg	  fi
8152e19dfac4Smrg	  ;;
8153e19dfac4Smrg	esac
815427702724Smrg
8155e19dfac4Smrg	# Prepare the list of exported symbols
8156e19dfac4Smrg	if test -z "$export_symbols"; then
8157e19dfac4Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158e19dfac4Smrg	    func_verbose "generating symbol list for \`$libname.la'"
8159e19dfac4Smrg	    export_symbols="$output_objdir/$libname.exp"
8160e19dfac4Smrg	    $opt_dry_run || $RM $export_symbols
8161e19dfac4Smrg	    cmds=$export_symbols_cmds
8162e19dfac4Smrg	    save_ifs="$IFS"; IFS='~'
8163313a12fdSmrg	    for cmd1 in $cmds; do
8164e19dfac4Smrg	      IFS="$save_ifs"
8165313a12fdSmrg	      # Take the normal branch if the nm_file_list_spec branch
8166313a12fdSmrg	      # doesn't work or if tool conversion is not needed.
8167313a12fdSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
8168313a12fdSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8169313a12fdSmrg		  try_normal_branch=yes
8170313a12fdSmrg		  eval cmd=\"$cmd1\"
8171313a12fdSmrg		  func_len " $cmd"
8172313a12fdSmrg		  len=$func_len_result
8173313a12fdSmrg		  ;;
8174313a12fdSmrg		*)
8175313a12fdSmrg		  try_normal_branch=no
8176313a12fdSmrg		  ;;
8177313a12fdSmrg	      esac
8178313a12fdSmrg	      if test "$try_normal_branch" = yes \
8179313a12fdSmrg		 && { test "$len" -lt "$max_cmd_len" \
8180313a12fdSmrg		      || test "$max_cmd_len" -le -1; }
8181313a12fdSmrg	      then
8182313a12fdSmrg		func_show_eval "$cmd" 'exit $?'
8183313a12fdSmrg		skipped_export=false
8184313a12fdSmrg	      elif test -n "$nm_file_list_spec"; then
8185313a12fdSmrg		func_basename "$output"
8186313a12fdSmrg		output_la=$func_basename_result
8187313a12fdSmrg		save_libobjs=$libobjs
8188313a12fdSmrg		save_output=$output
8189313a12fdSmrg		output=${output_objdir}/${output_la}.nm
8190313a12fdSmrg		func_to_tool_file "$output"
8191313a12fdSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
8192313a12fdSmrg		func_append delfiles " $output"
8193313a12fdSmrg		func_verbose "creating $NM input file list: $output"
8194313a12fdSmrg		for obj in $save_libobjs; do
8195313a12fdSmrg		  func_to_tool_file "$obj"
8196313a12fdSmrg		  $ECHO "$func_to_tool_file_result"
8197313a12fdSmrg		done > "$output"
8198313a12fdSmrg		eval cmd=\"$cmd1\"
8199e19dfac4Smrg		func_show_eval "$cmd" 'exit $?'
8200313a12fdSmrg		output=$save_output
8201313a12fdSmrg		libobjs=$save_libobjs
8202e19dfac4Smrg		skipped_export=false
8203e19dfac4Smrg	      else
8204e19dfac4Smrg		# The command line is too long to execute in one step.
8205e19dfac4Smrg		func_verbose "using reloadable object file for export list..."
8206e19dfac4Smrg		skipped_export=:
8207e19dfac4Smrg		# Break out early, otherwise skipped_export may be
8208e19dfac4Smrg		# set to false by a later but shorter cmd.
8209e19dfac4Smrg		break
8210e19dfac4Smrg	      fi
8211e19dfac4Smrg	    done
8212e19dfac4Smrg	    IFS="$save_ifs"
8213e19dfac4Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214e19dfac4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215e19dfac4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216e19dfac4Smrg	    fi
8217e19dfac4Smrg	  fi
8218e19dfac4Smrg	fi
821927702724Smrg
8220e19dfac4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221e19dfac4Smrg	  tmp_export_symbols="$export_symbols"
8222e19dfac4Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8223313a12fdSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224e19dfac4Smrg	fi
822527702724Smrg
8226e19dfac4Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227e19dfac4Smrg	  # The given exports_symbols file has to be filtered, so filter it.
8228e19dfac4Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229e19dfac4Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230e19dfac4Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231e19dfac4Smrg	  # though. Also, the filter scales superlinearly with the number of
8232e19dfac4Smrg	  # global variables. join(1) would be nice here, but unfortunately
8233e19dfac4Smrg	  # isn't a blessed tool.
8234e19dfac4Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8235313a12fdSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236e19dfac4Smrg	  export_symbols=$output_objdir/$libname.def
8237e19dfac4Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
823827702724Smrg	fi
823927702724Smrg
8240e19dfac4Smrg	tmp_deplibs=
8241e19dfac4Smrg	for test_deplib in $deplibs; do
8242e19dfac4Smrg	  case " $convenience " in
8243e19dfac4Smrg	  *" $test_deplib "*) ;;
8244e19dfac4Smrg	  *)
8245313a12fdSmrg	    func_append tmp_deplibs " $test_deplib"
8246e19dfac4Smrg	    ;;
8247e19dfac4Smrg	  esac
8248e19dfac4Smrg	done
8249e19dfac4Smrg	deplibs="$tmp_deplibs"
825027702724Smrg
8251e19dfac4Smrg	if test -n "$convenience"; then
8252e19dfac4Smrg	  if test -n "$whole_archive_flag_spec" &&
8253e19dfac4Smrg	    test "$compiler_needs_object" = yes &&
8254e19dfac4Smrg	    test -z "$libobjs"; then
8255e19dfac4Smrg	    # extract the archives, so we have objects to list.
8256e19dfac4Smrg	    # TODO: could optimize this to just extract one archive.
8257e19dfac4Smrg	    whole_archive_flag_spec=
8258e19dfac4Smrg	  fi
8259e19dfac4Smrg	  if test -n "$whole_archive_flag_spec"; then
8260e19dfac4Smrg	    save_libobjs=$libobjs
8261e19dfac4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
8263e19dfac4Smrg	  else
8264e19dfac4Smrg	    gentop="$output_objdir/${outputname}x"
8265313a12fdSmrg	    func_append generated " $gentop"
826627702724Smrg
8267e19dfac4Smrg	    func_extract_archives $gentop $convenience
8268313a12fdSmrg	    func_append libobjs " $func_extract_archives_result"
8269e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
8270e19dfac4Smrg	  fi
8271e19dfac4Smrg	fi
827227702724Smrg
8273e19dfac4Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274e19dfac4Smrg	  eval flag=\"$thread_safe_flag_spec\"
8275313a12fdSmrg	  func_append linker_flags " $flag"
8276e19dfac4Smrg	fi
827727702724Smrg
8278e19dfac4Smrg	# Make a backup of the uninstalled library when relinking
8279313a12fdSmrg	if test "$opt_mode" = relink; then
8280e19dfac4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
828127702724Smrg	fi
828227702724Smrg
8283e19dfac4Smrg	# Do each of the archive commands.
8284e19dfac4Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285e19dfac4Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286e19dfac4Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8287e19dfac4Smrg	    cmds=$module_expsym_cmds
8288e19dfac4Smrg	  else
8289e19dfac4Smrg	    eval test_cmds=\"$module_cmds\"
8290e19dfac4Smrg	    cmds=$module_cmds
8291e19dfac4Smrg	  fi
8292e19dfac4Smrg	else
8293e19dfac4Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294e19dfac4Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295e19dfac4Smrg	    cmds=$archive_expsym_cmds
8296e19dfac4Smrg	  else
8297e19dfac4Smrg	    eval test_cmds=\"$archive_cmds\"
8298e19dfac4Smrg	    cmds=$archive_cmds
8299e19dfac4Smrg	  fi
830027702724Smrg	fi
830127702724Smrg
8302e19dfac4Smrg	if test "X$skipped_export" != "X:" &&
8303e19dfac4Smrg	   func_len " $test_cmds" &&
8304e19dfac4Smrg	   len=$func_len_result &&
8305e19dfac4Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306e19dfac4Smrg	  :
8307e19dfac4Smrg	else
8308e19dfac4Smrg	  # The command line is too long to link in one step, link piecewise
8309e19dfac4Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310e19dfac4Smrg	  # script.
831127702724Smrg
8312e19dfac4Smrg	  # Save the value of $output and $libobjs because we want to
8313e19dfac4Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8314e19dfac4Smrg	  # want to use save_libobjs as it was before
8315e19dfac4Smrg	  # whole_archive_flag_spec was expanded, because we can't
8316e19dfac4Smrg	  # assume the linker understands whole_archive_flag_spec.
8317e19dfac4Smrg	  # This may have to be revisited, in case too many
8318e19dfac4Smrg	  # convenience libraries get linked in and end up exceeding
8319e19dfac4Smrg	  # the spec.
8320e19dfac4Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321e19dfac4Smrg	    save_libobjs=$libobjs
8322e19dfac4Smrg	  fi
8323e19dfac4Smrg	  save_output=$output
8324313a12fdSmrg	  func_basename "$output"
8325313a12fdSmrg	  output_la=$func_basename_result
832627702724Smrg
8327e19dfac4Smrg	  # Clear the reloadable object creation command queue and
8328e19dfac4Smrg	  # initialize k to one.
8329e19dfac4Smrg	  test_cmds=
8330e19dfac4Smrg	  concat_cmds=
8331e19dfac4Smrg	  objlist=
8332e19dfac4Smrg	  last_robj=
8333e19dfac4Smrg	  k=1
833427702724Smrg
8335e19dfac4Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336e19dfac4Smrg	    output=${output_objdir}/${output_la}.lnkscript
8337e19dfac4Smrg	    func_verbose "creating GNU ld script: $output"
8338313a12fdSmrg	    echo 'INPUT (' > $output
8339e19dfac4Smrg	    for obj in $save_libobjs
8340e19dfac4Smrg	    do
8341313a12fdSmrg	      func_to_tool_file "$obj"
8342313a12fdSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8343e19dfac4Smrg	    done
8344313a12fdSmrg	    echo ')' >> $output
8345313a12fdSmrg	    func_append delfiles " $output"
8346313a12fdSmrg	    func_to_tool_file "$output"
8347313a12fdSmrg	    output=$func_to_tool_file_result
8348e19dfac4Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349e19dfac4Smrg	    output=${output_objdir}/${output_la}.lnk
8350e19dfac4Smrg	    func_verbose "creating linker input file list: $output"
8351e19dfac4Smrg	    : > $output
8352e19dfac4Smrg	    set x $save_libobjs
8353e19dfac4Smrg	    shift
8354e19dfac4Smrg	    firstobj=
8355e19dfac4Smrg	    if test "$compiler_needs_object" = yes; then
8356e19dfac4Smrg	      firstobj="$1 "
8357e19dfac4Smrg	      shift
8358e19dfac4Smrg	    fi
8359e19dfac4Smrg	    for obj
8360e19dfac4Smrg	    do
8361313a12fdSmrg	      func_to_tool_file "$obj"
8362313a12fdSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8363e19dfac4Smrg	    done
8364313a12fdSmrg	    func_append delfiles " $output"
8365313a12fdSmrg	    func_to_tool_file "$output"
8366313a12fdSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367e19dfac4Smrg	  else
8368e19dfac4Smrg	    if test -n "$save_libobjs"; then
8369e19dfac4Smrg	      func_verbose "creating reloadable object files..."
8370e19dfac4Smrg	      output=$output_objdir/$output_la-${k}.$objext
8371e19dfac4Smrg	      eval test_cmds=\"$reload_cmds\"
8372e19dfac4Smrg	      func_len " $test_cmds"
8373e19dfac4Smrg	      len0=$func_len_result
8374e19dfac4Smrg	      len=$len0
8375e19dfac4Smrg
8376e19dfac4Smrg	      # Loop over the list of objects to be linked.
8377e19dfac4Smrg	      for obj in $save_libobjs
8378e19dfac4Smrg	      do
8379e19dfac4Smrg		func_len " $obj"
8380e19dfac4Smrg		func_arith $len + $func_len_result
8381e19dfac4Smrg		len=$func_arith_result
8382e19dfac4Smrg		if test "X$objlist" = X ||
8383e19dfac4Smrg		   test "$len" -lt "$max_cmd_len"; then
8384e19dfac4Smrg		  func_append objlist " $obj"
8385e19dfac4Smrg		else
8386e19dfac4Smrg		  # The command $test_cmds is almost too long, add a
8387e19dfac4Smrg		  # command to the queue.
8388e19dfac4Smrg		  if test "$k" -eq 1 ; then
8389e19dfac4Smrg		    # The first file doesn't have a previous command to add.
8390313a12fdSmrg		    reload_objs=$objlist
8391313a12fdSmrg		    eval concat_cmds=\"$reload_cmds\"
8392e19dfac4Smrg		  else
8393e19dfac4Smrg		    # All subsequent reloadable object files will link in
8394e19dfac4Smrg		    # the last one created.
8395313a12fdSmrg		    reload_objs="$objlist $last_robj"
8396313a12fdSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397e19dfac4Smrg		  fi
8398e19dfac4Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399e19dfac4Smrg		  func_arith $k + 1
8400e19dfac4Smrg		  k=$func_arith_result
8401e19dfac4Smrg		  output=$output_objdir/$output_la-${k}.$objext
8402313a12fdSmrg		  objlist=" $obj"
8403e19dfac4Smrg		  func_len " $last_robj"
8404e19dfac4Smrg		  func_arith $len0 + $func_len_result
8405e19dfac4Smrg		  len=$func_arith_result
8406e19dfac4Smrg		fi
8407e19dfac4Smrg	      done
8408e19dfac4Smrg	      # Handle the remaining objects by creating one last
8409e19dfac4Smrg	      # reloadable object file.  All subsequent reloadable object
8410e19dfac4Smrg	      # files will link in the last one created.
8411e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8412313a12fdSmrg	      reload_objs="$objlist $last_robj"
8413313a12fdSmrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414e19dfac4Smrg	      if test -n "$last_robj"; then
8415e19dfac4Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416e19dfac4Smrg	      fi
8417313a12fdSmrg	      func_append delfiles " $output"
841827702724Smrg
8419e19dfac4Smrg	    else
8420e19dfac4Smrg	      output=
8421e19dfac4Smrg	    fi
842227702724Smrg
8423e19dfac4Smrg	    if ${skipped_export-false}; then
8424e19dfac4Smrg	      func_verbose "generating symbol list for \`$libname.la'"
8425e19dfac4Smrg	      export_symbols="$output_objdir/$libname.exp"
8426e19dfac4Smrg	      $opt_dry_run || $RM $export_symbols
8427e19dfac4Smrg	      libobjs=$output
8428e19dfac4Smrg	      # Append the command to create the export file.
8429e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430e19dfac4Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431e19dfac4Smrg	      if test -n "$last_robj"; then
8432e19dfac4Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433e19dfac4Smrg	      fi
8434e19dfac4Smrg	    fi
843527702724Smrg
8436e19dfac4Smrg	    test -n "$save_libobjs" &&
8437e19dfac4Smrg	      func_verbose "creating a temporary reloadable object file: $output"
843827702724Smrg
8439e19dfac4Smrg	    # Loop through the commands generated above and execute them.
8440e19dfac4Smrg	    save_ifs="$IFS"; IFS='~'
8441e19dfac4Smrg	    for cmd in $concat_cmds; do
8442e19dfac4Smrg	      IFS="$save_ifs"
8443e19dfac4Smrg	      $opt_silent || {
8444e19dfac4Smrg		  func_quote_for_expand "$cmd"
8445e19dfac4Smrg		  eval "func_echo $func_quote_for_expand_result"
8446e19dfac4Smrg	      }
8447e19dfac4Smrg	      $opt_dry_run || eval "$cmd" || {
8448e19dfac4Smrg		lt_exit=$?
8449e19dfac4Smrg
8450e19dfac4Smrg		# Restore the uninstalled library and exit
8451313a12fdSmrg		if test "$opt_mode" = relink; then
8452e19dfac4Smrg		  ( cd "$output_objdir" && \
8453e19dfac4Smrg		    $RM "${realname}T" && \
8454e19dfac4Smrg		    $MV "${realname}U" "$realname" )
8455e19dfac4Smrg		fi
845627702724Smrg
8457e19dfac4Smrg		exit $lt_exit
8458e19dfac4Smrg	      }
8459e19dfac4Smrg	    done
8460e19dfac4Smrg	    IFS="$save_ifs"
8461e19dfac4Smrg
8462e19dfac4Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463e19dfac4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464e19dfac4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
846527702724Smrg	    fi
846627702724Smrg	  fi
846727702724Smrg
8468e19dfac4Smrg          if ${skipped_export-false}; then
8469e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470e19dfac4Smrg	      tmp_export_symbols="$export_symbols"
8471e19dfac4Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8472313a12fdSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473e19dfac4Smrg	    fi
847427702724Smrg
8475e19dfac4Smrg	    if test -n "$orig_export_symbols"; then
8476e19dfac4Smrg	      # The given exports_symbols file has to be filtered, so filter it.
8477e19dfac4Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478e19dfac4Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479e19dfac4Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480e19dfac4Smrg	      # though. Also, the filter scales superlinearly with the number of
8481e19dfac4Smrg	      # global variables. join(1) would be nice here, but unfortunately
8482e19dfac4Smrg	      # isn't a blessed tool.
8483e19dfac4Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8484313a12fdSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485e19dfac4Smrg	      export_symbols=$output_objdir/$libname.def
8486e19dfac4Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487e19dfac4Smrg	    fi
8488e19dfac4Smrg	  fi
848927702724Smrg
8490e19dfac4Smrg	  libobjs=$output
8491e19dfac4Smrg	  # Restore the value of output.
8492e19dfac4Smrg	  output=$save_output
849327702724Smrg
8494e19dfac4Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495e19dfac4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
8497e19dfac4Smrg	  fi
8498e19dfac4Smrg	  # Expand the library linking commands again to reset the
8499e19dfac4Smrg	  # value of $libobjs for piecewise linking.
8500e19dfac4Smrg
8501e19dfac4Smrg	  # Do each of the archive commands.
8502e19dfac4Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504e19dfac4Smrg	      cmds=$module_expsym_cmds
850527702724Smrg	    else
8506e19dfac4Smrg	      cmds=$module_cmds
850727702724Smrg	    fi
850827702724Smrg	  else
8509e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510e19dfac4Smrg	      cmds=$archive_expsym_cmds
8511e19dfac4Smrg	    else
8512e19dfac4Smrg	      cmds=$archive_cmds
8513e19dfac4Smrg	    fi
851427702724Smrg	  fi
851527702724Smrg	fi
851627702724Smrg
8517e19dfac4Smrg	if test -n "$delfiles"; then
8518e19dfac4Smrg	  # Append the command to remove temporary files to $cmds.
8519e19dfac4Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520e19dfac4Smrg	fi
852127702724Smrg
8522e19dfac4Smrg	# Add any objects from preloaded convenience libraries
8523e19dfac4Smrg	if test -n "$dlprefiles"; then
8524e19dfac4Smrg	  gentop="$output_objdir/${outputname}x"
8525313a12fdSmrg	  func_append generated " $gentop"
852627702724Smrg
8527e19dfac4Smrg	  func_extract_archives $gentop $dlprefiles
8528313a12fdSmrg	  func_append libobjs " $func_extract_archives_result"
8529e19dfac4Smrg	  test "X$libobjs" = "X " && libobjs=
853027702724Smrg	fi
853127702724Smrg
8532e19dfac4Smrg	save_ifs="$IFS"; IFS='~'
8533e19dfac4Smrg	for cmd in $cmds; do
8534e19dfac4Smrg	  IFS="$save_ifs"
8535e19dfac4Smrg	  eval cmd=\"$cmd\"
8536e19dfac4Smrg	  $opt_silent || {
8537e19dfac4Smrg	    func_quote_for_expand "$cmd"
8538e19dfac4Smrg	    eval "func_echo $func_quote_for_expand_result"
8539e19dfac4Smrg	  }
8540e19dfac4Smrg	  $opt_dry_run || eval "$cmd" || {
8541e19dfac4Smrg	    lt_exit=$?
854227702724Smrg
8543e19dfac4Smrg	    # Restore the uninstalled library and exit
8544313a12fdSmrg	    if test "$opt_mode" = relink; then
8545e19dfac4Smrg	      ( cd "$output_objdir" && \
8546e19dfac4Smrg	        $RM "${realname}T" && \
8547e19dfac4Smrg		$MV "${realname}U" "$realname" )
8548e19dfac4Smrg	    fi
8549e19dfac4Smrg
8550e19dfac4Smrg	    exit $lt_exit
8551e19dfac4Smrg	  }
8552e19dfac4Smrg	done
8553e19dfac4Smrg	IFS="$save_ifs"
8554e19dfac4Smrg
8555e19dfac4Smrg	# Restore the uninstalled library and exit
8556313a12fdSmrg	if test "$opt_mode" = relink; then
8557e19dfac4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558e19dfac4Smrg
8559e19dfac4Smrg	  if test -n "$convenience"; then
8560e19dfac4Smrg	    if test -z "$whole_archive_flag_spec"; then
8561e19dfac4Smrg	      func_show_eval '${RM}r "$gentop"'
856227702724Smrg	    fi
856327702724Smrg	  fi
856427702724Smrg
8565e19dfac4Smrg	  exit $EXIT_SUCCESS
8566e19dfac4Smrg	fi
856727702724Smrg
8568e19dfac4Smrg	# Create links to the real library.
8569e19dfac4Smrg	for linkname in $linknames; do
8570e19dfac4Smrg	  if test "$realname" != "$linkname"; then
8571e19dfac4Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572e19dfac4Smrg	  fi
8573e19dfac4Smrg	done
8574e19dfac4Smrg
8575e19dfac4Smrg	# If -module or -export-dynamic was specified, set the dlname.
8576e19dfac4Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577e19dfac4Smrg	  # On all known operating systems, these are identical.
8578e19dfac4Smrg	  dlname="$soname"
8579e19dfac4Smrg	fi
8580e19dfac4Smrg      fi
8581e19dfac4Smrg      ;;
8582e19dfac4Smrg
8583e19dfac4Smrg    obj)
8584e19dfac4Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585e19dfac4Smrg	func_warning "\`-dlopen' is ignored for objects"
8586e19dfac4Smrg      fi
8587e19dfac4Smrg
8588e19dfac4Smrg      case " $deplibs" in
8589e19dfac4Smrg      *\ -l* | *\ -L*)
8590e19dfac4Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591e19dfac4Smrg      esac
8592e19dfac4Smrg
8593e19dfac4Smrg      test -n "$rpath" && \
8594e19dfac4Smrg	func_warning "\`-rpath' is ignored for objects"
8595e19dfac4Smrg
8596e19dfac4Smrg      test -n "$xrpath" && \
8597e19dfac4Smrg	func_warning "\`-R' is ignored for objects"
8598e19dfac4Smrg
8599e19dfac4Smrg      test -n "$vinfo" && \
8600e19dfac4Smrg	func_warning "\`-version-info' is ignored for objects"
8601e19dfac4Smrg
8602e19dfac4Smrg      test -n "$release" && \
8603e19dfac4Smrg	func_warning "\`-release' is ignored for objects"
8604e19dfac4Smrg
8605e19dfac4Smrg      case $output in
8606e19dfac4Smrg      *.lo)
8607e19dfac4Smrg	test -n "$objs$old_deplibs" && \
8608e19dfac4Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609e19dfac4Smrg
8610e19dfac4Smrg	libobj=$output
8611e19dfac4Smrg	func_lo2o "$libobj"
8612e19dfac4Smrg	obj=$func_lo2o_result
8613e19dfac4Smrg	;;
8614e19dfac4Smrg      *)
8615e19dfac4Smrg	libobj=
8616e19dfac4Smrg	obj="$output"
8617e19dfac4Smrg	;;
8618e19dfac4Smrg      esac
8619e19dfac4Smrg
8620e19dfac4Smrg      # Delete the old objects.
8621e19dfac4Smrg      $opt_dry_run || $RM $obj $libobj
8622e19dfac4Smrg
8623e19dfac4Smrg      # Objects from convenience libraries.  This assumes
8624e19dfac4Smrg      # single-version convenience libraries.  Whenever we create
8625e19dfac4Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626e19dfac4Smrg      # the extraction.
8627e19dfac4Smrg      reload_conv_objs=
8628e19dfac4Smrg      gentop=
8629e19dfac4Smrg      # reload_cmds runs $LD directly, so let us get rid of
8630e19dfac4Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8631e19dfac4Smrg      # turning comma into space..
8632e19dfac4Smrg      wl=
8633e19dfac4Smrg
8634e19dfac4Smrg      if test -n "$convenience"; then
8635e19dfac4Smrg	if test -n "$whole_archive_flag_spec"; then
8636e19dfac4Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
8637313a12fdSmrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638e19dfac4Smrg	else
8639e19dfac4Smrg	  gentop="$output_objdir/${obj}x"
8640313a12fdSmrg	  func_append generated " $gentop"
8641e19dfac4Smrg
8642e19dfac4Smrg	  func_extract_archives $gentop $convenience
8643e19dfac4Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644e19dfac4Smrg	fi
8645e19dfac4Smrg      fi
864627702724Smrg
8647313a12fdSmrg      # If we're not building shared, we need to use non_pic_objs
8648313a12fdSmrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8649313a12fdSmrg
8650e19dfac4Smrg      # Create the old-style object.
8651313a12fdSmrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
865227702724Smrg
8653e19dfac4Smrg      output="$obj"
8654e19dfac4Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
865527702724Smrg
8656e19dfac4Smrg      # Exit if we aren't doing a library object file.
8657e19dfac4Smrg      if test -z "$libobj"; then
8658e19dfac4Smrg	if test -n "$gentop"; then
8659e19dfac4Smrg	  func_show_eval '${RM}r "$gentop"'
8660e19dfac4Smrg	fi
866127702724Smrg
8662e19dfac4Smrg	exit $EXIT_SUCCESS
8663e19dfac4Smrg      fi
866427702724Smrg
8665e19dfac4Smrg      if test "$build_libtool_libs" != yes; then
8666e19dfac4Smrg	if test -n "$gentop"; then
8667e19dfac4Smrg	  func_show_eval '${RM}r "$gentop"'
8668e19dfac4Smrg	fi
866927702724Smrg
8670e19dfac4Smrg	# Create an invalid libtool object if no PIC, so that we don't
8671e19dfac4Smrg	# accidentally link it into a program.
8672e19dfac4Smrg	# $show "echo timestamp > $libobj"
8673e19dfac4Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674e19dfac4Smrg	exit $EXIT_SUCCESS
8675e19dfac4Smrg      fi
867627702724Smrg
8677e19dfac4Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678e19dfac4Smrg	# Only do commands if we really have different PIC objects.
8679e19dfac4Smrg	reload_objs="$libobjs $reload_conv_objs"
8680e19dfac4Smrg	output="$libobj"
8681e19dfac4Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
868227702724Smrg      fi
868327702724Smrg
8684e19dfac4Smrg      if test -n "$gentop"; then
8685e19dfac4Smrg	func_show_eval '${RM}r "$gentop"'
8686e19dfac4Smrg      fi
868727702724Smrg
8688e19dfac4Smrg      exit $EXIT_SUCCESS
8689e19dfac4Smrg      ;;
869027702724Smrg
8691e19dfac4Smrg    prog)
8692e19dfac4Smrg      case $host in
8693e19dfac4Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8694e19dfac4Smrg	          output=$func_stripname_result.exe;;
869527702724Smrg      esac
8696e19dfac4Smrg      test -n "$vinfo" && \
8697e19dfac4Smrg	func_warning "\`-version-info' is ignored for programs"
869827702724Smrg
8699e19dfac4Smrg      test -n "$release" && \
8700e19dfac4Smrg	func_warning "\`-release' is ignored for programs"
870127702724Smrg
8702e19dfac4Smrg      test "$preload" = yes \
8703e19dfac4Smrg        && test "$dlopen_support" = unknown \
8704e19dfac4Smrg	&& test "$dlopen_self" = unknown \
8705e19dfac4Smrg	&& test "$dlopen_self_static" = unknown && \
8706e19dfac4Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
870727702724Smrg
8708e19dfac4Smrg      case $host in
8709e19dfac4Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8710e19dfac4Smrg	# On Rhapsody replace the C library is the System framework
8711313a12fdSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8712313a12fdSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
871327702724Smrg	;;
871427702724Smrg      esac
871527702724Smrg
8716e19dfac4Smrg      case $host in
8717e19dfac4Smrg      *-*-darwin*)
8718e19dfac4Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8719e19dfac4Smrg	# But is supposedly fixed on 10.4 or later (yay!).
8720e19dfac4Smrg	if test "$tagname" = CXX ; then
8721e19dfac4Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722e19dfac4Smrg	    10.[0123])
8723313a12fdSmrg	      func_append compile_command " ${wl}-bind_at_load"
8724313a12fdSmrg	      func_append finalize_command " ${wl}-bind_at_load"
8725e19dfac4Smrg	    ;;
8726e19dfac4Smrg	  esac
8727e19dfac4Smrg	fi
8728e19dfac4Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8729313a12fdSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8730313a12fdSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
873127702724Smrg	;;
873227702724Smrg      esac
873327702724Smrg
873427702724Smrg
8735e19dfac4Smrg      # move library search paths that coincide with paths to not yet
8736e19dfac4Smrg      # installed libraries to the beginning of the library search list
8737e19dfac4Smrg      new_libs=
8738e19dfac4Smrg      for path in $notinst_path; do
8739e19dfac4Smrg	case " $new_libs " in
8740e19dfac4Smrg	*" -L$path/$objdir "*) ;;
874127702724Smrg	*)
8742e19dfac4Smrg	  case " $compile_deplibs " in
8743e19dfac4Smrg	  *" -L$path/$objdir "*)
8744313a12fdSmrg	    func_append new_libs " -L$path/$objdir" ;;
8745e19dfac4Smrg	  esac
874627702724Smrg	  ;;
874727702724Smrg	esac
874827702724Smrg      done
8749e19dfac4Smrg      for deplib in $compile_deplibs; do
8750e19dfac4Smrg	case $deplib in
8751e19dfac4Smrg	-L*)
8752e19dfac4Smrg	  case " $new_libs " in
8753e19dfac4Smrg	  *" $deplib "*) ;;
8754313a12fdSmrg	  *) func_append new_libs " $deplib" ;;
8755e19dfac4Smrg	  esac
8756e19dfac4Smrg	  ;;
8757313a12fdSmrg	*) func_append new_libs " $deplib" ;;
8758e19dfac4Smrg	esac
8759e19dfac4Smrg      done
8760e19dfac4Smrg      compile_deplibs="$new_libs"
876127702724Smrg
876227702724Smrg
8763313a12fdSmrg      func_append compile_command " $compile_deplibs"
8764313a12fdSmrg      func_append finalize_command " $finalize_deplibs"
876527702724Smrg
8766e19dfac4Smrg      if test -n "$rpath$xrpath"; then
8767e19dfac4Smrg	# If the user specified any rpath flags, then add them.
8768e19dfac4Smrg	for libdir in $rpath $xrpath; do
8769e19dfac4Smrg	  # This is the magic to use -rpath.
8770e19dfac4Smrg	  case "$finalize_rpath " in
8771e19dfac4Smrg	  *" $libdir "*) ;;
8772313a12fdSmrg	  *) func_append finalize_rpath " $libdir" ;;
8773e19dfac4Smrg	  esac
8774e19dfac4Smrg	done
8775e19dfac4Smrg      fi
877627702724Smrg
8777e19dfac4Smrg      # Now hardcode the library paths
8778e19dfac4Smrg      rpath=
8779e19dfac4Smrg      hardcode_libdirs=
8780e19dfac4Smrg      for libdir in $compile_rpath $finalize_rpath; do
8781e19dfac4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8782e19dfac4Smrg	  if test -n "$hardcode_libdir_separator"; then
8783e19dfac4Smrg	    if test -z "$hardcode_libdirs"; then
8784e19dfac4Smrg	      hardcode_libdirs="$libdir"
8785e19dfac4Smrg	    else
8786e19dfac4Smrg	      # Just accumulate the unique libdirs.
8787e19dfac4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788e19dfac4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789e19dfac4Smrg		;;
8790e19dfac4Smrg	      *)
8791313a12fdSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792e19dfac4Smrg		;;
8793e19dfac4Smrg	      esac
8794e19dfac4Smrg	    fi
8795e19dfac4Smrg	  else
8796e19dfac4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8797313a12fdSmrg	    func_append rpath " $flag"
8798e19dfac4Smrg	  fi
8799e19dfac4Smrg	elif test -n "$runpath_var"; then
8800e19dfac4Smrg	  case "$perm_rpath " in
880127702724Smrg	  *" $libdir "*) ;;
8802313a12fdSmrg	  *) func_append perm_rpath " $libdir" ;;
880327702724Smrg	  esac
8804e19dfac4Smrg	fi
8805e19dfac4Smrg	case $host in
8806e19dfac4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807e19dfac4Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808e19dfac4Smrg	  case :$dllsearchpath: in
8809e19dfac4Smrg	  *":$libdir:"*) ;;
8810e19dfac4Smrg	  ::) dllsearchpath=$libdir;;
8811313a12fdSmrg	  *) func_append dllsearchpath ":$libdir";;
8812e19dfac4Smrg	  esac
8813e19dfac4Smrg	  case :$dllsearchpath: in
8814e19dfac4Smrg	  *":$testbindir:"*) ;;
8815e19dfac4Smrg	  ::) dllsearchpath=$testbindir;;
8816313a12fdSmrg	  *) func_append dllsearchpath ":$testbindir";;
8817e19dfac4Smrg	  esac
8818e19dfac4Smrg	  ;;
8819e19dfac4Smrg	esac
8820e19dfac4Smrg      done
8821e19dfac4Smrg      # Substitute the hardcoded libdirs into the rpath.
8822e19dfac4Smrg      if test -n "$hardcode_libdir_separator" &&
8823e19dfac4Smrg	 test -n "$hardcode_libdirs"; then
8824e19dfac4Smrg	libdir="$hardcode_libdirs"
8825e19dfac4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826e19dfac4Smrg      fi
8827e19dfac4Smrg      compile_rpath="$rpath"
8828e19dfac4Smrg
8829e19dfac4Smrg      rpath=
8830e19dfac4Smrg      hardcode_libdirs=
8831e19dfac4Smrg      for libdir in $finalize_rpath; do
8832e19dfac4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8833e19dfac4Smrg	  if test -n "$hardcode_libdir_separator"; then
8834e19dfac4Smrg	    if test -z "$hardcode_libdirs"; then
8835e19dfac4Smrg	      hardcode_libdirs="$libdir"
8836e19dfac4Smrg	    else
8837e19dfac4Smrg	      # Just accumulate the unique libdirs.
8838e19dfac4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839e19dfac4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840e19dfac4Smrg		;;
8841e19dfac4Smrg	      *)
8842313a12fdSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843e19dfac4Smrg		;;
8844e19dfac4Smrg	      esac
8845e19dfac4Smrg	    fi
8846e19dfac4Smrg	  else
8847e19dfac4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8848313a12fdSmrg	    func_append rpath " $flag"
8849e19dfac4Smrg	  fi
8850e19dfac4Smrg	elif test -n "$runpath_var"; then
8851e19dfac4Smrg	  case "$finalize_perm_rpath " in
885227702724Smrg	  *" $libdir "*) ;;
8853313a12fdSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
885427702724Smrg	  esac
885527702724Smrg	fi
8856e19dfac4Smrg      done
8857e19dfac4Smrg      # Substitute the hardcoded libdirs into the rpath.
8858e19dfac4Smrg      if test -n "$hardcode_libdir_separator" &&
8859e19dfac4Smrg	 test -n "$hardcode_libdirs"; then
8860e19dfac4Smrg	libdir="$hardcode_libdirs"
8861e19dfac4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862e19dfac4Smrg      fi
8863e19dfac4Smrg      finalize_rpath="$rpath"
886427702724Smrg
8865e19dfac4Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866e19dfac4Smrg	# Transform all the library objects into standard objects.
8867313a12fdSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8868313a12fdSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869e19dfac4Smrg      fi
887027702724Smrg
8871e19dfac4Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
887227702724Smrg
8873e19dfac4Smrg      # template prelinking step
8874e19dfac4Smrg      if test -n "$prelink_cmds"; then
8875e19dfac4Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876e19dfac4Smrg      fi
887727702724Smrg
8878e19dfac4Smrg      wrappers_required=yes
8879e19dfac4Smrg      case $host in
8880313a12fdSmrg      *cegcc* | *mingw32ce*)
8881313a12fdSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8882313a12fdSmrg        wrappers_required=no
8883313a12fdSmrg        ;;
8884e19dfac4Smrg      *cygwin* | *mingw* )
8885e19dfac4Smrg        if test "$build_libtool_libs" != yes; then
8886e19dfac4Smrg          wrappers_required=no
8887e19dfac4Smrg        fi
8888e19dfac4Smrg        ;;
8889e19dfac4Smrg      *)
8890e19dfac4Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891e19dfac4Smrg          wrappers_required=no
8892e19dfac4Smrg        fi
8893e19dfac4Smrg        ;;
8894e19dfac4Smrg      esac
8895e19dfac4Smrg      if test "$wrappers_required" = no; then
8896e19dfac4Smrg	# Replace the output file specification.
8897313a12fdSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898e19dfac4Smrg	link_command="$compile_command$compile_rpath"
889927702724Smrg
8900e19dfac4Smrg	# We have no uninstalled library dependencies, so finalize right now.
8901e19dfac4Smrg	exit_status=0
8902e19dfac4Smrg	func_show_eval "$link_command" 'exit_status=$?'
890327702724Smrg
8904313a12fdSmrg	if test -n "$postlink_cmds"; then
8905313a12fdSmrg	  func_to_tool_file "$output"
8906313a12fdSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8907313a12fdSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8908313a12fdSmrg	fi
8909313a12fdSmrg
8910e19dfac4Smrg	# Delete the generated files.
8911e19dfac4Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912e19dfac4Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913e19dfac4Smrg	fi
891427702724Smrg
8915e19dfac4Smrg	exit $exit_status
8916e19dfac4Smrg      fi
891727702724Smrg
8918e19dfac4Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919e19dfac4Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920e19dfac4Smrg      fi
8921e19dfac4Smrg      if test -n "$finalize_shlibpath"; then
8922e19dfac4Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923e19dfac4Smrg      fi
892427702724Smrg
8925e19dfac4Smrg      compile_var=
8926e19dfac4Smrg      finalize_var=
8927e19dfac4Smrg      if test -n "$runpath_var"; then
8928e19dfac4Smrg	if test -n "$perm_rpath"; then
8929e19dfac4Smrg	  # We should set the runpath_var.
8930e19dfac4Smrg	  rpath=
8931e19dfac4Smrg	  for dir in $perm_rpath; do
8932313a12fdSmrg	    func_append rpath "$dir:"
893327702724Smrg	  done
8934e19dfac4Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
893527702724Smrg	fi
8936e19dfac4Smrg	if test -n "$finalize_perm_rpath"; then
8937e19dfac4Smrg	  # We should set the runpath_var.
8938e19dfac4Smrg	  rpath=
8939e19dfac4Smrg	  for dir in $finalize_perm_rpath; do
8940313a12fdSmrg	    func_append rpath "$dir:"
8941e19dfac4Smrg	  done
8942e19dfac4Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943e19dfac4Smrg	fi
8944e19dfac4Smrg      fi
894527702724Smrg
8946e19dfac4Smrg      if test "$no_install" = yes; then
8947e19dfac4Smrg	# We don't need to create a wrapper script.
8948e19dfac4Smrg	link_command="$compile_var$compile_command$compile_rpath"
8949e19dfac4Smrg	# Replace the output file specification.
8950313a12fdSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951e19dfac4Smrg	# Delete the old output file.
8952e19dfac4Smrg	$opt_dry_run || $RM $output
8953e19dfac4Smrg	# Link the executable and exit
8954e19dfac4Smrg	func_show_eval "$link_command" 'exit $?'
8955313a12fdSmrg
8956313a12fdSmrg	if test -n "$postlink_cmds"; then
8957313a12fdSmrg	  func_to_tool_file "$output"
8958313a12fdSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8959313a12fdSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8960313a12fdSmrg	fi
8961313a12fdSmrg
8962e19dfac4Smrg	exit $EXIT_SUCCESS
8963e19dfac4Smrg      fi
896427702724Smrg
8965e19dfac4Smrg      if test "$hardcode_action" = relink; then
8966e19dfac4Smrg	# Fast installation is not supported
8967e19dfac4Smrg	link_command="$compile_var$compile_command$compile_rpath"
8968e19dfac4Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
896927702724Smrg
8970e19dfac4Smrg	func_warning "this platform does not like uninstalled shared libraries"
8971e19dfac4Smrg	func_warning "\`$output' will be relinked during installation"
8972e19dfac4Smrg      else
8973e19dfac4Smrg	if test "$fast_install" != no; then
8974e19dfac4Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8975e19dfac4Smrg	  if test "$fast_install" = yes; then
8976313a12fdSmrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977e19dfac4Smrg	  else
8978e19dfac4Smrg	    # fast_install is set to needless
8979e19dfac4Smrg	    relink_command=
8980e19dfac4Smrg	  fi
898127702724Smrg	else
8982e19dfac4Smrg	  link_command="$compile_var$compile_command$compile_rpath"
8983e19dfac4Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
898427702724Smrg	fi
8985e19dfac4Smrg      fi
898627702724Smrg
8987e19dfac4Smrg      # Replace the output file specification.
8988313a12fdSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
898927702724Smrg
8990e19dfac4Smrg      # Delete the old output files.
8991e19dfac4Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
899227702724Smrg
8993e19dfac4Smrg      func_show_eval "$link_command" 'exit $?'
899427702724Smrg
8995313a12fdSmrg      if test -n "$postlink_cmds"; then
8996313a12fdSmrg	func_to_tool_file "$output_objdir/$outputname"
8997313a12fdSmrg	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'`
8998313a12fdSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
8999313a12fdSmrg      fi
9000313a12fdSmrg
9001e19dfac4Smrg      # Now create the wrapper script.
9002e19dfac4Smrg      func_verbose "creating $output"
900327702724Smrg
9004e19dfac4Smrg      # Quote the relink command for shipping.
9005e19dfac4Smrg      if test -n "$relink_command"; then
9006e19dfac4Smrg	# Preserve any variables that may affect compiler behavior
9007e19dfac4Smrg	for var in $variables_saved_for_relink; do
9008e19dfac4Smrg	  if eval test -z \"\${$var+set}\"; then
9009e19dfac4Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010e19dfac4Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011e19dfac4Smrg	    relink_command="$var=; export $var; $relink_command"
9012e19dfac4Smrg	  else
9013e19dfac4Smrg	    func_quote_for_eval "$var_value"
9014e19dfac4Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015e19dfac4Smrg	  fi
9016e19dfac4Smrg	done
9017e19dfac4Smrg	relink_command="(cd `pwd`; $relink_command)"
9018313a12fdSmrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019e19dfac4Smrg      fi
902027702724Smrg
9021e19dfac4Smrg      # Only actually do things if not in dry run mode.
9022e19dfac4Smrg      $opt_dry_run || {
9023e19dfac4Smrg	# win32 will think the script is a binary if it has
9024e19dfac4Smrg	# a .exe suffix, so we strip it off here.
9025e19dfac4Smrg	case $output in
9026e19dfac4Smrg	  *.exe) func_stripname '' '.exe' "$output"
9027e19dfac4Smrg	         output=$func_stripname_result ;;
9028e19dfac4Smrg	esac
9029e19dfac4Smrg	# test for cygwin because mv fails w/o .exe extensions
903027702724Smrg	case $host in
9031e19dfac4Smrg	  *cygwin*)
9032e19dfac4Smrg	    exeext=.exe
9033e19dfac4Smrg	    func_stripname '' '.exe' "$outputname"
9034e19dfac4Smrg	    outputname=$func_stripname_result ;;
9035e19dfac4Smrg	  *) exeext= ;;
903627702724Smrg	esac
9037e19dfac4Smrg	case $host in
9038e19dfac4Smrg	  *cygwin* | *mingw* )
9039e19dfac4Smrg	    func_dirname_and_basename "$output" "" "."
9040e19dfac4Smrg	    output_name=$func_basename_result
9041e19dfac4Smrg	    output_path=$func_dirname_result
9042e19dfac4Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043e19dfac4Smrg	    cwrapper="$output_path/$output_name.exe"
9044e19dfac4Smrg	    $RM $cwrappersource $cwrapper
9045e19dfac4Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046e19dfac4Smrg
9047e19dfac4Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9048e19dfac4Smrg
9049e19dfac4Smrg	    # The wrapper executable is built using the $host compiler,
9050e19dfac4Smrg	    # because it contains $host paths and files. If cross-
9051e19dfac4Smrg	    # compiling, it, like the target executable, must be
9052e19dfac4Smrg	    # executed on the $host or under an emulation environment.
9053e19dfac4Smrg	    $opt_dry_run || {
9054e19dfac4Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055e19dfac4Smrg	      $STRIP $cwrapper
9056e19dfac4Smrg	    }
905727702724Smrg
9058e19dfac4Smrg	    # Now, create the wrapper script for func_source use:
9059e19dfac4Smrg	    func_ltwrapper_scriptname $cwrapper
9060e19dfac4Smrg	    $RM $func_ltwrapper_scriptname_result
9061e19dfac4Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062e19dfac4Smrg	    $opt_dry_run || {
9063e19dfac4Smrg	      # note: this script will not be executed, so do not chmod.
9064e19dfac4Smrg	      if test "x$build" = "x$host" ; then
9065e19dfac4Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
906627702724Smrg	      else
9067e19dfac4Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
906827702724Smrg	      fi
9069e19dfac4Smrg	    }
9070e19dfac4Smrg	  ;;
9071e19dfac4Smrg	  * )
9072e19dfac4Smrg	    $RM $output
9073e19dfac4Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
907427702724Smrg
9075e19dfac4Smrg	    func_emit_wrapper no > $output
9076e19dfac4Smrg	    chmod +x $output
907727702724Smrg	  ;;
907827702724Smrg	esac
9079e19dfac4Smrg      }
9080e19dfac4Smrg      exit $EXIT_SUCCESS
9081e19dfac4Smrg      ;;
9082e19dfac4Smrg    esac
908327702724Smrg
9084e19dfac4Smrg    # See if we need to build an old-fashioned archive.
9085e19dfac4Smrg    for oldlib in $oldlibs; do
908627702724Smrg
9087e19dfac4Smrg      if test "$build_libtool_libs" = convenience; then
9088e19dfac4Smrg	oldobjs="$libobjs_save $symfileobj"
9089e19dfac4Smrg	addlibs="$convenience"
9090e19dfac4Smrg	build_libtool_libs=no
9091e19dfac4Smrg      else
9092e19dfac4Smrg	if test "$build_libtool_libs" = module; then
9093e19dfac4Smrg	  oldobjs="$libobjs_save"
9094e19dfac4Smrg	  build_libtool_libs=no
9095e19dfac4Smrg	else
9096e19dfac4Smrg	  oldobjs="$old_deplibs $non_pic_objects"
9097e19dfac4Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
9098313a12fdSmrg	    func_append oldobjs " $symfileobj"
9099e19dfac4Smrg	  fi
9100e19dfac4Smrg	fi
9101e19dfac4Smrg	addlibs="$old_convenience"
910227702724Smrg      fi
910327702724Smrg
9104e19dfac4Smrg      if test -n "$addlibs"; then
9105e19dfac4Smrg	gentop="$output_objdir/${outputname}x"
9106313a12fdSmrg	func_append generated " $gentop"
910727702724Smrg
9108e19dfac4Smrg	func_extract_archives $gentop $addlibs
9109313a12fdSmrg	func_append oldobjs " $func_extract_archives_result"
9110e19dfac4Smrg      fi
911127702724Smrg
9112e19dfac4Smrg      # Do each command in the archive commands.
9113e19dfac4Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114e19dfac4Smrg	cmds=$old_archive_from_new_cmds
9115e19dfac4Smrg      else
911627702724Smrg
9117e19dfac4Smrg	# Add any objects from preloaded convenience libraries
9118e19dfac4Smrg	if test -n "$dlprefiles"; then
9119e19dfac4Smrg	  gentop="$output_objdir/${outputname}x"
9120313a12fdSmrg	  func_append generated " $gentop"
912127702724Smrg
9122e19dfac4Smrg	  func_extract_archives $gentop $dlprefiles
9123313a12fdSmrg	  func_append oldobjs " $func_extract_archives_result"
9124e19dfac4Smrg	fi
912527702724Smrg
9126e19dfac4Smrg	# POSIX demands no paths to be encoded in archives.  We have
9127e19dfac4Smrg	# to avoid creating archives with duplicate basenames if we
9128e19dfac4Smrg	# might have to extract them afterwards, e.g., when creating a
9129e19dfac4Smrg	# static archive out of a convenience library, or when linking
9130e19dfac4Smrg	# the entirety of a libtool archive into another (currently
9131e19dfac4Smrg	# not supported by libtool).
9132e19dfac4Smrg	if (for obj in $oldobjs
9133e19dfac4Smrg	    do
9134e19dfac4Smrg	      func_basename "$obj"
9135e19dfac4Smrg	      $ECHO "$func_basename_result"
9136e19dfac4Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137e19dfac4Smrg	  :
9138e19dfac4Smrg	else
9139313a12fdSmrg	  echo "copying selected object files to avoid basename conflicts..."
9140e19dfac4Smrg	  gentop="$output_objdir/${outputname}x"
9141313a12fdSmrg	  func_append generated " $gentop"
9142e19dfac4Smrg	  func_mkdir_p "$gentop"
9143e19dfac4Smrg	  save_oldobjs=$oldobjs
9144e19dfac4Smrg	  oldobjs=
9145e19dfac4Smrg	  counter=1
9146e19dfac4Smrg	  for obj in $save_oldobjs
9147e19dfac4Smrg	  do
9148e19dfac4Smrg	    func_basename "$obj"
9149e19dfac4Smrg	    objbase="$func_basename_result"
9150e19dfac4Smrg	    case " $oldobjs " in
9151e19dfac4Smrg	    " ") oldobjs=$obj ;;
9152e19dfac4Smrg	    *[\ /]"$objbase "*)
9153e19dfac4Smrg	      while :; do
9154e19dfac4Smrg		# Make sure we don't pick an alternate name that also
9155e19dfac4Smrg		# overlaps.
9156e19dfac4Smrg		newobj=lt$counter-$objbase
9157e19dfac4Smrg		func_arith $counter + 1
9158e19dfac4Smrg		counter=$func_arith_result
9159e19dfac4Smrg		case " $oldobjs " in
9160e19dfac4Smrg		*[\ /]"$newobj "*) ;;
9161e19dfac4Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162e19dfac4Smrg		esac
9163e19dfac4Smrg	      done
9164e19dfac4Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9165313a12fdSmrg	      func_append oldobjs " $gentop/$newobj"
9166e19dfac4Smrg	      ;;
9167313a12fdSmrg	    *) func_append oldobjs " $obj" ;;
9168e19dfac4Smrg	    esac
916927702724Smrg	  done
917027702724Smrg	fi
9171313a12fdSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9172313a12fdSmrg	tool_oldlib=$func_to_tool_file_result
9173e19dfac4Smrg	eval cmds=\"$old_archive_cmds\"
917427702724Smrg
9175e19dfac4Smrg	func_len " $cmds"
9176e19dfac4Smrg	len=$func_len_result
9177e19dfac4Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178e19dfac4Smrg	  cmds=$old_archive_cmds
9179313a12fdSmrg	elif test -n "$archiver_list_spec"; then
9180313a12fdSmrg	  func_verbose "using command file archive linking..."
9181313a12fdSmrg	  for obj in $oldobjs
9182313a12fdSmrg	  do
9183313a12fdSmrg	    func_to_tool_file "$obj"
9184313a12fdSmrg	    $ECHO "$func_to_tool_file_result"
9185313a12fdSmrg	  done > $output_objdir/$libname.libcmd
9186313a12fdSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
9187313a12fdSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9188313a12fdSmrg	  cmds=$old_archive_cmds
9189e19dfac4Smrg	else
9190e19dfac4Smrg	  # the command line is too long to link in one step, link in parts
9191e19dfac4Smrg	  func_verbose "using piecewise archive linking..."
9192e19dfac4Smrg	  save_RANLIB=$RANLIB
9193e19dfac4Smrg	  RANLIB=:
9194e19dfac4Smrg	  objlist=
9195e19dfac4Smrg	  concat_cmds=
9196e19dfac4Smrg	  save_oldobjs=$oldobjs
9197e19dfac4Smrg	  oldobjs=
9198e19dfac4Smrg	  # Is there a better way of finding the last object in the list?
9199e19dfac4Smrg	  for obj in $save_oldobjs
9200e19dfac4Smrg	  do
9201e19dfac4Smrg	    last_oldobj=$obj
9202e19dfac4Smrg	  done
9203e19dfac4Smrg	  eval test_cmds=\"$old_archive_cmds\"
9204e19dfac4Smrg	  func_len " $test_cmds"
9205e19dfac4Smrg	  len0=$func_len_result
9206e19dfac4Smrg	  len=$len0
9207e19dfac4Smrg	  for obj in $save_oldobjs
9208e19dfac4Smrg	  do
9209e19dfac4Smrg	    func_len " $obj"
9210e19dfac4Smrg	    func_arith $len + $func_len_result
9211e19dfac4Smrg	    len=$func_arith_result
9212e19dfac4Smrg	    func_append objlist " $obj"
9213e19dfac4Smrg	    if test "$len" -lt "$max_cmd_len"; then
9214e19dfac4Smrg	      :
9215e19dfac4Smrg	    else
9216e19dfac4Smrg	      # the above command should be used before it gets too long
9217e19dfac4Smrg	      oldobjs=$objlist
9218e19dfac4Smrg	      if test "$obj" = "$last_oldobj" ; then
9219e19dfac4Smrg		RANLIB=$save_RANLIB
9220e19dfac4Smrg	      fi
9221e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222e19dfac4Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223e19dfac4Smrg	      objlist=
9224e19dfac4Smrg	      len=$len0
9225e19dfac4Smrg	    fi
9226e19dfac4Smrg	  done
9227e19dfac4Smrg	  RANLIB=$save_RANLIB
9228e19dfac4Smrg	  oldobjs=$objlist
9229e19dfac4Smrg	  if test "X$oldobjs" = "X" ; then
9230e19dfac4Smrg	    eval cmds=\"\$concat_cmds\"
9231e19dfac4Smrg	  else
9232e19dfac4Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233e19dfac4Smrg	  fi
9234e19dfac4Smrg	fi
9235e19dfac4Smrg      fi
9236e19dfac4Smrg      func_execute_cmds "$cmds" 'exit $?'
923727702724Smrg    done
923827702724Smrg
9239e19dfac4Smrg    test -n "$generated" && \
9240e19dfac4Smrg      func_show_eval "${RM}r$generated"
924127702724Smrg
9242e19dfac4Smrg    # Now create the libtool archive.
9243e19dfac4Smrg    case $output in
9244e19dfac4Smrg    *.la)
9245e19dfac4Smrg      old_library=
9246e19dfac4Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247e19dfac4Smrg      func_verbose "creating $output"
924827702724Smrg
9249e19dfac4Smrg      # Preserve any variables that may affect compiler behavior
9250e19dfac4Smrg      for var in $variables_saved_for_relink; do
9251e19dfac4Smrg	if eval test -z \"\${$var+set}\"; then
9252e19dfac4Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253e19dfac4Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254e19dfac4Smrg	  relink_command="$var=; export $var; $relink_command"
925527702724Smrg	else
9256e19dfac4Smrg	  func_quote_for_eval "$var_value"
9257e19dfac4Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
925827702724Smrg	fi
9259e19dfac4Smrg      done
9260e19dfac4Smrg      # Quote the link command for shipping.
9261e19dfac4Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9262313a12fdSmrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263e19dfac4Smrg      if test "$hardcode_automatic" = yes ; then
9264e19dfac4Smrg	relink_command=
9265e19dfac4Smrg      fi
926627702724Smrg
9267e19dfac4Smrg      # Only create the output if not a dry run.
9268e19dfac4Smrg      $opt_dry_run || {
9269e19dfac4Smrg	for installed in no yes; do
9270e19dfac4Smrg	  if test "$installed" = yes; then
9271e19dfac4Smrg	    if test -z "$install_libdir"; then
9272e19dfac4Smrg	      break
9273e19dfac4Smrg	    fi
9274e19dfac4Smrg	    output="$output_objdir/$outputname"i
9275e19dfac4Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9276e19dfac4Smrg	    newdependency_libs=
9277e19dfac4Smrg	    for deplib in $dependency_libs; do
9278e19dfac4Smrg	      case $deplib in
9279e19dfac4Smrg	      *.la)
9280e19dfac4Smrg		func_basename "$deplib"
9281e19dfac4Smrg		name="$func_basename_result"
9282313a12fdSmrg		func_resolve_sysroot "$deplib"
9283313a12fdSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284e19dfac4Smrg		test -z "$libdir" && \
9285e19dfac4Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9286313a12fdSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9287313a12fdSmrg		;;
9288313a12fdSmrg	      -L*)
9289313a12fdSmrg		func_stripname -L '' "$deplib"
9290313a12fdSmrg		func_replace_sysroot "$func_stripname_result"
9291313a12fdSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292e19dfac4Smrg		;;
9293313a12fdSmrg	      -R*)
9294313a12fdSmrg		func_stripname -R '' "$deplib"
9295313a12fdSmrg		func_replace_sysroot "$func_stripname_result"
9296313a12fdSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
9297313a12fdSmrg		;;
9298313a12fdSmrg	      *) func_append newdependency_libs " $deplib" ;;
9299e19dfac4Smrg	      esac
9300e19dfac4Smrg	    done
9301e19dfac4Smrg	    dependency_libs="$newdependency_libs"
9302e19dfac4Smrg	    newdlfiles=
9303e19dfac4Smrg
9304e19dfac4Smrg	    for lib in $dlfiles; do
9305e19dfac4Smrg	      case $lib in
9306e19dfac4Smrg	      *.la)
9307e19dfac4Smrg	        func_basename "$lib"
9308e19dfac4Smrg		name="$func_basename_result"
9309e19dfac4Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310e19dfac4Smrg		test -z "$libdir" && \
9311e19dfac4Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312313a12fdSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313e19dfac4Smrg		;;
9314313a12fdSmrg	      *) func_append newdlfiles " $lib" ;;
9315e19dfac4Smrg	      esac
9316e19dfac4Smrg	    done
9317e19dfac4Smrg	    dlfiles="$newdlfiles"
9318e19dfac4Smrg	    newdlprefiles=
9319e19dfac4Smrg	    for lib in $dlprefiles; do
9320e19dfac4Smrg	      case $lib in
9321e19dfac4Smrg	      *.la)
9322e19dfac4Smrg		# Only pass preopened files to the pseudo-archive (for
9323e19dfac4Smrg		# eventual linking with the app. that links it) if we
9324e19dfac4Smrg		# didn't already link the preopened objects directly into
9325e19dfac4Smrg		# the library:
9326e19dfac4Smrg		func_basename "$lib"
9327e19dfac4Smrg		name="$func_basename_result"
9328e19dfac4Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329e19dfac4Smrg		test -z "$libdir" && \
9330e19dfac4Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9331313a12fdSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332e19dfac4Smrg		;;
9333e19dfac4Smrg	      esac
9334e19dfac4Smrg	    done
9335e19dfac4Smrg	    dlprefiles="$newdlprefiles"
9336e19dfac4Smrg	  else
9337e19dfac4Smrg	    newdlfiles=
9338e19dfac4Smrg	    for lib in $dlfiles; do
9339e19dfac4Smrg	      case $lib in
9340e19dfac4Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341e19dfac4Smrg		*) abs=`pwd`"/$lib" ;;
9342e19dfac4Smrg	      esac
9343313a12fdSmrg	      func_append newdlfiles " $abs"
9344e19dfac4Smrg	    done
9345e19dfac4Smrg	    dlfiles="$newdlfiles"
9346e19dfac4Smrg	    newdlprefiles=
9347e19dfac4Smrg	    for lib in $dlprefiles; do
9348e19dfac4Smrg	      case $lib in
9349e19dfac4Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350e19dfac4Smrg		*) abs=`pwd`"/$lib" ;;
9351e19dfac4Smrg	      esac
9352313a12fdSmrg	      func_append newdlprefiles " $abs"
9353e19dfac4Smrg	    done
9354e19dfac4Smrg	    dlprefiles="$newdlprefiles"
9355e19dfac4Smrg	  fi
9356e19dfac4Smrg	  $RM $output
9357e19dfac4Smrg	  # place dlname in correct position for cygwin
9358313a12fdSmrg	  # In fact, it would be nice if we could use this code for all target
9359313a12fdSmrg	  # systems that can't hard-code library paths into their executables
9360313a12fdSmrg	  # and that have no shared library path variable independent of PATH,
9361313a12fdSmrg	  # but it turns out we can't easily determine that from inspecting
9362313a12fdSmrg	  # libtool variables, so we have to hard-code the OSs to which it
9363313a12fdSmrg	  # applies here; at the moment, that means platforms that use the PE
9364313a12fdSmrg	  # object format with DLL files.  See the long comment at the top of
9365313a12fdSmrg	  # tests/bindir.at for full details.
9366e19dfac4Smrg	  tdlname=$dlname
9367e19dfac4Smrg	  case $host,$output,$installed,$module,$dlname in
9368313a12fdSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9369313a12fdSmrg	      # If a -bindir argument was supplied, place the dll there.
9370313a12fdSmrg	      if test "x$bindir" != x ;
9371313a12fdSmrg	      then
9372313a12fdSmrg		func_relative_path "$install_libdir" "$bindir"
9373313a12fdSmrg		tdlname=$func_relative_path_result$dlname
9374313a12fdSmrg	      else
9375313a12fdSmrg		# Otherwise fall back on heuristic.
9376313a12fdSmrg		tdlname=../bin/$dlname
9377313a12fdSmrg	      fi
9378313a12fdSmrg	      ;;
9379e19dfac4Smrg	  esac
9380e19dfac4Smrg	  $ECHO > $output "\
9381e19dfac4Smrg# $outputname - a libtool library file
9382e19dfac4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383e19dfac4Smrg#
9384e19dfac4Smrg# Please DO NOT delete this file!
9385e19dfac4Smrg# It is necessary for linking the library.
938627702724Smrg
9387e19dfac4Smrg# The name that we can dlopen(3).
9388e19dfac4Smrgdlname='$tdlname'
938927702724Smrg
9390e19dfac4Smrg# Names of this library.
9391e19dfac4Smrglibrary_names='$library_names'
939227702724Smrg
9393e19dfac4Smrg# The name of the static archive.
9394e19dfac4Smrgold_library='$old_library'
939527702724Smrg
9396e19dfac4Smrg# Linker flags that can not go in dependency_libs.
9397e19dfac4Smrginherited_linker_flags='$new_inherited_linker_flags'
939827702724Smrg
9399e19dfac4Smrg# Libraries that this one depends upon.
9400e19dfac4Smrgdependency_libs='$dependency_libs'
940127702724Smrg
9402e19dfac4Smrg# Names of additional weak libraries provided by this library
9403e19dfac4Smrgweak_library_names='$weak_libs'
940427702724Smrg
9405e19dfac4Smrg# Version information for $libname.
9406e19dfac4Smrgcurrent=$current
9407e19dfac4Smrgage=$age
9408e19dfac4Smrgrevision=$revision
940927702724Smrg
9410e19dfac4Smrg# Is this an already installed library?
9411e19dfac4Smrginstalled=$installed
941227702724Smrg
9413e19dfac4Smrg# Should we warn about portability when linking against -modules?
9414e19dfac4Smrgshouldnotlink=$module
941527702724Smrg
9416e19dfac4Smrg# Files to dlopen/dlpreopen
9417e19dfac4Smrgdlopen='$dlfiles'
9418e19dfac4Smrgdlpreopen='$dlprefiles'
941927702724Smrg
9420e19dfac4Smrg# Directory that this library needs to be installed in:
9421e19dfac4Smrglibdir='$install_libdir'"
9422e19dfac4Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423e19dfac4Smrg	    $ECHO >> $output "\
9424e19dfac4Smrgrelink_command=\"$relink_command\""
9425e19dfac4Smrg	  fi
9426e19dfac4Smrg	done
9427e19dfac4Smrg      }
942827702724Smrg
9429e19dfac4Smrg      # Do a symbolic link so that the libtool archive can be found in
9430e19dfac4Smrg      # LD_LIBRARY_PATH before the program is installed.
9431e19dfac4Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432e19dfac4Smrg      ;;
9433e19dfac4Smrg    esac
9434e19dfac4Smrg    exit $EXIT_SUCCESS
9435e19dfac4Smrg}
943627702724Smrg
9437313a12fdSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438e19dfac4Smrg    func_mode_link ${1+"$@"}
943927702724Smrg
944027702724Smrg
9441e19dfac4Smrg# func_mode_uninstall arg...
9442e19dfac4Smrgfunc_mode_uninstall ()
9443e19dfac4Smrg{
9444e19dfac4Smrg    $opt_debug
9445e19dfac4Smrg    RM="$nonopt"
944627702724Smrg    files=
944727702724Smrg    rmforce=
944827702724Smrg    exit_status=0
944927702724Smrg
945027702724Smrg    # This variable tells wrapper scripts just to set variables rather
945127702724Smrg    # than running their programs.
945227702724Smrg    libtool_install_magic="$magic"
945327702724Smrg
945427702724Smrg    for arg
945527702724Smrg    do
945627702724Smrg      case $arg in
9457313a12fdSmrg      -f) func_append RM " $arg"; rmforce=yes ;;
9458313a12fdSmrg      -*) func_append RM " $arg" ;;
9459313a12fdSmrg      *) func_append files " $arg" ;;
946027702724Smrg      esac
946127702724Smrg    done
946227702724Smrg
9463e19dfac4Smrg    test -z "$RM" && \
9464e19dfac4Smrg      func_fatal_help "you must specify an RM program"
946527702724Smrg
946627702724Smrg    rmdirs=
946727702724Smrg
946827702724Smrg    for file in $files; do
9469e19dfac4Smrg      func_dirname "$file" "" "."
9470e19dfac4Smrg      dir="$func_dirname_result"
9471e19dfac4Smrg      if test "X$dir" = X.; then
9472313a12fdSmrg	odir="$objdir"
947327702724Smrg      else
9474313a12fdSmrg	odir="$dir/$objdir"
947527702724Smrg      fi
9476e19dfac4Smrg      func_basename "$file"
9477e19dfac4Smrg      name="$func_basename_result"
9478313a12fdSmrg      test "$opt_mode" = uninstall && odir="$dir"
947927702724Smrg
9480313a12fdSmrg      # Remember odir for removal later, being careful to avoid duplicates
9481313a12fdSmrg      if test "$opt_mode" = clean; then
948227702724Smrg	case " $rmdirs " in
9483313a12fdSmrg	  *" $odir "*) ;;
9484313a12fdSmrg	  *) func_append rmdirs " $odir" ;;
948527702724Smrg	esac
948627702724Smrg      fi
948727702724Smrg
948827702724Smrg      # Don't error if the file doesn't exist and rm -f was used.
9489e19dfac4Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490e19dfac4Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491e19dfac4Smrg	 test -f "$file"; then
949227702724Smrg	:
949327702724Smrg      elif test -d "$file"; then
949427702724Smrg	exit_status=1
949527702724Smrg	continue
949627702724Smrg      elif test "$rmforce" = yes; then
949727702724Smrg	continue
949827702724Smrg      fi
949927702724Smrg
950027702724Smrg      rmfiles="$file"
950127702724Smrg
950227702724Smrg      case $name in
950327702724Smrg      *.la)
950427702724Smrg	# Possibly a libtool archive, so verify it.
9505e19dfac4Smrg	if func_lalib_p "$file"; then
9506e19dfac4Smrg	  func_source $dir/$name
950727702724Smrg
950827702724Smrg	  # Delete the libtool libraries and symlinks.
950927702724Smrg	  for n in $library_names; do
9510313a12fdSmrg	    func_append rmfiles " $odir/$n"
951127702724Smrg	  done
9512313a12fdSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
951327702724Smrg
9514313a12fdSmrg	  case "$opt_mode" in
951527702724Smrg	  clean)
9516313a12fdSmrg	    case " $library_names " in
951727702724Smrg	    *" $dlname "*) ;;
9518313a12fdSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
951927702724Smrg	    esac
9520313a12fdSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
952127702724Smrg	    ;;
952227702724Smrg	  uninstall)
952327702724Smrg	    if test -n "$library_names"; then
952427702724Smrg	      # Do each command in the postuninstall commands.
9525e19dfac4Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
952627702724Smrg	    fi
952727702724Smrg
952827702724Smrg	    if test -n "$old_library"; then
952927702724Smrg	      # Do each command in the old_postuninstall commands.
9530e19dfac4Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
953127702724Smrg	    fi
953227702724Smrg	    # FIXME: should reinstall the best remaining shared library.
953327702724Smrg	    ;;
953427702724Smrg	  esac
953527702724Smrg	fi
953627702724Smrg	;;
953727702724Smrg
953827702724Smrg      *.lo)
953927702724Smrg	# Possibly a libtool object, so verify it.
9540e19dfac4Smrg	if func_lalib_p "$file"; then
954127702724Smrg
954227702724Smrg	  # Read the .lo file
9543e19dfac4Smrg	  func_source $dir/$name
954427702724Smrg
954527702724Smrg	  # Add PIC object to the list of files to remove.
9546e19dfac4Smrg	  if test -n "$pic_object" &&
9547e19dfac4Smrg	     test "$pic_object" != none; then
9548313a12fdSmrg	    func_append rmfiles " $dir/$pic_object"
954927702724Smrg	  fi
955027702724Smrg
955127702724Smrg	  # Add non-PIC object to the list of files to remove.
9552e19dfac4Smrg	  if test -n "$non_pic_object" &&
9553e19dfac4Smrg	     test "$non_pic_object" != none; then
9554313a12fdSmrg	    func_append rmfiles " $dir/$non_pic_object"
955527702724Smrg	  fi
955627702724Smrg	fi
955727702724Smrg	;;
955827702724Smrg
955927702724Smrg      *)
9560313a12fdSmrg	if test "$opt_mode" = clean ; then
956127702724Smrg	  noexename=$name
956227702724Smrg	  case $file in
956327702724Smrg	  *.exe)
9564e19dfac4Smrg	    func_stripname '' '.exe' "$file"
9565e19dfac4Smrg	    file=$func_stripname_result
9566e19dfac4Smrg	    func_stripname '' '.exe' "$name"
9567e19dfac4Smrg	    noexename=$func_stripname_result
956827702724Smrg	    # $file with .exe has already been added to rmfiles,
956927702724Smrg	    # add $file without .exe
9570313a12fdSmrg	    func_append rmfiles " $file"
957127702724Smrg	    ;;
957227702724Smrg	  esac
957327702724Smrg	  # Do a test to see if this is a libtool program.
9574e19dfac4Smrg	  if func_ltwrapper_p "$file"; then
9575e19dfac4Smrg	    if func_ltwrapper_executable_p "$file"; then
9576e19dfac4Smrg	      func_ltwrapper_scriptname "$file"
9577e19dfac4Smrg	      relink_command=
9578e19dfac4Smrg	      func_source $func_ltwrapper_scriptname_result
9579313a12fdSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580e19dfac4Smrg	    else
9581e19dfac4Smrg	      relink_command=
9582e19dfac4Smrg	      func_source $dir/$noexename
9583e19dfac4Smrg	    fi
958427702724Smrg
958527702724Smrg	    # note $name still contains .exe if it was in $file originally
958627702724Smrg	    # as does the version of $file that was added into $rmfiles
9587313a12fdSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
958827702724Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
9589313a12fdSmrg	      func_append rmfiles " $odir/lt-$name"
959027702724Smrg	    fi
959127702724Smrg	    if test "X$noexename" != "X$name" ; then
9592313a12fdSmrg	      func_append rmfiles " $odir/lt-${noexename}.c"
959327702724Smrg	    fi
959427702724Smrg	  fi
959527702724Smrg	fi
959627702724Smrg	;;
959727702724Smrg      esac
9598e19dfac4Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
959927702724Smrg    done
960027702724Smrg
960127702724Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
960227702724Smrg    for dir in $rmdirs; do
960327702724Smrg      if test -d "$dir"; then
9604e19dfac4Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
960527702724Smrg      fi
960627702724Smrg    done
960727702724Smrg
960827702724Smrg    exit $exit_status
9609e19dfac4Smrg}
961027702724Smrg
9611313a12fdSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612e19dfac4Smrg    func_mode_uninstall ${1+"$@"}
961327702724Smrg
9614313a12fdSmrgtest -z "$opt_mode" && {
9615e19dfac4Smrg  help="$generic_help"
9616e19dfac4Smrg  func_fatal_help "you must specify a MODE"
9617e19dfac4Smrg}
9618e19dfac4Smrg
9619e19dfac4Smrgtest -z "$exec_cmd" && \
9620313a12fdSmrg  func_fatal_help "invalid operation mode \`$opt_mode'"
962127702724Smrg
962227702724Smrgif test -n "$exec_cmd"; then
9623e19dfac4Smrg  eval exec "$exec_cmd"
962427702724Smrg  exit $EXIT_FAILURE
962527702724Smrgfi
962627702724Smrg
9627e19dfac4Smrgexit $exit_status
962827702724Smrg
962927702724Smrg
963027702724Smrg# The TAGs below are defined such that we never get into a situation
963127702724Smrg# in which we disable both kinds of libraries.  Given conflicting
963227702724Smrg# choices, we go for a static library, that is the most portable,
963327702724Smrg# since we can't tell whether shared libraries were disabled because
963427702724Smrg# the user asked for that or because the platform doesn't support
963527702724Smrg# them.  This is particularly important on AIX, because we don't
963627702724Smrg# support having both static and shared libraries enabled at the same
963727702724Smrg# time on that platform, so we default to a shared-only configuration.
963827702724Smrg# If a disable-shared tag is given, we'll fallback to a static-only
963927702724Smrg# configuration.  But we'll never go from static-only to shared-only.
964027702724Smrg
964127702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642e19dfac4Smrgbuild_libtool_libs=no
9643e19dfac4Smrgbuild_old_libs=yes
964427702724Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
964527702724Smrg
964627702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647e19dfac4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
964827702724Smrg# ### END LIBTOOL TAG CONFIG: disable-static
964927702724Smrg
965027702724Smrg# Local Variables:
965127702724Smrg# mode:shell-script
965227702724Smrg# sh-indentation:2
965327702724Smrg# End:
9654e19dfac4Smrg# vi:sw=2
9655e19dfac4Smrg
9656