ltmain.sh revision a73423d7
1b3e38ee4Smrg
2a73423d7Smrg# libtool (GNU libtool) 2.4.2
3b3e38ee4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4b3e38ee4Smrg
5a73423d7Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
6a73423d7Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7b3e38ee4Smrg# This is free software; see the source for copying conditions.  There is NO
8b3e38ee4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9b3e38ee4Smrg
10b3e38ee4Smrg# GNU Libtool is free software; you can redistribute it and/or modify
1150806d53Smrg# it under the terms of the GNU General Public License as published by
1250806d53Smrg# the Free Software Foundation; either version 2 of the License, or
1350806d53Smrg# (at your option) any later version.
1450806d53Smrg#
15b3e38ee4Smrg# As a special exception to the GNU General Public License,
16b3e38ee4Smrg# if you distribute this file as part of a program or library that
17b3e38ee4Smrg# is built using GNU Libtool, you may include this file under the
18b3e38ee4Smrg# same distribution terms that you use for the rest of that program.
19b3e38ee4Smrg#
20b3e38ee4Smrg# GNU Libtool is distributed in the hope that it will be useful, but
2150806d53Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
2250806d53Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2350806d53Smrg# General Public License for more details.
2450806d53Smrg#
2550806d53Smrg# You should have received a copy of the GNU General Public License
26b3e38ee4Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27b3e38ee4Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28b3e38ee4Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29b3e38ee4Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30a18ebfb2Smrg
31b3e38ee4Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32b3e38ee4Smrg#
33b3e38ee4Smrg# Provide generalized library-building support services.
34b3e38ee4Smrg#
35a73423d7Smrg#       --config             show all configuration variables
36a73423d7Smrg#       --debug              enable verbose shell tracing
37a73423d7Smrg#   -n, --dry-run            display commands without modifying any files
38a73423d7Smrg#       --features           display basic configuration information and exit
39a73423d7Smrg#       --mode=MODE          use operation mode MODE
40a73423d7Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
41a73423d7Smrg#       --quiet, --silent    don't print informational messages
42a73423d7Smrg#       --no-quiet, --no-silent
43a73423d7Smrg#                            print informational messages (default)
44a73423d7Smrg#       --no-warn            don't display warning messages
45a73423d7Smrg#       --tag=TAG            use configuration variables from tag TAG
46a73423d7Smrg#   -v, --verbose            print more informational messages than default
47a73423d7Smrg#       --no-verbose         don't print the extra informational messages
48a73423d7Smrg#       --version            print version information
49a73423d7Smrg#   -h, --help, --help-all   print short, long, or detailed help message
50b3e38ee4Smrg#
51b3e38ee4Smrg# MODE must be one of the following:
52b3e38ee4Smrg#
53a73423d7Smrg#         clean              remove files from the build directory
54a73423d7Smrg#         compile            compile a source file into a libtool object
55a73423d7Smrg#         execute            automatically set library path, then run a program
56a73423d7Smrg#         finish             complete the installation of libtool libraries
57a73423d7Smrg#         install            install libraries or executables
58a73423d7Smrg#         link               create a library or an executable
59a73423d7Smrg#         uninstall          remove libraries from an installed directory
60b3e38ee4Smrg#
61a73423d7Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
62a73423d7Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63b3e38ee4Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64b3e38ee4Smrg#
65b3e38ee4Smrg# When reporting a bug, please describe a test case to reproduce it and
66b3e38ee4Smrg# include the following information:
67b3e38ee4Smrg#
68a73423d7Smrg#         host-triplet:	$host
69a73423d7Smrg#         shell:		$SHELL
70a73423d7Smrg#         compiler:		$LTCC
71a73423d7Smrg#         compiler flags:		$LTCFLAGS
72a73423d7Smrg#         linker:		$LD (gnu? $with_gnu_ld)
73a73423d7Smrg#         $progname:	(GNU libtool) 2.4.2
74a73423d7Smrg#         automake:	$automake_version
75a73423d7Smrg#         autoconf:	$autoconf_version
76b3e38ee4Smrg#
77b3e38ee4Smrg# Report bugs to <bug-libtool@gnu.org>.
78a73423d7Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
79a73423d7Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
8050806d53Smrg
81a73423d7SmrgPROGRAM=libtool
8250806d53SmrgPACKAGE=libtool
83a73423d7SmrgVERSION=2.4.2
84b3e38ee4SmrgTIMESTAMP=""
85a73423d7Smrgpackage_revision=1.3337
8650806d53Smrg
87b3e38ee4Smrg# Be Bourne compatible
8850806d53Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8950806d53Smrg  emulate sh
9050806d53Smrg  NULLCMD=:
9150806d53Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
9250806d53Smrg  # is contrary to our usage.  Disable this feature.
9350806d53Smrg  alias -g '${1+"$@"}'='"$@"'
9450806d53Smrg  setopt NO_GLOB_SUBST
9550806d53Smrgelse
9650806d53Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
9750806d53Smrgfi
987965d9acSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
997965d9acSmrgDUALCASE=1; export DUALCASE # for MKS sh
10050806d53Smrg
101a73423d7Smrg# A function that is used when there is no print builtin or printf.
102a73423d7Smrgfunc_fallback_echo ()
103a73423d7Smrg{
104a73423d7Smrg  eval 'cat <<_LTECHO_EOF
105a73423d7Smrg$1
106a73423d7Smrg_LTECHO_EOF'
107a73423d7Smrg}
108a73423d7Smrg
109b3e38ee4Smrg# NLS nuisances: We save the old values to restore during execute mode.
110b3e38ee4Smrglt_user_locale=
111b3e38ee4Smrglt_safe_locale=
1127965d9acSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
11350806d53Smrgdo
11450806d53Smrg  eval "if test \"\${$lt_var+set}\" = set; then
115b3e38ee4Smrg          save_$lt_var=\$$lt_var
116b3e38ee4Smrg          $lt_var=C
1177965d9acSmrg	  export $lt_var
118b3e38ee4Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119b3e38ee4Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1207965d9acSmrg	fi"
12150806d53Smrgdone
122a73423d7SmrgLC_ALL=C
123a73423d7SmrgLANGUAGE=C
124a73423d7Smrgexport LANGUAGE LC_ALL
12550806d53Smrg
126b3e38ee4Smrg$lt_unset CDPATH
127b3e38ee4Smrg
128b3e38ee4Smrg
129a73423d7Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
130a73423d7Smrg# is ksh but when the shell is invoked as "sh" and the current value of
131a73423d7Smrg# the _XPG environment variable is not equal to 1 (one), the special
132a73423d7Smrg# positional parameter $0, within a function call, is the name of the
133a73423d7Smrg# function.
134a73423d7Smrgprogpath="$0"
135b3e38ee4Smrg
136b3e38ee4Smrg
137b3e38ee4Smrg
138b3e38ee4Smrg: ${CP="cp -f"}
139a73423d7Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140b3e38ee4Smrg: ${MAKE="make"}
141b3e38ee4Smrg: ${MKDIR="mkdir"}
142b3e38ee4Smrg: ${MV="mv -f"}
143b3e38ee4Smrg: ${RM="rm -f"}
144b3e38ee4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145b3e38ee4Smrg: ${Xsed="$SED -e 1s/^X//"}
146b3e38ee4Smrg
147b3e38ee4Smrg# Global variables:
148b3e38ee4SmrgEXIT_SUCCESS=0
149b3e38ee4SmrgEXIT_FAILURE=1
150b3e38ee4SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151b3e38ee4SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152b3e38ee4Smrg
153b3e38ee4Smrgexit_status=$EXIT_SUCCESS
1547965d9acSmrg
15550806d53Smrg# Make sure IFS has a sensible default
15650806d53Smrglt_nl='
15750806d53Smrg'
15850806d53SmrgIFS=" 	$lt_nl"
15950806d53Smrg
160b3e38ee4Smrgdirname="s,/[^/]*$,,"
161b3e38ee4Smrgbasename="s,^.*/,,"
162b3e38ee4Smrg
163a73423d7Smrg# func_dirname file append nondir_replacement
164a73423d7Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
165a73423d7Smrg# otherwise set result to NONDIR_REPLACEMENT.
166a73423d7Smrgfunc_dirname ()
167a73423d7Smrg{
168a73423d7Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
169a73423d7Smrg    if test "X$func_dirname_result" = "X${1}"; then
170a73423d7Smrg      func_dirname_result="${3}"
171a73423d7Smrg    else
172a73423d7Smrg      func_dirname_result="$func_dirname_result${2}"
173a73423d7Smrg    fi
174a73423d7Smrg} # func_dirname may be replaced by extended shell implementation
175a73423d7Smrg
176a73423d7Smrg
177a73423d7Smrg# func_basename file
178a73423d7Smrgfunc_basename ()
179a73423d7Smrg{
180a73423d7Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
181a73423d7Smrg} # func_basename may be replaced by extended shell implementation
182a73423d7Smrg
183a73423d7Smrg
184b3e38ee4Smrg# func_dirname_and_basename file append nondir_replacement
185b3e38ee4Smrg# perform func_basename and func_dirname in a single function
186b3e38ee4Smrg# call:
187b3e38ee4Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
188b3e38ee4Smrg#             add APPEND to the result, otherwise set result
189b3e38ee4Smrg#             to NONDIR_REPLACEMENT.
190b3e38ee4Smrg#             value returned in "$func_dirname_result"
191b3e38ee4Smrg#   basename: Compute filename of FILE.
192b3e38ee4Smrg#             value retuned in "$func_basename_result"
193b3e38ee4Smrg# Implementation must be kept synchronized with func_dirname
194b3e38ee4Smrg# and func_basename. For efficiency, we do not delegate to
195b3e38ee4Smrg# those functions but instead duplicate the functionality here.
196b3e38ee4Smrgfunc_dirname_and_basename ()
197b3e38ee4Smrg{
198a73423d7Smrg    # Extract subdirectory from the argument.
199a73423d7Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
200a73423d7Smrg    if test "X$func_dirname_result" = "X${1}"; then
201a73423d7Smrg      func_dirname_result="${3}"
202a73423d7Smrg    else
203a73423d7Smrg      func_dirname_result="$func_dirname_result${2}"
204a73423d7Smrg    fi
205a73423d7Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
206a73423d7Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
207a73423d7Smrg
208a73423d7Smrg
209a73423d7Smrg# func_stripname prefix suffix name
210a73423d7Smrg# strip PREFIX and SUFFIX off of NAME.
211a73423d7Smrg# PREFIX and SUFFIX must not contain globbing or regex special
212a73423d7Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
213a73423d7Smrg# dot (in which case that matches only a dot).
214a73423d7Smrg# func_strip_suffix prefix name
215a73423d7Smrgfunc_stripname ()
216a73423d7Smrg{
217a73423d7Smrg    case ${2} in
218a73423d7Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
219a73423d7Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
220a73423d7Smrg    esac
221a73423d7Smrg} # func_stripname may be replaced by extended shell implementation
222a73423d7Smrg
223a73423d7Smrg
224a73423d7Smrg# These SED scripts presuppose an absolute path with a trailing slash.
225a73423d7Smrgpathcar='s,^/\([^/]*\).*$,\1,'
226a73423d7Smrgpathcdr='s,^/[^/]*,,'
227a73423d7Smrgremovedotparts=':dotsl
228a73423d7Smrg		s@/\./@/@g
229a73423d7Smrg		t dotsl
230a73423d7Smrg		s,/\.$,/,'
231a73423d7Smrgcollapseslashes='s@/\{1,\}@/@g'
232a73423d7Smrgfinalslash='s,/*$,/,'
233a73423d7Smrg
234a73423d7Smrg# func_normal_abspath PATH
235a73423d7Smrg# Remove doubled-up and trailing slashes, "." path components,
236a73423d7Smrg# and cancel out any ".." path components in PATH after making
237a73423d7Smrg# it an absolute path.
238a73423d7Smrg#             value returned in "$func_normal_abspath_result"
239a73423d7Smrgfunc_normal_abspath ()
240a73423d7Smrg{
241a73423d7Smrg  # Start from root dir and reassemble the path.
242a73423d7Smrg  func_normal_abspath_result=
243a73423d7Smrg  func_normal_abspath_tpath=$1
244a73423d7Smrg  func_normal_abspath_altnamespace=
245a73423d7Smrg  case $func_normal_abspath_tpath in
246a73423d7Smrg    "")
247a73423d7Smrg      # Empty path, that just means $cwd.
248a73423d7Smrg      func_stripname '' '/' "`pwd`"
249a73423d7Smrg      func_normal_abspath_result=$func_stripname_result
250a73423d7Smrg      return
251a73423d7Smrg    ;;
252a73423d7Smrg    # The next three entries are used to spot a run of precisely
253a73423d7Smrg    # two leading slashes without using negated character classes;
254a73423d7Smrg    # we take advantage of case's first-match behaviour.
255a73423d7Smrg    ///*)
256a73423d7Smrg      # Unusual form of absolute path, do nothing.
257a73423d7Smrg    ;;
258a73423d7Smrg    //*)
259a73423d7Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
260a73423d7Smrg      # and for example Cygwin uses it to access remote file shares
261a73423d7Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
262a73423d7Smrg      func_normal_abspath_altnamespace=/
263a73423d7Smrg    ;;
264a73423d7Smrg    /*)
265a73423d7Smrg      # Absolute path, do nothing.
266a73423d7Smrg    ;;
267a73423d7Smrg    *)
268a73423d7Smrg      # Relative path, prepend $cwd.
269a73423d7Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
270a73423d7Smrg    ;;
271a73423d7Smrg  esac
272a73423d7Smrg  # Cancel out all the simple stuff to save iterations.  We also want
273a73423d7Smrg  # the path to end with a slash for ease of parsing, so make sure
274a73423d7Smrg  # there is one (and only one) here.
275a73423d7Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
276a73423d7Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
277a73423d7Smrg  while :; do
278a73423d7Smrg    # Processed it all yet?
279a73423d7Smrg    if test "$func_normal_abspath_tpath" = / ; then
280a73423d7Smrg      # If we ascended to the root using ".." the result may be empty now.
281a73423d7Smrg      if test -z "$func_normal_abspath_result" ; then
282a73423d7Smrg        func_normal_abspath_result=/
283a73423d7Smrg      fi
284a73423d7Smrg      break
285a73423d7Smrg    fi
286a73423d7Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
287a73423d7Smrg        -e "$pathcar"`
288a73423d7Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
289a73423d7Smrg        -e "$pathcdr"`
290a73423d7Smrg    # Figure out what to do with it
291a73423d7Smrg    case $func_normal_abspath_tcomponent in
292a73423d7Smrg      "")
293a73423d7Smrg        # Trailing empty path component, ignore it.
294a73423d7Smrg      ;;
295a73423d7Smrg      ..)
296a73423d7Smrg        # Parent dir; strip last assembled component from result.
297a73423d7Smrg        func_dirname "$func_normal_abspath_result"
298a73423d7Smrg        func_normal_abspath_result=$func_dirname_result
299a73423d7Smrg      ;;
300a73423d7Smrg      *)
301a73423d7Smrg        # Actual path component, append it.
302a73423d7Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
303a73423d7Smrg      ;;
304a73423d7Smrg    esac
305a73423d7Smrg  done
306a73423d7Smrg  # Restore leading double-slash if one was found on entry.
307a73423d7Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308b3e38ee4Smrg}
309af1a9c97Smrg
310a73423d7Smrg# func_relative_path SRCDIR DSTDIR
311a73423d7Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
312a73423d7Smrg# slash if non-empty, suitable for immediately appending a filename
313a73423d7Smrg# without needing to append a separator.
314a73423d7Smrg#             value returned in "$func_relative_path_result"
315a73423d7Smrgfunc_relative_path ()
316a73423d7Smrg{
317a73423d7Smrg  func_relative_path_result=
318a73423d7Smrg  func_normal_abspath "$1"
319a73423d7Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
320a73423d7Smrg  func_normal_abspath "$2"
321a73423d7Smrg  func_relative_path_tbindir=$func_normal_abspath_result
322a73423d7Smrg
323a73423d7Smrg  # Ascend the tree starting from libdir
324a73423d7Smrg  while :; do
325a73423d7Smrg    # check if we have found a prefix of bindir
326a73423d7Smrg    case $func_relative_path_tbindir in
327a73423d7Smrg      $func_relative_path_tlibdir)
328a73423d7Smrg        # found an exact match
329a73423d7Smrg        func_relative_path_tcancelled=
330a73423d7Smrg        break
331a73423d7Smrg        ;;
332a73423d7Smrg      $func_relative_path_tlibdir*)
333a73423d7Smrg        # found a matching prefix
334a73423d7Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
335a73423d7Smrg        func_relative_path_tcancelled=$func_stripname_result
336a73423d7Smrg        if test -z "$func_relative_path_result"; then
337a73423d7Smrg          func_relative_path_result=.
338a73423d7Smrg        fi
339a73423d7Smrg        break
340a73423d7Smrg        ;;
341a73423d7Smrg      *)
342a73423d7Smrg        func_dirname $func_relative_path_tlibdir
343a73423d7Smrg        func_relative_path_tlibdir=${func_dirname_result}
344a73423d7Smrg        if test "x$func_relative_path_tlibdir" = x ; then
345a73423d7Smrg          # Have to descend all the way to the root!
346a73423d7Smrg          func_relative_path_result=../$func_relative_path_result
347a73423d7Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
348a73423d7Smrg          break
349a73423d7Smrg        fi
350a73423d7Smrg        func_relative_path_result=../$func_relative_path_result
351a73423d7Smrg        ;;
352a73423d7Smrg    esac
353a73423d7Smrg  done
354b3e38ee4Smrg
355a73423d7Smrg  # Now calculate path; take care to avoid doubling-up slashes.
356a73423d7Smrg  func_stripname '' '/' "$func_relative_path_result"
357a73423d7Smrg  func_relative_path_result=$func_stripname_result
358a73423d7Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
359a73423d7Smrg  if test "x$func_stripname_result" != x ; then
360a73423d7Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
361a73423d7Smrg  fi
362a73423d7Smrg
363a73423d7Smrg  # Normalisation. If bindir is libdir, return empty string,
364a73423d7Smrg  # else relative path ending with a slash; either way, target
365a73423d7Smrg  # file name can be directly appended.
366a73423d7Smrg  if test ! -z "$func_relative_path_result"; then
367a73423d7Smrg    func_stripname './' '' "$func_relative_path_result/"
368a73423d7Smrg    func_relative_path_result=$func_stripname_result
369a73423d7Smrg  fi
370a73423d7Smrg}
371b3e38ee4Smrg
372b3e38ee4Smrg# The name of this program:
373b3e38ee4Smrgfunc_dirname_and_basename "$progpath"
374b3e38ee4Smrgprogname=$func_basename_result
375b3e38ee4Smrg
376b3e38ee4Smrg# Make sure we have an absolute path for reexecution:
377b3e38ee4Smrgcase $progpath in
378b3e38ee4Smrg  [\\/]*|[A-Za-z]:\\*) ;;
379b3e38ee4Smrg  *[\\/]*)
380b3e38ee4Smrg     progdir=$func_dirname_result
381b3e38ee4Smrg     progdir=`cd "$progdir" && pwd`
382b3e38ee4Smrg     progpath="$progdir/$progname"
383b3e38ee4Smrg     ;;
384b3e38ee4Smrg  *)
385b3e38ee4Smrg     save_IFS="$IFS"
386a73423d7Smrg     IFS=${PATH_SEPARATOR-:}
387b3e38ee4Smrg     for progdir in $PATH; do
388b3e38ee4Smrg       IFS="$save_IFS"
389b3e38ee4Smrg       test -x "$progdir/$progname" && break
390b3e38ee4Smrg     done
391b3e38ee4Smrg     IFS="$save_IFS"
392b3e38ee4Smrg     test -n "$progdir" || progdir=`pwd`
393b3e38ee4Smrg     progpath="$progdir/$progname"
394b3e38ee4Smrg     ;;
395b3e38ee4Smrgesac
396b3e38ee4Smrg
397b3e38ee4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
398b3e38ee4Smrg# metacharacters that are still active within double-quoted strings.
399b3e38ee4SmrgXsed="${SED}"' -e 1s/^X//'
400b3e38ee4Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401b3e38ee4Smrg
402b3e38ee4Smrg# Same as above, but do not quote variable references.
403b3e38ee4Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404b3e38ee4Smrg
405a73423d7Smrg# Sed substitution that turns a string into a regex matching for the
406a73423d7Smrg# string literally.
407a73423d7Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
408a73423d7Smrg
409a73423d7Smrg# Sed substitution that converts a w32 file name or path
410a73423d7Smrg# which contains forward slashes, into one that contains
411a73423d7Smrg# (escaped) backslashes.  A very naive implementation.
412a73423d7Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
413a73423d7Smrg
414b3e38ee4Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
415b3e38ee4Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416b3e38ee4Smrg# in input to double_quote_subst, that '$' was protected from expansion.
417b3e38ee4Smrg# Since each input `\' is now two `\'s, look for any number of runs of
418b3e38ee4Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419b3e38ee4Smrgbs='\\'
420b3e38ee4Smrgbs2='\\\\'
421b3e38ee4Smrgbs4='\\\\\\\\'
422b3e38ee4Smrgdollar='\$'
423b3e38ee4Smrgsed_double_backslash="\
424b3e38ee4Smrg  s/$bs4/&\\
425b3e38ee4Smrg/g
426b3e38ee4Smrg  s/^$bs2$dollar/$bs&/
427b3e38ee4Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428b3e38ee4Smrg  s/\n//g"
429b3e38ee4Smrg
430b3e38ee4Smrg# Standard options:
431b3e38ee4Smrgopt_dry_run=false
432b3e38ee4Smrgopt_help=false
433b3e38ee4Smrgopt_quiet=false
434b3e38ee4Smrgopt_verbose=false
435b3e38ee4Smrgopt_warning=:
436b3e38ee4Smrg
437b3e38ee4Smrg# func_echo arg...
438b3e38ee4Smrg# Echo program name prefixed message, along with the current mode
439b3e38ee4Smrg# name if it has been set yet.
440b3e38ee4Smrgfunc_echo ()
441b3e38ee4Smrg{
442a73423d7Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443b3e38ee4Smrg}
444b3e38ee4Smrg
445b3e38ee4Smrg# func_verbose arg...
446b3e38ee4Smrg# Echo program name prefixed message in verbose mode only.
447b3e38ee4Smrgfunc_verbose ()
448b3e38ee4Smrg{
449b3e38ee4Smrg    $opt_verbose && func_echo ${1+"$@"}
450b3e38ee4Smrg
451b3e38ee4Smrg    # A bug in bash halts the script if the last line of a function
452b3e38ee4Smrg    # fails when set -e is in force, so we need another command to
453b3e38ee4Smrg    # work around that:
454b3e38ee4Smrg    :
455b3e38ee4Smrg}
456b3e38ee4Smrg
457a73423d7Smrg# func_echo_all arg...
458a73423d7Smrg# Invoke $ECHO with all args, space-separated.
459a73423d7Smrgfunc_echo_all ()
460a73423d7Smrg{
461a73423d7Smrg    $ECHO "$*"
462a73423d7Smrg}
463a73423d7Smrg
464b3e38ee4Smrg# func_error arg...
465b3e38ee4Smrg# Echo program name prefixed message to standard error.
466b3e38ee4Smrgfunc_error ()
467b3e38ee4Smrg{
468a73423d7Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469b3e38ee4Smrg}
470b3e38ee4Smrg
471b3e38ee4Smrg# func_warning arg...
472b3e38ee4Smrg# Echo program name prefixed warning message to standard error.
473b3e38ee4Smrgfunc_warning ()
474b3e38ee4Smrg{
475a73423d7Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476b3e38ee4Smrg
477b3e38ee4Smrg    # bash bug again:
478b3e38ee4Smrg    :
479b3e38ee4Smrg}
480b3e38ee4Smrg
481b3e38ee4Smrg# func_fatal_error arg...
482b3e38ee4Smrg# Echo program name prefixed message to standard error, and exit.
483b3e38ee4Smrgfunc_fatal_error ()
484b3e38ee4Smrg{
485b3e38ee4Smrg    func_error ${1+"$@"}
486b3e38ee4Smrg    exit $EXIT_FAILURE
487b3e38ee4Smrg}
488b3e38ee4Smrg
489b3e38ee4Smrg# func_fatal_help arg...
490b3e38ee4Smrg# Echo program name prefixed message to standard error, followed by
491b3e38ee4Smrg# a help hint, and exit.
492b3e38ee4Smrgfunc_fatal_help ()
493b3e38ee4Smrg{
494b3e38ee4Smrg    func_error ${1+"$@"}
495b3e38ee4Smrg    func_fatal_error "$help"
496b3e38ee4Smrg}
497b3e38ee4Smrghelp="Try \`$progname --help' for more information."  ## default
498b3e38ee4Smrg
499b3e38ee4Smrg
500b3e38ee4Smrg# func_grep expression filename
501b3e38ee4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502b3e38ee4Smrgfunc_grep ()
503b3e38ee4Smrg{
504b3e38ee4Smrg    $GREP "$1" "$2" >/dev/null 2>&1
505b3e38ee4Smrg}
506b3e38ee4Smrg
507b3e38ee4Smrg
508b3e38ee4Smrg# func_mkdir_p directory-path
509b3e38ee4Smrg# Make sure the entire path to DIRECTORY-PATH is available.
510b3e38ee4Smrgfunc_mkdir_p ()
511b3e38ee4Smrg{
512b3e38ee4Smrg    my_directory_path="$1"
513b3e38ee4Smrg    my_dir_list=
514b3e38ee4Smrg
515b3e38ee4Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516b3e38ee4Smrg
517b3e38ee4Smrg      # Protect directory names starting with `-'
518b3e38ee4Smrg      case $my_directory_path in
519b3e38ee4Smrg        -*) my_directory_path="./$my_directory_path" ;;
520b3e38ee4Smrg      esac
521b3e38ee4Smrg
522b3e38ee4Smrg      # While some portion of DIR does not yet exist...
523b3e38ee4Smrg      while test ! -d "$my_directory_path"; do
524b3e38ee4Smrg        # ...make a list in topmost first order.  Use a colon delimited
525b3e38ee4Smrg	# list incase some portion of path contains whitespace.
526b3e38ee4Smrg        my_dir_list="$my_directory_path:$my_dir_list"
527b3e38ee4Smrg
528b3e38ee4Smrg        # If the last portion added has no slash in it, the list is done
529b3e38ee4Smrg        case $my_directory_path in */*) ;; *) break ;; esac
530b3e38ee4Smrg
531b3e38ee4Smrg        # ...otherwise throw away the child directory and loop
532a73423d7Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533b3e38ee4Smrg      done
534a73423d7Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535b3e38ee4Smrg
536b3e38ee4Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
537b3e38ee4Smrg      for my_dir in $my_dir_list; do
538b3e38ee4Smrg	IFS="$save_mkdir_p_IFS"
539b3e38ee4Smrg        # mkdir can fail with a `File exist' error if two processes
540b3e38ee4Smrg        # try to create one of the directories concurrently.  Don't
541b3e38ee4Smrg        # stop in that case!
542b3e38ee4Smrg        $MKDIR "$my_dir" 2>/dev/null || :
543b3e38ee4Smrg      done
544b3e38ee4Smrg      IFS="$save_mkdir_p_IFS"
545b3e38ee4Smrg
546b3e38ee4Smrg      # Bail out if we (or some other process) failed to create a directory.
547b3e38ee4Smrg      test -d "$my_directory_path" || \
548b3e38ee4Smrg        func_fatal_error "Failed to create \`$1'"
549b3e38ee4Smrg    fi
550b3e38ee4Smrg}
55150806d53Smrg
55250806d53Smrg
55350806d53Smrg# func_mktempdir [string]
55450806d53Smrg# Make a temporary directory that won't clash with other running
55550806d53Smrg# libtool processes, and avoids race conditions if possible.  If
55650806d53Smrg# given, STRING is the basename for that directory.
55750806d53Smrgfunc_mktempdir ()
55850806d53Smrg{
55950806d53Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
56050806d53Smrg
561b3e38ee4Smrg    if test "$opt_dry_run" = ":"; then
56250806d53Smrg      # Return a directory name, but don't create it in dry-run mode
56350806d53Smrg      my_tmpdir="${my_template}-$$"
56450806d53Smrg    else
56550806d53Smrg
56650806d53Smrg      # If mktemp works, use that first and foremost
56750806d53Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
56850806d53Smrg
56950806d53Smrg      if test ! -d "$my_tmpdir"; then
570b3e38ee4Smrg        # Failing that, at least try and use $RANDOM to avoid a race
571b3e38ee4Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
57250806d53Smrg
573b3e38ee4Smrg        save_mktempdir_umask=`umask`
574b3e38ee4Smrg        umask 0077
575b3e38ee4Smrg        $MKDIR "$my_tmpdir"
576b3e38ee4Smrg        umask $save_mktempdir_umask
57750806d53Smrg      fi
57850806d53Smrg
57950806d53Smrg      # If we're not in dry-run mode, bomb out on failure
580b3e38ee4Smrg      test -d "$my_tmpdir" || \
581b3e38ee4Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
58250806d53Smrg    fi
58350806d53Smrg
584a73423d7Smrg    $ECHO "$my_tmpdir"
58550806d53Smrg}
58650806d53Smrg
58750806d53Smrg
588b3e38ee4Smrg# func_quote_for_eval arg
589b3e38ee4Smrg# Aesthetically quote ARG to be evaled later.
590b3e38ee4Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591b3e38ee4Smrg# is double-quoted, suitable for a subsequent eval, whereas
592b3e38ee4Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593b3e38ee4Smrg# which are still active within double quotes backslashified.
594b3e38ee4Smrgfunc_quote_for_eval ()
59550806d53Smrg{
596b3e38ee4Smrg    case $1 in
597b3e38ee4Smrg      *[\\\`\"\$]*)
598a73423d7Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599b3e38ee4Smrg      *)
600b3e38ee4Smrg        func_quote_for_eval_unquoted_result="$1" ;;
601b3e38ee4Smrg    esac
602b3e38ee4Smrg
603b3e38ee4Smrg    case $func_quote_for_eval_unquoted_result in
604b3e38ee4Smrg      # Double-quote args containing shell metacharacters to delay
605b3e38ee4Smrg      # word splitting, command substitution and and variable
606b3e38ee4Smrg      # expansion for a subsequent eval.
607b3e38ee4Smrg      # Many Bourne shells cannot handle close brackets correctly
608b3e38ee4Smrg      # in scan sets, so we specify it separately.
609b3e38ee4Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610b3e38ee4Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611b3e38ee4Smrg        ;;
612b3e38ee4Smrg      *)
613b3e38ee4Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
61450806d53Smrg    esac
61550806d53Smrg}
61650806d53Smrg
61750806d53Smrg
618b3e38ee4Smrg# func_quote_for_expand arg
619b3e38ee4Smrg# Aesthetically quote ARG to be evaled later; same as above,
620b3e38ee4Smrg# but do not quote variable references.
621b3e38ee4Smrgfunc_quote_for_expand ()
62250806d53Smrg{
623b3e38ee4Smrg    case $1 in
624b3e38ee4Smrg      *[\\\`\"]*)
625a73423d7Smrg	my_arg=`$ECHO "$1" | $SED \
626b3e38ee4Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
62750806d53Smrg      *)
628b3e38ee4Smrg        my_arg="$1" ;;
629b3e38ee4Smrg    esac
630b3e38ee4Smrg
631b3e38ee4Smrg    case $my_arg in
632b3e38ee4Smrg      # Double-quote args containing shell metacharacters to delay
633b3e38ee4Smrg      # word splitting and command substitution for a subsequent eval.
634b3e38ee4Smrg      # Many Bourne shells cannot handle close brackets correctly
635b3e38ee4Smrg      # in scan sets, so we specify it separately.
636b3e38ee4Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637b3e38ee4Smrg        my_arg="\"$my_arg\""
638b3e38ee4Smrg        ;;
639b3e38ee4Smrg    esac
640b3e38ee4Smrg
641b3e38ee4Smrg    func_quote_for_expand_result="$my_arg"
64250806d53Smrg}
64350806d53Smrg
64450806d53Smrg
645b3e38ee4Smrg# func_show_eval cmd [fail_exp]
646b3e38ee4Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647b3e38ee4Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648b3e38ee4Smrg# is given, then evaluate it.
649b3e38ee4Smrgfunc_show_eval ()
65050806d53Smrg{
651b3e38ee4Smrg    my_cmd="$1"
652b3e38ee4Smrg    my_fail_exp="${2-:}"
653af1a9c97Smrg
654b3e38ee4Smrg    ${opt_silent-false} || {
655b3e38ee4Smrg      func_quote_for_expand "$my_cmd"
656b3e38ee4Smrg      eval "func_echo $func_quote_for_expand_result"
657b3e38ee4Smrg    }
658b3e38ee4Smrg
659b3e38ee4Smrg    if ${opt_dry_run-false}; then :; else
660b3e38ee4Smrg      eval "$my_cmd"
661b3e38ee4Smrg      my_status=$?
662b3e38ee4Smrg      if test "$my_status" -eq 0; then :; else
663b3e38ee4Smrg	eval "(exit $my_status); $my_fail_exp"
664b3e38ee4Smrg      fi
66550806d53Smrg    fi
66650806d53Smrg}
66750806d53Smrg
668b3e38ee4Smrg
669b3e38ee4Smrg# func_show_eval_locale cmd [fail_exp]
670b3e38ee4Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671b3e38ee4Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672b3e38ee4Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
673b3e38ee4Smrgfunc_show_eval_locale ()
67450806d53Smrg{
675b3e38ee4Smrg    my_cmd="$1"
676b3e38ee4Smrg    my_fail_exp="${2-:}"
677b3e38ee4Smrg
678b3e38ee4Smrg    ${opt_silent-false} || {
679b3e38ee4Smrg      func_quote_for_expand "$my_cmd"
680b3e38ee4Smrg      eval "func_echo $func_quote_for_expand_result"
681b3e38ee4Smrg    }
682b3e38ee4Smrg
683b3e38ee4Smrg    if ${opt_dry_run-false}; then :; else
684b3e38ee4Smrg      eval "$lt_user_locale
685b3e38ee4Smrg	    $my_cmd"
686b3e38ee4Smrg      my_status=$?
687b3e38ee4Smrg      eval "$lt_safe_locale"
688b3e38ee4Smrg      if test "$my_status" -eq 0; then :; else
689b3e38ee4Smrg	eval "(exit $my_status); $my_fail_exp"
690b3e38ee4Smrg      fi
69150806d53Smrg    fi
692b3e38ee4Smrg}
69350806d53Smrg
694a73423d7Smrg# func_tr_sh
695a73423d7Smrg# Turn $1 into a string suitable for a shell variable name.
696a73423d7Smrg# Result is stored in $func_tr_sh_result.  All characters
697a73423d7Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
698a73423d7Smrg# if $1 begins with a digit, a '_' is prepended as well.
699a73423d7Smrgfunc_tr_sh ()
700a73423d7Smrg{
701a73423d7Smrg  case $1 in
702a73423d7Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
703a73423d7Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
704a73423d7Smrg    ;;
705a73423d7Smrg  * )
706a73423d7Smrg    func_tr_sh_result=$1
707a73423d7Smrg    ;;
708a73423d7Smrg  esac
709a73423d7Smrg}
710b3e38ee4Smrg
711b3e38ee4Smrg
712b3e38ee4Smrg# func_version
713b3e38ee4Smrg# Echo version message to standard output and exit.
714b3e38ee4Smrgfunc_version ()
715b3e38ee4Smrg{
716a73423d7Smrg    $opt_debug
717a73423d7Smrg
718a73423d7Smrg    $SED -n '/(C)/!b go
719a73423d7Smrg	:more
720a73423d7Smrg	/\./!{
721a73423d7Smrg	  N
722a73423d7Smrg	  s/\n# / /
723a73423d7Smrg	  b more
724a73423d7Smrg	}
725a73423d7Smrg	:go
726a73423d7Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
727b3e38ee4Smrg        s/^# //
728b3e38ee4Smrg	s/^# *$//
729b3e38ee4Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730b3e38ee4Smrg        p
731b3e38ee4Smrg     }' < "$progpath"
732b3e38ee4Smrg     exit $?
733b3e38ee4Smrg}
734b3e38ee4Smrg
735b3e38ee4Smrg# func_usage
736b3e38ee4Smrg# Echo short help message to standard output and exit.
737b3e38ee4Smrgfunc_usage ()
738b3e38ee4Smrg{
739a73423d7Smrg    $opt_debug
740a73423d7Smrg
741a73423d7Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742b3e38ee4Smrg        s/^# //
743b3e38ee4Smrg	s/^# *$//
744b3e38ee4Smrg	s/\$progname/'$progname'/
745b3e38ee4Smrg	p
746b3e38ee4Smrg    }' < "$progpath"
747a73423d7Smrg    echo
748b3e38ee4Smrg    $ECHO "run \`$progname --help | more' for full usage"
749b3e38ee4Smrg    exit $?
750b3e38ee4Smrg}
751b3e38ee4Smrg
752a73423d7Smrg# func_help [NOEXIT]
753a73423d7Smrg# Echo long help message to standard output and exit,
754a73423d7Smrg# unless 'noexit' is passed as argument.
755b3e38ee4Smrgfunc_help ()
756b3e38ee4Smrg{
757a73423d7Smrg    $opt_debug
758a73423d7Smrg
759b3e38ee4Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
760a73423d7Smrg	:print
761b3e38ee4Smrg        s/^# //
762b3e38ee4Smrg	s/^# *$//
763b3e38ee4Smrg	s*\$progname*'$progname'*
764b3e38ee4Smrg	s*\$host*'"$host"'*
765b3e38ee4Smrg	s*\$SHELL*'"$SHELL"'*
766b3e38ee4Smrg	s*\$LTCC*'"$LTCC"'*
767b3e38ee4Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768b3e38ee4Smrg	s*\$LD*'"$LD"'*
769b3e38ee4Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
770a73423d7Smrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
771a73423d7Smrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772b3e38ee4Smrg	p
773a73423d7Smrg	d
774a73423d7Smrg     }
775a73423d7Smrg     /^# .* home page:/b print
776a73423d7Smrg     /^# General help using/b print
777a73423d7Smrg     ' < "$progpath"
778a73423d7Smrg    ret=$?
779a73423d7Smrg    if test -z "$1"; then
780a73423d7Smrg      exit $ret
781a73423d7Smrg    fi
782b3e38ee4Smrg}
783b3e38ee4Smrg
784b3e38ee4Smrg# func_missing_arg argname
785b3e38ee4Smrg# Echo program name prefixed message to standard error and set global
786b3e38ee4Smrg# exit_cmd.
787b3e38ee4Smrgfunc_missing_arg ()
788b3e38ee4Smrg{
789a73423d7Smrg    $opt_debug
790a73423d7Smrg
791a73423d7Smrg    func_error "missing argument for $1."
792b3e38ee4Smrg    exit_cmd=exit
79350806d53Smrg}
79450806d53Smrg
795af1a9c97Smrg
796a73423d7Smrg# func_split_short_opt shortopt
797a73423d7Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
798a73423d7Smrg# variables after splitting SHORTOPT after the 2nd character.
799a73423d7Smrgfunc_split_short_opt ()
800a73423d7Smrg{
801a73423d7Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
802a73423d7Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803af1a9c97Smrg
804a73423d7Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
805a73423d7Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
806a73423d7Smrg} # func_split_short_opt may be replaced by extended shell implementation
807a73423d7Smrg
808a73423d7Smrg
809a73423d7Smrg# func_split_long_opt longopt
810a73423d7Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
811a73423d7Smrg# variables after splitting LONGOPT at the `=' sign.
812a73423d7Smrgfunc_split_long_opt ()
813a73423d7Smrg{
814a73423d7Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
815a73423d7Smrg    my_sed_long_arg='1s/^--[^=]*=//'
816a73423d7Smrg
817a73423d7Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
818a73423d7Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
819a73423d7Smrg} # func_split_long_opt may be replaced by extended shell implementation
820a73423d7Smrg
821a73423d7Smrgexit_cmd=:
822b3e38ee4Smrg
823b3e38ee4Smrg
824b3e38ee4Smrg
82550806d53Smrg
82650806d53Smrg
827b3e38ee4Smrgmagic="%%%MAGIC variable%%%"
828b3e38ee4Smrgmagic_exe="%%%MAGIC EXE variable%%%"
82950806d53Smrg
830b3e38ee4Smrg# Global variables.
831b3e38ee4Smrgnonopt=
832b3e38ee4Smrgpreserve_args=
833b3e38ee4Smrglo2o="s/\\.lo\$/.${objext}/"
834b3e38ee4Smrgo2lo="s/\\.${objext}\$/.lo/"
835b3e38ee4Smrgextracted_archives=
836b3e38ee4Smrgextracted_serial=0
837af1a9c97Smrg
838b3e38ee4Smrg# If this variable is set in any of the actions, the command in it
839b3e38ee4Smrg# will be execed at the end.  This prevents here-documents from being
840b3e38ee4Smrg# left over by shells.
841b3e38ee4Smrgexec_cmd=
842b3e38ee4Smrg
843a73423d7Smrg# func_append var value
844a73423d7Smrg# Append VALUE to the end of shell variable VAR.
845a73423d7Smrgfunc_append ()
846a73423d7Smrg{
847a73423d7Smrg    eval "${1}=\$${1}\${2}"
848a73423d7Smrg} # func_append may be replaced by extended shell implementation
849a73423d7Smrg
850a73423d7Smrg# func_append_quoted var value
851a73423d7Smrg# Quote VALUE and append to the end of shell variable VAR, separated
852a73423d7Smrg# by a space.
853a73423d7Smrgfunc_append_quoted ()
854a73423d7Smrg{
855a73423d7Smrg    func_quote_for_eval "${2}"
856a73423d7Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
857a73423d7Smrg} # func_append_quoted may be replaced by extended shell implementation
858a73423d7Smrg
859a73423d7Smrg
860a73423d7Smrg# func_arith arithmetic-term...
861a73423d7Smrgfunc_arith ()
862a73423d7Smrg{
863a73423d7Smrg    func_arith_result=`expr "${@}"`
864a73423d7Smrg} # func_arith may be replaced by extended shell implementation
865a73423d7Smrg
866a73423d7Smrg
867a73423d7Smrg# func_len string
868a73423d7Smrg# STRING may not start with a hyphen.
869a73423d7Smrgfunc_len ()
870a73423d7Smrg{
871a73423d7Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
872a73423d7Smrg} # func_len may be replaced by extended shell implementation
873a73423d7Smrg
874a73423d7Smrg
875a73423d7Smrg# func_lo2o object
876a73423d7Smrgfunc_lo2o ()
877a73423d7Smrg{
878a73423d7Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
879a73423d7Smrg} # func_lo2o may be replaced by extended shell implementation
880a73423d7Smrg
881a73423d7Smrg
882a73423d7Smrg# func_xform libobj-or-source
883a73423d7Smrgfunc_xform ()
884a73423d7Smrg{
885a73423d7Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
886a73423d7Smrg} # func_xform may be replaced by extended shell implementation
887a73423d7Smrg
888a73423d7Smrg
889b3e38ee4Smrg# func_fatal_configuration arg...
890b3e38ee4Smrg# Echo program name prefixed message to standard error, followed by
891b3e38ee4Smrg# a configuration failure hint, and exit.
892b3e38ee4Smrgfunc_fatal_configuration ()
893b3e38ee4Smrg{
894b3e38ee4Smrg    func_error ${1+"$@"}
895b3e38ee4Smrg    func_error "See the $PACKAGE documentation for more information."
896b3e38ee4Smrg    func_fatal_error "Fatal configuration error."
897b3e38ee4Smrg}
8987965d9acSmrg
899af1a9c97Smrg
900b3e38ee4Smrg# func_config
901b3e38ee4Smrg# Display the configuration for all the tags in this script.
902b3e38ee4Smrgfunc_config ()
903b3e38ee4Smrg{
904b3e38ee4Smrg    re_begincf='^# ### BEGIN LIBTOOL'
905b3e38ee4Smrg    re_endcf='^# ### END LIBTOOL'
906b3e38ee4Smrg
907b3e38ee4Smrg    # Default configuration.
908b3e38ee4Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
90950806d53Smrg
91050806d53Smrg    # Now print the configurations for the tags.
91150806d53Smrg    for tagname in $taglist; do
912b3e38ee4Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
91350806d53Smrg    done
914a18ebfb2Smrg
915b3e38ee4Smrg    exit $?
916b3e38ee4Smrg}
917a18ebfb2Smrg
918b3e38ee4Smrg# func_features
919b3e38ee4Smrg# Display the features supported by this script.
920b3e38ee4Smrgfunc_features ()
921b3e38ee4Smrg{
922a73423d7Smrg    echo "host: $host"
92350806d53Smrg    if test "$build_libtool_libs" = yes; then
924a73423d7Smrg      echo "enable shared libraries"
92550806d53Smrg    else
926a73423d7Smrg      echo "disable shared libraries"
92750806d53Smrg    fi
92850806d53Smrg    if test "$build_old_libs" = yes; then
929a73423d7Smrg      echo "enable static libraries"
93050806d53Smrg    else
931a73423d7Smrg      echo "disable static libraries"
93250806d53Smrg    fi
933b3e38ee4Smrg
93450806d53Smrg    exit $?
935b3e38ee4Smrg}
93650806d53Smrg
937b3e38ee4Smrg# func_enable_tag tagname
938b3e38ee4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939b3e38ee4Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940b3e38ee4Smrg# variable here.
941b3e38ee4Smrgfunc_enable_tag ()
942b3e38ee4Smrg{
943b3e38ee4Smrg  # Global variable:
944b3e38ee4Smrg  tagname="$1"
94550806d53Smrg
946b3e38ee4Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947b3e38ee4Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948b3e38ee4Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949af1a9c97Smrg
950b3e38ee4Smrg  # Validate tagname.
951b3e38ee4Smrg  case $tagname in
952b3e38ee4Smrg    *[!-_A-Za-z0-9,/]*)
953b3e38ee4Smrg      func_fatal_error "invalid tag name: $tagname"
954b3e38ee4Smrg      ;;
955b3e38ee4Smrg  esac
95650806d53Smrg
957b3e38ee4Smrg  # Don't test for the "default" C tag, as we know it's
958b3e38ee4Smrg  # there but not specially marked.
959b3e38ee4Smrg  case $tagname in
960b3e38ee4Smrg    CC) ;;
961b3e38ee4Smrg    *)
962b3e38ee4Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963b3e38ee4Smrg	taglist="$taglist $tagname"
964b3e38ee4Smrg
965b3e38ee4Smrg	# Evaluate the configuration.  Be careful to quote the path
966b3e38ee4Smrg	# and the sed script, to avoid splitting on whitespace, but
967b3e38ee4Smrg	# also don't use non-portable quotes within backquotes within
968b3e38ee4Smrg	# quotes we have to do it in 2 steps:
969b3e38ee4Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970b3e38ee4Smrg	eval "$extractedcf"
971b3e38ee4Smrg      else
972b3e38ee4Smrg	func_error "ignoring unknown tag $tagname"
973b3e38ee4Smrg      fi
974b3e38ee4Smrg      ;;
975b3e38ee4Smrg  esac
976b3e38ee4Smrg}
977b3e38ee4Smrg
978a73423d7Smrg# func_check_version_match
979a73423d7Smrg# Ensure that we are using m4 macros, and libtool script from the same
980a73423d7Smrg# release of libtool.
981a73423d7Smrgfunc_check_version_match ()
982b3e38ee4Smrg{
983a73423d7Smrg  if test "$package_revision" != "$macro_revision"; then
984a73423d7Smrg    if test "$VERSION" != "$macro_version"; then
985a73423d7Smrg      if test -z "$macro_version"; then
986a73423d7Smrg        cat >&2 <<_LT_EOF
987a73423d7Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
988a73423d7Smrg$progname: definition of this LT_INIT comes from an older release.
989a73423d7Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
990a73423d7Smrg$progname: and run autoconf again.
991a73423d7Smrg_LT_EOF
992a73423d7Smrg      else
993a73423d7Smrg        cat >&2 <<_LT_EOF
994a73423d7Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
995a73423d7Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
996a73423d7Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
997a73423d7Smrg$progname: and run autoconf again.
998a73423d7Smrg_LT_EOF
999a73423d7Smrg      fi
1000a73423d7Smrg    else
1001a73423d7Smrg      cat >&2 <<_LT_EOF
1002a73423d7Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1003a73423d7Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1004a73423d7Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1005a73423d7Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
1006a73423d7Smrg_LT_EOF
1007a73423d7Smrg    fi
1008a73423d7Smrg
1009a73423d7Smrg    exit $EXIT_MISMATCH
1010a73423d7Smrg  fi
1011a73423d7Smrg}
1012a73423d7Smrg
1013a73423d7Smrg
1014a73423d7Smrg# Shorthand for --mode=foo, only valid as the first argument
1015a73423d7Smrgcase $1 in
1016a73423d7Smrgclean|clea|cle|cl)
1017a73423d7Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
1018a73423d7Smrg  ;;
1019a73423d7Smrgcompile|compil|compi|comp|com|co|c)
1020a73423d7Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
1021a73423d7Smrg  ;;
1022a73423d7Smrgexecute|execut|execu|exec|exe|ex|e)
1023a73423d7Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
1024a73423d7Smrg  ;;
1025a73423d7Smrgfinish|finis|fini|fin|fi|f)
1026a73423d7Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
1027a73423d7Smrg  ;;
1028a73423d7Smrginstall|instal|insta|inst|ins|in|i)
1029a73423d7Smrg  shift; set dummy --mode install ${1+"$@"}; shift
1030a73423d7Smrg  ;;
1031a73423d7Smrglink|lin|li|l)
1032a73423d7Smrg  shift; set dummy --mode link ${1+"$@"}; shift
1033a73423d7Smrg  ;;
1034a73423d7Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
1035a73423d7Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
1036a73423d7Smrg  ;;
1037a73423d7Smrgesac
1038a73423d7Smrg
1039a73423d7Smrg
1040a73423d7Smrg
1041a73423d7Smrg# Option defaults:
1042a73423d7Smrgopt_debug=:
1043a73423d7Smrgopt_dry_run=false
1044a73423d7Smrgopt_config=false
1045a73423d7Smrgopt_preserve_dup_deps=false
1046a73423d7Smrgopt_features=false
1047a73423d7Smrgopt_finish=false
1048a73423d7Smrgopt_help=false
1049a73423d7Smrgopt_help_all=false
1050a73423d7Smrgopt_silent=:
1051a73423d7Smrgopt_warning=:
1052a73423d7Smrgopt_verbose=:
1053a73423d7Smrgopt_silent=false
1054a73423d7Smrgopt_verbose=false
1055a18ebfb2Smrg
105650806d53Smrg
1057a73423d7Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
1058a73423d7Smrg# script to make things like `--version' happen as quickly as we can.
1059a73423d7Smrg{
1060a73423d7Smrg  # this just eases exit handling
1061a73423d7Smrg  while test $# -gt 0; do
1062b3e38ee4Smrg    opt="$1"
1063b3e38ee4Smrg    shift
1064b3e38ee4Smrg    case $opt in
1065a73423d7Smrg      --debug|-x)	opt_debug='set -x'
1066b3e38ee4Smrg			func_echo "enabling shell trace mode"
1067b3e38ee4Smrg			$opt_debug
1068b3e38ee4Smrg			;;
1069a73423d7Smrg      --dry-run|--dryrun|-n)
1070a73423d7Smrg			opt_dry_run=:
1071b3e38ee4Smrg			;;
1072a73423d7Smrg      --config)
1073a73423d7Smrg			opt_config=:
1074a73423d7Smrgfunc_config
1075a73423d7Smrg			;;
1076a73423d7Smrg      --dlopen|-dlopen)
1077a73423d7Smrg			optarg="$1"
1078a73423d7Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
1079a73423d7Smrg}$optarg"
1080b3e38ee4Smrg			shift
1081b3e38ee4Smrg			;;
1082b3e38ee4Smrg      --preserve-dup-deps)
1083a73423d7Smrg			opt_preserve_dup_deps=:
1084b3e38ee4Smrg			;;
1085a73423d7Smrg      --features)
1086a73423d7Smrg			opt_features=:
1087a73423d7Smrgfunc_features
1088a73423d7Smrg			;;
1089a73423d7Smrg      --finish)
1090a73423d7Smrg			opt_finish=:
1091a73423d7Smrgset dummy --mode finish ${1+"$@"}; shift
1092a73423d7Smrg			;;
1093a73423d7Smrg      --help)
1094a73423d7Smrg			opt_help=:
1095a73423d7Smrg			;;
1096a73423d7Smrg      --help-all)
1097a73423d7Smrg			opt_help_all=:
1098a73423d7Smrgopt_help=': help-all'
1099a73423d7Smrg			;;
1100a73423d7Smrg      --mode)
1101a73423d7Smrg			test $# = 0 && func_missing_arg $opt && break
1102a73423d7Smrg			optarg="$1"
1103a73423d7Smrg			opt_mode="$optarg"
1104a73423d7Smrgcase $optarg in
1105a73423d7Smrg  # Valid mode arguments:
1106a73423d7Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
1107a73423d7Smrg
1108a73423d7Smrg  # Catch anything else as an error
1109a73423d7Smrg  *) func_error "invalid argument for $opt"
1110a73423d7Smrg     exit_cmd=exit
1111a73423d7Smrg     break
1112a73423d7Smrg     ;;
1113a73423d7Smrgesac
1114a73423d7Smrg			shift
1115a73423d7Smrg			;;
1116a73423d7Smrg      --no-silent|--no-quiet)
1117b3e38ee4Smrg			opt_silent=false
1118a73423d7Smrgfunc_append preserve_args " $opt"
1119b3e38ee4Smrg			;;
1120a73423d7Smrg      --no-warning|--no-warn)
1121a73423d7Smrg			opt_warning=false
1122a73423d7Smrgfunc_append preserve_args " $opt"
1123a73423d7Smrg			;;
1124a73423d7Smrg      --no-verbose)
1125a73423d7Smrg			opt_verbose=false
1126a73423d7Smrgfunc_append preserve_args " $opt"
1127a73423d7Smrg			;;
1128a73423d7Smrg      --silent|--quiet)
1129a73423d7Smrg			opt_silent=:
1130a73423d7Smrgfunc_append preserve_args " $opt"
1131a73423d7Smrg        opt_verbose=false
1132a73423d7Smrg			;;
1133a73423d7Smrg      --verbose|-v)
1134a73423d7Smrg			opt_verbose=:
1135a73423d7Smrgfunc_append preserve_args " $opt"
1136a73423d7Smrgopt_silent=false
1137a73423d7Smrg			;;
1138a73423d7Smrg      --tag)
1139a73423d7Smrg			test $# = 0 && func_missing_arg $opt && break
1140a73423d7Smrg			optarg="$1"
1141a73423d7Smrg			opt_tag="$optarg"
1142a73423d7Smrgfunc_append preserve_args " $opt $optarg"
1143a73423d7Smrgfunc_enable_tag "$optarg"
1144b3e38ee4Smrg			shift
1145b3e38ee4Smrg			;;
1146b3e38ee4Smrg
1147a73423d7Smrg      -\?|-h)		func_usage				;;
1148a73423d7Smrg      --help)		func_help				;;
1149a73423d7Smrg      --version)	func_version				;;
1150a73423d7Smrg
1151b3e38ee4Smrg      # Separate optargs to long options:
1152a73423d7Smrg      --*=*)
1153a73423d7Smrg			func_split_long_opt "$opt"
1154a73423d7Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155b3e38ee4Smrg			shift
1156b3e38ee4Smrg			;;
1157b3e38ee4Smrg
1158a73423d7Smrg      # Separate non-argument short options:
1159a73423d7Smrg      -\?*|-h*|-n*|-v*)
1160a73423d7Smrg			func_split_short_opt "$opt"
1161a73423d7Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
1162a73423d7Smrg			shift
1163b3e38ee4Smrg			;;
1164a73423d7Smrg
1165a73423d7Smrg      --)		break					;;
1166a73423d7Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
1167a73423d7Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168b3e38ee4Smrg    esac
1169b3e38ee4Smrg  done
1170b3e38ee4Smrg
1171a73423d7Smrg  # Validate options:
1172a73423d7Smrg
1173a73423d7Smrg  # save first non-option argument
1174a73423d7Smrg  if test "$#" -gt 0; then
1175a73423d7Smrg    nonopt="$opt"
1176a73423d7Smrg    shift
1177a73423d7Smrg  fi
1178a73423d7Smrg
1179a73423d7Smrg  # preserve --debug
1180a73423d7Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181b3e38ee4Smrg
1182b3e38ee4Smrg  case $host in
1183b3e38ee4Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184b3e38ee4Smrg      # don't eliminate duplications in $postdeps and $predeps
1185b3e38ee4Smrg      opt_duplicate_compiler_generated_deps=:
1186a18ebfb2Smrg      ;;
1187a18ebfb2Smrg    *)
1188a73423d7Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189b3e38ee4Smrg      ;;
1190b3e38ee4Smrg  esac
1191af1a9c97Smrg
1192a73423d7Smrg  $opt_help || {
1193a73423d7Smrg    # Sanity checks first:
1194a73423d7Smrg    func_check_version_match
1195b3e38ee4Smrg
1196a73423d7Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1197a73423d7Smrg      func_fatal_configuration "not configured to build any kind of library"
1198b3e38ee4Smrg    fi
1199b3e38ee4Smrg
1200a73423d7Smrg    # Darwin sucks
1201a73423d7Smrg    eval std_shrext=\"$shrext_cmds\"
1202b3e38ee4Smrg
1203a73423d7Smrg    # Only execute mode is allowed to have -dlopen flags.
1204a73423d7Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
1205a73423d7Smrg      func_error "unrecognized option \`-dlopen'"
1206a73423d7Smrg      $ECHO "$help" 1>&2
1207a73423d7Smrg      exit $EXIT_FAILURE
1208a73423d7Smrg    fi
120950806d53Smrg
1210a73423d7Smrg    # Change the help message to a mode-specific one.
1211a73423d7Smrg    generic_help="$help"
1212a73423d7Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
1213a73423d7Smrg  }
1214b3e38ee4Smrg
1215b3e38ee4Smrg
1216a73423d7Smrg  # Bail if the options were screwed
1217a73423d7Smrg  $exit_cmd $EXIT_FAILURE
1218a73423d7Smrg}
1219b3e38ee4Smrg
1220b3e38ee4Smrg
122150806d53Smrg
122250806d53Smrg
1223a73423d7Smrg## ----------- ##
1224a73423d7Smrg##    Main.    ##
1225a73423d7Smrg## ----------- ##
122650806d53Smrg
1227b3e38ee4Smrg# func_lalib_p file
1228b3e38ee4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out
1230b3e38ee4Smrg# determined imposters.
1231b3e38ee4Smrgfunc_lalib_p ()
1232b3e38ee4Smrg{
1233b3e38ee4Smrg    test -f "$1" &&
1234b3e38ee4Smrg      $SED -e 4q "$1" 2>/dev/null \
1235b3e38ee4Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236b3e38ee4Smrg}
123750806d53Smrg
1238b3e38ee4Smrg# func_lalib_unsafe_p file
1239b3e38ee4Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240b3e38ee4Smrg# This function implements the same check as func_lalib_p without
1241b3e38ee4Smrg# resorting to external programs.  To this end, it redirects stdin and
1242b3e38ee4Smrg# closes it afterwards, without saving the original file descriptor.
1243b3e38ee4Smrg# As a safety measure, use it only where a negative result would be
1244b3e38ee4Smrg# fatal anyway.  Works if `file' does not exist.
1245b3e38ee4Smrgfunc_lalib_unsafe_p ()
1246b3e38ee4Smrg{
1247b3e38ee4Smrg    lalib_p=no
1248b3e38ee4Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249b3e38ee4Smrg	for lalib_p_l in 1 2 3 4
1250b3e38ee4Smrg	do
1251b3e38ee4Smrg	    read lalib_p_line
1252b3e38ee4Smrg	    case "$lalib_p_line" in
1253b3e38ee4Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254b3e38ee4Smrg	    esac
1255b3e38ee4Smrg	done
1256b3e38ee4Smrg	exec 0<&5 5<&-
1257b3e38ee4Smrg    fi
1258b3e38ee4Smrg    test "$lalib_p" = yes
1259b3e38ee4Smrg}
126050806d53Smrg
1261b3e38ee4Smrg# func_ltwrapper_script_p file
1262b3e38ee4Smrg# True iff FILE is a libtool wrapper script
1263b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out
1264b3e38ee4Smrg# determined imposters.
1265b3e38ee4Smrgfunc_ltwrapper_script_p ()
1266b3e38ee4Smrg{
1267b3e38ee4Smrg    func_lalib_p "$1"
1268b3e38ee4Smrg}
126950806d53Smrg
1270b3e38ee4Smrg# func_ltwrapper_executable_p file
1271b3e38ee4Smrg# True iff FILE is a libtool wrapper executable
1272b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out
1273b3e38ee4Smrg# determined imposters.
1274b3e38ee4Smrgfunc_ltwrapper_executable_p ()
1275b3e38ee4Smrg{
1276b3e38ee4Smrg    func_ltwrapper_exec_suffix=
1277b3e38ee4Smrg    case $1 in
1278b3e38ee4Smrg    *.exe) ;;
1279b3e38ee4Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280b3e38ee4Smrg    esac
1281b3e38ee4Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282b3e38ee4Smrg}
1283af1a9c97Smrg
1284b3e38ee4Smrg# func_ltwrapper_scriptname file
1285b3e38ee4Smrg# Assumes file is an ltwrapper_executable
1286b3e38ee4Smrg# uses $file to determine the appropriate filename for a
1287b3e38ee4Smrg# temporary ltwrapper_script.
1288b3e38ee4Smrgfunc_ltwrapper_scriptname ()
1289b3e38ee4Smrg{
1290a73423d7Smrg    func_dirname_and_basename "$1" "" "."
1291a73423d7Smrg    func_stripname '' '.exe' "$func_basename_result"
1292a73423d7Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293b3e38ee4Smrg}
1294b3e38ee4Smrg
1295b3e38ee4Smrg# func_ltwrapper_p file
1296b3e38ee4Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1297b3e38ee4Smrg# This function is only a basic sanity check; it will hardly flush out
1298b3e38ee4Smrg# determined imposters.
1299b3e38ee4Smrgfunc_ltwrapper_p ()
1300b3e38ee4Smrg{
1301b3e38ee4Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302b3e38ee4Smrg}
1303b3e38ee4Smrg
1304b3e38ee4Smrg
1305b3e38ee4Smrg# func_execute_cmds commands fail_cmd
1306b3e38ee4Smrg# Execute tilde-delimited COMMANDS.
1307b3e38ee4Smrg# If FAIL_CMD is given, eval that upon failure.
1308b3e38ee4Smrg# FAIL_CMD may read-access the current command in variable CMD!
1309b3e38ee4Smrgfunc_execute_cmds ()
1310b3e38ee4Smrg{
1311b3e38ee4Smrg    $opt_debug
1312b3e38ee4Smrg    save_ifs=$IFS; IFS='~'
1313b3e38ee4Smrg    for cmd in $1; do
1314b3e38ee4Smrg      IFS=$save_ifs
1315b3e38ee4Smrg      eval cmd=\"$cmd\"
1316b3e38ee4Smrg      func_show_eval "$cmd" "${2-:}"
1317b3e38ee4Smrg    done
1318b3e38ee4Smrg    IFS=$save_ifs
1319b3e38ee4Smrg}
1320b3e38ee4Smrg
1321b3e38ee4Smrg
1322b3e38ee4Smrg# func_source file
1323b3e38ee4Smrg# Source FILE, adding directory component if necessary.
1324b3e38ee4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325b3e38ee4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326b3e38ee4Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327b3e38ee4Smrg# `FILE.' does not work on cygwin managed mounts.
1328b3e38ee4Smrgfunc_source ()
1329b3e38ee4Smrg{
1330b3e38ee4Smrg    $opt_debug
1331b3e38ee4Smrg    case $1 in
1332b3e38ee4Smrg    */* | *\\*)	. "$1" ;;
1333b3e38ee4Smrg    *)		. "./$1" ;;
1334b3e38ee4Smrg    esac
1335b3e38ee4Smrg}
1336b3e38ee4Smrg
1337b3e38ee4Smrg
1338a73423d7Smrg# func_resolve_sysroot PATH
1339a73423d7Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
1340a73423d7Smrg# func_resolve_sysroot_result
1341a73423d7Smrgfunc_resolve_sysroot ()
1342a73423d7Smrg{
1343a73423d7Smrg  func_resolve_sysroot_result=$1
1344a73423d7Smrg  case $func_resolve_sysroot_result in
1345a73423d7Smrg  =*)
1346a73423d7Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
1347a73423d7Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1348a73423d7Smrg    ;;
1349a73423d7Smrg  esac
1350a73423d7Smrg}
1351a73423d7Smrg
1352a73423d7Smrg# func_replace_sysroot PATH
1353a73423d7Smrg# If PATH begins with the sysroot, replace it with = and
1354a73423d7Smrg# store the result into func_replace_sysroot_result.
1355a73423d7Smrgfunc_replace_sysroot ()
1356a73423d7Smrg{
1357a73423d7Smrg  case "$lt_sysroot:$1" in
1358a73423d7Smrg  ?*:"$lt_sysroot"*)
1359a73423d7Smrg    func_stripname "$lt_sysroot" '' "$1"
1360a73423d7Smrg    func_replace_sysroot_result="=$func_stripname_result"
1361a73423d7Smrg    ;;
1362a73423d7Smrg  *)
1363a73423d7Smrg    # Including no sysroot.
1364a73423d7Smrg    func_replace_sysroot_result=$1
1365a73423d7Smrg    ;;
1366a73423d7Smrg  esac
1367a73423d7Smrg}
1368a73423d7Smrg
1369b3e38ee4Smrg# func_infer_tag arg
1370b3e38ee4Smrg# Infer tagged configuration to use if any are available and
1371b3e38ee4Smrg# if one wasn't chosen via the "--tag" command line option.
1372b3e38ee4Smrg# Only attempt this if the compiler in the base compile
1373b3e38ee4Smrg# command doesn't match the default compiler.
1374b3e38ee4Smrg# arg is usually of the form 'gcc ...'
1375b3e38ee4Smrgfunc_infer_tag ()
1376b3e38ee4Smrg{
1377b3e38ee4Smrg    $opt_debug
1378b3e38ee4Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1379b3e38ee4Smrg      CC_quoted=
1380b3e38ee4Smrg      for arg in $CC; do
1381a73423d7Smrg	func_append_quoted CC_quoted "$arg"
1382b3e38ee4Smrg      done
1383a73423d7Smrg      CC_expanded=`func_echo_all $CC`
1384a73423d7Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385b3e38ee4Smrg      case $@ in
1386b3e38ee4Smrg      # Blanks in the command may have been stripped by the calling shell,
1387b3e38ee4Smrg      # but not from the CC environment variable when configure was run.
1388a73423d7Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1389a73423d7Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390b3e38ee4Smrg      # Blanks at the start of $base_compile will cause this to fail
1391b3e38ee4Smrg      # if we don't check for them as well.
1392b3e38ee4Smrg      *)
1393b3e38ee4Smrg	for z in $available_tags; do
1394b3e38ee4Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395b3e38ee4Smrg	    # Evaluate the configuration.
1396b3e38ee4Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397b3e38ee4Smrg	    CC_quoted=
1398b3e38ee4Smrg	    for arg in $CC; do
1399b3e38ee4Smrg	      # Double-quote args containing other shell metacharacters.
1400a73423d7Smrg	      func_append_quoted CC_quoted "$arg"
1401b3e38ee4Smrg	    done
1402a73423d7Smrg	    CC_expanded=`func_echo_all $CC`
1403a73423d7Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404b3e38ee4Smrg	    case "$@ " in
1405a73423d7Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1406a73423d7Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407b3e38ee4Smrg	      # The compiler in the base compile command matches
1408b3e38ee4Smrg	      # the one in the tagged configuration.
1409b3e38ee4Smrg	      # Assume this is the tagged configuration we want.
1410b3e38ee4Smrg	      tagname=$z
1411b3e38ee4Smrg	      break
1412b3e38ee4Smrg	      ;;
1413b3e38ee4Smrg	    esac
1414b3e38ee4Smrg	  fi
1415b3e38ee4Smrg	done
1416b3e38ee4Smrg	# If $tagname still isn't set, then no tagged configuration
1417b3e38ee4Smrg	# was found and let the user know that the "--tag" command
1418b3e38ee4Smrg	# line option must be used.
1419b3e38ee4Smrg	if test -z "$tagname"; then
1420b3e38ee4Smrg	  func_echo "unable to infer tagged configuration"
1421b3e38ee4Smrg	  func_fatal_error "specify a tag with \`--tag'"
1422b3e38ee4Smrg#	else
1423b3e38ee4Smrg#	  func_verbose "using $tagname tagged configuration"
1424b3e38ee4Smrg	fi
1425b3e38ee4Smrg	;;
1426b3e38ee4Smrg      esac
1427b3e38ee4Smrg    fi
1428b3e38ee4Smrg}
1429b3e38ee4Smrg
1430b3e38ee4Smrg
1431b3e38ee4Smrg
1432b3e38ee4Smrg# func_write_libtool_object output_name pic_name nonpic_name
1433b3e38ee4Smrg# Create a libtool object file (analogous to a ".la" file),
1434b3e38ee4Smrg# but don't create it if we're doing a dry run.
1435b3e38ee4Smrgfunc_write_libtool_object ()
1436b3e38ee4Smrg{
1437b3e38ee4Smrg    write_libobj=${1}
1438b3e38ee4Smrg    if test "$build_libtool_libs" = yes; then
1439b3e38ee4Smrg      write_lobj=\'${2}\'
1440b3e38ee4Smrg    else
1441b3e38ee4Smrg      write_lobj=none
1442b3e38ee4Smrg    fi
1443b3e38ee4Smrg
1444b3e38ee4Smrg    if test "$build_old_libs" = yes; then
1445b3e38ee4Smrg      write_oldobj=\'${3}\'
1446b3e38ee4Smrg    else
1447b3e38ee4Smrg      write_oldobj=none
1448b3e38ee4Smrg    fi
1449b3e38ee4Smrg
1450b3e38ee4Smrg    $opt_dry_run || {
1451b3e38ee4Smrg      cat >${write_libobj}T <<EOF
1452b3e38ee4Smrg# $write_libobj - a libtool object file
1453b3e38ee4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454b3e38ee4Smrg#
1455b3e38ee4Smrg# Please DO NOT delete this file!
1456b3e38ee4Smrg# It is necessary for linking the library.
1457b3e38ee4Smrg
1458b3e38ee4Smrg# Name of the PIC object.
1459b3e38ee4Smrgpic_object=$write_lobj
1460b3e38ee4Smrg
1461b3e38ee4Smrg# Name of the non-PIC object
1462b3e38ee4Smrgnon_pic_object=$write_oldobj
1463b3e38ee4Smrg
1464b3e38ee4SmrgEOF
1465b3e38ee4Smrg      $MV "${write_libobj}T" "${write_libobj}"
1466b3e38ee4Smrg    }
1467b3e38ee4Smrg}
1468b3e38ee4Smrg
1469a73423d7Smrg
1470a73423d7Smrg##################################################
1471a73423d7Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1472a73423d7Smrg##################################################
1473a73423d7Smrg
1474a73423d7Smrg# func_convert_core_file_wine_to_w32 ARG
1475a73423d7Smrg# Helper function used by file name conversion functions when $build is *nix,
1476a73423d7Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1477a73423d7Smrg# correctly configured wine environment available, with the winepath program
1478a73423d7Smrg# in $build's $PATH.
1479a73423d7Smrg#
1480a73423d7Smrg# ARG is the $build file name to be converted to w32 format.
1481a73423d7Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1482a73423d7Smrg# be empty on error (or when ARG is empty)
1483a73423d7Smrgfunc_convert_core_file_wine_to_w32 ()
1484a73423d7Smrg{
1485a73423d7Smrg  $opt_debug
1486a73423d7Smrg  func_convert_core_file_wine_to_w32_result="$1"
1487a73423d7Smrg  if test -n "$1"; then
1488a73423d7Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
1489a73423d7Smrg    # are forced to check the contents of stdout. On the other hand, if the
1490a73423d7Smrg    # command is not found, the shell will set an exit code of 127 and print
1491a73423d7Smrg    # *an error message* to stdout. So we must check for both error code of
1492a73423d7Smrg    # zero AND non-empty stdout, which explains the odd construction:
1493a73423d7Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
1494a73423d7Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1495a73423d7Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
1496a73423d7Smrg        $SED -e "$lt_sed_naive_backslashify"`
1497a73423d7Smrg    else
1498a73423d7Smrg      func_convert_core_file_wine_to_w32_result=
1499a73423d7Smrg    fi
1500a73423d7Smrg  fi
1501a73423d7Smrg}
1502a73423d7Smrg# end: func_convert_core_file_wine_to_w32
1503a73423d7Smrg
1504a73423d7Smrg
1505a73423d7Smrg# func_convert_core_path_wine_to_w32 ARG
1506a73423d7Smrg# Helper function used by path conversion functions when $build is *nix, and
1507a73423d7Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1508a73423d7Smrg# configured wine environment available, with the winepath program in $build's
1509a73423d7Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
1510a73423d7Smrg#
1511a73423d7Smrg# ARG is path to be converted from $build format to win32.
1512a73423d7Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
1513a73423d7Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
1514a73423d7Smrg# are convertible, then the result may be empty.
1515a73423d7Smrgfunc_convert_core_path_wine_to_w32 ()
1516a73423d7Smrg{
1517a73423d7Smrg  $opt_debug
1518a73423d7Smrg  # unfortunately, winepath doesn't convert paths, only file names
1519a73423d7Smrg  func_convert_core_path_wine_to_w32_result=""
1520a73423d7Smrg  if test -n "$1"; then
1521a73423d7Smrg    oldIFS=$IFS
1522a73423d7Smrg    IFS=:
1523a73423d7Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
1524a73423d7Smrg      IFS=$oldIFS
1525a73423d7Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
1526a73423d7Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1527a73423d7Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
1528a73423d7Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1529a73423d7Smrg        else
1530a73423d7Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1531a73423d7Smrg        fi
1532a73423d7Smrg      fi
1533a73423d7Smrg    done
1534a73423d7Smrg    IFS=$oldIFS
1535a73423d7Smrg  fi
1536a73423d7Smrg}
1537a73423d7Smrg# end: func_convert_core_path_wine_to_w32
1538a73423d7Smrg
1539a73423d7Smrg
1540a73423d7Smrg# func_cygpath ARGS...
1541a73423d7Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1542a73423d7Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1543a73423d7Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1544a73423d7Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
1545a73423d7Smrg# file name or path is assumed to be in w32 format, as previously converted
1546a73423d7Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1547a73423d7Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
1548a73423d7Smrg# Cygwin format). Returns an empty string on error.
1549a73423d7Smrg#
1550a73423d7Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
1551a73423d7Smrg# be converted.
1552a73423d7Smrg#
1553a73423d7Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1554a73423d7Smrg# environment variable; do not put it in $PATH.
1555a73423d7Smrgfunc_cygpath ()
1556a73423d7Smrg{
1557a73423d7Smrg  $opt_debug
1558a73423d7Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1559a73423d7Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1560a73423d7Smrg    if test "$?" -ne 0; then
1561a73423d7Smrg      # on failure, ensure result is empty
1562a73423d7Smrg      func_cygpath_result=
1563a73423d7Smrg    fi
1564a73423d7Smrg  else
1565a73423d7Smrg    func_cygpath_result=
1566a73423d7Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1567a73423d7Smrg  fi
1568a73423d7Smrg}
1569a73423d7Smrg#end: func_cygpath
1570a73423d7Smrg
1571a73423d7Smrg
1572a73423d7Smrg# func_convert_core_msys_to_w32 ARG
1573a73423d7Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
1574a73423d7Smrg# result in func_convert_core_msys_to_w32_result.
1575a73423d7Smrgfunc_convert_core_msys_to_w32 ()
1576a73423d7Smrg{
1577a73423d7Smrg  $opt_debug
1578a73423d7Smrg  # awkward: cmd appends spaces to result
1579a73423d7Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
1580a73423d7Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1581a73423d7Smrg}
1582a73423d7Smrg#end: func_convert_core_msys_to_w32
1583a73423d7Smrg
1584a73423d7Smrg
1585a73423d7Smrg# func_convert_file_check ARG1 ARG2
1586a73423d7Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
1587a73423d7Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
1588a73423d7Smrg# func_to_host_file_result to ARG1).
1589a73423d7Smrgfunc_convert_file_check ()
1590a73423d7Smrg{
1591a73423d7Smrg  $opt_debug
1592a73423d7Smrg  if test -z "$2" && test -n "$1" ; then
1593a73423d7Smrg    func_error "Could not determine host file name corresponding to"
1594a73423d7Smrg    func_error "  \`$1'"
1595a73423d7Smrg    func_error "Continuing, but uninstalled executables may not work."
1596a73423d7Smrg    # Fallback:
1597a73423d7Smrg    func_to_host_file_result="$1"
1598a73423d7Smrg  fi
1599a73423d7Smrg}
1600a73423d7Smrg# end func_convert_file_check
1601a73423d7Smrg
1602a73423d7Smrg
1603a73423d7Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1604a73423d7Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
1605a73423d7Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1606a73423d7Smrg# func_to_host_file_result to a simplistic fallback value (see below).
1607a73423d7Smrgfunc_convert_path_check ()
1608a73423d7Smrg{
1609a73423d7Smrg  $opt_debug
1610a73423d7Smrg  if test -z "$4" && test -n "$3"; then
1611a73423d7Smrg    func_error "Could not determine the host path corresponding to"
1612a73423d7Smrg    func_error "  \`$3'"
1613a73423d7Smrg    func_error "Continuing, but uninstalled executables may not work."
1614a73423d7Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
1615a73423d7Smrg    # should not be "improved".  See libtool.info.
1616a73423d7Smrg    if test "x$1" != "x$2"; then
1617a73423d7Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
1618a73423d7Smrg      func_to_host_path_result=`echo "$3" |
1619a73423d7Smrg        $SED -e "$lt_replace_pathsep_chars"`
1620a73423d7Smrg    else
1621a73423d7Smrg      func_to_host_path_result="$3"
1622a73423d7Smrg    fi
1623a73423d7Smrg  fi
1624a73423d7Smrg}
1625a73423d7Smrg# end func_convert_path_check
1626a73423d7Smrg
1627a73423d7Smrg
1628a73423d7Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1629a73423d7Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1630a73423d7Smrg# and appending REPL if ORIG matches BACKPAT.
1631a73423d7Smrgfunc_convert_path_front_back_pathsep ()
1632a73423d7Smrg{
1633a73423d7Smrg  $opt_debug
1634a73423d7Smrg  case $4 in
1635a73423d7Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1636a73423d7Smrg    ;;
1637a73423d7Smrg  esac
1638a73423d7Smrg  case $4 in
1639a73423d7Smrg  $2 ) func_append func_to_host_path_result "$3"
1640a73423d7Smrg    ;;
1641a73423d7Smrg  esac
1642a73423d7Smrg}
1643a73423d7Smrg# end func_convert_path_front_back_pathsep
1644a73423d7Smrg
1645a73423d7Smrg
1646a73423d7Smrg##################################################
1647a73423d7Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
1648a73423d7Smrg##################################################
1649a73423d7Smrg# invoked via `$to_host_file_cmd ARG'
1650a73423d7Smrg#
1651a73423d7Smrg# In each case, ARG is the path to be converted from $build to $host format.
1652a73423d7Smrg# Result will be available in $func_to_host_file_result.
1653a73423d7Smrg
1654a73423d7Smrg
1655a73423d7Smrg# func_to_host_file ARG
1656a73423d7Smrg# Converts the file name ARG from $build format to $host format. Return result
1657a73423d7Smrg# in func_to_host_file_result.
1658a73423d7Smrgfunc_to_host_file ()
1659a73423d7Smrg{
1660a73423d7Smrg  $opt_debug
1661a73423d7Smrg  $to_host_file_cmd "$1"
1662a73423d7Smrg}
1663a73423d7Smrg# end func_to_host_file
1664a73423d7Smrg
1665a73423d7Smrg
1666a73423d7Smrg# func_to_tool_file ARG LAZY
1667a73423d7Smrg# converts the file name ARG from $build format to toolchain format. Return
1668a73423d7Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
1669a73423d7Smrg# in (the comma separated) LAZY, no conversion takes place.
1670a73423d7Smrgfunc_to_tool_file ()
1671a73423d7Smrg{
1672a73423d7Smrg  $opt_debug
1673a73423d7Smrg  case ,$2, in
1674a73423d7Smrg    *,"$to_tool_file_cmd",*)
1675a73423d7Smrg      func_to_tool_file_result=$1
1676a73423d7Smrg      ;;
1677a73423d7Smrg    *)
1678a73423d7Smrg      $to_tool_file_cmd "$1"
1679a73423d7Smrg      func_to_tool_file_result=$func_to_host_file_result
1680a73423d7Smrg      ;;
1681a73423d7Smrg  esac
1682a73423d7Smrg}
1683a73423d7Smrg# end func_to_tool_file
1684a73423d7Smrg
1685a73423d7Smrg
1686a73423d7Smrg# func_convert_file_noop ARG
1687a73423d7Smrg# Copy ARG to func_to_host_file_result.
1688a73423d7Smrgfunc_convert_file_noop ()
1689a73423d7Smrg{
1690a73423d7Smrg  func_to_host_file_result="$1"
1691a73423d7Smrg}
1692a73423d7Smrg# end func_convert_file_noop
1693a73423d7Smrg
1694a73423d7Smrg
1695a73423d7Smrg# func_convert_file_msys_to_w32 ARG
1696a73423d7Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1697a73423d7Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1698a73423d7Smrg# func_to_host_file_result.
1699a73423d7Smrgfunc_convert_file_msys_to_w32 ()
1700a73423d7Smrg{
1701a73423d7Smrg  $opt_debug
1702a73423d7Smrg  func_to_host_file_result="$1"
1703a73423d7Smrg  if test -n "$1"; then
1704a73423d7Smrg    func_convert_core_msys_to_w32 "$1"
1705a73423d7Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1706a73423d7Smrg  fi
1707a73423d7Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1708a73423d7Smrg}
1709a73423d7Smrg# end func_convert_file_msys_to_w32
1710a73423d7Smrg
1711a73423d7Smrg
1712a73423d7Smrg# func_convert_file_cygwin_to_w32 ARG
1713a73423d7Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
1714a73423d7Smrg# func_to_host_file_result.
1715a73423d7Smrgfunc_convert_file_cygwin_to_w32 ()
1716a73423d7Smrg{
1717a73423d7Smrg  $opt_debug
1718a73423d7Smrg  func_to_host_file_result="$1"
1719a73423d7Smrg  if test -n "$1"; then
1720a73423d7Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1721a73423d7Smrg    # LT_CYGPATH in this case.
1722a73423d7Smrg    func_to_host_file_result=`cygpath -m "$1"`
1723a73423d7Smrg  fi
1724a73423d7Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1725a73423d7Smrg}
1726a73423d7Smrg# end func_convert_file_cygwin_to_w32
1727a73423d7Smrg
1728a73423d7Smrg
1729a73423d7Smrg# func_convert_file_nix_to_w32 ARG
1730a73423d7Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1731a73423d7Smrg# and a working winepath. Returns result in func_to_host_file_result.
1732a73423d7Smrgfunc_convert_file_nix_to_w32 ()
1733a73423d7Smrg{
1734a73423d7Smrg  $opt_debug
1735a73423d7Smrg  func_to_host_file_result="$1"
1736a73423d7Smrg  if test -n "$1"; then
1737a73423d7Smrg    func_convert_core_file_wine_to_w32 "$1"
1738a73423d7Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1739a73423d7Smrg  fi
1740a73423d7Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1741a73423d7Smrg}
1742a73423d7Smrg# end func_convert_file_nix_to_w32
1743a73423d7Smrg
1744a73423d7Smrg
1745a73423d7Smrg# func_convert_file_msys_to_cygwin ARG
1746a73423d7Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1747a73423d7Smrg# Returns result in func_to_host_file_result.
1748a73423d7Smrgfunc_convert_file_msys_to_cygwin ()
1749a73423d7Smrg{
1750a73423d7Smrg  $opt_debug
1751a73423d7Smrg  func_to_host_file_result="$1"
1752a73423d7Smrg  if test -n "$1"; then
1753a73423d7Smrg    func_convert_core_msys_to_w32 "$1"
1754a73423d7Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
1755a73423d7Smrg    func_to_host_file_result="$func_cygpath_result"
1756a73423d7Smrg  fi
1757a73423d7Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1758a73423d7Smrg}
1759a73423d7Smrg# end func_convert_file_msys_to_cygwin
1760a73423d7Smrg
1761a73423d7Smrg
1762a73423d7Smrg# func_convert_file_nix_to_cygwin ARG
1763a73423d7Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1764a73423d7Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1765a73423d7Smrg# in func_to_host_file_result.
1766a73423d7Smrgfunc_convert_file_nix_to_cygwin ()
1767a73423d7Smrg{
1768a73423d7Smrg  $opt_debug
1769a73423d7Smrg  func_to_host_file_result="$1"
1770a73423d7Smrg  if test -n "$1"; then
1771a73423d7Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1772a73423d7Smrg    func_convert_core_file_wine_to_w32 "$1"
1773a73423d7Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
1774a73423d7Smrg    func_to_host_file_result="$func_cygpath_result"
1775a73423d7Smrg  fi
1776a73423d7Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1777a73423d7Smrg}
1778a73423d7Smrg# end func_convert_file_nix_to_cygwin
1779a73423d7Smrg
1780a73423d7Smrg
1781a73423d7Smrg#############################################
1782a73423d7Smrg# $build to $host PATH CONVERSION FUNCTIONS #
1783a73423d7Smrg#############################################
1784a73423d7Smrg# invoked via `$to_host_path_cmd ARG'
1785a73423d7Smrg#
1786a73423d7Smrg# In each case, ARG is the path to be converted from $build to $host format.
1787a73423d7Smrg# The result will be available in $func_to_host_path_result.
1788a73423d7Smrg#
1789a73423d7Smrg# Path separators are also converted from $build format to $host format.  If
1790a73423d7Smrg# ARG begins or ends with a path separator character, it is preserved (but
1791a73423d7Smrg# converted to $host format) on output.
1792a73423d7Smrg#
1793a73423d7Smrg# All path conversion functions are named using the following convention:
1794a73423d7Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
1795a73423d7Smrg#   path conversion function         : func_convert_path_X_to_Y ()
1796a73423d7Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
1797a73423d7Smrg# same.  If conversion functions are added for new $build/$host combinations,
1798a73423d7Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1799a73423d7Smrg# will break.
1800a73423d7Smrg
1801a73423d7Smrg
1802a73423d7Smrg# func_init_to_host_path_cmd
1803a73423d7Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1804a73423d7Smrg# appropriate value, based on the value of $to_host_file_cmd.
1805a73423d7Smrgto_host_path_cmd=
1806a73423d7Smrgfunc_init_to_host_path_cmd ()
1807a73423d7Smrg{
1808a73423d7Smrg  $opt_debug
1809a73423d7Smrg  if test -z "$to_host_path_cmd"; then
1810a73423d7Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
1811a73423d7Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1812a73423d7Smrg  fi
1813a73423d7Smrg}
1814a73423d7Smrg
1815a73423d7Smrg
1816a73423d7Smrg# func_to_host_path ARG
1817a73423d7Smrg# Converts the path ARG from $build format to $host format. Return result
1818a73423d7Smrg# in func_to_host_path_result.
1819a73423d7Smrgfunc_to_host_path ()
1820a73423d7Smrg{
1821a73423d7Smrg  $opt_debug
1822a73423d7Smrg  func_init_to_host_path_cmd
1823a73423d7Smrg  $to_host_path_cmd "$1"
1824a73423d7Smrg}
1825a73423d7Smrg# end func_to_host_path
1826a73423d7Smrg
1827a73423d7Smrg
1828a73423d7Smrg# func_convert_path_noop ARG
1829a73423d7Smrg# Copy ARG to func_to_host_path_result.
1830a73423d7Smrgfunc_convert_path_noop ()
1831a73423d7Smrg{
1832a73423d7Smrg  func_to_host_path_result="$1"
1833a73423d7Smrg}
1834a73423d7Smrg# end func_convert_path_noop
1835a73423d7Smrg
1836a73423d7Smrg
1837a73423d7Smrg# func_convert_path_msys_to_w32 ARG
1838a73423d7Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1839a73423d7Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1840a73423d7Smrg# func_to_host_path_result.
1841a73423d7Smrgfunc_convert_path_msys_to_w32 ()
1842a73423d7Smrg{
1843a73423d7Smrg  $opt_debug
1844a73423d7Smrg  func_to_host_path_result="$1"
1845a73423d7Smrg  if test -n "$1"; then
1846a73423d7Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
1847a73423d7Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1848a73423d7Smrg    # and winepath ignores them completely.
1849a73423d7Smrg    func_stripname : : "$1"
1850a73423d7Smrg    func_to_host_path_tmp1=$func_stripname_result
1851a73423d7Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1852a73423d7Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1853a73423d7Smrg    func_convert_path_check : ";" \
1854a73423d7Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1855a73423d7Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1856a73423d7Smrg  fi
1857a73423d7Smrg}
1858a73423d7Smrg# end func_convert_path_msys_to_w32
1859a73423d7Smrg
1860a73423d7Smrg
1861a73423d7Smrg# func_convert_path_cygwin_to_w32 ARG
1862a73423d7Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
1863a73423d7Smrg# func_to_host_file_result.
1864a73423d7Smrgfunc_convert_path_cygwin_to_w32 ()
1865a73423d7Smrg{
1866a73423d7Smrg  $opt_debug
1867a73423d7Smrg  func_to_host_path_result="$1"
1868a73423d7Smrg  if test -n "$1"; then
1869a73423d7Smrg    # See func_convert_path_msys_to_w32:
1870a73423d7Smrg    func_stripname : : "$1"
1871a73423d7Smrg    func_to_host_path_tmp1=$func_stripname_result
1872a73423d7Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1873a73423d7Smrg    func_convert_path_check : ";" \
1874a73423d7Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1875a73423d7Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1876a73423d7Smrg  fi
1877a73423d7Smrg}
1878a73423d7Smrg# end func_convert_path_cygwin_to_w32
1879a73423d7Smrg
1880a73423d7Smrg
1881a73423d7Smrg# func_convert_path_nix_to_w32 ARG
1882a73423d7Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1883a73423d7Smrg# a working winepath.  Returns result in func_to_host_file_result.
1884a73423d7Smrgfunc_convert_path_nix_to_w32 ()
1885a73423d7Smrg{
1886a73423d7Smrg  $opt_debug
1887a73423d7Smrg  func_to_host_path_result="$1"
1888a73423d7Smrg  if test -n "$1"; then
1889a73423d7Smrg    # See func_convert_path_msys_to_w32:
1890a73423d7Smrg    func_stripname : : "$1"
1891a73423d7Smrg    func_to_host_path_tmp1=$func_stripname_result
1892a73423d7Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1893a73423d7Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1894a73423d7Smrg    func_convert_path_check : ";" \
1895a73423d7Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1896a73423d7Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1897a73423d7Smrg  fi
1898a73423d7Smrg}
1899a73423d7Smrg# end func_convert_path_nix_to_w32
1900a73423d7Smrg
1901a73423d7Smrg
1902a73423d7Smrg# func_convert_path_msys_to_cygwin ARG
1903a73423d7Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1904a73423d7Smrg# Returns result in func_to_host_file_result.
1905a73423d7Smrgfunc_convert_path_msys_to_cygwin ()
1906a73423d7Smrg{
1907a73423d7Smrg  $opt_debug
1908a73423d7Smrg  func_to_host_path_result="$1"
1909a73423d7Smrg  if test -n "$1"; then
1910a73423d7Smrg    # See func_convert_path_msys_to_w32:
1911a73423d7Smrg    func_stripname : : "$1"
1912a73423d7Smrg    func_to_host_path_tmp1=$func_stripname_result
1913a73423d7Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1914a73423d7Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
1915a73423d7Smrg    func_to_host_path_result="$func_cygpath_result"
1916a73423d7Smrg    func_convert_path_check : : \
1917a73423d7Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1918a73423d7Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1919a73423d7Smrg  fi
1920a73423d7Smrg}
1921a73423d7Smrg# end func_convert_path_msys_to_cygwin
1922a73423d7Smrg
1923a73423d7Smrg
1924a73423d7Smrg# func_convert_path_nix_to_cygwin ARG
1925a73423d7Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1926a73423d7Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1927a73423d7Smrg# func_to_host_file_result.
1928a73423d7Smrgfunc_convert_path_nix_to_cygwin ()
1929a73423d7Smrg{
1930a73423d7Smrg  $opt_debug
1931a73423d7Smrg  func_to_host_path_result="$1"
1932a73423d7Smrg  if test -n "$1"; then
1933a73423d7Smrg    # Remove leading and trailing path separator characters from
1934a73423d7Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
1935a73423d7Smrg    # into '.;' and ';.', and winepath ignores them completely.
1936a73423d7Smrg    func_stripname : : "$1"
1937a73423d7Smrg    func_to_host_path_tmp1=$func_stripname_result
1938a73423d7Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1939a73423d7Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
1940a73423d7Smrg    func_to_host_path_result="$func_cygpath_result"
1941a73423d7Smrg    func_convert_path_check : : \
1942a73423d7Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1943a73423d7Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1944a73423d7Smrg  fi
1945a73423d7Smrg}
1946a73423d7Smrg# end func_convert_path_nix_to_cygwin
1947a73423d7Smrg
1948a73423d7Smrg
1949b3e38ee4Smrg# func_mode_compile arg...
1950b3e38ee4Smrgfunc_mode_compile ()
1951b3e38ee4Smrg{
1952b3e38ee4Smrg    $opt_debug
1953b3e38ee4Smrg    # Get the compilation command and the source file.
1954b3e38ee4Smrg    base_compile=
1955b3e38ee4Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956b3e38ee4Smrg    suppress_opt=yes
1957b3e38ee4Smrg    suppress_output=
1958b3e38ee4Smrg    arg_mode=normal
1959b3e38ee4Smrg    libobj=
1960b3e38ee4Smrg    later=
1961b3e38ee4Smrg    pie_flag=
1962b3e38ee4Smrg
1963b3e38ee4Smrg    for arg
1964b3e38ee4Smrg    do
1965b3e38ee4Smrg      case $arg_mode in
1966b3e38ee4Smrg      arg  )
1967b3e38ee4Smrg	# do not "continue".  Instead, add this to base_compile
1968b3e38ee4Smrg	lastarg="$arg"
1969b3e38ee4Smrg	arg_mode=normal
1970b3e38ee4Smrg	;;
1971b3e38ee4Smrg
1972b3e38ee4Smrg      target )
1973b3e38ee4Smrg	libobj="$arg"
1974b3e38ee4Smrg	arg_mode=normal
1975b3e38ee4Smrg	continue
1976b3e38ee4Smrg	;;
1977b3e38ee4Smrg
1978b3e38ee4Smrg      normal )
1979b3e38ee4Smrg	# Accept any command-line options.
1980b3e38ee4Smrg	case $arg in
1981b3e38ee4Smrg	-o)
1982b3e38ee4Smrg	  test -n "$libobj" && \
1983b3e38ee4Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984b3e38ee4Smrg	  arg_mode=target
1985b3e38ee4Smrg	  continue
1986b3e38ee4Smrg	  ;;
1987b3e38ee4Smrg
1988b3e38ee4Smrg	-pie | -fpie | -fPIE)
1989a73423d7Smrg          func_append pie_flag " $arg"
1990b3e38ee4Smrg	  continue
1991b3e38ee4Smrg	  ;;
1992b3e38ee4Smrg
1993b3e38ee4Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1994a73423d7Smrg	  func_append later " $arg"
1995b3e38ee4Smrg	  continue
1996b3e38ee4Smrg	  ;;
1997b3e38ee4Smrg
1998b3e38ee4Smrg	-no-suppress)
199950806d53Smrg	  suppress_opt=no
200050806d53Smrg	  continue
200150806d53Smrg	  ;;
200250806d53Smrg
200350806d53Smrg	-Xcompiler)
200450806d53Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
200550806d53Smrg	  continue      #  The current "srcfile" will either be retained or
200650806d53Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
200750806d53Smrg
200850806d53Smrg	-Wc,*)
2009b3e38ee4Smrg	  func_stripname '-Wc,' '' "$arg"
2010b3e38ee4Smrg	  args=$func_stripname_result
201150806d53Smrg	  lastarg=
201250806d53Smrg	  save_ifs="$IFS"; IFS=','
2013b3e38ee4Smrg	  for arg in $args; do
201450806d53Smrg	    IFS="$save_ifs"
2015a73423d7Smrg	    func_append_quoted lastarg "$arg"
201650806d53Smrg	  done
201750806d53Smrg	  IFS="$save_ifs"
2018b3e38ee4Smrg	  func_stripname ' ' '' "$lastarg"
2019b3e38ee4Smrg	  lastarg=$func_stripname_result
202050806d53Smrg
202150806d53Smrg	  # Add the arguments to base_compile.
2022a73423d7Smrg	  func_append base_compile " $lastarg"
202350806d53Smrg	  continue
202450806d53Smrg	  ;;
202550806d53Smrg
2026b3e38ee4Smrg	*)
202750806d53Smrg	  # Accept the current argument as the source file.
202850806d53Smrg	  # The previous "srcfile" becomes the current argument.
202950806d53Smrg	  #
203050806d53Smrg	  lastarg="$srcfile"
203150806d53Smrg	  srcfile="$arg"
203250806d53Smrg	  ;;
203350806d53Smrg	esac  #  case $arg
203450806d53Smrg	;;
203550806d53Smrg      esac    #  case $arg_mode
203650806d53Smrg
203750806d53Smrg      # Aesthetically quote the previous argument.
2038a73423d7Smrg      func_append_quoted base_compile "$lastarg"
203950806d53Smrg    done # for arg
204050806d53Smrg
204150806d53Smrg    case $arg_mode in
204250806d53Smrg    arg)
2043b3e38ee4Smrg      func_fatal_error "you must specify an argument for -Xcompile"
204450806d53Smrg      ;;
204550806d53Smrg    target)
2046b3e38ee4Smrg      func_fatal_error "you must specify a target with \`-o'"
204750806d53Smrg      ;;
204850806d53Smrg    *)
204950806d53Smrg      # Get the name of the library object.
2050b3e38ee4Smrg      test -z "$libobj" && {
2051b3e38ee4Smrg	func_basename "$srcfile"
2052b3e38ee4Smrg	libobj="$func_basename_result"
2053b3e38ee4Smrg      }
205450806d53Smrg      ;;
205550806d53Smrg    esac
205650806d53Smrg
205750806d53Smrg    # Recognize several different file suffixes.
205850806d53Smrg    # If the user specifies -o file.o, it is replaced with file.lo
205950806d53Smrg    case $libobj in
2060b3e38ee4Smrg    *.[cCFSifmso] | \
2061b3e38ee4Smrg    *.ada | *.adb | *.ads | *.asm | \
2062b3e38ee4Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063a73423d7Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064b3e38ee4Smrg      func_xform "$libobj"
2065b3e38ee4Smrg      libobj=$func_xform_result
2066b3e38ee4Smrg      ;;
206750806d53Smrg    esac
206850806d53Smrg
206950806d53Smrg    case $libobj in
2070b3e38ee4Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
207150806d53Smrg    *)
2072b3e38ee4Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
207350806d53Smrg      ;;
207450806d53Smrg    esac
207550806d53Smrg
207650806d53Smrg    func_infer_tag $base_compile
207750806d53Smrg
207850806d53Smrg    for arg in $later; do
207950806d53Smrg      case $arg in
2080b3e38ee4Smrg      -shared)
2081b3e38ee4Smrg	test "$build_libtool_libs" != yes && \
2082b3e38ee4Smrg	  func_fatal_configuration "can not build a shared library"
2083b3e38ee4Smrg	build_old_libs=no
2084b3e38ee4Smrg	continue
2085b3e38ee4Smrg	;;
2086b3e38ee4Smrg
208750806d53Smrg      -static)
2088b3e38ee4Smrg	build_libtool_libs=no
208950806d53Smrg	build_old_libs=yes
209050806d53Smrg	continue
209150806d53Smrg	;;
209250806d53Smrg
209350806d53Smrg      -prefer-pic)
209450806d53Smrg	pic_mode=yes
209550806d53Smrg	continue
209650806d53Smrg	;;
209750806d53Smrg
209850806d53Smrg      -prefer-non-pic)
209950806d53Smrg	pic_mode=no
210050806d53Smrg	continue
210150806d53Smrg	;;
210250806d53Smrg      esac
210350806d53Smrg    done
210450806d53Smrg
2105b3e38ee4Smrg    func_quote_for_eval "$libobj"
2106b3e38ee4Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107b3e38ee4Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108b3e38ee4Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109b3e38ee4Smrg    func_dirname_and_basename "$obj" "/" ""
2110b3e38ee4Smrg    objname="$func_basename_result"
2111b3e38ee4Smrg    xdir="$func_dirname_result"
211250806d53Smrg    lobj=${xdir}$objdir/$objname
211350806d53Smrg
2114b3e38ee4Smrg    test -z "$base_compile" && \
2115b3e38ee4Smrg      func_fatal_help "you must specify a compilation command"
211650806d53Smrg
211750806d53Smrg    # Delete any leftover library objects.
211850806d53Smrg    if test "$build_old_libs" = yes; then
211950806d53Smrg      removelist="$obj $lobj $libobj ${libobj}T"
212050806d53Smrg    else
212150806d53Smrg      removelist="$lobj $libobj ${libobj}T"
212250806d53Smrg    fi
212350806d53Smrg
212450806d53Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
212550806d53Smrg    case $host_os in
2126b3e38ee4Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
212750806d53Smrg      pic_mode=default
212850806d53Smrg      ;;
212950806d53Smrg    esac
213050806d53Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
213150806d53Smrg      # non-PIC code in shared libraries is not supported
213250806d53Smrg      pic_mode=default
213350806d53Smrg    fi
213450806d53Smrg
213550806d53Smrg    # Calculate the filename of the output object if compiler does
213650806d53Smrg    # not support -o with -c
213750806d53Smrg    if test "$compiler_c_o" = no; then
2138a73423d7Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
213950806d53Smrg      lockfile="$output_obj.lock"
214050806d53Smrg    else
214150806d53Smrg      output_obj=
214250806d53Smrg      need_locks=no
214350806d53Smrg      lockfile=
214450806d53Smrg    fi
214550806d53Smrg
214650806d53Smrg    # Lock this critical section if it is needed
214750806d53Smrg    # We use this script file to make the link, it avoids creating a new file
214850806d53Smrg    if test "$need_locks" = yes; then
2149b3e38ee4Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150b3e38ee4Smrg	func_echo "Waiting for $lockfile to be removed"
215150806d53Smrg	sleep 2
215250806d53Smrg      done
215350806d53Smrg    elif test "$need_locks" = warn; then
215450806d53Smrg      if test -f "$lockfile"; then
2155b3e38ee4Smrg	$ECHO "\
215650806d53Smrg*** ERROR, $lockfile exists and contains:
215750806d53Smrg`cat $lockfile 2>/dev/null`
215850806d53Smrg
215950806d53SmrgThis indicates that another process is trying to use the same
216050806d53Smrgtemporary object file, and libtool could not work around it because
216150806d53Smrgyour compiler does not support \`-c' and \`-o' together.  If you
216250806d53Smrgrepeat this compilation, it may succeed, by chance, but you had better
216350806d53Smrgavoid parallel builds (make -j) in this platform, or get a better
216450806d53Smrgcompiler."
216550806d53Smrg
2166b3e38ee4Smrg	$opt_dry_run || $RM $removelist
216750806d53Smrg	exit $EXIT_FAILURE
216850806d53Smrg      fi
2169a73423d7Smrg      func_append removelist " $output_obj"
2170b3e38ee4Smrg      $ECHO "$srcfile" > "$lockfile"
217150806d53Smrg    fi
217250806d53Smrg
2173b3e38ee4Smrg    $opt_dry_run || $RM $removelist
2174a73423d7Smrg    func_append removelist " $lockfile"
2175b3e38ee4Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176b3e38ee4Smrg
2177a73423d7Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2178a73423d7Smrg    srcfile=$func_to_tool_file_result
2179b3e38ee4Smrg    func_quote_for_eval "$srcfile"
2180b3e38ee4Smrg    qsrcfile=$func_quote_for_eval_result
218150806d53Smrg
218250806d53Smrg    # Only build a PIC object if we are building libtool libraries.
218350806d53Smrg    if test "$build_libtool_libs" = yes; then
218450806d53Smrg      # Without this assignment, base_compile gets emptied.
218550806d53Smrg      fbsd_hideous_sh_bug=$base_compile
218650806d53Smrg
218750806d53Smrg      if test "$pic_mode" != no; then
218850806d53Smrg	command="$base_compile $qsrcfile $pic_flag"
218950806d53Smrg      else
219050806d53Smrg	# Don't build PIC code
219150806d53Smrg	command="$base_compile $qsrcfile"
219250806d53Smrg      fi
219350806d53Smrg
2194b3e38ee4Smrg      func_mkdir_p "$xdir$objdir"
219550806d53Smrg
219650806d53Smrg      if test -z "$output_obj"; then
219750806d53Smrg	# Place PIC objects in $objdir
2198a73423d7Smrg	func_append command " -o $lobj"
219950806d53Smrg      fi
220050806d53Smrg
2201b3e38ee4Smrg      func_show_eval_locale "$command"	\
2202b3e38ee4Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
220350806d53Smrg
220450806d53Smrg      if test "$need_locks" = warn &&
220550806d53Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206b3e38ee4Smrg	$ECHO "\
220750806d53Smrg*** ERROR, $lockfile contains:
220850806d53Smrg`cat $lockfile 2>/dev/null`
220950806d53Smrg
221050806d53Smrgbut it should contain:
221150806d53Smrg$srcfile
221250806d53Smrg
221350806d53SmrgThis indicates that another process is trying to use the same
221450806d53Smrgtemporary object file, and libtool could not work around it because
221550806d53Smrgyour compiler does not support \`-c' and \`-o' together.  If you
221650806d53Smrgrepeat this compilation, it may succeed, by chance, but you had better
221750806d53Smrgavoid parallel builds (make -j) in this platform, or get a better
221850806d53Smrgcompiler."
221950806d53Smrg
2220b3e38ee4Smrg	$opt_dry_run || $RM $removelist
222150806d53Smrg	exit $EXIT_FAILURE
222250806d53Smrg      fi
222350806d53Smrg
222450806d53Smrg      # Just move the object if needed, then go on to compile the next one
222550806d53Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226b3e38ee4Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227b3e38ee4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
222850806d53Smrg      fi
222950806d53Smrg
223050806d53Smrg      # Allow error messages only from the first compilation.
223150806d53Smrg      if test "$suppress_opt" = yes; then
2232b3e38ee4Smrg	suppress_output=' >/dev/null 2>&1'
223350806d53Smrg      fi
223450806d53Smrg    fi
223550806d53Smrg
223650806d53Smrg    # Only build a position-dependent object if we build old libraries.
223750806d53Smrg    if test "$build_old_libs" = yes; then
223850806d53Smrg      if test "$pic_mode" != yes; then
223950806d53Smrg	# Don't build PIC code
2240b3e38ee4Smrg	command="$base_compile $qsrcfile$pie_flag"
224150806d53Smrg      else
224250806d53Smrg	command="$base_compile $qsrcfile $pic_flag"
224350806d53Smrg      fi
224450806d53Smrg      if test "$compiler_c_o" = yes; then
2245a73423d7Smrg	func_append command " -o $obj"
224650806d53Smrg      fi
224750806d53Smrg
224850806d53Smrg      # Suppress compiler output if we already did a PIC compilation.
2249a73423d7Smrg      func_append command "$suppress_output"
2250b3e38ee4Smrg      func_show_eval_locale "$command" \
2251b3e38ee4Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
225250806d53Smrg
225350806d53Smrg      if test "$need_locks" = warn &&
225450806d53Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255b3e38ee4Smrg	$ECHO "\
225650806d53Smrg*** ERROR, $lockfile contains:
225750806d53Smrg`cat $lockfile 2>/dev/null`
225850806d53Smrg
225950806d53Smrgbut it should contain:
226050806d53Smrg$srcfile
226150806d53Smrg
226250806d53SmrgThis indicates that another process is trying to use the same
226350806d53Smrgtemporary object file, and libtool could not work around it because
226450806d53Smrgyour compiler does not support \`-c' and \`-o' together.  If you
226550806d53Smrgrepeat this compilation, it may succeed, by chance, but you had better
226650806d53Smrgavoid parallel builds (make -j) in this platform, or get a better
226750806d53Smrgcompiler."
226850806d53Smrg
2269b3e38ee4Smrg	$opt_dry_run || $RM $removelist
227050806d53Smrg	exit $EXIT_FAILURE
227150806d53Smrg      fi
227250806d53Smrg
227350806d53Smrg      # Just move the object if needed
227450806d53Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275b3e38ee4Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276b3e38ee4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
227750806d53Smrg      fi
227850806d53Smrg    fi
227950806d53Smrg
2280b3e38ee4Smrg    $opt_dry_run || {
2281b3e38ee4Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
228250806d53Smrg
2283b3e38ee4Smrg      # Unlock the critical section if it was locked
2284b3e38ee4Smrg      if test "$need_locks" != no; then
2285b3e38ee4Smrg	removelist=$lockfile
2286b3e38ee4Smrg        $RM "$lockfile"
2287b3e38ee4Smrg      fi
2288b3e38ee4Smrg    }
228950806d53Smrg
229050806d53Smrg    exit $EXIT_SUCCESS
2291b3e38ee4Smrg}
229250806d53Smrg
2293b3e38ee4Smrg$opt_help || {
2294a73423d7Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295b3e38ee4Smrg}
229650806d53Smrg
2297b3e38ee4Smrgfunc_mode_help ()
2298b3e38ee4Smrg{
2299b3e38ee4Smrg    # We need to display help for each of the modes.
2300a73423d7Smrg    case $opt_mode in
2301b3e38ee4Smrg      "")
2302b3e38ee4Smrg        # Generic help is extracted from the usage comments
2303b3e38ee4Smrg        # at the start of this file.
2304b3e38ee4Smrg        func_help
2305b3e38ee4Smrg        ;;
230650806d53Smrg
2307b3e38ee4Smrg      clean)
2308b3e38ee4Smrg        $ECHO \
2309b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
231050806d53Smrg
2311b3e38ee4SmrgRemove files from the build directory.
231250806d53Smrg
2313b3e38ee4SmrgRM is the name of the program to use to delete files associated with each FILE
2314b3e38ee4Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315b3e38ee4Smrgto RM.
231650806d53Smrg
2317b3e38ee4SmrgIf FILE is a libtool library, object or program, all the files associated
2318b3e38ee4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319b3e38ee4Smrg        ;;
232050806d53Smrg
2321b3e38ee4Smrg      compile)
2322b3e38ee4Smrg      $ECHO \
2323b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
232450806d53Smrg
2325b3e38ee4SmrgCompile a source file into a libtool library object.
232650806d53Smrg
2327b3e38ee4SmrgThis mode accepts the following additional options:
232850806d53Smrg
2329b3e38ee4Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330b3e38ee4Smrg  -no-suppress      do not suppress compiler output for multiple passes
2331a73423d7Smrg  -prefer-pic       try to build PIC objects only
2332a73423d7Smrg  -prefer-non-pic   try to build non-PIC objects only
2333b3e38ee4Smrg  -shared           do not build a \`.o' file suitable for static linking
2334b3e38ee4Smrg  -static           only build a \`.o' file suitable for static linking
2335a73423d7Smrg  -Wc,FLAG          pass FLAG directly to the compiler
233650806d53Smrg
2337b3e38ee4SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338b3e38ee4Smrgfrom the given SOURCEFILE.
233950806d53Smrg
2340b3e38ee4SmrgThe output file name is determined by removing the directory component from
2341b3e38ee4SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342b3e38ee4Smrglibrary object suffix, \`.lo'."
2343b3e38ee4Smrg        ;;
234450806d53Smrg
2345b3e38ee4Smrg      execute)
2346b3e38ee4Smrg        $ECHO \
2347b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
234850806d53Smrg
2349b3e38ee4SmrgAutomatically set library path, then run a program.
235050806d53Smrg
2351b3e38ee4SmrgThis mode accepts the following additional options:
235250806d53Smrg
2353b3e38ee4Smrg  -dlopen FILE      add the directory containing FILE to the library path
235450806d53Smrg
2355b3e38ee4SmrgThis mode sets the library path environment variable according to \`-dlopen'
2356b3e38ee4Smrgflags.
235750806d53Smrg
2358b3e38ee4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359b3e38ee4Smrginto their corresponding uninstalled binary, and any of their required library
2360b3e38ee4Smrgdirectories are added to the library path.
236150806d53Smrg
2362b3e38ee4SmrgThen, COMMAND is executed, with ARGS as arguments."
2363b3e38ee4Smrg        ;;
236450806d53Smrg
2365b3e38ee4Smrg      finish)
2366b3e38ee4Smrg        $ECHO \
2367b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
236850806d53Smrg
2369b3e38ee4SmrgComplete the installation of libtool libraries.
237050806d53Smrg
2371b3e38ee4SmrgEach LIBDIR is a directory that contains libtool libraries.
237250806d53Smrg
2373b3e38ee4SmrgThe commands that this mode executes may require superuser privileges.  Use
2374b3e38ee4Smrgthe \`--dry-run' option if you just want to see what would be executed."
2375b3e38ee4Smrg        ;;
237650806d53Smrg
2377b3e38ee4Smrg      install)
2378b3e38ee4Smrg        $ECHO \
2379b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
238050806d53Smrg
2381b3e38ee4SmrgInstall executables or libraries.
238250806d53Smrg
2383b3e38ee4SmrgINSTALL-COMMAND is the installation command.  The first component should be
2384b3e38ee4Smrgeither the \`install' or \`cp' program.
238550806d53Smrg
2386b3e38ee4SmrgThe following components of INSTALL-COMMAND are treated specially:
238750806d53Smrg
2388a73423d7Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
238950806d53Smrg
2390b3e38ee4SmrgThe rest of the components are interpreted as arguments to that command (only
2391b3e38ee4SmrgBSD-compatible install options are recognized)."
2392b3e38ee4Smrg        ;;
239350806d53Smrg
2394b3e38ee4Smrg      link)
2395b3e38ee4Smrg        $ECHO \
2396b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
239750806d53Smrg
2398b3e38ee4SmrgLink object files or libraries together to form another library, or to
2399b3e38ee4Smrgcreate an executable program.
240050806d53Smrg
2401b3e38ee4SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402b3e38ee4Smrga program from several object files.
240350806d53Smrg
2404b3e38ee4SmrgThe following components of LINK-COMMAND are treated specially:
240550806d53Smrg
2406b3e38ee4Smrg  -all-static       do not do any dynamic linking at all
2407b3e38ee4Smrg  -avoid-version    do not add a version suffix if possible
2408a73423d7Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
2409a73423d7Smrg                    libraries must be found in the PATH setting at runtime)
2410b3e38ee4Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411b3e38ee4Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412b3e38ee4Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413b3e38ee4Smrg  -export-symbols SYMFILE
2414b3e38ee4Smrg                    try to export only the symbols listed in SYMFILE
2415b3e38ee4Smrg  -export-symbols-regex REGEX
2416b3e38ee4Smrg                    try to export only the symbols matching REGEX
2417b3e38ee4Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2418b3e38ee4Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419b3e38ee4Smrg  -module           build a library that can dlopened
2420b3e38ee4Smrg  -no-fast-install  disable the fast-install mode
2421b3e38ee4Smrg  -no-install       link a not-installable executable
2422b3e38ee4Smrg  -no-undefined     declare that a library does not refer to external symbols
2423b3e38ee4Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424b3e38ee4Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425b3e38ee4Smrg  -precious-files-regex REGEX
2426b3e38ee4Smrg                    don't remove output files matching REGEX
2427b3e38ee4Smrg  -release RELEASE  specify package release information
2428b3e38ee4Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429b3e38ee4Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430b3e38ee4Smrg  -shared           only do dynamic linking of libtool libraries
2431b3e38ee4Smrg  -shrext SUFFIX    override the standard shared library file extension
2432b3e38ee4Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433b3e38ee4Smrg  -static-libtool-libs
2434b3e38ee4Smrg                    do not do any dynamic linking of libtool libraries
2435b3e38ee4Smrg  -version-info CURRENT[:REVISION[:AGE]]
2436b3e38ee4Smrg                    specify library version info [each variable defaults to 0]
2437b3e38ee4Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
2438a73423d7Smrg  -Wc,FLAG
2439a73423d7Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2440a73423d7Smrg  -Wl,FLAG
2441a73423d7Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2442a73423d7Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
244350806d53Smrg
2444b3e38ee4SmrgAll other options (arguments beginning with \`-') are ignored.
244550806d53Smrg
2446b3e38ee4SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447b3e38ee4Smrgtreated as uninstalled libtool libraries, other files are standard or library
2448b3e38ee4Smrgobject files.
244950806d53Smrg
2450b3e38ee4SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451b3e38ee4Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452b3e38ee4Smrgrequired, except when creating a convenience library.
245350806d53Smrg
2454b3e38ee4SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455b3e38ee4Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
245650806d53Smrg
2457b3e38ee4SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458b3e38ee4Smrgis created, otherwise an executable program is created."
2459a18ebfb2Smrg        ;;
246050806d53Smrg
2461b3e38ee4Smrg      uninstall)
2462b3e38ee4Smrg        $ECHO \
2463b3e38ee4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
246450806d53Smrg
2465b3e38ee4SmrgRemove libraries from an installation directory.
246650806d53Smrg
2467b3e38ee4SmrgRM is the name of the program to use to delete files associated with each FILE
2468b3e38ee4Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469b3e38ee4Smrgto RM.
2470af1a9c97Smrg
2471b3e38ee4SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472b3e38ee4SmrgOtherwise, only FILE itself is deleted using RM."
2473b3e38ee4Smrg        ;;
2474af1a9c97Smrg
2475b3e38ee4Smrg      *)
2476a73423d7Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477b3e38ee4Smrg        ;;
2478b3e38ee4Smrg    esac
2479af1a9c97Smrg
2480a73423d7Smrg    echo
2481b3e38ee4Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482b3e38ee4Smrg}
2483af1a9c97Smrg
2484a73423d7Smrg# Now that we've collected a possible --mode arg, show help if necessary
2485a73423d7Smrgif $opt_help; then
2486a73423d7Smrg  if test "$opt_help" = :; then
2487a73423d7Smrg    func_mode_help
2488a73423d7Smrg  else
2489a73423d7Smrg    {
2490a73423d7Smrg      func_help noexit
2491a73423d7Smrg      for opt_mode in compile link execute install finish uninstall clean; do
2492a73423d7Smrg	func_mode_help
2493a73423d7Smrg      done
2494a73423d7Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2495a73423d7Smrg    {
2496a73423d7Smrg      func_help noexit
2497a73423d7Smrg      for opt_mode in compile link execute install finish uninstall clean; do
2498a73423d7Smrg	echo
2499a73423d7Smrg	func_mode_help
2500a73423d7Smrg      done
2501a73423d7Smrg    } |
2502a73423d7Smrg    sed '1d
2503a73423d7Smrg      /^When reporting/,/^Report/{
2504a73423d7Smrg	H
2505a73423d7Smrg	d
2506a73423d7Smrg      }
2507a73423d7Smrg      $x
2508a73423d7Smrg      /information about other modes/d
2509a73423d7Smrg      /more detailed .*MODE/d
2510a73423d7Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2511a73423d7Smrg  fi
2512a73423d7Smrg  exit $?
2513a73423d7Smrgfi
2514af1a9c97Smrg
2515af1a9c97Smrg
2516b3e38ee4Smrg# func_mode_execute arg...
2517b3e38ee4Smrgfunc_mode_execute ()
2518b3e38ee4Smrg{
2519b3e38ee4Smrg    $opt_debug
2520b3e38ee4Smrg    # The first argument is the command name.
2521b3e38ee4Smrg    cmd="$nonopt"
2522b3e38ee4Smrg    test -z "$cmd" && \
2523b3e38ee4Smrg      func_fatal_help "you must specify a COMMAND"
2524a18ebfb2Smrg
2525b3e38ee4Smrg    # Handle -dlopen flags immediately.
2526a73423d7Smrg    for file in $opt_dlopen; do
2527b3e38ee4Smrg      test -f "$file" \
2528b3e38ee4Smrg	|| func_fatal_help "\`$file' is not a file"
2529a18ebfb2Smrg
2530b3e38ee4Smrg      dir=
2531b3e38ee4Smrg      case $file in
2532b3e38ee4Smrg      *.la)
2533a73423d7Smrg	func_resolve_sysroot "$file"
2534a73423d7Smrg	file=$func_resolve_sysroot_result
2535a73423d7Smrg
2536b3e38ee4Smrg	# Check to see that this really is a libtool archive.
2537b3e38ee4Smrg	func_lalib_unsafe_p "$file" \
2538b3e38ee4Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539a18ebfb2Smrg
2540b3e38ee4Smrg	# Read the libtool library.
2541b3e38ee4Smrg	dlname=
2542b3e38ee4Smrg	library_names=
2543b3e38ee4Smrg	func_source "$file"
254450806d53Smrg
2545b3e38ee4Smrg	# Skip this library if it cannot be dlopened.
2546b3e38ee4Smrg	if test -z "$dlname"; then
2547b3e38ee4Smrg	  # Warn if it was a shared library.
2548b3e38ee4Smrg	  test -n "$library_names" && \
2549b3e38ee4Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550b3e38ee4Smrg	  continue
2551b3e38ee4Smrg	fi
255250806d53Smrg
2553b3e38ee4Smrg	func_dirname "$file" "" "."
2554b3e38ee4Smrg	dir="$func_dirname_result"
255550806d53Smrg
2556b3e38ee4Smrg	if test -f "$dir/$objdir/$dlname"; then
2557a73423d7Smrg	  func_append dir "/$objdir"
2558b3e38ee4Smrg	else
2559b3e38ee4Smrg	  if test ! -f "$dir/$dlname"; then
2560b3e38ee4Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561b3e38ee4Smrg	  fi
2562b3e38ee4Smrg	fi
2563a18ebfb2Smrg	;;
256450806d53Smrg
2565b3e38ee4Smrg      *.lo)
2566b3e38ee4Smrg	# Just add the directory containing the .lo file.
2567b3e38ee4Smrg	func_dirname "$file" "" "."
2568b3e38ee4Smrg	dir="$func_dirname_result"
2569a18ebfb2Smrg	;;
257050806d53Smrg
2571b3e38ee4Smrg      *)
2572b3e38ee4Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573a18ebfb2Smrg	continue
2574a18ebfb2Smrg	;;
2575b3e38ee4Smrg      esac
257650806d53Smrg
2577b3e38ee4Smrg      # Get the absolute pathname.
2578b3e38ee4Smrg      absdir=`cd "$dir" && pwd`
2579b3e38ee4Smrg      test -n "$absdir" && dir="$absdir"
2580af1a9c97Smrg
2581b3e38ee4Smrg      # Now add the directory to shlibpath_var.
2582b3e38ee4Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2583b3e38ee4Smrg	eval "$shlibpath_var=\"\$dir\""
2584b3e38ee4Smrg      else
2585b3e38ee4Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586b3e38ee4Smrg      fi
2587b3e38ee4Smrg    done
2588af1a9c97Smrg
2589b3e38ee4Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2590b3e38ee4Smrg    # rather than running their programs.
2591b3e38ee4Smrg    libtool_execute_magic="$magic"
2592af1a9c97Smrg
2593b3e38ee4Smrg    # Check if any of the arguments is a wrapper script.
2594b3e38ee4Smrg    args=
2595b3e38ee4Smrg    for file
2596b3e38ee4Smrg    do
2597b3e38ee4Smrg      case $file in
2598a73423d7Smrg      -* | *.la | *.lo ) ;;
2599b3e38ee4Smrg      *)
2600b3e38ee4Smrg	# Do a test to see if this is really a libtool program.
2601b3e38ee4Smrg	if func_ltwrapper_script_p "$file"; then
2602b3e38ee4Smrg	  func_source "$file"
2603b3e38ee4Smrg	  # Transform arg to wrapped name.
2604b3e38ee4Smrg	  file="$progdir/$program"
2605b3e38ee4Smrg	elif func_ltwrapper_executable_p "$file"; then
2606b3e38ee4Smrg	  func_ltwrapper_scriptname "$file"
2607b3e38ee4Smrg	  func_source "$func_ltwrapper_scriptname_result"
2608b3e38ee4Smrg	  # Transform arg to wrapped name.
2609b3e38ee4Smrg	  file="$progdir/$program"
2610b3e38ee4Smrg	fi
2611b3e38ee4Smrg	;;
2612b3e38ee4Smrg      esac
2613b3e38ee4Smrg      # Quote arguments (to preserve shell metacharacters).
2614a73423d7Smrg      func_append_quoted args "$file"
2615b3e38ee4Smrg    done
2616af1a9c97Smrg
2617b3e38ee4Smrg    if test "X$opt_dry_run" = Xfalse; then
2618b3e38ee4Smrg      if test -n "$shlibpath_var"; then
2619b3e38ee4Smrg	# Export the shlibpath_var.
2620b3e38ee4Smrg	eval "export $shlibpath_var"
2621b3e38ee4Smrg      fi
2622af1a9c97Smrg
2623b3e38ee4Smrg      # Restore saved environment variables
2624b3e38ee4Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625b3e38ee4Smrg      do
2626b3e38ee4Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627b3e38ee4Smrg                $lt_var=\$save_$lt_var; export $lt_var
2628a18ebfb2Smrg	      else
2629b3e38ee4Smrg		$lt_unset $lt_var
2630b3e38ee4Smrg	      fi"
2631b3e38ee4Smrg      done
2632af1a9c97Smrg
2633b3e38ee4Smrg      # Now prepare to actually exec the command.
2634b3e38ee4Smrg      exec_cmd="\$cmd$args"
2635b3e38ee4Smrg    else
2636b3e38ee4Smrg      # Display what would be done.
2637b3e38ee4Smrg      if test -n "$shlibpath_var"; then
2638b3e38ee4Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
2639a73423d7Smrg	echo "export $shlibpath_var"
2640b3e38ee4Smrg      fi
2641b3e38ee4Smrg      $ECHO "$cmd$args"
2642b3e38ee4Smrg      exit $EXIT_SUCCESS
2643b3e38ee4Smrg    fi
2644b3e38ee4Smrg}
2645af1a9c97Smrg
2646a73423d7Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647af1a9c97Smrg
2648a18ebfb2Smrg
2649b3e38ee4Smrg# func_mode_finish arg...
2650b3e38ee4Smrgfunc_mode_finish ()
2651b3e38ee4Smrg{
2652b3e38ee4Smrg    $opt_debug
2653a73423d7Smrg    libs=
2654a73423d7Smrg    libdirs=
2655b3e38ee4Smrg    admincmds=
265650806d53Smrg
2657a73423d7Smrg    for opt in "$nonopt" ${1+"$@"}
2658a73423d7Smrg    do
2659a73423d7Smrg      if test -d "$opt"; then
2660a73423d7Smrg	func_append libdirs " $opt"
2661a73423d7Smrg
2662a73423d7Smrg      elif test -f "$opt"; then
2663a73423d7Smrg	if func_lalib_unsafe_p "$opt"; then
2664a73423d7Smrg	  func_append libs " $opt"
2665a73423d7Smrg	else
2666a73423d7Smrg	  func_warning "\`$opt' is not a valid libtool archive"
2667a73423d7Smrg	fi
2668a73423d7Smrg
2669a73423d7Smrg      else
2670a73423d7Smrg	func_fatal_error "invalid argument \`$opt'"
2671a73423d7Smrg      fi
2672a73423d7Smrg    done
2673a73423d7Smrg
2674a73423d7Smrg    if test -n "$libs"; then
2675a73423d7Smrg      if test -n "$lt_sysroot"; then
2676a73423d7Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2677a73423d7Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2678a73423d7Smrg      else
2679a73423d7Smrg        sysroot_cmd=
2680a73423d7Smrg      fi
2681a73423d7Smrg
2682a73423d7Smrg      # Remove sysroot references
2683a73423d7Smrg      if $opt_dry_run; then
2684a73423d7Smrg        for lib in $libs; do
2685a73423d7Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2686a73423d7Smrg        done
2687a73423d7Smrg      else
2688a73423d7Smrg        tmpdir=`func_mktempdir`
2689a73423d7Smrg        for lib in $libs; do
2690a73423d7Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2691a73423d7Smrg	    > $tmpdir/tmp-la
2692a73423d7Smrg	  mv -f $tmpdir/tmp-la $lib
2693a73423d7Smrg	done
2694a73423d7Smrg        ${RM}r "$tmpdir"
2695a73423d7Smrg      fi
2696a73423d7Smrg    fi
269750806d53Smrg
2698a73423d7Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699b3e38ee4Smrg      for libdir in $libdirs; do
2700b3e38ee4Smrg	if test -n "$finish_cmds"; then
2701b3e38ee4Smrg	  # Do each command in the finish commands.
2702b3e38ee4Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703b3e38ee4Smrg'"$cmd"'"'
2704a18ebfb2Smrg	fi
2705b3e38ee4Smrg	if test -n "$finish_eval"; then
2706b3e38ee4Smrg	  # Do the single finish_eval.
2707b3e38ee4Smrg	  eval cmds=\"$finish_eval\"
2708a73423d7Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709b3e38ee4Smrg       $cmds"
2710b3e38ee4Smrg	fi
2711b3e38ee4Smrg      done
2712b3e38ee4Smrg    fi
271350806d53Smrg
2714b3e38ee4Smrg    # Exit here if they wanted silent mode.
2715b3e38ee4Smrg    $opt_silent && exit $EXIT_SUCCESS
271650806d53Smrg
2717a73423d7Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2718a73423d7Smrg      echo "----------------------------------------------------------------------"
2719a73423d7Smrg      echo "Libraries have been installed in:"
2720a73423d7Smrg      for libdir in $libdirs; do
2721a73423d7Smrg	$ECHO "   $libdir"
2722a73423d7Smrg      done
2723a73423d7Smrg      echo
2724a73423d7Smrg      echo "If you ever happen to want to link against installed libraries"
2725a73423d7Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
2726a73423d7Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2727a73423d7Smrg      echo "flag during linking and do at least one of the following:"
2728a73423d7Smrg      if test -n "$shlibpath_var"; then
2729a73423d7Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2730a73423d7Smrg	echo "     during execution"
2731a73423d7Smrg      fi
2732a73423d7Smrg      if test -n "$runpath_var"; then
2733a73423d7Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2734a73423d7Smrg	echo "     during linking"
2735a73423d7Smrg      fi
2736a73423d7Smrg      if test -n "$hardcode_libdir_flag_spec"; then
2737a73423d7Smrg	libdir=LIBDIR
2738a73423d7Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739b3e38ee4Smrg
2740a73423d7Smrg	$ECHO "   - use the \`$flag' linker flag"
2741a73423d7Smrg      fi
2742a73423d7Smrg      if test -n "$admincmds"; then
2743a73423d7Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
2744a73423d7Smrg      fi
2745a73423d7Smrg      if test -f /etc/ld.so.conf; then
2746a73423d7Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2747a73423d7Smrg      fi
2748a73423d7Smrg      echo
2749b3e38ee4Smrg
2750a73423d7Smrg      echo "See any operating system documentation about shared libraries for"
2751a73423d7Smrg      case $host in
2752a73423d7Smrg	solaris2.[6789]|solaris2.1[0-9])
2753a73423d7Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2754a73423d7Smrg	  echo "pages."
2755a73423d7Smrg	  ;;
2756a73423d7Smrg	*)
2757a73423d7Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2758a73423d7Smrg	  ;;
2759a73423d7Smrg      esac
2760a73423d7Smrg      echo "----------------------------------------------------------------------"
2761a73423d7Smrg    fi
2762b3e38ee4Smrg    exit $EXIT_SUCCESS
2763b3e38ee4Smrg}
2764b3e38ee4Smrg
2765a73423d7Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766b3e38ee4Smrg
2767b3e38ee4Smrg
2768b3e38ee4Smrg# func_mode_install arg...
2769b3e38ee4Smrgfunc_mode_install ()
2770b3e38ee4Smrg{
2771b3e38ee4Smrg    $opt_debug
2772b3e38ee4Smrg    # There may be an optional sh(1) argument at the beginning of
2773b3e38ee4Smrg    # install_prog (especially on Windows NT).
2774b3e38ee4Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775b3e38ee4Smrg       # Allow the use of GNU shtool's install command.
2776a73423d7Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777b3e38ee4Smrg      # Aesthetically quote it.
2778b3e38ee4Smrg      func_quote_for_eval "$nonopt"
2779b3e38ee4Smrg      install_prog="$func_quote_for_eval_result "
2780b3e38ee4Smrg      arg=$1
2781b3e38ee4Smrg      shift
2782b3e38ee4Smrg    else
2783b3e38ee4Smrg      install_prog=
2784b3e38ee4Smrg      arg=$nonopt
2785b3e38ee4Smrg    fi
2786b3e38ee4Smrg
2787b3e38ee4Smrg    # The real first argument should be the name of the installation program.
2788b3e38ee4Smrg    # Aesthetically quote it.
2789b3e38ee4Smrg    func_quote_for_eval "$arg"
2790a73423d7Smrg    func_append install_prog "$func_quote_for_eval_result"
2791a73423d7Smrg    install_shared_prog=$install_prog
2792a73423d7Smrg    case " $install_prog " in
2793a73423d7Smrg      *[\\\ /]cp\ *) install_cp=: ;;
2794a73423d7Smrg      *) install_cp=false ;;
2795a73423d7Smrg    esac
2796b3e38ee4Smrg
2797b3e38ee4Smrg    # We need to accept at least all the BSD install flags.
2798b3e38ee4Smrg    dest=
2799b3e38ee4Smrg    files=
2800b3e38ee4Smrg    opts=
2801b3e38ee4Smrg    prev=
2802b3e38ee4Smrg    install_type=
2803b3e38ee4Smrg    isdir=no
2804b3e38ee4Smrg    stripme=
2805a73423d7Smrg    no_mode=:
2806b3e38ee4Smrg    for arg
2807b3e38ee4Smrg    do
2808a73423d7Smrg      arg2=
2809b3e38ee4Smrg      if test -n "$dest"; then
2810a73423d7Smrg	func_append files " $dest"
2811b3e38ee4Smrg	dest=$arg
2812b3e38ee4Smrg	continue
2813b3e38ee4Smrg      fi
2814b3e38ee4Smrg
2815b3e38ee4Smrg      case $arg in
2816b3e38ee4Smrg      -d) isdir=yes ;;
2817b3e38ee4Smrg      -f)
2818a73423d7Smrg	if $install_cp; then :; else
2819a73423d7Smrg	  prev=$arg
2820a73423d7Smrg	fi
2821b3e38ee4Smrg	;;
2822b3e38ee4Smrg      -g | -m | -o)
2823b3e38ee4Smrg	prev=$arg
2824b3e38ee4Smrg	;;
2825b3e38ee4Smrg      -s)
2826b3e38ee4Smrg	stripme=" -s"
2827b3e38ee4Smrg	continue
2828b3e38ee4Smrg	;;
2829b3e38ee4Smrg      -*)
2830b3e38ee4Smrg	;;
2831b3e38ee4Smrg      *)
2832b3e38ee4Smrg	# If the previous option needed an argument, then skip it.
2833b3e38ee4Smrg	if test -n "$prev"; then
2834a73423d7Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2835a73423d7Smrg	    arg2=$install_override_mode
2836a73423d7Smrg	    no_mode=false
2837a73423d7Smrg	  fi
2838a18ebfb2Smrg	  prev=
2839af1a9c97Smrg	else
2840b3e38ee4Smrg	  dest=$arg
2841b3e38ee4Smrg	  continue
284250806d53Smrg	fi
2843a18ebfb2Smrg	;;
2844b3e38ee4Smrg      esac
284550806d53Smrg
2846b3e38ee4Smrg      # Aesthetically quote the argument.
2847b3e38ee4Smrg      func_quote_for_eval "$arg"
2848a73423d7Smrg      func_append install_prog " $func_quote_for_eval_result"
2849a73423d7Smrg      if test -n "$arg2"; then
2850a73423d7Smrg	func_quote_for_eval "$arg2"
2851a73423d7Smrg      fi
2852a73423d7Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853b3e38ee4Smrg    done
285450806d53Smrg
2855b3e38ee4Smrg    test -z "$install_prog" && \
2856b3e38ee4Smrg      func_fatal_help "you must specify an install program"
285750806d53Smrg
2858b3e38ee4Smrg    test -n "$prev" && \
2859b3e38ee4Smrg      func_fatal_help "the \`$prev' option requires an argument"
2860af1a9c97Smrg
2861a73423d7Smrg    if test -n "$install_override_mode" && $no_mode; then
2862a73423d7Smrg      if $install_cp; then :; else
2863a73423d7Smrg	func_quote_for_eval "$install_override_mode"
2864a73423d7Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
2865a73423d7Smrg      fi
2866a73423d7Smrg    fi
2867a73423d7Smrg
2868b3e38ee4Smrg    if test -z "$files"; then
2869b3e38ee4Smrg      if test -z "$dest"; then
2870b3e38ee4Smrg	func_fatal_help "no file or destination specified"
2871b3e38ee4Smrg      else
2872b3e38ee4Smrg	func_fatal_help "you must specify a destination"
2873b3e38ee4Smrg      fi
2874a18ebfb2Smrg    fi
2875af1a9c97Smrg
2876b3e38ee4Smrg    # Strip any trailing slash from the destination.
2877b3e38ee4Smrg    func_stripname '' '/' "$dest"
2878b3e38ee4Smrg    dest=$func_stripname_result
2879af1a9c97Smrg
2880b3e38ee4Smrg    # Check to see that the destination is a directory.
2881b3e38ee4Smrg    test -d "$dest" && isdir=yes
2882b3e38ee4Smrg    if test "$isdir" = yes; then
2883b3e38ee4Smrg      destdir="$dest"
2884b3e38ee4Smrg      destname=
2885a18ebfb2Smrg    else
2886b3e38ee4Smrg      func_dirname_and_basename "$dest" "" "."
2887b3e38ee4Smrg      destdir="$func_dirname_result"
2888b3e38ee4Smrg      destname="$func_basename_result"
2889af1a9c97Smrg
2890b3e38ee4Smrg      # Not a directory, so check to see that there is only one file specified.
2891b3e38ee4Smrg      set dummy $files; shift
2892b3e38ee4Smrg      test "$#" -gt 1 && \
2893b3e38ee4Smrg	func_fatal_help "\`$dest' is not a directory"
2894af1a9c97Smrg    fi
2895b3e38ee4Smrg    case $destdir in
2896b3e38ee4Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897a18ebfb2Smrg    *)
2898b3e38ee4Smrg      for file in $files; do
2899b3e38ee4Smrg	case $file in
2900b3e38ee4Smrg	*.lo) ;;
2901b3e38ee4Smrg	*)
2902b3e38ee4Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903b3e38ee4Smrg	  ;;
2904b3e38ee4Smrg	esac
2905b3e38ee4Smrg      done
2906a18ebfb2Smrg      ;;
2907a18ebfb2Smrg    esac
290850806d53Smrg
2909b3e38ee4Smrg    # This variable tells wrapper scripts just to set variables rather
2910b3e38ee4Smrg    # than running their programs.
2911b3e38ee4Smrg    libtool_install_magic="$magic"
291250806d53Smrg
2913b3e38ee4Smrg    staticlibs=
2914b3e38ee4Smrg    future_libdirs=
2915b3e38ee4Smrg    current_libdirs=
2916b3e38ee4Smrg    for file in $files; do
291750806d53Smrg
2918b3e38ee4Smrg      # Do each installation.
2919b3e38ee4Smrg      case $file in
2920b3e38ee4Smrg      *.$libext)
2921b3e38ee4Smrg	# Do the static libraries later.
2922a73423d7Smrg	func_append staticlibs " $file"
2923b3e38ee4Smrg	;;
2924b3e38ee4Smrg
2925b3e38ee4Smrg      *.la)
2926a73423d7Smrg	func_resolve_sysroot "$file"
2927a73423d7Smrg	file=$func_resolve_sysroot_result
2928a73423d7Smrg
2929b3e38ee4Smrg	# Check to see that this really is a libtool archive.
2930b3e38ee4Smrg	func_lalib_unsafe_p "$file" \
2931b3e38ee4Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932b3e38ee4Smrg
2933b3e38ee4Smrg	library_names=
2934b3e38ee4Smrg	old_library=
2935b3e38ee4Smrg	relink_command=
2936b3e38ee4Smrg	func_source "$file"
2937b3e38ee4Smrg
2938b3e38ee4Smrg	# Add the libdir to current_libdirs if it is the destination.
2939b3e38ee4Smrg	if test "X$destdir" = "X$libdir"; then
2940b3e38ee4Smrg	  case "$current_libdirs " in
2941b3e38ee4Smrg	  *" $libdir "*) ;;
2942a73423d7Smrg	  *) func_append current_libdirs " $libdir" ;;
2943af1a9c97Smrg	  esac
2944b3e38ee4Smrg	else
2945b3e38ee4Smrg	  # Note the libdir as a future libdir.
2946b3e38ee4Smrg	  case "$future_libdirs " in
2947b3e38ee4Smrg	  *" $libdir "*) ;;
2948a73423d7Smrg	  *) func_append future_libdirs " $libdir" ;;
2949b3e38ee4Smrg	  esac
2950b3e38ee4Smrg	fi
2951af1a9c97Smrg
2952b3e38ee4Smrg	func_dirname "$file" "/" ""
2953b3e38ee4Smrg	dir="$func_dirname_result"
2954a73423d7Smrg	func_append dir "$objdir"
2955b3e38ee4Smrg
2956b3e38ee4Smrg	if test -n "$relink_command"; then
2957b3e38ee4Smrg	  # Determine the prefix the user has applied to our future dir.
2958a73423d7Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959b3e38ee4Smrg
2960b3e38ee4Smrg	  # Don't allow the user to place us outside of our expected
2961b3e38ee4Smrg	  # location b/c this prevents finding dependent libraries that
2962b3e38ee4Smrg	  # are installed to the same prefix.
2963b3e38ee4Smrg	  # At present, this check doesn't affect windows .dll's that
2964b3e38ee4Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2965b3e38ee4Smrg	  # but it's something to keep an eye on.
2966b3e38ee4Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2967b3e38ee4Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968b3e38ee4Smrg
2969b3e38ee4Smrg	  if test -n "$inst_prefix_dir"; then
2970b3e38ee4Smrg	    # Stick the inst_prefix_dir data into the link command.
2971a73423d7Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972b3e38ee4Smrg	  else
2973a73423d7Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974b3e38ee4Smrg	  fi
2975b3e38ee4Smrg
2976b3e38ee4Smrg	  func_warning "relinking \`$file'"
2977b3e38ee4Smrg	  func_show_eval "$relink_command" \
2978b3e38ee4Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979b3e38ee4Smrg	fi
2980b3e38ee4Smrg
2981b3e38ee4Smrg	# See the names of the shared library.
2982b3e38ee4Smrg	set dummy $library_names; shift
2983b3e38ee4Smrg	if test -n "$1"; then
2984b3e38ee4Smrg	  realname="$1"
2985b3e38ee4Smrg	  shift
2986b3e38ee4Smrg
2987b3e38ee4Smrg	  srcname="$realname"
2988b3e38ee4Smrg	  test -n "$relink_command" && srcname="$realname"T
2989b3e38ee4Smrg
2990b3e38ee4Smrg	  # Install the shared library and build the symlinks.
2991a73423d7Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992b3e38ee4Smrg	      'exit $?'
2993b3e38ee4Smrg	  tstripme="$stripme"
2994b3e38ee4Smrg	  case $host_os in
2995b3e38ee4Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2996b3e38ee4Smrg	    case $realname in
2997b3e38ee4Smrg	    *.dll.a)
2998b3e38ee4Smrg	      tstripme=""
2999b3e38ee4Smrg	      ;;
3000b3e38ee4Smrg	    esac
3001af1a9c97Smrg	    ;;
3002af1a9c97Smrg	  esac
3003b3e38ee4Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004b3e38ee4Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005a18ebfb2Smrg	  fi
3006b3e38ee4Smrg
3007b3e38ee4Smrg	  if test "$#" -gt 0; then
3008b3e38ee4Smrg	    # Delete the old symlinks, and create new ones.
3009b3e38ee4Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010b3e38ee4Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011b3e38ee4Smrg	    # so we also need to try rm && ln -s.
3012b3e38ee4Smrg	    for linkname
3013b3e38ee4Smrg	    do
3014b3e38ee4Smrg	      test "$linkname" != "$realname" \
3015b3e38ee4Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016a18ebfb2Smrg	    done
3017a18ebfb2Smrg	  fi
301850806d53Smrg
3019b3e38ee4Smrg	  # Do each command in the postinstall commands.
3020b3e38ee4Smrg	  lib="$destdir/$realname"
3021b3e38ee4Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022a18ebfb2Smrg	fi
302350806d53Smrg
3024b3e38ee4Smrg	# Install the pseudo-library for information purposes.
3025b3e38ee4Smrg	func_basename "$file"
3026b3e38ee4Smrg	name="$func_basename_result"
3027b3e38ee4Smrg	instname="$dir/$name"i
3028b3e38ee4Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
302950806d53Smrg
3030b3e38ee4Smrg	# Maybe install the static library, too.
3031a73423d7Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032b3e38ee4Smrg	;;
303350806d53Smrg
3034b3e38ee4Smrg      *.lo)
3035b3e38ee4Smrg	# Install (i.e. copy) a libtool object.
303650806d53Smrg
3037b3e38ee4Smrg	# Figure out destination file name, if it wasn't already specified.
3038b3e38ee4Smrg	if test -n "$destname"; then
3039b3e38ee4Smrg	  destfile="$destdir/$destname"
3040b3e38ee4Smrg	else
3041b3e38ee4Smrg	  func_basename "$file"
3042b3e38ee4Smrg	  destfile="$func_basename_result"
3043b3e38ee4Smrg	  destfile="$destdir/$destfile"
3044a18ebfb2Smrg	fi
304550806d53Smrg
3046b3e38ee4Smrg	# Deduce the name of the destination old-style object file.
3047b3e38ee4Smrg	case $destfile in
3048b3e38ee4Smrg	*.lo)
3049b3e38ee4Smrg	  func_lo2o "$destfile"
3050b3e38ee4Smrg	  staticdest=$func_lo2o_result
3051b3e38ee4Smrg	  ;;
3052b3e38ee4Smrg	*.$objext)
3053b3e38ee4Smrg	  staticdest="$destfile"
3054b3e38ee4Smrg	  destfile=
3055b3e38ee4Smrg	  ;;
3056b3e38ee4Smrg	*)
3057b3e38ee4Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058b3e38ee4Smrg	  ;;
3059b3e38ee4Smrg	esac
306050806d53Smrg
3061b3e38ee4Smrg	# Install the libtool object if requested.
3062b3e38ee4Smrg	test -n "$destfile" && \
3063b3e38ee4Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
306450806d53Smrg
3065b3e38ee4Smrg	# Install the old object if enabled.
3066b3e38ee4Smrg	if test "$build_old_libs" = yes; then
3067b3e38ee4Smrg	  # Deduce the name of the old-style object file.
3068b3e38ee4Smrg	  func_lo2o "$file"
3069b3e38ee4Smrg	  staticobj=$func_lo2o_result
3070b3e38ee4Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
307150806d53Smrg	fi
3072b3e38ee4Smrg	exit $EXIT_SUCCESS
3073b3e38ee4Smrg	;;
307450806d53Smrg
3075b3e38ee4Smrg      *)
3076b3e38ee4Smrg	# Figure out destination file name, if it wasn't already specified.
3077b3e38ee4Smrg	if test -n "$destname"; then
3078b3e38ee4Smrg	  destfile="$destdir/$destname"
3079b3e38ee4Smrg	else
3080b3e38ee4Smrg	  func_basename "$file"
3081b3e38ee4Smrg	  destfile="$func_basename_result"
3082b3e38ee4Smrg	  destfile="$destdir/$destfile"
3083b3e38ee4Smrg	fi
308450806d53Smrg
3085b3e38ee4Smrg	# If the file is missing, and there is a .exe on the end, strip it
3086b3e38ee4Smrg	# because it is most likely a libtool script we actually want to
3087b3e38ee4Smrg	# install
3088b3e38ee4Smrg	stripped_ext=""
3089b3e38ee4Smrg	case $file in
3090b3e38ee4Smrg	  *.exe)
3091b3e38ee4Smrg	    if test ! -f "$file"; then
3092b3e38ee4Smrg	      func_stripname '' '.exe' "$file"
3093b3e38ee4Smrg	      file=$func_stripname_result
3094b3e38ee4Smrg	      stripped_ext=".exe"
3095b3e38ee4Smrg	    fi
3096b3e38ee4Smrg	    ;;
3097b3e38ee4Smrg	esac
3098b3e38ee4Smrg
3099b3e38ee4Smrg	# Do a test to see if this is really a libtool program.
3100b3e38ee4Smrg	case $host in
3101b3e38ee4Smrg	*cygwin* | *mingw*)
3102b3e38ee4Smrg	    if func_ltwrapper_executable_p "$file"; then
3103b3e38ee4Smrg	      func_ltwrapper_scriptname "$file"
3104b3e38ee4Smrg	      wrapper=$func_ltwrapper_scriptname_result
3105b3e38ee4Smrg	    else
3106b3e38ee4Smrg	      func_stripname '' '.exe' "$file"
3107b3e38ee4Smrg	      wrapper=$func_stripname_result
3108b3e38ee4Smrg	    fi
3109b3e38ee4Smrg	    ;;
3110a18ebfb2Smrg	*)
3111b3e38ee4Smrg	    wrapper=$file
3112b3e38ee4Smrg	    ;;
3113b3e38ee4Smrg	esac
3114b3e38ee4Smrg	if func_ltwrapper_script_p "$wrapper"; then
3115b3e38ee4Smrg	  notinst_deplibs=
3116b3e38ee4Smrg	  relink_command=
3117b3e38ee4Smrg
3118b3e38ee4Smrg	  func_source "$wrapper"
3119b3e38ee4Smrg
3120b3e38ee4Smrg	  # Check the variables that should have been set.
3121b3e38ee4Smrg	  test -z "$generated_by_libtool_version" && \
3122b3e38ee4Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123b3e38ee4Smrg
3124b3e38ee4Smrg	  finalize=yes
3125b3e38ee4Smrg	  for lib in $notinst_deplibs; do
3126b3e38ee4Smrg	    # Check to see that each library is installed.
3127b3e38ee4Smrg	    libdir=
3128b3e38ee4Smrg	    if test -f "$lib"; then
3129b3e38ee4Smrg	      func_source "$lib"
3130b3e38ee4Smrg	    fi
3131a73423d7Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132b3e38ee4Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3133b3e38ee4Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134b3e38ee4Smrg	      finalize=no
3135b3e38ee4Smrg	    fi
3136b3e38ee4Smrg	  done
3137b3e38ee4Smrg
3138b3e38ee4Smrg	  relink_command=
3139b3e38ee4Smrg	  func_source "$wrapper"
3140b3e38ee4Smrg
3141b3e38ee4Smrg	  outputname=
3142b3e38ee4Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143b3e38ee4Smrg	    $opt_dry_run || {
3144b3e38ee4Smrg	      if test "$finalize" = yes; then
3145b3e38ee4Smrg	        tmpdir=`func_mktempdir`
3146b3e38ee4Smrg		func_basename "$file$stripped_ext"
3147b3e38ee4Smrg		file="$func_basename_result"
3148b3e38ee4Smrg	        outputname="$tmpdir/$file"
3149b3e38ee4Smrg	        # Replace the output file specification.
3150a73423d7Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151b3e38ee4Smrg
3152b3e38ee4Smrg	        $opt_silent || {
3153b3e38ee4Smrg	          func_quote_for_expand "$relink_command"
3154b3e38ee4Smrg		  eval "func_echo $func_quote_for_expand_result"
3155b3e38ee4Smrg	        }
3156b3e38ee4Smrg	        if eval "$relink_command"; then :
3157b3e38ee4Smrg	          else
3158b3e38ee4Smrg		  func_error "error: relink \`$file' with the above command before installing it"
3159b3e38ee4Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160b3e38ee4Smrg		  continue
3161b3e38ee4Smrg	        fi
3162b3e38ee4Smrg	        file="$outputname"
3163b3e38ee4Smrg	      else
3164b3e38ee4Smrg	        func_warning "cannot relink \`$file'"
3165b3e38ee4Smrg	      fi
3166b3e38ee4Smrg	    }
3167b3e38ee4Smrg	  else
3168b3e38ee4Smrg	    # Install the binary that we compiled earlier.
3169a73423d7Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170a18ebfb2Smrg	  fi
3171b3e38ee4Smrg	fi
3172b3e38ee4Smrg
3173b3e38ee4Smrg	# remove .exe since cygwin /usr/bin/install will append another
3174b3e38ee4Smrg	# one anyway
3175b3e38ee4Smrg	case $install_prog,$host in
3176b3e38ee4Smrg	*/usr/bin/install*,*cygwin*)
3177b3e38ee4Smrg	  case $file:$destfile in
3178b3e38ee4Smrg	  *.exe:*.exe)
3179b3e38ee4Smrg	    # this is ok
3180b3e38ee4Smrg	    ;;
3181b3e38ee4Smrg	  *.exe:*)
3182b3e38ee4Smrg	    destfile=$destfile.exe
3183b3e38ee4Smrg	    ;;
3184b3e38ee4Smrg	  *:*.exe)
3185b3e38ee4Smrg	    func_stripname '' '.exe' "$destfile"
3186b3e38ee4Smrg	    destfile=$func_stripname_result
3187b3e38ee4Smrg	    ;;
3188b3e38ee4Smrg	  esac
3189a18ebfb2Smrg	  ;;
3190a18ebfb2Smrg	esac
3191b3e38ee4Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192b3e38ee4Smrg	$opt_dry_run || if test -n "$outputname"; then
3193b3e38ee4Smrg	  ${RM}r "$tmpdir"
3194b3e38ee4Smrg	fi
3195b3e38ee4Smrg	;;
3196b3e38ee4Smrg      esac
3197b3e38ee4Smrg    done
319850806d53Smrg
3199b3e38ee4Smrg    for file in $staticlibs; do
3200b3e38ee4Smrg      func_basename "$file"
3201b3e38ee4Smrg      name="$func_basename_result"
3202b3e38ee4Smrg
3203b3e38ee4Smrg      # Set up the ranlib parameters.
3204b3e38ee4Smrg      oldlib="$destdir/$name"
3205a73423d7Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206a73423d7Smrg      tool_oldlib=$func_to_tool_file_result
3207b3e38ee4Smrg
3208b3e38ee4Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209b3e38ee4Smrg
3210b3e38ee4Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
3211a73423d7Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212b3e38ee4Smrg      fi
3213b3e38ee4Smrg
3214b3e38ee4Smrg      # Do each command in the postinstall commands.
3215b3e38ee4Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216b3e38ee4Smrg    done
3217b3e38ee4Smrg
3218b3e38ee4Smrg    test -n "$future_libdirs" && \
3219b3e38ee4Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220b3e38ee4Smrg
3221b3e38ee4Smrg    if test -n "$current_libdirs"; then
3222b3e38ee4Smrg      # Maybe just do a dry run.
3223b3e38ee4Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224b3e38ee4Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225b3e38ee4Smrg    else
3226b3e38ee4Smrg      exit $EXIT_SUCCESS
3227b3e38ee4Smrg    fi
3228b3e38ee4Smrg}
3229b3e38ee4Smrg
3230a73423d7Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231b3e38ee4Smrg
3232b3e38ee4Smrg
3233b3e38ee4Smrg# func_generate_dlsyms outputname originator pic_p
3234b3e38ee4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235b3e38ee4Smrg# a dlpreopen symbol table.
3236b3e38ee4Smrgfunc_generate_dlsyms ()
3237b3e38ee4Smrg{
3238b3e38ee4Smrg    $opt_debug
3239b3e38ee4Smrg    my_outputname="$1"
3240b3e38ee4Smrg    my_originator="$2"
3241b3e38ee4Smrg    my_pic_p="${3-no}"
3242b3e38ee4Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243b3e38ee4Smrg    my_dlsyms=
3244b3e38ee4Smrg
3245b3e38ee4Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246b3e38ee4Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247b3e38ee4Smrg	my_dlsyms="${my_outputname}S.c"
3248b3e38ee4Smrg      else
3249b3e38ee4Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3250b3e38ee4Smrg      fi
3251b3e38ee4Smrg    fi
3252b3e38ee4Smrg
3253b3e38ee4Smrg    if test -n "$my_dlsyms"; then
3254b3e38ee4Smrg      case $my_dlsyms in
3255b3e38ee4Smrg      "") ;;
3256b3e38ee4Smrg      *.c)
3257b3e38ee4Smrg	# Discover the nlist of each of the dlfiles.
3258b3e38ee4Smrg	nlist="$output_objdir/${my_outputname}.nm"
3259b3e38ee4Smrg
3260b3e38ee4Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261b3e38ee4Smrg
3262b3e38ee4Smrg	# Parse the name list into a source file.
3263b3e38ee4Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264b3e38ee4Smrg
3265b3e38ee4Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266b3e38ee4Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267b3e38ee4Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268b3e38ee4Smrg
3269b3e38ee4Smrg#ifdef __cplusplus
3270b3e38ee4Smrgextern \"C\" {
3271b3e38ee4Smrg#endif
3272b3e38ee4Smrg
3273a73423d7Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3274a73423d7Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3275a73423d7Smrg#endif
3276a73423d7Smrg
3277a73423d7Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
3278a73423d7Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
3279a73423d7Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
3280a73423d7Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3281a73423d7Smrg# define LT_DLSYM_CONST
3282a73423d7Smrg#elif defined(__osf__)
3283a73423d7Smrg/* This system does not cope well with relocations in const data.  */
3284a73423d7Smrg# define LT_DLSYM_CONST
3285a73423d7Smrg#else
3286a73423d7Smrg# define LT_DLSYM_CONST const
3287a73423d7Smrg#endif
3288a73423d7Smrg
3289b3e38ee4Smrg/* External symbol declarations for the compiler. */\
3290b3e38ee4Smrg"
3291b3e38ee4Smrg
3292b3e38ee4Smrg	if test "$dlself" = yes; then
3293b3e38ee4Smrg	  func_verbose "generating symbol list for \`$output'"
3294b3e38ee4Smrg
3295b3e38ee4Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296b3e38ee4Smrg
3297b3e38ee4Smrg	  # Add our own program objects to the symbol list.
3298a73423d7Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299b3e38ee4Smrg	  for progfile in $progfiles; do
3300a73423d7Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
3301a73423d7Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3302a73423d7Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303b3e38ee4Smrg	  done
3304b3e38ee4Smrg
3305b3e38ee4Smrg	  if test -n "$exclude_expsyms"; then
3306b3e38ee4Smrg	    $opt_dry_run || {
3307b3e38ee4Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308b3e38ee4Smrg	      eval '$MV "$nlist"T "$nlist"'
3309b3e38ee4Smrg	    }
3310a18ebfb2Smrg	  fi
3311b3e38ee4Smrg
3312b3e38ee4Smrg	  if test -n "$export_symbols_regex"; then
3313b3e38ee4Smrg	    $opt_dry_run || {
3314b3e38ee4Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315b3e38ee4Smrg	      eval '$MV "$nlist"T "$nlist"'
3316b3e38ee4Smrg	    }
3317b3e38ee4Smrg	  fi
3318b3e38ee4Smrg
3319b3e38ee4Smrg	  # Prepare the list of exported symbols
3320b3e38ee4Smrg	  if test -z "$export_symbols"; then
3321b3e38ee4Smrg	    export_symbols="$output_objdir/$outputname.exp"
3322b3e38ee4Smrg	    $opt_dry_run || {
3323b3e38ee4Smrg	      $RM $export_symbols
3324b3e38ee4Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325b3e38ee4Smrg	      case $host in
3326b3e38ee4Smrg	      *cygwin* | *mingw* | *cegcc* )
3327b3e38ee4Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328b3e38ee4Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329b3e38ee4Smrg	        ;;
3330b3e38ee4Smrg	      esac
3331b3e38ee4Smrg	    }
3332a18ebfb2Smrg	  else
3333b3e38ee4Smrg	    $opt_dry_run || {
3334b3e38ee4Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335b3e38ee4Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336b3e38ee4Smrg	      eval '$MV "$nlist"T "$nlist"'
3337b3e38ee4Smrg	      case $host in
3338a73423d7Smrg	        *cygwin* | *mingw* | *cegcc* )
3339b3e38ee4Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340b3e38ee4Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341b3e38ee4Smrg	          ;;
3342b3e38ee4Smrg	      esac
3343b3e38ee4Smrg	    }
3344a18ebfb2Smrg	  fi
3345b3e38ee4Smrg	fi
334650806d53Smrg
3347b3e38ee4Smrg	for dlprefile in $dlprefiles; do
3348b3e38ee4Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349b3e38ee4Smrg	  func_basename "$dlprefile"
3350b3e38ee4Smrg	  name="$func_basename_result"
3351a73423d7Smrg          case $host in
3352a73423d7Smrg	    *cygwin* | *mingw* | *cegcc* )
3353a73423d7Smrg	      # if an import library, we need to obtain dlname
3354a73423d7Smrg	      if func_win32_import_lib_p "$dlprefile"; then
3355a73423d7Smrg	        func_tr_sh "$dlprefile"
3356a73423d7Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
3357a73423d7Smrg	        dlprefile_dlbasename=""
3358a73423d7Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3359a73423d7Smrg	          # Use subshell, to avoid clobbering current variable values
3360a73423d7Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
3361a73423d7Smrg	          if test -n "$dlprefile_dlname" ; then
3362a73423d7Smrg	            func_basename "$dlprefile_dlname"
3363a73423d7Smrg	            dlprefile_dlbasename="$func_basename_result"
3364a73423d7Smrg	          else
3365a73423d7Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
3366a73423d7Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
3367a73423d7Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3368a73423d7Smrg	          fi
3369a73423d7Smrg	        fi
3370a73423d7Smrg	        $opt_dry_run || {
3371a73423d7Smrg	          if test -n "$dlprefile_dlbasename" ; then
3372a73423d7Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3373a73423d7Smrg	          else
3374a73423d7Smrg	            func_warning "Could not compute DLL name from $name"
3375a73423d7Smrg	            eval '$ECHO ": $name " >> "$nlist"'
3376a73423d7Smrg	          fi
3377a73423d7Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3378a73423d7Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3379a73423d7Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3380a73423d7Smrg	        }
3381a73423d7Smrg	      else # not an import lib
3382a73423d7Smrg	        $opt_dry_run || {
3383a73423d7Smrg	          eval '$ECHO ": $name " >> "$nlist"'
3384a73423d7Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3385a73423d7Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3386a73423d7Smrg	        }
3387a73423d7Smrg	      fi
3388a73423d7Smrg	    ;;
3389a73423d7Smrg	    *)
3390a73423d7Smrg	      $opt_dry_run || {
3391a73423d7Smrg	        eval '$ECHO ": $name " >> "$nlist"'
3392a73423d7Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3393a73423d7Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3394a73423d7Smrg	      }
3395a73423d7Smrg	    ;;
3396a73423d7Smrg          esac
3397b3e38ee4Smrg	done
3398b3e38ee4Smrg
3399b3e38ee4Smrg	$opt_dry_run || {
3400b3e38ee4Smrg	  # Make sure we have at least an empty file.
3401b3e38ee4Smrg	  test -f "$nlist" || : > "$nlist"
3402b3e38ee4Smrg
3403b3e38ee4Smrg	  if test -n "$exclude_expsyms"; then
3404b3e38ee4Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405b3e38ee4Smrg	    $MV "$nlist"T "$nlist"
3406a18ebfb2Smrg	  fi
3407b3e38ee4Smrg
3408b3e38ee4Smrg	  # Try sorting and uniquifying the output.
3409b3e38ee4Smrg	  if $GREP -v "^: " < "$nlist" |
3410b3e38ee4Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411b3e38ee4Smrg		sort -k 3
3412b3e38ee4Smrg	      else
3413b3e38ee4Smrg		sort +2
3414b3e38ee4Smrg	      fi |
3415b3e38ee4Smrg	      uniq > "$nlist"S; then
3416b3e38ee4Smrg	    :
3417a18ebfb2Smrg	  else
3418b3e38ee4Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419a18ebfb2Smrg	  fi
342050806d53Smrg
3421b3e38ee4Smrg	  if test -f "$nlist"S; then
3422b3e38ee4Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423a18ebfb2Smrg	  else
3424a73423d7Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425a18ebfb2Smrg	  fi
342650806d53Smrg
3427a73423d7Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
342850806d53Smrg
3429b3e38ee4Smrg/* The mapping between symbol names and symbols.  */
3430b3e38ee4Smrgtypedef struct {
3431b3e38ee4Smrg  const char *name;
3432b3e38ee4Smrg  void *address;
3433b3e38ee4Smrg} lt_dlsymlist;
3434a73423d7Smrgextern LT_DLSYM_CONST lt_dlsymlist
3435b3e38ee4Smrglt_${my_prefix}_LTX_preloaded_symbols[];
3436a73423d7SmrgLT_DLSYM_CONST lt_dlsymlist
3437b3e38ee4Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
3438b3e38ee4Smrg{\
3439b3e38ee4Smrg  { \"$my_originator\", (void *) 0 },"
344050806d53Smrg
3441b3e38ee4Smrg	  case $need_lib_prefix in
3442b3e38ee4Smrg	  no)
3443b3e38ee4Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444b3e38ee4Smrg	    ;;
3445b3e38ee4Smrg	  *)
3446b3e38ee4Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447b3e38ee4Smrg	    ;;
3448b3e38ee4Smrg	  esac
3449a73423d7Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450b3e38ee4Smrg  {0, (void *) 0}
3451b3e38ee4Smrg};
345250806d53Smrg
3453b3e38ee4Smrg/* This works around a problem in FreeBSD linker */
3454b3e38ee4Smrg#ifdef FREEBSD_WORKAROUND
3455b3e38ee4Smrgstatic const void *lt_preloaded_setup() {
3456b3e38ee4Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457b3e38ee4Smrg}
3458b3e38ee4Smrg#endif
3459b3e38ee4Smrg
3460b3e38ee4Smrg#ifdef __cplusplus
3461b3e38ee4Smrg}
3462b3e38ee4Smrg#endif\
3463b3e38ee4Smrg"
3464b3e38ee4Smrg	} # !$opt_dry_run
3465b3e38ee4Smrg
3466b3e38ee4Smrg	pic_flag_for_symtable=
3467b3e38ee4Smrg	case "$compile_command " in
3468b3e38ee4Smrg	*" -static "*) ;;
3469b3e38ee4Smrg	*)
3470b3e38ee4Smrg	  case $host in
3471b3e38ee4Smrg	  # compiling the symbol table file with pic_flag works around
3472b3e38ee4Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473b3e38ee4Smrg	  # linked before any other PIC object.  But we must not use
3474b3e38ee4Smrg	  # pic_flag when linking with -static.  The problem exists in
3475b3e38ee4Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476a73423d7Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477b3e38ee4Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478b3e38ee4Smrg	  *-*-hpux*)
3479b3e38ee4Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480b3e38ee4Smrg	  *)
3481b3e38ee4Smrg	    if test "X$my_pic_p" != Xno; then
3482b3e38ee4Smrg	      pic_flag_for_symtable=" $pic_flag"
3483a18ebfb2Smrg	    fi
3484b3e38ee4Smrg	    ;;
3485b3e38ee4Smrg	  esac
3486b3e38ee4Smrg	  ;;
3487b3e38ee4Smrg	esac
3488b3e38ee4Smrg	symtab_cflags=
3489b3e38ee4Smrg	for arg in $LTCFLAGS; do
3490b3e38ee4Smrg	  case $arg in
3491b3e38ee4Smrg	  -pie | -fpie | -fPIE) ;;
3492a73423d7Smrg	  *) func_append symtab_cflags " $arg" ;;
3493b3e38ee4Smrg	  esac
3494b3e38ee4Smrg	done
349550806d53Smrg
3496b3e38ee4Smrg	# Now compile the dynamic symbol file.
3497b3e38ee4Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498af1a9c97Smrg
3499b3e38ee4Smrg	# Clean up the generated files.
3500b3e38ee4Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
350150806d53Smrg
3502b3e38ee4Smrg	# Transform the symbol file into the correct name.
3503b3e38ee4Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504b3e38ee4Smrg	case $host in
3505b3e38ee4Smrg	*cygwin* | *mingw* | *cegcc* )
3506b3e38ee4Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
3507a73423d7Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3508a73423d7Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509b3e38ee4Smrg	  else
3510a73423d7Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3511a73423d7Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512a18ebfb2Smrg	  fi
3513b3e38ee4Smrg	  ;;
3514b3e38ee4Smrg	*)
3515a73423d7Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3516a73423d7Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517b3e38ee4Smrg	  ;;
3518b3e38ee4Smrg	esac
3519b3e38ee4Smrg	;;
3520b3e38ee4Smrg      *)
3521b3e38ee4Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522b3e38ee4Smrg	;;
3523b3e38ee4Smrg      esac
3524b3e38ee4Smrg    else
3525b3e38ee4Smrg      # We keep going just in case the user didn't refer to
3526b3e38ee4Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527b3e38ee4Smrg      # really was required.
352850806d53Smrg
3529b3e38ee4Smrg      # Nullify the symbol file.
3530a73423d7Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3531a73423d7Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532b3e38ee4Smrg    fi
3533b3e38ee4Smrg}
3534af1a9c97Smrg
3535b3e38ee4Smrg# func_win32_libid arg
3536b3e38ee4Smrg# return the library type of file 'arg'
3537b3e38ee4Smrg#
3538b3e38ee4Smrg# Need a lot of goo to handle *both* DLLs and import libs
3539b3e38ee4Smrg# Has to be a shell function in order to 'eat' the argument
3540b3e38ee4Smrg# that is supplied when $file_magic_command is called.
3541a73423d7Smrg# Despite the name, also deal with 64 bit binaries.
3542b3e38ee4Smrgfunc_win32_libid ()
3543b3e38ee4Smrg{
3544b3e38ee4Smrg  $opt_debug
3545b3e38ee4Smrg  win32_libid_type="unknown"
3546b3e38ee4Smrg  win32_fileres=`file -L $1 2>/dev/null`
3547b3e38ee4Smrg  case $win32_fileres in
3548b3e38ee4Smrg  *ar\ archive\ import\ library*) # definitely import
3549b3e38ee4Smrg    win32_libid_type="x86 archive import"
3550b3e38ee4Smrg    ;;
3551b3e38ee4Smrg  *ar\ archive*) # could be an import, or static
3552a73423d7Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553b3e38ee4Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3554a73423d7Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
3555a73423d7Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
3556a73423d7Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557b3e38ee4Smrg	$SED -n -e '
3558b3e38ee4Smrg	    1,100{
3559b3e38ee4Smrg		/ I /{
3560b3e38ee4Smrg		    s,.*,import,
3561b3e38ee4Smrg		    p
3562b3e38ee4Smrg		    q
3563b3e38ee4Smrg		}
3564b3e38ee4Smrg	    }'`
3565b3e38ee4Smrg      case $win32_nmres in
3566b3e38ee4Smrg      import*)  win32_libid_type="x86 archive import";;
3567b3e38ee4Smrg      *)        win32_libid_type="x86 archive static";;
3568b3e38ee4Smrg      esac
3569b3e38ee4Smrg    fi
3570b3e38ee4Smrg    ;;
3571b3e38ee4Smrg  *DLL*)
3572b3e38ee4Smrg    win32_libid_type="x86 DLL"
3573b3e38ee4Smrg    ;;
3574b3e38ee4Smrg  *executable*) # but shell scripts are "executable" too...
3575b3e38ee4Smrg    case $win32_fileres in
3576b3e38ee4Smrg    *MS\ Windows\ PE\ Intel*)
3577b3e38ee4Smrg      win32_libid_type="x86 DLL"
3578b3e38ee4Smrg      ;;
3579b3e38ee4Smrg    esac
3580b3e38ee4Smrg    ;;
3581b3e38ee4Smrg  esac
3582b3e38ee4Smrg  $ECHO "$win32_libid_type"
3583b3e38ee4Smrg}
3584af1a9c97Smrg
3585a73423d7Smrg# func_cygming_dll_for_implib ARG
3586a73423d7Smrg#
3587a73423d7Smrg# Platform-specific function to extract the
3588a73423d7Smrg# name of the DLL associated with the specified
3589a73423d7Smrg# import library ARG.
3590a73423d7Smrg# Invoked by eval'ing the libtool variable
3591a73423d7Smrg#    $sharedlib_from_linklib_cmd
3592a73423d7Smrg# Result is available in the variable
3593a73423d7Smrg#    $sharedlib_from_linklib_result
3594a73423d7Smrgfunc_cygming_dll_for_implib ()
3595a73423d7Smrg{
3596a73423d7Smrg  $opt_debug
3597a73423d7Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3598a73423d7Smrg}
3599a73423d7Smrg
3600a73423d7Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3601a73423d7Smrg#
3602a73423d7Smrg# The is the core of a fallback implementation of a
3603a73423d7Smrg# platform-specific function to extract the name of the
3604a73423d7Smrg# DLL associated with the specified import library LIBNAME.
3605a73423d7Smrg#
3606a73423d7Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
3607a73423d7Smrg# on the platform and compiler that created the implib.
3608a73423d7Smrg#
3609a73423d7Smrg# Echos the name of the DLL associated with the
3610a73423d7Smrg# specified import library.
3611a73423d7Smrgfunc_cygming_dll_for_implib_fallback_core ()
3612a73423d7Smrg{
3613a73423d7Smrg  $opt_debug
3614a73423d7Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3615a73423d7Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3616a73423d7Smrg    $SED '/^Contents of section '"$match_literal"':/{
3617a73423d7Smrg      # Place marker at beginning of archive member dllname section
3618a73423d7Smrg      s/.*/====MARK====/
3619a73423d7Smrg      p
3620a73423d7Smrg      d
3621a73423d7Smrg    }
3622a73423d7Smrg    # These lines can sometimes be longer than 43 characters, but
3623a73423d7Smrg    # are always uninteresting
3624a73423d7Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
3625a73423d7Smrg    /^In archive [^:]*:/d
3626a73423d7Smrg    # Ensure marker is printed
3627a73423d7Smrg    /^====MARK====/p
3628a73423d7Smrg    # Remove all lines with less than 43 characters
3629a73423d7Smrg    /^.\{43\}/!d
3630a73423d7Smrg    # From remaining lines, remove first 43 characters
3631a73423d7Smrg    s/^.\{43\}//' |
3632a73423d7Smrg    $SED -n '
3633a73423d7Smrg      # Join marker and all lines until next marker into a single line
3634a73423d7Smrg      /^====MARK====/ b para
3635a73423d7Smrg      H
3636a73423d7Smrg      $ b para
3637a73423d7Smrg      b
3638a73423d7Smrg      :para
3639a73423d7Smrg      x
3640a73423d7Smrg      s/\n//g
3641a73423d7Smrg      # Remove the marker
3642a73423d7Smrg      s/^====MARK====//
3643a73423d7Smrg      # Remove trailing dots and whitespace
3644a73423d7Smrg      s/[\. \t]*$//
3645a73423d7Smrg      # Print
3646a73423d7Smrg      /./p' |
3647a73423d7Smrg    # we now have a list, one entry per line, of the stringified
3648a73423d7Smrg    # contents of the appropriate section of all members of the
3649a73423d7Smrg    # archive which possess that section. Heuristic: eliminate
3650a73423d7Smrg    # all those which have a first or second character that is
3651a73423d7Smrg    # a '.' (that is, objdump's representation of an unprintable
3652a73423d7Smrg    # character.) This should work for all archives with less than
3653a73423d7Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
3654a73423d7Smrg    # begins with a literal '.' or a single character followed by
3655a73423d7Smrg    # a '.'.
3656a73423d7Smrg    #
3657a73423d7Smrg    # Of those that remain, print the first one.
3658a73423d7Smrg    $SED -e '/^\./d;/^.\./d;q'
3659a73423d7Smrg}
3660a73423d7Smrg
3661a73423d7Smrg# func_cygming_gnu_implib_p ARG
3662a73423d7Smrg# This predicate returns with zero status (TRUE) if
3663a73423d7Smrg# ARG is a GNU/binutils-style import library. Returns
3664a73423d7Smrg# with nonzero status (FALSE) otherwise.
3665a73423d7Smrgfunc_cygming_gnu_implib_p ()
3666a73423d7Smrg{
3667a73423d7Smrg  $opt_debug
3668a73423d7Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3669a73423d7Smrg  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)$'`
3670a73423d7Smrg  test -n "$func_cygming_gnu_implib_tmp"
3671a73423d7Smrg}
3672a73423d7Smrg
3673a73423d7Smrg# func_cygming_ms_implib_p ARG
3674a73423d7Smrg# This predicate returns with zero status (TRUE) if
3675a73423d7Smrg# ARG is an MS-style import library. Returns
3676a73423d7Smrg# with nonzero status (FALSE) otherwise.
3677a73423d7Smrgfunc_cygming_ms_implib_p ()
3678a73423d7Smrg{
3679a73423d7Smrg  $opt_debug
3680a73423d7Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3681a73423d7Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
3682a73423d7Smrg  test -n "$func_cygming_ms_implib_tmp"
3683a73423d7Smrg}
3684a73423d7Smrg
3685a73423d7Smrg# func_cygming_dll_for_implib_fallback ARG
3686a73423d7Smrg# Platform-specific function to extract the
3687a73423d7Smrg# name of the DLL associated with the specified
3688a73423d7Smrg# import library ARG.
3689a73423d7Smrg#
3690a73423d7Smrg# This fallback implementation is for use when $DLLTOOL
3691a73423d7Smrg# does not support the --identify-strict option.
3692a73423d7Smrg# Invoked by eval'ing the libtool variable
3693a73423d7Smrg#    $sharedlib_from_linklib_cmd
3694a73423d7Smrg# Result is available in the variable
3695a73423d7Smrg#    $sharedlib_from_linklib_result
3696a73423d7Smrgfunc_cygming_dll_for_implib_fallback ()
3697a73423d7Smrg{
3698a73423d7Smrg  $opt_debug
3699a73423d7Smrg  if func_cygming_gnu_implib_p "$1" ; then
3700a73423d7Smrg    # binutils import library
3701a73423d7Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
3702a73423d7Smrg  elif func_cygming_ms_implib_p "$1" ; then
3703a73423d7Smrg    # ms-generated import library
3704a73423d7Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3705a73423d7Smrg  else
3706a73423d7Smrg    # unknown
3707a73423d7Smrg    sharedlib_from_linklib_result=""
3708a73423d7Smrg  fi
3709a73423d7Smrg}
3710af1a9c97Smrg
3711af1a9c97Smrg
3712b3e38ee4Smrg# func_extract_an_archive dir oldlib
3713b3e38ee4Smrgfunc_extract_an_archive ()
3714b3e38ee4Smrg{
3715b3e38ee4Smrg    $opt_debug
3716b3e38ee4Smrg    f_ex_an_ar_dir="$1"; shift
3717b3e38ee4Smrg    f_ex_an_ar_oldlib="$1"
3718a73423d7Smrg    if test "$lock_old_archive_extraction" = yes; then
3719a73423d7Smrg      lockfile=$f_ex_an_ar_oldlib.lock
3720a73423d7Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3721a73423d7Smrg	func_echo "Waiting for $lockfile to be removed"
3722a73423d7Smrg	sleep 2
3723a73423d7Smrg      done
3724a73423d7Smrg    fi
3725a73423d7Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3726a73423d7Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
3727a73423d7Smrg    if test "$lock_old_archive_extraction" = yes; then
3728a73423d7Smrg      $opt_dry_run || rm -f "$lockfile"
3729a73423d7Smrg    fi
3730b3e38ee4Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731b3e38ee4Smrg     :
3732b3e38ee4Smrg    else
3733b3e38ee4Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734b3e38ee4Smrg    fi
3735b3e38ee4Smrg}
373650806d53Smrg
373750806d53Smrg
3738b3e38ee4Smrg# func_extract_archives gentop oldlib ...
3739b3e38ee4Smrgfunc_extract_archives ()
3740b3e38ee4Smrg{
3741b3e38ee4Smrg    $opt_debug
3742b3e38ee4Smrg    my_gentop="$1"; shift
3743b3e38ee4Smrg    my_oldlibs=${1+"$@"}
3744b3e38ee4Smrg    my_oldobjs=""
3745b3e38ee4Smrg    my_xlib=""
3746b3e38ee4Smrg    my_xabs=""
3747b3e38ee4Smrg    my_xdir=""
374850806d53Smrg
3749b3e38ee4Smrg    for my_xlib in $my_oldlibs; do
3750b3e38ee4Smrg      # Extract the objects.
3751b3e38ee4Smrg      case $my_xlib in
3752b3e38ee4Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753b3e38ee4Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754b3e38ee4Smrg      esac
3755b3e38ee4Smrg      func_basename "$my_xlib"
3756b3e38ee4Smrg      my_xlib="$func_basename_result"
3757b3e38ee4Smrg      my_xlib_u=$my_xlib
3758b3e38ee4Smrg      while :; do
3759b3e38ee4Smrg        case " $extracted_archives " in
3760b3e38ee4Smrg	*" $my_xlib_u "*)
3761b3e38ee4Smrg	  func_arith $extracted_serial + 1
3762b3e38ee4Smrg	  extracted_serial=$func_arith_result
3763b3e38ee4Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764b3e38ee4Smrg	*) break ;;
3765b3e38ee4Smrg	esac
3766b3e38ee4Smrg      done
3767b3e38ee4Smrg      extracted_archives="$extracted_archives $my_xlib_u"
3768b3e38ee4Smrg      my_xdir="$my_gentop/$my_xlib_u"
376950806d53Smrg
3770b3e38ee4Smrg      func_mkdir_p "$my_xdir"
3771af1a9c97Smrg
3772b3e38ee4Smrg      case $host in
3773b3e38ee4Smrg      *-darwin*)
3774b3e38ee4Smrg	func_verbose "Extracting $my_xabs"
3775b3e38ee4Smrg	# Do not bother doing anything if just a dry run
3776b3e38ee4Smrg	$opt_dry_run || {
3777b3e38ee4Smrg	  darwin_orig_dir=`pwd`
3778b3e38ee4Smrg	  cd $my_xdir || exit $?
3779b3e38ee4Smrg	  darwin_archive=$my_xabs
3780b3e38ee4Smrg	  darwin_curdir=`pwd`
3781b3e38ee4Smrg	  darwin_base_archive=`basename "$darwin_archive"`
3782b3e38ee4Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783b3e38ee4Smrg	  if test -n "$darwin_arches"; then
3784b3e38ee4Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785b3e38ee4Smrg	    darwin_arch=
3786b3e38ee4Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787b3e38ee4Smrg	    for darwin_arch in  $darwin_arches ; do
3788b3e38ee4Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789b3e38ee4Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790b3e38ee4Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791b3e38ee4Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792b3e38ee4Smrg	      cd "$darwin_curdir"
3793b3e38ee4Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794b3e38ee4Smrg	    done # $darwin_arches
3795b3e38ee4Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796b3e38ee4Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797b3e38ee4Smrg	    darwin_file=
3798b3e38ee4Smrg	    darwin_files=
3799b3e38ee4Smrg	    for darwin_file in $darwin_filelist; do
3800a73423d7Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801b3e38ee4Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802b3e38ee4Smrg	    done # $darwin_filelist
3803b3e38ee4Smrg	    $RM -rf unfat-$$
3804b3e38ee4Smrg	    cd "$darwin_orig_dir"
3805a18ebfb2Smrg	  else
3806b3e38ee4Smrg	    cd $darwin_orig_dir
3807b3e38ee4Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808b3e38ee4Smrg	  fi # $darwin_arches
3809b3e38ee4Smrg	} # !$opt_dry_run
3810b3e38ee4Smrg	;;
3811b3e38ee4Smrg      *)
3812b3e38ee4Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813b3e38ee4Smrg	;;
3814b3e38ee4Smrg      esac
3815a73423d7Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816b3e38ee4Smrg    done
381750806d53Smrg
3818b3e38ee4Smrg    func_extract_archives_result="$my_oldobjs"
3819b3e38ee4Smrg}
382050806d53Smrg
382150806d53Smrg
3822a73423d7Smrg# func_emit_wrapper [arg=no]
3823a73423d7Smrg#
3824a73423d7Smrg# Emit a libtool wrapper script on stdout.
3825a73423d7Smrg# Don't directly open a file because we may want to
3826a73423d7Smrg# incorporate the script contents within a cygwin/mingw
3827a73423d7Smrg# wrapper executable.  Must ONLY be called from within
3828a73423d7Smrg# func_mode_link because it depends on a number of variables
3829a73423d7Smrg# set therein.
3830b3e38ee4Smrg#
3831a73423d7Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3832a73423d7Smrg# variable will take.  If 'yes', then the emitted script
3833a73423d7Smrg# will assume that the directory in which it is stored is
3834a73423d7Smrg# the $objdir directory.  This is a cygwin/mingw-specific
3835a73423d7Smrg# behavior.
3836a73423d7Smrgfunc_emit_wrapper ()
3837b3e38ee4Smrg{
3838a73423d7Smrg	func_emit_wrapper_arg1=${1-no}
3839a18ebfb2Smrg
3840b3e38ee4Smrg	$ECHO "\
3841b3e38ee4Smrg#! $SHELL
384250806d53Smrg
3843b3e38ee4Smrg# $output - temporary wrapper script for $objdir/$outputname
3844b3e38ee4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845b3e38ee4Smrg#
3846b3e38ee4Smrg# The $output program cannot be directly executed until all the libtool
3847b3e38ee4Smrg# libraries that it depends on are installed.
3848b3e38ee4Smrg#
3849b3e38ee4Smrg# This wrapper script should never be moved out of the build directory.
3850b3e38ee4Smrg# If it is, it will not operate correctly.
385150806d53Smrg
3852b3e38ee4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853b3e38ee4Smrg# metacharacters that are still active within double-quoted strings.
3854b3e38ee4Smrgsed_quote_subst='$sed_quote_subst'
385550806d53Smrg
3856b3e38ee4Smrg# Be Bourne compatible
3857b3e38ee4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858b3e38ee4Smrg  emulate sh
3859b3e38ee4Smrg  NULLCMD=:
3860b3e38ee4Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861b3e38ee4Smrg  # is contrary to our usage.  Disable this feature.
3862b3e38ee4Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863b3e38ee4Smrg  setopt NO_GLOB_SUBST
3864b3e38ee4Smrgelse
3865b3e38ee4Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866b3e38ee4Smrgfi
3867b3e38ee4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868b3e38ee4SmrgDUALCASE=1; export DUALCASE # for MKS sh
386950806d53Smrg
3870b3e38ee4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871b3e38ee4Smrg# if CDPATH is set.
3872b3e38ee4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
387350806d53Smrg
3874b3e38ee4Smrgrelink_command=\"$relink_command\"
387550806d53Smrg
3876b3e38ee4Smrg# This environment variable determines our operation mode.
3877b3e38ee4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878b3e38ee4Smrg  # install mode needs the following variables:
3879b3e38ee4Smrg  generated_by_libtool_version='$macro_version'
3880b3e38ee4Smrg  notinst_deplibs='$notinst_deplibs'
3881b3e38ee4Smrgelse
3882b3e38ee4Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883b3e38ee4Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3884a73423d7Smrg    file=\"\$0\""
3885a73423d7Smrg
3886a73423d7Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3887a73423d7Smrg    $ECHO "\
3888a73423d7Smrg
3889a73423d7Smrg# A function that is used when there is no print builtin or printf.
3890a73423d7Smrgfunc_fallback_echo ()
3891a73423d7Smrg{
3892a73423d7Smrg  eval 'cat <<_LTECHO_EOF
3893a73423d7Smrg\$1
3894a73423d7Smrg_LTECHO_EOF'
3895a73423d7Smrg}
3896a73423d7Smrg    ECHO=\"$qECHO\"
3897a73423d7Smrg  fi
3898a73423d7Smrg
3899a73423d7Smrg# Very basic option parsing. These options are (a) specific to
3900a73423d7Smrg# the libtool wrapper, (b) are identical between the wrapper
3901a73423d7Smrg# /script/ and the wrapper /executable/ which is used only on
3902a73423d7Smrg# windows platforms, and (c) all begin with the string "--lt-"
3903a73423d7Smrg# (application programs are unlikely to have options which match
3904a73423d7Smrg# this pattern).
3905a73423d7Smrg#
3906a73423d7Smrg# There are only two supported options: --lt-debug and
3907a73423d7Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
3908a73423d7Smrg#
3909a73423d7Smrg# The first argument to this parsing function should be the
3910a73423d7Smrg# script's $0 value, followed by "$@".
3911a73423d7Smrglt_option_debug=
3912a73423d7Smrgfunc_parse_lt_options ()
3913a73423d7Smrg{
3914a73423d7Smrg  lt_script_arg0=\$0
3915a73423d7Smrg  shift
3916a73423d7Smrg  for lt_opt
3917a73423d7Smrg  do
3918a73423d7Smrg    case \"\$lt_opt\" in
3919a73423d7Smrg    --lt-debug) lt_option_debug=1 ;;
3920a73423d7Smrg    --lt-dump-script)
3921a73423d7Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3922a73423d7Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3923a73423d7Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3924a73423d7Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
3925a73423d7Smrg        exit 0
3926a73423d7Smrg      ;;
3927a73423d7Smrg    --lt-*)
3928a73423d7Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3929a73423d7Smrg        exit 1
3930a73423d7Smrg      ;;
3931a73423d7Smrg    esac
3932a73423d7Smrg  done
3933a73423d7Smrg
3934a73423d7Smrg  # Print the debug banner immediately:
3935a73423d7Smrg  if test -n \"\$lt_option_debug\"; then
3936a73423d7Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3937a73423d7Smrg  fi
3938a73423d7Smrg}
3939a73423d7Smrg
3940a73423d7Smrg# Used when --lt-debug. Prints its arguments to stdout
3941a73423d7Smrg# (redirection is the responsibility of the caller)
3942a73423d7Smrgfunc_lt_dump_args ()
3943a73423d7Smrg{
3944a73423d7Smrg  lt_dump_args_N=1;
3945a73423d7Smrg  for lt_arg
3946a73423d7Smrg  do
3947a73423d7Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3948a73423d7Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3949a73423d7Smrg  done
3950a73423d7Smrg}
3951a73423d7Smrg
3952a73423d7Smrg# Core function for launching the target application
3953a73423d7Smrgfunc_exec_program_core ()
3954a73423d7Smrg{
3955b3e38ee4Smrg"
3956a73423d7Smrg  case $host in
3957a73423d7Smrg  # Backslashes separate directories on plain windows
3958a73423d7Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
3959a73423d7Smrg    $ECHO "\
3960a73423d7Smrg      if test -n \"\$lt_option_debug\"; then
3961a73423d7Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3962a73423d7Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3963a73423d7Smrg      fi
3964a73423d7Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3965a73423d7Smrg"
3966a73423d7Smrg    ;;
3967a73423d7Smrg
3968a73423d7Smrg  *)
3969a73423d7Smrg    $ECHO "\
3970a73423d7Smrg      if test -n \"\$lt_option_debug\"; then
3971a73423d7Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3972a73423d7Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3973a73423d7Smrg      fi
3974a73423d7Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3975a73423d7Smrg"
3976a73423d7Smrg    ;;
3977a73423d7Smrg  esac
3978a73423d7Smrg  $ECHO "\
3979a73423d7Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3980a73423d7Smrg      exit 1
3981a73423d7Smrg}
3982a73423d7Smrg
3983a73423d7Smrg# A function to encapsulate launching the target application
3984a73423d7Smrg# Strips options in the --lt-* namespace from \$@ and
3985a73423d7Smrg# launches target application with the remaining arguments.
3986a73423d7Smrgfunc_exec_program ()
3987a73423d7Smrg{
3988a73423d7Smrg  case \" \$* \" in
3989a73423d7Smrg  *\\ --lt-*)
3990a73423d7Smrg    for lt_wr_arg
3991a73423d7Smrg    do
3992a73423d7Smrg      case \$lt_wr_arg in
3993a73423d7Smrg      --lt-*) ;;
3994a73423d7Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995a73423d7Smrg      esac
3996a73423d7Smrg      shift
3997a73423d7Smrg    done ;;
3998a73423d7Smrg  esac
3999a73423d7Smrg  func_exec_program_core \${1+\"\$@\"}
4000a73423d7Smrg}
4001a73423d7Smrg
4002a73423d7Smrg  # Parse options
4003a73423d7Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
400450806d53Smrg
4005b3e38ee4Smrg  # Find the directory that this script lives in.
4006a73423d7Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007b3e38ee4Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
400850806d53Smrg
4009b3e38ee4Smrg  # Follow symbolic links until we get to the real thisdir.
4010a73423d7Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011b3e38ee4Smrg  while test -n \"\$file\"; do
4012a73423d7Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
401350806d53Smrg
4014b3e38ee4Smrg    # If there was a directory component, then change thisdir.
4015b3e38ee4Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4016b3e38ee4Smrg      case \"\$destdir\" in
4017b3e38ee4Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018b3e38ee4Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019a18ebfb2Smrg      esac
4020b3e38ee4Smrg    fi
402150806d53Smrg
4022a73423d7Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4023a73423d7Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024b3e38ee4Smrg  done
402550806d53Smrg
4026b3e38ee4Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4027b3e38ee4Smrg  # the cwrapper.
4028a73423d7Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029b3e38ee4Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030b3e38ee4Smrg    # special case for '.'
4031b3e38ee4Smrg    if test \"\$thisdir\" = \".\"; then
4032b3e38ee4Smrg      thisdir=\`pwd\`
4033b3e38ee4Smrg    fi
4034b3e38ee4Smrg    # remove .libs from thisdir
4035b3e38ee4Smrg    case \"\$thisdir\" in
4036a73423d7Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037b3e38ee4Smrg    $objdir )   thisdir=. ;;
4038b3e38ee4Smrg    esac
4039b3e38ee4Smrg  fi
4040b3e38ee4Smrg
4041b3e38ee4Smrg  # Try to get the absolute directory name.
4042b3e38ee4Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043b3e38ee4Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044b3e38ee4Smrg"
4045b3e38ee4Smrg
4046b3e38ee4Smrg	if test "$fast_install" = yes; then
4047b3e38ee4Smrg	  $ECHO "\
4048b3e38ee4Smrg  program=lt-'$outputname'$exeext
4049b3e38ee4Smrg  progdir=\"\$thisdir/$objdir\"
4050b3e38ee4Smrg
4051b3e38ee4Smrg  if test ! -f \"\$progdir/\$program\" ||
4052b3e38ee4Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053b3e38ee4Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054b3e38ee4Smrg
4055b3e38ee4Smrg    file=\"\$\$-\$program\"
4056b3e38ee4Smrg
4057b3e38ee4Smrg    if test ! -d \"\$progdir\"; then
4058b3e38ee4Smrg      $MKDIR \"\$progdir\"
4059b3e38ee4Smrg    else
4060b3e38ee4Smrg      $RM \"\$progdir/\$file\"
4061b3e38ee4Smrg    fi"
4062b3e38ee4Smrg
4063b3e38ee4Smrg	  $ECHO "\
4064b3e38ee4Smrg
4065b3e38ee4Smrg    # relink executable if necessary
4066b3e38ee4Smrg    if test -n \"\$relink_command\"; then
4067b3e38ee4Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068b3e38ee4Smrg      else
4069b3e38ee4Smrg	$ECHO \"\$relink_command_output\" >&2
4070b3e38ee4Smrg	$RM \"\$progdir/\$file\"
4071b3e38ee4Smrg	exit 1
4072a18ebfb2Smrg      fi
4073b3e38ee4Smrg    fi
407450806d53Smrg
4075b3e38ee4Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076b3e38ee4Smrg    { $RM \"\$progdir/\$program\";
4077b3e38ee4Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078b3e38ee4Smrg    $RM \"\$progdir/\$file\"
4079b3e38ee4Smrg  fi"
4080b3e38ee4Smrg	else
4081b3e38ee4Smrg	  $ECHO "\
4082b3e38ee4Smrg  program='$outputname'
4083b3e38ee4Smrg  progdir=\"\$thisdir/$objdir\"
4084b3e38ee4Smrg"
4085a18ebfb2Smrg	fi
408650806d53Smrg
4087b3e38ee4Smrg	$ECHO "\
408850806d53Smrg
4089b3e38ee4Smrg  if test -f \"\$progdir/\$program\"; then"
409050806d53Smrg
4091a73423d7Smrg	# fixup the dll searchpath if we need to.
4092a73423d7Smrg	#
4093a73423d7Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
4094a73423d7Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
4095a73423d7Smrg	# libraries must come first.
4096a73423d7Smrg	if test -n "$dllsearchpath"; then
4097a73423d7Smrg	  $ECHO "\
4098a73423d7Smrg    # Add the dll search path components to the executable PATH
4099a73423d7Smrg    PATH=$dllsearchpath:\$PATH
4100a73423d7Smrg"
4101a73423d7Smrg	fi
4102a73423d7Smrg
4103b3e38ee4Smrg	# Export our shlibpath_var if we have one.
4104b3e38ee4Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105b3e38ee4Smrg	  $ECHO "\
4106b3e38ee4Smrg    # Add our own library path to $shlibpath_var
4107b3e38ee4Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108b3e38ee4Smrg
4109b3e38ee4Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110b3e38ee4Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
4111a73423d7Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
411250806d53Smrg
4113b3e38ee4Smrg    export $shlibpath_var
4114b3e38ee4Smrg"
4115a18ebfb2Smrg	fi
411650806d53Smrg
4117b3e38ee4Smrg	$ECHO "\
4118b3e38ee4Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119b3e38ee4Smrg      # Run the actual program with our arguments.
4120a73423d7Smrg      func_exec_program \${1+\"\$@\"}
4121b3e38ee4Smrg    fi
4122b3e38ee4Smrg  else
4123b3e38ee4Smrg    # The program doesn't exist.
4124b3e38ee4Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125b3e38ee4Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4126a73423d7Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127b3e38ee4Smrg    exit 1
4128b3e38ee4Smrg  fi
4129b3e38ee4Smrgfi\
4130b3e38ee4Smrg"
4131b3e38ee4Smrg}
413250806d53Smrg
4133af1a9c97Smrg
4134b3e38ee4Smrg# func_emit_cwrapperexe_src
4135b3e38ee4Smrg# emit the source code for a wrapper executable on stdout
4136b3e38ee4Smrg# Must ONLY be called from within func_mode_link because
4137b3e38ee4Smrg# it depends on a number of variable set therein.
4138b3e38ee4Smrgfunc_emit_cwrapperexe_src ()
4139b3e38ee4Smrg{
4140b3e38ee4Smrg	cat <<EOF
414150806d53Smrg
4142b3e38ee4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143b3e38ee4Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
414450806d53Smrg
4145b3e38ee4Smrg   The $output program cannot be directly executed until all the libtool
4146b3e38ee4Smrg   libraries that it depends on are installed.
414750806d53Smrg
4148b3e38ee4Smrg   This wrapper executable should never be moved out of the build directory.
4149b3e38ee4Smrg   If it is, it will not operate correctly.
4150b3e38ee4Smrg*/
4151b3e38ee4SmrgEOF
4152b3e38ee4Smrg	    cat <<"EOF"
4153a73423d7Smrg#ifdef _MSC_VER
4154a73423d7Smrg# define _CRT_SECURE_NO_DEPRECATE 1
4155a73423d7Smrg#endif
4156b3e38ee4Smrg#include <stdio.h>
4157b3e38ee4Smrg#include <stdlib.h>
4158b3e38ee4Smrg#ifdef _MSC_VER
4159b3e38ee4Smrg# include <direct.h>
4160b3e38ee4Smrg# include <process.h>
4161b3e38ee4Smrg# include <io.h>
4162b3e38ee4Smrg#else
4163b3e38ee4Smrg# include <unistd.h>
4164b3e38ee4Smrg# include <stdint.h>
4165b3e38ee4Smrg# ifdef __CYGWIN__
4166b3e38ee4Smrg#  include <io.h>
4167b3e38ee4Smrg# endif
4168b3e38ee4Smrg#endif
4169b3e38ee4Smrg#include <malloc.h>
4170b3e38ee4Smrg#include <stdarg.h>
4171b3e38ee4Smrg#include <assert.h>
4172b3e38ee4Smrg#include <string.h>
4173b3e38ee4Smrg#include <ctype.h>
4174b3e38ee4Smrg#include <errno.h>
4175b3e38ee4Smrg#include <fcntl.h>
4176b3e38ee4Smrg#include <sys/stat.h>
417750806d53Smrg
4178a73423d7Smrg/* declarations of non-ANSI functions */
4179a73423d7Smrg#if defined(__MINGW32__)
4180a73423d7Smrg# ifdef __STRICT_ANSI__
4181a73423d7Smrgint _putenv (const char *);
4182a73423d7Smrg# endif
4183a73423d7Smrg#elif defined(__CYGWIN__)
4184a73423d7Smrg# ifdef __STRICT_ANSI__
4185a73423d7Smrgchar *realpath (const char *, char *);
4186a73423d7Smrgint putenv (char *);
4187a73423d7Smrgint setenv (const char *, const char *, int);
4188a73423d7Smrg# endif
4189a73423d7Smrg/* #elif defined (other platforms) ... */
4190a73423d7Smrg#endif
4191a73423d7Smrg
4192a73423d7Smrg/* portability defines, excluding path handling macros */
4193a73423d7Smrg#if defined(_MSC_VER)
4194a73423d7Smrg# define setmode _setmode
4195a73423d7Smrg# define stat    _stat
4196a73423d7Smrg# define chmod   _chmod
4197a73423d7Smrg# define getcwd  _getcwd
4198a73423d7Smrg# define putenv  _putenv
4199a73423d7Smrg# define S_IXUSR _S_IEXEC
4200a73423d7Smrg# ifndef _INTPTR_T_DEFINED
4201a73423d7Smrg#  define _INTPTR_T_DEFINED
4202a73423d7Smrg#  define intptr_t int
4203a73423d7Smrg# endif
4204a73423d7Smrg#elif defined(__MINGW32__)
4205a73423d7Smrg# define setmode _setmode
4206a73423d7Smrg# define stat    _stat
4207a73423d7Smrg# define chmod   _chmod
4208a73423d7Smrg# define getcwd  _getcwd
4209a73423d7Smrg# define putenv  _putenv
4210a73423d7Smrg#elif defined(__CYGWIN__)
4211a73423d7Smrg# define HAVE_SETENV
4212a73423d7Smrg# define FOPEN_WB "wb"
4213a73423d7Smrg/* #elif defined (other platforms) ... */
4214a73423d7Smrg#endif
4215a73423d7Smrg
4216b3e38ee4Smrg#if defined(PATH_MAX)
4217b3e38ee4Smrg# define LT_PATHMAX PATH_MAX
4218b3e38ee4Smrg#elif defined(MAXPATHLEN)
4219b3e38ee4Smrg# define LT_PATHMAX MAXPATHLEN
4220b3e38ee4Smrg#else
4221b3e38ee4Smrg# define LT_PATHMAX 1024
4222b3e38ee4Smrg#endif
422350806d53Smrg
4224b3e38ee4Smrg#ifndef S_IXOTH
4225b3e38ee4Smrg# define S_IXOTH 0
4226b3e38ee4Smrg#endif
4227b3e38ee4Smrg#ifndef S_IXGRP
4228b3e38ee4Smrg# define S_IXGRP 0
4229b3e38ee4Smrg#endif
423050806d53Smrg
4231a73423d7Smrg/* path handling portability macros */
4232b3e38ee4Smrg#ifndef DIR_SEPARATOR
4233b3e38ee4Smrg# define DIR_SEPARATOR '/'
4234b3e38ee4Smrg# define PATH_SEPARATOR ':'
4235b3e38ee4Smrg#endif
423650806d53Smrg
4237b3e38ee4Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238b3e38ee4Smrg  defined (__OS2__)
4239b3e38ee4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240b3e38ee4Smrg# define FOPEN_WB "wb"
4241b3e38ee4Smrg# ifndef DIR_SEPARATOR_2
4242b3e38ee4Smrg#  define DIR_SEPARATOR_2 '\\'
4243b3e38ee4Smrg# endif
4244b3e38ee4Smrg# ifndef PATH_SEPARATOR_2
4245b3e38ee4Smrg#  define PATH_SEPARATOR_2 ';'
4246b3e38ee4Smrg# endif
4247b3e38ee4Smrg#endif
424850806d53Smrg
4249b3e38ee4Smrg#ifndef DIR_SEPARATOR_2
4250b3e38ee4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251b3e38ee4Smrg#else /* DIR_SEPARATOR_2 */
4252b3e38ee4Smrg# define IS_DIR_SEPARATOR(ch) \
4253b3e38ee4Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254b3e38ee4Smrg#endif /* DIR_SEPARATOR_2 */
425550806d53Smrg
4256b3e38ee4Smrg#ifndef PATH_SEPARATOR_2
4257b3e38ee4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258b3e38ee4Smrg#else /* PATH_SEPARATOR_2 */
4259b3e38ee4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260b3e38ee4Smrg#endif /* PATH_SEPARATOR_2 */
426150806d53Smrg
4262b3e38ee4Smrg#ifndef FOPEN_WB
4263b3e38ee4Smrg# define FOPEN_WB "w"
4264b3e38ee4Smrg#endif
4265b3e38ee4Smrg#ifndef _O_BINARY
4266b3e38ee4Smrg# define _O_BINARY 0
4267b3e38ee4Smrg#endif
426850806d53Smrg
4269b3e38ee4Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270b3e38ee4Smrg#define XFREE(stale) do { \
4271b3e38ee4Smrg  if (stale) { free ((void *) stale); stale = 0; } \
4272b3e38ee4Smrg} while (0)
427350806d53Smrg
4274a73423d7Smrg#if defined(LT_DEBUGWRAPPER)
4275a73423d7Smrgstatic int lt_debug = 1;
4276b3e38ee4Smrg#else
4277a73423d7Smrgstatic int lt_debug = 0;
4278b3e38ee4Smrg#endif
427950806d53Smrg
4280a73423d7Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
428150806d53Smrg
4282b3e38ee4Smrgvoid *xmalloc (size_t num);
4283b3e38ee4Smrgchar *xstrdup (const char *string);
4284b3e38ee4Smrgconst char *base_name (const char *name);
4285b3e38ee4Smrgchar *find_executable (const char *wrapper);
4286b3e38ee4Smrgchar *chase_symlinks (const char *pathspec);
4287b3e38ee4Smrgint make_executable (const char *path);
4288b3e38ee4Smrgint check_executable (const char *path);
4289b3e38ee4Smrgchar *strendzap (char *str, const char *pat);
4290a73423d7Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4291a73423d7Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
4292a73423d7Smrgstatic const char *nonnull (const char *s);
4293a73423d7Smrgstatic const char *nonempty (const char *s);
4294b3e38ee4Smrgvoid lt_setenv (const char *name, const char *value);
4295b3e38ee4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296b3e38ee4Smrgvoid lt_update_exe_path (const char *name, const char *value);
4297b3e38ee4Smrgvoid lt_update_lib_path (const char *name, const char *value);
4298a73423d7Smrgchar **prepare_spawn (char **argv);
4299a73423d7Smrgvoid lt_dump_script (FILE *f);
4300b3e38ee4SmrgEOF
4301b3e38ee4Smrg
4302b3e38ee4Smrg	    cat <<EOF
4303a73423d7Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304b3e38ee4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305b3e38ee4SmrgEOF
430650806d53Smrg
4307b3e38ee4Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4308a73423d7Smrg              func_to_host_path "$temp_rpath"
4309b3e38ee4Smrg	      cat <<EOF
4310a73423d7Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311b3e38ee4SmrgEOF
4312b3e38ee4Smrg	    else
4313b3e38ee4Smrg	      cat <<"EOF"
4314b3e38ee4Smrgconst char * LIB_PATH_VALUE   = "";
4315b3e38ee4SmrgEOF
4316a18ebfb2Smrg	    fi
431750806d53Smrg
4318b3e38ee4Smrg	    if test -n "$dllsearchpath"; then
4319a73423d7Smrg              func_to_host_path "$dllsearchpath:"
4320b3e38ee4Smrg	      cat <<EOF
4321b3e38ee4Smrgconst char * EXE_PATH_VARNAME = "PATH";
4322a73423d7Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323a18ebfb2SmrgEOF
4324a18ebfb2Smrg	    else
4325b3e38ee4Smrg	      cat <<"EOF"
4326b3e38ee4Smrgconst char * EXE_PATH_VARNAME = "";
4327b3e38ee4Smrgconst char * EXE_PATH_VALUE   = "";
4328b3e38ee4SmrgEOF
4329a18ebfb2Smrg	    fi
4330b3e38ee4Smrg
4331b3e38ee4Smrg	    if test "$fast_install" = yes; then
4332b3e38ee4Smrg	      cat <<EOF
4333b3e38ee4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334b3e38ee4SmrgEOF
4335a18ebfb2Smrg	    else
4336b3e38ee4Smrg	      cat <<EOF
4337b3e38ee4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338b3e38ee4SmrgEOF
4339a18ebfb2Smrg	    fi
434050806d53Smrg
434150806d53Smrg
4342b3e38ee4Smrg	    cat <<"EOF"
434350806d53Smrg
4344b3e38ee4Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
434550806d53Smrg
4346b3e38ee4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347b3e38ee4Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4348a73423d7Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
434950806d53Smrg
4350b3e38ee4Smrgint
4351b3e38ee4Smrgmain (int argc, char *argv[])
4352b3e38ee4Smrg{
4353b3e38ee4Smrg  char **newargz;
4354b3e38ee4Smrg  int  newargc;
4355b3e38ee4Smrg  char *tmp_pathspec;
4356b3e38ee4Smrg  char *actual_cwrapper_path;
4357b3e38ee4Smrg  char *actual_cwrapper_name;
4358b3e38ee4Smrg  char *target_name;
4359b3e38ee4Smrg  char *lt_argv_zero;
4360b3e38ee4Smrg  intptr_t rval = 127;
436150806d53Smrg
4362b3e38ee4Smrg  int i;
436350806d53Smrg
4364b3e38ee4Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
4365a73423d7Smrg  newargz = XMALLOC (char *, argc + 1);
436650806d53Smrg
4367a73423d7Smrg  /* very simple arg parsing; don't want to rely on getopt
4368a73423d7Smrg   * also, copy all non cwrapper options to newargz, except
4369a73423d7Smrg   * argz[0], which is handled differently
4370a73423d7Smrg   */
4371a73423d7Smrg  newargc=0;
4372b3e38ee4Smrg  for (i = 1; i < argc; i++)
4373b3e38ee4Smrg    {
4374b3e38ee4Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375b3e38ee4Smrg	{
4376b3e38ee4SmrgEOF
4377b3e38ee4Smrg	    case "$host" in
4378b3e38ee4Smrg	      *mingw* | *cygwin* )
4379b3e38ee4Smrg		# make stdout use "unix" line endings
4380b3e38ee4Smrg		echo "          setmode(1,_O_BINARY);"
4381b3e38ee4Smrg		;;
4382b3e38ee4Smrg	      esac
438350806d53Smrg
4384b3e38ee4Smrg	    cat <<"EOF"
4385a73423d7Smrg	  lt_dump_script (stdout);
4386b3e38ee4Smrg	  return 0;
4387b3e38ee4Smrg	}
4388a73423d7Smrg      if (strcmp (argv[i], debug_opt) == 0)
4389a73423d7Smrg	{
4390a73423d7Smrg          lt_debug = 1;
4391a73423d7Smrg          continue;
4392a73423d7Smrg	}
4393a73423d7Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4394a73423d7Smrg        {
4395a73423d7Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4396a73423d7Smrg             namespace, but it is not one of the ones we know about and
4397a73423d7Smrg             have already dealt with, above (inluding dump-script), then
4398a73423d7Smrg             report an error. Otherwise, targets might begin to believe
4399a73423d7Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4400a73423d7Smrg             namespace. The first time any user complains about this, we'll
4401a73423d7Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4402a73423d7Smrg             or a configure.ac-settable value.
4403a73423d7Smrg           */
4404a73423d7Smrg          lt_fatal (__FILE__, __LINE__,
4405a73423d7Smrg		    "unrecognized %s option: '%s'",
4406a73423d7Smrg                    ltwrapper_option_prefix, argv[i]);
4407a73423d7Smrg        }
4408a73423d7Smrg      /* otherwise ... */
4409a73423d7Smrg      newargz[++newargc] = xstrdup (argv[i]);
4410b3e38ee4Smrg    }
4411a73423d7Smrg  newargz[++newargc] = NULL;
4412a73423d7Smrg
4413a73423d7SmrgEOF
4414a73423d7Smrg	    cat <<EOF
4415a73423d7Smrg  /* The GNU banner must be the first non-error debug message */
4416a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4417a73423d7SmrgEOF
4418a73423d7Smrg	    cat <<"EOF"
4419a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4420a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
442150806d53Smrg
4422b3e38ee4Smrg  tmp_pathspec = find_executable (argv[0]);
4423b3e38ee4Smrg  if (tmp_pathspec == NULL)
4424a73423d7Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4425a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__,
4426a73423d7Smrg                  "(main) found exe (before symlink chase) at: %s\n",
4427a73423d7Smrg		  tmp_pathspec);
4428b3e38ee4Smrg
4429b3e38ee4Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4430a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__,
4431a73423d7Smrg                  "(main) found exe (after symlink chase) at: %s\n",
4432a73423d7Smrg		  actual_cwrapper_path);
4433b3e38ee4Smrg  XFREE (tmp_pathspec);
4434b3e38ee4Smrg
4435a73423d7Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436b3e38ee4Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437b3e38ee4Smrg
4438b3e38ee4Smrg  /* wrapper name transforms */
4439b3e38ee4Smrg  strendzap (actual_cwrapper_name, ".exe");
4440b3e38ee4Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441b3e38ee4Smrg  XFREE (actual_cwrapper_name);
4442b3e38ee4Smrg  actual_cwrapper_name = tmp_pathspec;
4443b3e38ee4Smrg  tmp_pathspec = 0;
4444b3e38ee4Smrg
4445b3e38ee4Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446b3e38ee4Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447b3e38ee4Smrg  strendzap (target_name, ".exe");
4448b3e38ee4Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449b3e38ee4Smrg  XFREE (target_name);
4450b3e38ee4Smrg  target_name = tmp_pathspec;
4451b3e38ee4Smrg  tmp_pathspec = 0;
4452b3e38ee4Smrg
4453a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__,
4454a73423d7Smrg		  "(main) libtool target name: %s\n",
4455a73423d7Smrg		  target_name);
4456b3e38ee4SmrgEOF
445750806d53Smrg
4458b3e38ee4Smrg	    cat <<EOF
4459b3e38ee4Smrg  newargz[0] =
4460b3e38ee4Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461b3e38ee4Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462b3e38ee4Smrg  strcpy (newargz[0], actual_cwrapper_path);
4463b3e38ee4Smrg  strcat (newargz[0], "$objdir");
4464b3e38ee4Smrg  strcat (newargz[0], "/");
4465b3e38ee4SmrgEOF
446650806d53Smrg
4467b3e38ee4Smrg	    cat <<"EOF"
4468b3e38ee4Smrg  /* stop here, and copy so we don't have to do this twice */
4469b3e38ee4Smrg  tmp_pathspec = xstrdup (newargz[0]);
447050806d53Smrg
4471b3e38ee4Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472b3e38ee4Smrg  strcat (newargz[0], actual_cwrapper_name);
447350806d53Smrg
4474b3e38ee4Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475b3e38ee4Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476b3e38ee4Smrg  XFREE (tmp_pathspec);
4477b3e38ee4Smrg  tmp_pathspec = NULL;
4478b3e38ee4SmrgEOF
447950806d53Smrg
4480b3e38ee4Smrg	    case $host_os in
4481b3e38ee4Smrg	      mingw*)
4482b3e38ee4Smrg	    cat <<"EOF"
4483b3e38ee4Smrg  {
4484b3e38ee4Smrg    char* p;
4485b3e38ee4Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486b3e38ee4Smrg      {
4487b3e38ee4Smrg	*p = '/';
4488b3e38ee4Smrg      }
4489b3e38ee4Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490b3e38ee4Smrg      {
4491b3e38ee4Smrg	*p = '/';
4492b3e38ee4Smrg      }
4493b3e38ee4Smrg  }
4494b3e38ee4SmrgEOF
4495b3e38ee4Smrg	    ;;
4496b3e38ee4Smrg	    esac
449750806d53Smrg
4498b3e38ee4Smrg	    cat <<"EOF"
4499b3e38ee4Smrg  XFREE (target_name);
4500b3e38ee4Smrg  XFREE (actual_cwrapper_path);
4501b3e38ee4Smrg  XFREE (actual_cwrapper_name);
450250806d53Smrg
4503b3e38ee4Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504b3e38ee4Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4505a73423d7Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4506a73423d7Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4507a73423d7Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
4508a73423d7Smrg     libraries must come first. */
4509b3e38ee4Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4510a73423d7Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
451150806d53Smrg
4512a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4513a73423d7Smrg		  nonnull (lt_argv_zero));
4514b3e38ee4Smrg  for (i = 0; i < newargc; i++)
4515b3e38ee4Smrg    {
4516a73423d7Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4517a73423d7Smrg		      i, nonnull (newargz[i]));
4518b3e38ee4Smrg    }
451950806d53Smrg
4520b3e38ee4SmrgEOF
452150806d53Smrg
4522b3e38ee4Smrg	    case $host_os in
4523b3e38ee4Smrg	      mingw*)
4524b3e38ee4Smrg		cat <<"EOF"
4525b3e38ee4Smrg  /* execv doesn't actually work on mingw as expected on unix */
4526a73423d7Smrg  newargz = prepare_spawn (newargz);
4527b3e38ee4Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528b3e38ee4Smrg  if (rval == -1)
4529b3e38ee4Smrg    {
4530b3e38ee4Smrg      /* failed to start process */
4531a73423d7Smrg      lt_debugprintf (__FILE__, __LINE__,
4532a73423d7Smrg		      "(main) failed to launch target \"%s\": %s\n",
4533a73423d7Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4534b3e38ee4Smrg      return 127;
4535b3e38ee4Smrg    }
4536b3e38ee4Smrg  return rval;
4537b3e38ee4SmrgEOF
4538b3e38ee4Smrg		;;
4539b3e38ee4Smrg	      *)
4540b3e38ee4Smrg		cat <<"EOF"
4541b3e38ee4Smrg  execv (lt_argv_zero, newargz);
4542b3e38ee4Smrg  return rval; /* =127, but avoids unused variable warning */
4543b3e38ee4SmrgEOF
4544b3e38ee4Smrg		;;
4545b3e38ee4Smrg	    esac
454650806d53Smrg
4547b3e38ee4Smrg	    cat <<"EOF"
4548b3e38ee4Smrg}
454950806d53Smrg
4550b3e38ee4Smrgvoid *
4551b3e38ee4Smrgxmalloc (size_t num)
4552b3e38ee4Smrg{
4553b3e38ee4Smrg  void *p = (void *) malloc (num);
4554b3e38ee4Smrg  if (!p)
4555a73423d7Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
455650806d53Smrg
4557b3e38ee4Smrg  return p;
4558b3e38ee4Smrg}
455950806d53Smrg
4560b3e38ee4Smrgchar *
4561b3e38ee4Smrgxstrdup (const char *string)
4562b3e38ee4Smrg{
4563b3e38ee4Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564b3e38ee4Smrg			  string) : NULL;
4565b3e38ee4Smrg}
456650806d53Smrg
4567b3e38ee4Smrgconst char *
4568b3e38ee4Smrgbase_name (const char *name)
4569b3e38ee4Smrg{
4570b3e38ee4Smrg  const char *base;
4571a18ebfb2Smrg
4572b3e38ee4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573b3e38ee4Smrg  /* Skip over the disk name in MSDOS pathnames. */
4574b3e38ee4Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575b3e38ee4Smrg    name += 2;
4576b3e38ee4Smrg#endif
4577a18ebfb2Smrg
4578b3e38ee4Smrg  for (base = name; *name; name++)
4579b3e38ee4Smrg    if (IS_DIR_SEPARATOR (*name))
4580b3e38ee4Smrg      base = name + 1;
4581b3e38ee4Smrg  return base;
4582b3e38ee4Smrg}
4583a18ebfb2Smrg
4584b3e38ee4Smrgint
4585b3e38ee4Smrgcheck_executable (const char *path)
4586b3e38ee4Smrg{
4587b3e38ee4Smrg  struct stat st;
4588a18ebfb2Smrg
4589a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4590a73423d7Smrg                  nonempty (path));
4591b3e38ee4Smrg  if ((!path) || (!*path))
4592b3e38ee4Smrg    return 0;
4593a18ebfb2Smrg
4594b3e38ee4Smrg  if ((stat (path, &st) >= 0)
4595b3e38ee4Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596b3e38ee4Smrg    return 1;
4597b3e38ee4Smrg  else
4598b3e38ee4Smrg    return 0;
4599b3e38ee4Smrg}
460050806d53Smrg
4601b3e38ee4Smrgint
4602b3e38ee4Smrgmake_executable (const char *path)
4603b3e38ee4Smrg{
4604b3e38ee4Smrg  int rval = 0;
4605b3e38ee4Smrg  struct stat st;
460650806d53Smrg
4607a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4608a73423d7Smrg                  nonempty (path));
4609b3e38ee4Smrg  if ((!path) || (!*path))
4610b3e38ee4Smrg    return 0;
461150806d53Smrg
4612b3e38ee4Smrg  if (stat (path, &st) >= 0)
4613b3e38ee4Smrg    {
4614b3e38ee4Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615b3e38ee4Smrg    }
4616b3e38ee4Smrg  return rval;
4617b3e38ee4Smrg}
4618a18ebfb2Smrg
4619b3e38ee4Smrg/* Searches for the full path of the wrapper.  Returns
4620b3e38ee4Smrg   newly allocated full path name if found, NULL otherwise
4621b3e38ee4Smrg   Does not chase symlinks, even on platforms that support them.
4622b3e38ee4Smrg*/
4623b3e38ee4Smrgchar *
4624b3e38ee4Smrgfind_executable (const char *wrapper)
4625b3e38ee4Smrg{
4626b3e38ee4Smrg  int has_slash = 0;
4627b3e38ee4Smrg  const char *p;
4628b3e38ee4Smrg  const char *p_next;
4629b3e38ee4Smrg  /* static buffer for getcwd */
4630b3e38ee4Smrg  char tmp[LT_PATHMAX + 1];
4631b3e38ee4Smrg  int tmp_len;
4632b3e38ee4Smrg  char *concat_name;
4633a18ebfb2Smrg
4634a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4635a73423d7Smrg                  nonempty (wrapper));
4636a18ebfb2Smrg
4637b3e38ee4Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638b3e38ee4Smrg    return NULL;
4639a18ebfb2Smrg
4640b3e38ee4Smrg  /* Absolute path? */
4641b3e38ee4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642b3e38ee4Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643b3e38ee4Smrg    {
4644b3e38ee4Smrg      concat_name = xstrdup (wrapper);
4645b3e38ee4Smrg      if (check_executable (concat_name))
4646b3e38ee4Smrg	return concat_name;
4647b3e38ee4Smrg      XFREE (concat_name);
4648b3e38ee4Smrg    }
4649b3e38ee4Smrg  else
4650b3e38ee4Smrg    {
4651b3e38ee4Smrg#endif
4652b3e38ee4Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653b3e38ee4Smrg	{
4654b3e38ee4Smrg	  concat_name = xstrdup (wrapper);
4655b3e38ee4Smrg	  if (check_executable (concat_name))
4656b3e38ee4Smrg	    return concat_name;
4657b3e38ee4Smrg	  XFREE (concat_name);
4658b3e38ee4Smrg	}
4659b3e38ee4Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660b3e38ee4Smrg    }
4661b3e38ee4Smrg#endif
466250806d53Smrg
4663b3e38ee4Smrg  for (p = wrapper; *p; p++)
4664b3e38ee4Smrg    if (*p == '/')
4665b3e38ee4Smrg      {
4666b3e38ee4Smrg	has_slash = 1;
4667b3e38ee4Smrg	break;
4668b3e38ee4Smrg      }
4669b3e38ee4Smrg  if (!has_slash)
4670b3e38ee4Smrg    {
4671b3e38ee4Smrg      /* no slashes; search PATH */
4672b3e38ee4Smrg      const char *path = getenv ("PATH");
4673b3e38ee4Smrg      if (path != NULL)
4674b3e38ee4Smrg	{
4675b3e38ee4Smrg	  for (p = path; *p; p = p_next)
4676b3e38ee4Smrg	    {
4677b3e38ee4Smrg	      const char *q;
4678b3e38ee4Smrg	      size_t p_len;
4679b3e38ee4Smrg	      for (q = p; *q; q++)
4680b3e38ee4Smrg		if (IS_PATH_SEPARATOR (*q))
4681b3e38ee4Smrg		  break;
4682b3e38ee4Smrg	      p_len = q - p;
4683b3e38ee4Smrg	      p_next = (*q == '\0' ? q : q + 1);
4684b3e38ee4Smrg	      if (p_len == 0)
4685b3e38ee4Smrg		{
4686b3e38ee4Smrg		  /* empty path: current directory */
4687b3e38ee4Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4688a73423d7Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4689a73423d7Smrg                              nonnull (strerror (errno)));
4690b3e38ee4Smrg		  tmp_len = strlen (tmp);
4691b3e38ee4Smrg		  concat_name =
4692b3e38ee4Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693b3e38ee4Smrg		  memcpy (concat_name, tmp, tmp_len);
4694b3e38ee4Smrg		  concat_name[tmp_len] = '/';
4695b3e38ee4Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696b3e38ee4Smrg		}
4697b3e38ee4Smrg	      else
4698b3e38ee4Smrg		{
4699b3e38ee4Smrg		  concat_name =
4700b3e38ee4Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701b3e38ee4Smrg		  memcpy (concat_name, p, p_len);
4702b3e38ee4Smrg		  concat_name[p_len] = '/';
4703b3e38ee4Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4704b3e38ee4Smrg		}
4705b3e38ee4Smrg	      if (check_executable (concat_name))
4706b3e38ee4Smrg		return concat_name;
4707b3e38ee4Smrg	      XFREE (concat_name);
4708b3e38ee4Smrg	    }
4709b3e38ee4Smrg	}
4710b3e38ee4Smrg      /* not found in PATH; assume curdir */
4711b3e38ee4Smrg    }
4712b3e38ee4Smrg  /* Relative path | not found in path: prepend cwd */
4713b3e38ee4Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
4714a73423d7Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4715a73423d7Smrg              nonnull (strerror (errno)));
4716b3e38ee4Smrg  tmp_len = strlen (tmp);
4717b3e38ee4Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718b3e38ee4Smrg  memcpy (concat_name, tmp, tmp_len);
4719b3e38ee4Smrg  concat_name[tmp_len] = '/';
4720b3e38ee4Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
472150806d53Smrg
4722b3e38ee4Smrg  if (check_executable (concat_name))
4723b3e38ee4Smrg    return concat_name;
4724b3e38ee4Smrg  XFREE (concat_name);
4725b3e38ee4Smrg  return NULL;
4726b3e38ee4Smrg}
472750806d53Smrg
4728b3e38ee4Smrgchar *
4729b3e38ee4Smrgchase_symlinks (const char *pathspec)
4730b3e38ee4Smrg{
4731b3e38ee4Smrg#ifndef S_ISLNK
4732b3e38ee4Smrg  return xstrdup (pathspec);
4733b3e38ee4Smrg#else
4734b3e38ee4Smrg  char buf[LT_PATHMAX];
4735b3e38ee4Smrg  struct stat s;
4736b3e38ee4Smrg  char *tmp_pathspec = xstrdup (pathspec);
4737b3e38ee4Smrg  char *p;
4738b3e38ee4Smrg  int has_symlinks = 0;
4739b3e38ee4Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740b3e38ee4Smrg    {
4741a73423d7Smrg      lt_debugprintf (__FILE__, __LINE__,
4742a73423d7Smrg		      "checking path component for symlinks: %s\n",
4743a73423d7Smrg		      tmp_pathspec);
4744b3e38ee4Smrg      if (lstat (tmp_pathspec, &s) == 0)
4745b3e38ee4Smrg	{
4746b3e38ee4Smrg	  if (S_ISLNK (s.st_mode) != 0)
4747b3e38ee4Smrg	    {
4748b3e38ee4Smrg	      has_symlinks = 1;
4749b3e38ee4Smrg	      break;
4750b3e38ee4Smrg	    }
475150806d53Smrg
4752b3e38ee4Smrg	  /* search backwards for last DIR_SEPARATOR */
4753b3e38ee4Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754b3e38ee4Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755b3e38ee4Smrg	    p--;
4756b3e38ee4Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757b3e38ee4Smrg	    {
4758b3e38ee4Smrg	      /* no more DIR_SEPARATORS left */
4759b3e38ee4Smrg	      break;
4760b3e38ee4Smrg	    }
4761b3e38ee4Smrg	  *p = '\0';
4762b3e38ee4Smrg	}
4763b3e38ee4Smrg      else
4764b3e38ee4Smrg	{
4765a73423d7Smrg	  lt_fatal (__FILE__, __LINE__,
4766a73423d7Smrg		    "error accessing file \"%s\": %s",
4767a73423d7Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4768b3e38ee4Smrg	}
4769b3e38ee4Smrg    }
4770b3e38ee4Smrg  XFREE (tmp_pathspec);
477150806d53Smrg
4772b3e38ee4Smrg  if (!has_symlinks)
4773b3e38ee4Smrg    {
4774b3e38ee4Smrg      return xstrdup (pathspec);
4775b3e38ee4Smrg    }
477650806d53Smrg
4777b3e38ee4Smrg  tmp_pathspec = realpath (pathspec, buf);
4778b3e38ee4Smrg  if (tmp_pathspec == 0)
4779b3e38ee4Smrg    {
4780a73423d7Smrg      lt_fatal (__FILE__, __LINE__,
4781a73423d7Smrg		"could not follow symlinks for %s", pathspec);
4782b3e38ee4Smrg    }
4783b3e38ee4Smrg  return xstrdup (tmp_pathspec);
4784b3e38ee4Smrg#endif
4785b3e38ee4Smrg}
478650806d53Smrg
4787b3e38ee4Smrgchar *
4788b3e38ee4Smrgstrendzap (char *str, const char *pat)
4789b3e38ee4Smrg{
4790b3e38ee4Smrg  size_t len, patlen;
479150806d53Smrg
4792b3e38ee4Smrg  assert (str != NULL);
4793b3e38ee4Smrg  assert (pat != NULL);
479450806d53Smrg
4795b3e38ee4Smrg  len = strlen (str);
4796b3e38ee4Smrg  patlen = strlen (pat);
479750806d53Smrg
4798b3e38ee4Smrg  if (patlen <= len)
4799b3e38ee4Smrg    {
4800b3e38ee4Smrg      str += len - patlen;
4801b3e38ee4Smrg      if (strcmp (str, pat) == 0)
4802b3e38ee4Smrg	*str = '\0';
4803b3e38ee4Smrg    }
4804b3e38ee4Smrg  return str;
4805b3e38ee4Smrg}
480650806d53Smrg
4807a73423d7Smrgvoid
4808a73423d7Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
4809a73423d7Smrg{
4810a73423d7Smrg  va_list args;
4811a73423d7Smrg  if (lt_debug)
4812a73423d7Smrg    {
4813a73423d7Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4814a73423d7Smrg      va_start (args, fmt);
4815a73423d7Smrg      (void) vfprintf (stderr, fmt, args);
4816a73423d7Smrg      va_end (args);
4817a73423d7Smrg    }
4818a73423d7Smrg}
4819a73423d7Smrg
4820b3e38ee4Smrgstatic void
4821a73423d7Smrglt_error_core (int exit_status, const char *file,
4822a73423d7Smrg	       int line, const char *mode,
4823b3e38ee4Smrg	       const char *message, va_list ap)
4824b3e38ee4Smrg{
4825a73423d7Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826b3e38ee4Smrg  vfprintf (stderr, message, ap);
4827b3e38ee4Smrg  fprintf (stderr, ".\n");
482850806d53Smrg
4829b3e38ee4Smrg  if (exit_status >= 0)
4830b3e38ee4Smrg    exit (exit_status);
4831b3e38ee4Smrg}
483250806d53Smrg
4833b3e38ee4Smrgvoid
4834a73423d7Smrglt_fatal (const char *file, int line, const char *message, ...)
4835b3e38ee4Smrg{
4836b3e38ee4Smrg  va_list ap;
4837b3e38ee4Smrg  va_start (ap, message);
4838a73423d7Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839b3e38ee4Smrg  va_end (ap);
4840b3e38ee4Smrg}
4841af1a9c97Smrg
4842a73423d7Smrgstatic const char *
4843a73423d7Smrgnonnull (const char *s)
4844a73423d7Smrg{
4845a73423d7Smrg  return s ? s : "(null)";
4846a73423d7Smrg}
4847a73423d7Smrg
4848a73423d7Smrgstatic const char *
4849a73423d7Smrgnonempty (const char *s)
4850a73423d7Smrg{
4851a73423d7Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
4852a73423d7Smrg}
4853a73423d7Smrg
4854b3e38ee4Smrgvoid
4855b3e38ee4Smrglt_setenv (const char *name, const char *value)
4856b3e38ee4Smrg{
4857a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__,
4858a73423d7Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
4859a73423d7Smrg                  nonnull (name), nonnull (value));
4860b3e38ee4Smrg  {
4861b3e38ee4Smrg#ifdef HAVE_SETENV
4862b3e38ee4Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863b3e38ee4Smrg    char *str = xstrdup (value);
4864b3e38ee4Smrg    setenv (name, str, 1);
4865b3e38ee4Smrg#else
4866b3e38ee4Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867b3e38ee4Smrg    char *str = XMALLOC (char, len);
4868b3e38ee4Smrg    sprintf (str, "%s=%s", name, value);
4869b3e38ee4Smrg    if (putenv (str) != EXIT_SUCCESS)
4870b3e38ee4Smrg      {
4871b3e38ee4Smrg        XFREE (str);
4872b3e38ee4Smrg      }
4873b3e38ee4Smrg#endif
4874b3e38ee4Smrg  }
4875b3e38ee4Smrg}
487650806d53Smrg
4877b3e38ee4Smrgchar *
4878b3e38ee4Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879b3e38ee4Smrg{
4880b3e38ee4Smrg  char *new_value;
4881b3e38ee4Smrg  if (orig_value && *orig_value)
4882b3e38ee4Smrg    {
4883b3e38ee4Smrg      int orig_value_len = strlen (orig_value);
4884b3e38ee4Smrg      int add_len = strlen (add);
4885b3e38ee4Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886b3e38ee4Smrg      if (to_end)
4887b3e38ee4Smrg        {
4888b3e38ee4Smrg          strcpy (new_value, orig_value);
4889b3e38ee4Smrg          strcpy (new_value + orig_value_len, add);
4890b3e38ee4Smrg        }
4891b3e38ee4Smrg      else
4892b3e38ee4Smrg        {
4893b3e38ee4Smrg          strcpy (new_value, add);
4894b3e38ee4Smrg          strcpy (new_value + add_len, orig_value);
4895b3e38ee4Smrg        }
4896b3e38ee4Smrg    }
4897b3e38ee4Smrg  else
4898b3e38ee4Smrg    {
4899b3e38ee4Smrg      new_value = xstrdup (add);
4900b3e38ee4Smrg    }
4901b3e38ee4Smrg  return new_value;
4902b3e38ee4Smrg}
490350806d53Smrg
4904b3e38ee4Smrgvoid
4905b3e38ee4Smrglt_update_exe_path (const char *name, const char *value)
4906b3e38ee4Smrg{
4907a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__,
4908a73423d7Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4909a73423d7Smrg                  nonnull (name), nonnull (value));
491050806d53Smrg
4911b3e38ee4Smrg  if (name && *name && value && *value)
4912b3e38ee4Smrg    {
4913b3e38ee4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914b3e38ee4Smrg      /* some systems can't cope with a ':'-terminated path #' */
4915b3e38ee4Smrg      int len = strlen (new_value);
4916b3e38ee4Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917b3e38ee4Smrg        {
4918b3e38ee4Smrg          new_value[len-1] = '\0';
4919b3e38ee4Smrg        }
4920b3e38ee4Smrg      lt_setenv (name, new_value);
4921b3e38ee4Smrg      XFREE (new_value);
4922b3e38ee4Smrg    }
4923b3e38ee4Smrg}
492450806d53Smrg
4925b3e38ee4Smrgvoid
4926b3e38ee4Smrglt_update_lib_path (const char *name, const char *value)
4927b3e38ee4Smrg{
4928a73423d7Smrg  lt_debugprintf (__FILE__, __LINE__,
4929a73423d7Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4930a73423d7Smrg                  nonnull (name), nonnull (value));
493150806d53Smrg
4932b3e38ee4Smrg  if (name && *name && value && *value)
4933b3e38ee4Smrg    {
4934b3e38ee4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935b3e38ee4Smrg      lt_setenv (name, new_value);
4936b3e38ee4Smrg      XFREE (new_value);
4937b3e38ee4Smrg    }
4938b3e38ee4Smrg}
493950806d53Smrg
4940a73423d7SmrgEOF
4941a73423d7Smrg	    case $host_os in
4942a73423d7Smrg	      mingw*)
4943a73423d7Smrg		cat <<"EOF"
4944a73423d7Smrg
4945a73423d7Smrg/* Prepares an argument vector before calling spawn().
4946a73423d7Smrg   Note that spawn() does not by itself call the command interpreter
4947a73423d7Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4948a73423d7Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4949a73423d7Smrg         GetVersionEx(&v);
4950a73423d7Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4951a73423d7Smrg      }) ? "cmd.exe" : "command.com").
4952a73423d7Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
4953a73423d7Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4954a73423d7Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4955a73423d7Smrg   special way:
4956a73423d7Smrg   - Space and tab are interpreted as delimiters. They are not treated as
4957a73423d7Smrg     delimiters if they are surrounded by double quotes: "...".
4958a73423d7Smrg   - Unescaped double quotes are removed from the input. Their only effect is
4959a73423d7Smrg     that within double quotes, space and tab are treated like normal
4960a73423d7Smrg     characters.
4961a73423d7Smrg   - Backslashes not followed by double quotes are not special.
4962a73423d7Smrg   - But 2*n+1 backslashes followed by a double quote become
4963a73423d7Smrg     n backslashes followed by a double quote (n >= 0):
4964a73423d7Smrg       \" -> "
4965a73423d7Smrg       \\\" -> \"
4966a73423d7Smrg       \\\\\" -> \\"
4967a73423d7Smrg */
4968a73423d7Smrg#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"
4969a73423d7Smrg#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"
4970a73423d7Smrgchar **
4971a73423d7Smrgprepare_spawn (char **argv)
4972a73423d7Smrg{
4973a73423d7Smrg  size_t argc;
4974a73423d7Smrg  char **new_argv;
4975a73423d7Smrg  size_t i;
4976a73423d7Smrg
4977a73423d7Smrg  /* Count number of arguments.  */
4978a73423d7Smrg  for (argc = 0; argv[argc] != NULL; argc++)
4979a73423d7Smrg    ;
4980a73423d7Smrg
4981a73423d7Smrg  /* Allocate new argument vector.  */
4982a73423d7Smrg  new_argv = XMALLOC (char *, argc + 1);
4983a73423d7Smrg
4984a73423d7Smrg  /* Put quoted arguments into the new argument vector.  */
4985a73423d7Smrg  for (i = 0; i < argc; i++)
4986a73423d7Smrg    {
4987a73423d7Smrg      const char *string = argv[i];
4988a73423d7Smrg
4989a73423d7Smrg      if (string[0] == '\0')
4990a73423d7Smrg	new_argv[i] = xstrdup ("\"\"");
4991a73423d7Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4992a73423d7Smrg	{
4993a73423d7Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4994a73423d7Smrg	  size_t length;
4995a73423d7Smrg	  unsigned int backslashes;
4996a73423d7Smrg	  const char *s;
4997a73423d7Smrg	  char *quoted_string;
4998a73423d7Smrg	  char *p;
4999a73423d7Smrg
5000a73423d7Smrg	  length = 0;
5001a73423d7Smrg	  backslashes = 0;
5002a73423d7Smrg	  if (quote_around)
5003a73423d7Smrg	    length++;
5004a73423d7Smrg	  for (s = string; *s != '\0'; s++)
5005a73423d7Smrg	    {
5006a73423d7Smrg	      char c = *s;
5007a73423d7Smrg	      if (c == '"')
5008a73423d7Smrg		length += backslashes + 1;
5009a73423d7Smrg	      length++;
5010a73423d7Smrg	      if (c == '\\')
5011a73423d7Smrg		backslashes++;
5012a73423d7Smrg	      else
5013a73423d7Smrg		backslashes = 0;
5014a73423d7Smrg	    }
5015a73423d7Smrg	  if (quote_around)
5016a73423d7Smrg	    length += backslashes + 1;
5017a73423d7Smrg
5018a73423d7Smrg	  quoted_string = XMALLOC (char, length + 1);
5019a73423d7Smrg
5020a73423d7Smrg	  p = quoted_string;
5021a73423d7Smrg	  backslashes = 0;
5022a73423d7Smrg	  if (quote_around)
5023a73423d7Smrg	    *p++ = '"';
5024a73423d7Smrg	  for (s = string; *s != '\0'; s++)
5025a73423d7Smrg	    {
5026a73423d7Smrg	      char c = *s;
5027a73423d7Smrg	      if (c == '"')
5028a73423d7Smrg		{
5029a73423d7Smrg		  unsigned int j;
5030a73423d7Smrg		  for (j = backslashes + 1; j > 0; j--)
5031a73423d7Smrg		    *p++ = '\\';
5032a73423d7Smrg		}
5033a73423d7Smrg	      *p++ = c;
5034a73423d7Smrg	      if (c == '\\')
5035a73423d7Smrg		backslashes++;
5036a73423d7Smrg	      else
5037a73423d7Smrg		backslashes = 0;
5038a73423d7Smrg	    }
5039a73423d7Smrg	  if (quote_around)
5040a73423d7Smrg	    {
5041a73423d7Smrg	      unsigned int j;
5042a73423d7Smrg	      for (j = backslashes; j > 0; j--)
5043a73423d7Smrg		*p++ = '\\';
5044a73423d7Smrg	      *p++ = '"';
5045a73423d7Smrg	    }
5046a73423d7Smrg	  *p = '\0';
5047a73423d7Smrg
5048a73423d7Smrg	  new_argv[i] = quoted_string;
5049a73423d7Smrg	}
5050a73423d7Smrg      else
5051a73423d7Smrg	new_argv[i] = (char *) string;
5052a73423d7Smrg    }
5053a73423d7Smrg  new_argv[argc] = NULL;
5054a73423d7Smrg
5055a73423d7Smrg  return new_argv;
5056a73423d7Smrg}
5057a73423d7SmrgEOF
5058a73423d7Smrg		;;
5059a73423d7Smrg	    esac
506050806d53Smrg
5061a73423d7Smrg            cat <<"EOF"
5062a73423d7Smrgvoid lt_dump_script (FILE* f)
5063a73423d7Smrg{
5064a73423d7SmrgEOF
5065a73423d7Smrg	    func_emit_wrapper yes |
5066a73423d7Smrg	      $SED -n -e '
5067a73423d7Smrgs/^\(.\{79\}\)\(..*\)/\1\
5068a73423d7Smrg\2/
5069a73423d7Smrgh
5070a73423d7Smrgs/\([\\"]\)/\\\1/g
5071a73423d7Smrgs/$/\\n/
5072a73423d7Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
5073a73423d7Smrgg
5074a73423d7SmrgD'
5075a73423d7Smrg            cat <<"EOF"
5076a73423d7Smrg}
5077b3e38ee4SmrgEOF
5078b3e38ee4Smrg}
5079b3e38ee4Smrg# end: func_emit_cwrapperexe_src
508050806d53Smrg
5081a73423d7Smrg# func_win32_import_lib_p ARG
5082a73423d7Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
5083a73423d7Smrgfunc_win32_import_lib_p ()
5084a73423d7Smrg{
5085a73423d7Smrg    $opt_debug
5086a73423d7Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5087a73423d7Smrg    *import*) : ;;
5088a73423d7Smrg    *) false ;;
5089a73423d7Smrg    esac
5090a73423d7Smrg}
5091a73423d7Smrg
5092b3e38ee4Smrg# func_mode_link arg...
5093b3e38ee4Smrgfunc_mode_link ()
5094b3e38ee4Smrg{
5095b3e38ee4Smrg    $opt_debug
5096b3e38ee4Smrg    case $host in
5097b3e38ee4Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098b3e38ee4Smrg      # It is impossible to link a dll without this setting, and
5099b3e38ee4Smrg      # we shouldn't force the makefile maintainer to figure out
5100b3e38ee4Smrg      # which system we are compiling for in order to pass an extra
5101b3e38ee4Smrg      # flag for every libtool invocation.
5102b3e38ee4Smrg      # allow_undefined=no
510350806d53Smrg
5104b3e38ee4Smrg      # FIXME: Unfortunately, there are problems with the above when trying
5105b3e38ee4Smrg      # to make a dll which has undefined symbols, in which case not
5106b3e38ee4Smrg      # even a static library is built.  For now, we need to specify
5107b3e38ee4Smrg      # -no-undefined on the libtool link line when we can be certain
5108b3e38ee4Smrg      # that all symbols are satisfied, otherwise we get a static library.
5109b3e38ee4Smrg      allow_undefined=yes
5110b3e38ee4Smrg      ;;
5111b3e38ee4Smrg    *)
5112b3e38ee4Smrg      allow_undefined=yes
5113b3e38ee4Smrg      ;;
5114b3e38ee4Smrg    esac
5115b3e38ee4Smrg    libtool_args=$nonopt
5116b3e38ee4Smrg    base_compile="$nonopt $@"
5117b3e38ee4Smrg    compile_command=$nonopt
5118b3e38ee4Smrg    finalize_command=$nonopt
511950806d53Smrg
5120b3e38ee4Smrg    compile_rpath=
5121b3e38ee4Smrg    finalize_rpath=
5122b3e38ee4Smrg    compile_shlibpath=
5123b3e38ee4Smrg    finalize_shlibpath=
5124b3e38ee4Smrg    convenience=
5125b3e38ee4Smrg    old_convenience=
5126b3e38ee4Smrg    deplibs=
5127b3e38ee4Smrg    old_deplibs=
5128b3e38ee4Smrg    compiler_flags=
5129b3e38ee4Smrg    linker_flags=
5130b3e38ee4Smrg    dllsearchpath=
5131b3e38ee4Smrg    lib_search_path=`pwd`
5132b3e38ee4Smrg    inst_prefix_dir=
5133b3e38ee4Smrg    new_inherited_linker_flags=
513450806d53Smrg
5135b3e38ee4Smrg    avoid_version=no
5136a73423d7Smrg    bindir=
5137b3e38ee4Smrg    dlfiles=
5138b3e38ee4Smrg    dlprefiles=
5139b3e38ee4Smrg    dlself=no
5140b3e38ee4Smrg    export_dynamic=no
5141b3e38ee4Smrg    export_symbols=
5142b3e38ee4Smrg    export_symbols_regex=
5143b3e38ee4Smrg    generated=
5144b3e38ee4Smrg    libobjs=
5145b3e38ee4Smrg    ltlibs=
5146b3e38ee4Smrg    module=no
5147b3e38ee4Smrg    no_install=no
5148b3e38ee4Smrg    objs=
5149b3e38ee4Smrg    non_pic_objects=
5150b3e38ee4Smrg    precious_files_regex=
5151b3e38ee4Smrg    prefer_static_libs=no
5152b3e38ee4Smrg    preload=no
5153b3e38ee4Smrg    prev=
5154b3e38ee4Smrg    prevarg=
5155b3e38ee4Smrg    release=
5156b3e38ee4Smrg    rpath=
5157b3e38ee4Smrg    xrpath=
5158b3e38ee4Smrg    perm_rpath=
5159b3e38ee4Smrg    temp_rpath=
5160b3e38ee4Smrg    thread_safe=no
5161b3e38ee4Smrg    vinfo=
5162b3e38ee4Smrg    vinfo_number=no
5163b3e38ee4Smrg    weak_libs=
5164b3e38ee4Smrg    single_module="${wl}-single_module"
5165b3e38ee4Smrg    func_infer_tag $base_compile
5166b3e38ee4Smrg
5167b3e38ee4Smrg    # We need to know -static, to get the right output filenames.
5168b3e38ee4Smrg    for arg
5169b3e38ee4Smrg    do
5170b3e38ee4Smrg      case $arg in
5171b3e38ee4Smrg      -shared)
5172b3e38ee4Smrg	test "$build_libtool_libs" != yes && \
5173b3e38ee4Smrg	  func_fatal_configuration "can not build a shared library"
5174b3e38ee4Smrg	build_old_libs=no
5175b3e38ee4Smrg	break
5176b3e38ee4Smrg	;;
5177b3e38ee4Smrg      -all-static | -static | -static-libtool-libs)
5178b3e38ee4Smrg	case $arg in
5179b3e38ee4Smrg	-all-static)
5180b3e38ee4Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181b3e38ee4Smrg	    func_warning "complete static linking is impossible in this configuration"
5182b3e38ee4Smrg	  fi
5183b3e38ee4Smrg	  if test -n "$link_static_flag"; then
5184b3e38ee4Smrg	    dlopen_self=$dlopen_self_static
5185b3e38ee4Smrg	  fi
5186b3e38ee4Smrg	  prefer_static_libs=yes
5187b3e38ee4Smrg	  ;;
5188b3e38ee4Smrg	-static)
5189b3e38ee4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190b3e38ee4Smrg	    dlopen_self=$dlopen_self_static
5191b3e38ee4Smrg	  fi
5192b3e38ee4Smrg	  prefer_static_libs=built
5193b3e38ee4Smrg	  ;;
5194b3e38ee4Smrg	-static-libtool-libs)
5195b3e38ee4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196b3e38ee4Smrg	    dlopen_self=$dlopen_self_static
5197a18ebfb2Smrg	  fi
5198b3e38ee4Smrg	  prefer_static_libs=yes
5199b3e38ee4Smrg	  ;;
5200b3e38ee4Smrg	esac
5201b3e38ee4Smrg	build_libtool_libs=no
5202b3e38ee4Smrg	build_old_libs=yes
5203b3e38ee4Smrg	break
5204b3e38ee4Smrg	;;
5205b3e38ee4Smrg      esac
5206b3e38ee4Smrg    done
520750806d53Smrg
5208b3e38ee4Smrg    # See if our shared archives depend on static archives.
5209b3e38ee4Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
521050806d53Smrg
5211b3e38ee4Smrg    # Go through the arguments, transforming them on the way.
5212b3e38ee4Smrg    while test "$#" -gt 0; do
5213b3e38ee4Smrg      arg="$1"
5214b3e38ee4Smrg      shift
5215b3e38ee4Smrg      func_quote_for_eval "$arg"
5216b3e38ee4Smrg      qarg=$func_quote_for_eval_unquoted_result
5217b3e38ee4Smrg      func_append libtool_args " $func_quote_for_eval_result"
521850806d53Smrg
5219b3e38ee4Smrg      # If the previous option needs an argument, assign it.
5220b3e38ee4Smrg      if test -n "$prev"; then
5221b3e38ee4Smrg	case $prev in
5222b3e38ee4Smrg	output)
5223b3e38ee4Smrg	  func_append compile_command " @OUTPUT@"
5224b3e38ee4Smrg	  func_append finalize_command " @OUTPUT@"
5225b3e38ee4Smrg	  ;;
5226b3e38ee4Smrg	esac
522750806d53Smrg
5228b3e38ee4Smrg	case $prev in
5229a73423d7Smrg	bindir)
5230a73423d7Smrg	  bindir="$arg"
5231a73423d7Smrg	  prev=
5232a73423d7Smrg	  continue
5233a73423d7Smrg	  ;;
5234b3e38ee4Smrg	dlfiles|dlprefiles)
5235b3e38ee4Smrg	  if test "$preload" = no; then
5236b3e38ee4Smrg	    # Add the symbol object into the linking commands.
5237b3e38ee4Smrg	    func_append compile_command " @SYMFILE@"
5238b3e38ee4Smrg	    func_append finalize_command " @SYMFILE@"
5239b3e38ee4Smrg	    preload=yes
5240b3e38ee4Smrg	  fi
5241b3e38ee4Smrg	  case $arg in
5242b3e38ee4Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5243b3e38ee4Smrg	  force)
5244b3e38ee4Smrg	    if test "$dlself" = no; then
5245b3e38ee4Smrg	      dlself=needless
5246b3e38ee4Smrg	      export_dynamic=yes
5247b3e38ee4Smrg	    fi
5248b3e38ee4Smrg	    prev=
5249b3e38ee4Smrg	    continue
5250b3e38ee4Smrg	    ;;
5251b3e38ee4Smrg	  self)
5252b3e38ee4Smrg	    if test "$prev" = dlprefiles; then
5253b3e38ee4Smrg	      dlself=yes
5254b3e38ee4Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255b3e38ee4Smrg	      dlself=yes
5256a18ebfb2Smrg	    else
5257b3e38ee4Smrg	      dlself=needless
5258b3e38ee4Smrg	      export_dynamic=yes
5259a18ebfb2Smrg	    fi
5260b3e38ee4Smrg	    prev=
5261b3e38ee4Smrg	    continue
5262b3e38ee4Smrg	    ;;
5263b3e38ee4Smrg	  *)
5264b3e38ee4Smrg	    if test "$prev" = dlfiles; then
5265a73423d7Smrg	      func_append dlfiles " $arg"
5266a18ebfb2Smrg	    else
5267a73423d7Smrg	      func_append dlprefiles " $arg"
5268a18ebfb2Smrg	    fi
5269b3e38ee4Smrg	    prev=
5270b3e38ee4Smrg	    continue
5271b3e38ee4Smrg	    ;;
5272b3e38ee4Smrg	  esac
5273b3e38ee4Smrg	  ;;
5274b3e38ee4Smrg	expsyms)
5275b3e38ee4Smrg	  export_symbols="$arg"
5276b3e38ee4Smrg	  test -f "$arg" \
5277b3e38ee4Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278b3e38ee4Smrg	  prev=
5279b3e38ee4Smrg	  continue
5280b3e38ee4Smrg	  ;;
5281b3e38ee4Smrg	expsyms_regex)
5282b3e38ee4Smrg	  export_symbols_regex="$arg"
5283b3e38ee4Smrg	  prev=
5284b3e38ee4Smrg	  continue
5285b3e38ee4Smrg	  ;;
5286b3e38ee4Smrg	framework)
5287a18ebfb2Smrg	  case $host in
5288b3e38ee4Smrg	    *-*-darwin*)
5289b3e38ee4Smrg	      case "$deplibs " in
5290b3e38ee4Smrg		*" $qarg.ltframework "*) ;;
5291a73423d7Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292b3e38ee4Smrg		   ;;
5293b3e38ee4Smrg	      esac
5294b3e38ee4Smrg	      ;;
5295a18ebfb2Smrg	  esac
5296b3e38ee4Smrg	  prev=
5297b3e38ee4Smrg	  continue
5298a18ebfb2Smrg	  ;;
5299b3e38ee4Smrg	inst_prefix)
5300b3e38ee4Smrg	  inst_prefix_dir="$arg"
5301b3e38ee4Smrg	  prev=
5302b3e38ee4Smrg	  continue
5303a18ebfb2Smrg	  ;;
5304b3e38ee4Smrg	objectlist)
5305b3e38ee4Smrg	  if test -f "$arg"; then
5306b3e38ee4Smrg	    save_arg=$arg
5307b3e38ee4Smrg	    moreargs=
5308b3e38ee4Smrg	    for fil in `cat "$save_arg"`
5309b3e38ee4Smrg	    do
5310a73423d7Smrg#	      func_append moreargs " $fil"
5311b3e38ee4Smrg	      arg=$fil
5312b3e38ee4Smrg	      # A libtool-controlled object.
5313af1a9c97Smrg
5314b3e38ee4Smrg	      # Check to see that this really is a libtool object.
5315b3e38ee4Smrg	      if func_lalib_unsafe_p "$arg"; then
5316b3e38ee4Smrg		pic_object=
5317b3e38ee4Smrg		non_pic_object=
5318af1a9c97Smrg
5319b3e38ee4Smrg		# Read the .lo file
5320b3e38ee4Smrg		func_source "$arg"
5321af1a9c97Smrg
5322b3e38ee4Smrg		if test -z "$pic_object" ||
5323b3e38ee4Smrg		   test -z "$non_pic_object" ||
5324b3e38ee4Smrg		   test "$pic_object" = none &&
5325b3e38ee4Smrg		   test "$non_pic_object" = none; then
5326b3e38ee4Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327b3e38ee4Smrg		fi
5328af1a9c97Smrg
5329b3e38ee4Smrg		# Extract subdirectory from the argument.
5330b3e38ee4Smrg		func_dirname "$arg" "/" ""
5331b3e38ee4Smrg		xdir="$func_dirname_result"
5332af1a9c97Smrg
5333b3e38ee4Smrg		if test "$pic_object" != none; then
5334b3e38ee4Smrg		  # Prepend the subdirectory the object is found in.
5335b3e38ee4Smrg		  pic_object="$xdir$pic_object"
5336af1a9c97Smrg
5337b3e38ee4Smrg		  if test "$prev" = dlfiles; then
5338b3e38ee4Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5339a73423d7Smrg		      func_append dlfiles " $pic_object"
5340b3e38ee4Smrg		      prev=
5341b3e38ee4Smrg		      continue
5342b3e38ee4Smrg		    else
5343b3e38ee4Smrg		      # If libtool objects are unsupported, then we need to preload.
5344b3e38ee4Smrg		      prev=dlprefiles
5345b3e38ee4Smrg		    fi
5346b3e38ee4Smrg		  fi
5347af1a9c97Smrg
5348b3e38ee4Smrg		  # CHECK ME:  I think I busted this.  -Ossama
5349b3e38ee4Smrg		  if test "$prev" = dlprefiles; then
5350b3e38ee4Smrg		    # Preload the old-style object.
5351a73423d7Smrg		    func_append dlprefiles " $pic_object"
5352b3e38ee4Smrg		    prev=
5353b3e38ee4Smrg		  fi
5354af1a9c97Smrg
5355b3e38ee4Smrg		  # A PIC object.
5356b3e38ee4Smrg		  func_append libobjs " $pic_object"
5357b3e38ee4Smrg		  arg="$pic_object"
5358b3e38ee4Smrg		fi
5359af1a9c97Smrg
5360b3e38ee4Smrg		# Non-PIC object.
5361b3e38ee4Smrg		if test "$non_pic_object" != none; then
5362b3e38ee4Smrg		  # Prepend the subdirectory the object is found in.
5363b3e38ee4Smrg		  non_pic_object="$xdir$non_pic_object"
5364af1a9c97Smrg
5365b3e38ee4Smrg		  # A standard non-PIC object
5366b3e38ee4Smrg		  func_append non_pic_objects " $non_pic_object"
5367b3e38ee4Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368b3e38ee4Smrg		    arg="$non_pic_object"
5369b3e38ee4Smrg		  fi
5370b3e38ee4Smrg		else
5371b3e38ee4Smrg		  # If the PIC object exists, use it instead.
5372b3e38ee4Smrg		  # $xdir was prepended to $pic_object above.
5373b3e38ee4Smrg		  non_pic_object="$pic_object"
5374b3e38ee4Smrg		  func_append non_pic_objects " $non_pic_object"
5375b3e38ee4Smrg		fi
5376b3e38ee4Smrg	      else
5377b3e38ee4Smrg		# Only an error if not doing a dry-run.
5378b3e38ee4Smrg		if $opt_dry_run; then
5379b3e38ee4Smrg		  # Extract subdirectory from the argument.
5380b3e38ee4Smrg		  func_dirname "$arg" "/" ""
5381b3e38ee4Smrg		  xdir="$func_dirname_result"
5382b3e38ee4Smrg
5383b3e38ee4Smrg		  func_lo2o "$arg"
5384b3e38ee4Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385b3e38ee4Smrg		  non_pic_object=$xdir$func_lo2o_result
5386b3e38ee4Smrg		  func_append libobjs " $pic_object"
5387b3e38ee4Smrg		  func_append non_pic_objects " $non_pic_object"
5388b3e38ee4Smrg	        else
5389b3e38ee4Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390b3e38ee4Smrg		fi
5391b3e38ee4Smrg	      fi
5392b3e38ee4Smrg	    done
5393a18ebfb2Smrg	  else
5394b3e38ee4Smrg	    func_fatal_error "link input file \`$arg' does not exist"
5395a18ebfb2Smrg	  fi
5396b3e38ee4Smrg	  arg=$save_arg
5397b3e38ee4Smrg	  prev=
5398b3e38ee4Smrg	  continue
5399b3e38ee4Smrg	  ;;
5400b3e38ee4Smrg	precious_regex)
5401b3e38ee4Smrg	  precious_files_regex="$arg"
5402b3e38ee4Smrg	  prev=
5403b3e38ee4Smrg	  continue
5404b3e38ee4Smrg	  ;;
5405b3e38ee4Smrg	release)
5406b3e38ee4Smrg	  release="-$arg"
5407b3e38ee4Smrg	  prev=
5408b3e38ee4Smrg	  continue
5409b3e38ee4Smrg	  ;;
5410b3e38ee4Smrg	rpath | xrpath)
5411b3e38ee4Smrg	  # We need an absolute path.
5412b3e38ee4Smrg	  case $arg in
5413b3e38ee4Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414b3e38ee4Smrg	  *)
5415b3e38ee4Smrg	    func_fatal_error "only absolute run-paths are allowed"
5416b3e38ee4Smrg	    ;;
5417b3e38ee4Smrg	  esac
5418b3e38ee4Smrg	  if test "$prev" = rpath; then
5419b3e38ee4Smrg	    case "$rpath " in
5420b3e38ee4Smrg	    *" $arg "*) ;;
5421a73423d7Smrg	    *) func_append rpath " $arg" ;;
5422b3e38ee4Smrg	    esac
5423a18ebfb2Smrg	  else
5424b3e38ee4Smrg	    case "$xrpath " in
5425b3e38ee4Smrg	    *" $arg "*) ;;
5426a73423d7Smrg	    *) func_append xrpath " $arg" ;;
5427b3e38ee4Smrg	    esac
5428a18ebfb2Smrg	  fi
5429b3e38ee4Smrg	  prev=
5430b3e38ee4Smrg	  continue
5431b3e38ee4Smrg	  ;;
5432b3e38ee4Smrg	shrext)
5433b3e38ee4Smrg	  shrext_cmds="$arg"
5434b3e38ee4Smrg	  prev=
5435b3e38ee4Smrg	  continue
5436b3e38ee4Smrg	  ;;
5437b3e38ee4Smrg	weak)
5438a73423d7Smrg	  func_append weak_libs " $arg"
5439b3e38ee4Smrg	  prev=
5440b3e38ee4Smrg	  continue
5441b3e38ee4Smrg	  ;;
5442b3e38ee4Smrg	xcclinker)
5443a73423d7Smrg	  func_append linker_flags " $qarg"
5444a73423d7Smrg	  func_append compiler_flags " $qarg"
5445b3e38ee4Smrg	  prev=
5446b3e38ee4Smrg	  func_append compile_command " $qarg"
5447b3e38ee4Smrg	  func_append finalize_command " $qarg"
5448b3e38ee4Smrg	  continue
5449b3e38ee4Smrg	  ;;
5450b3e38ee4Smrg	xcompiler)
5451a73423d7Smrg	  func_append compiler_flags " $qarg"
5452b3e38ee4Smrg	  prev=
5453b3e38ee4Smrg	  func_append compile_command " $qarg"
5454b3e38ee4Smrg	  func_append finalize_command " $qarg"
5455b3e38ee4Smrg	  continue
5456b3e38ee4Smrg	  ;;
5457b3e38ee4Smrg	xlinker)
5458a73423d7Smrg	  func_append linker_flags " $qarg"
5459a73423d7Smrg	  func_append compiler_flags " $wl$qarg"
5460b3e38ee4Smrg	  prev=
5461b3e38ee4Smrg	  func_append compile_command " $wl$qarg"
5462b3e38ee4Smrg	  func_append finalize_command " $wl$qarg"
5463b3e38ee4Smrg	  continue
5464b3e38ee4Smrg	  ;;
5465b3e38ee4Smrg	*)
5466b3e38ee4Smrg	  eval "$prev=\"\$arg\""
5467b3e38ee4Smrg	  prev=
5468b3e38ee4Smrg	  continue
5469b3e38ee4Smrg	  ;;
5470af1a9c97Smrg	esac
5471b3e38ee4Smrg      fi # test -n "$prev"
5472af1a9c97Smrg
5473b3e38ee4Smrg      prevarg="$arg"
5474af1a9c97Smrg
5475b3e38ee4Smrg      case $arg in
5476b3e38ee4Smrg      -all-static)
5477b3e38ee4Smrg	if test -n "$link_static_flag"; then
5478b3e38ee4Smrg	  # See comment for -static flag below, for more details.
5479b3e38ee4Smrg	  func_append compile_command " $link_static_flag"
5480b3e38ee4Smrg	  func_append finalize_command " $link_static_flag"
5481b3e38ee4Smrg	fi
5482b3e38ee4Smrg	continue
5483b3e38ee4Smrg	;;
5484af1a9c97Smrg
5485b3e38ee4Smrg      -allow-undefined)
5486b3e38ee4Smrg	# FIXME: remove this flag sometime in the future.
5487b3e38ee4Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488b3e38ee4Smrg	;;
5489af1a9c97Smrg
5490b3e38ee4Smrg      -avoid-version)
5491b3e38ee4Smrg	avoid_version=yes
5492b3e38ee4Smrg	continue
5493b3e38ee4Smrg	;;
5494af1a9c97Smrg
5495a73423d7Smrg      -bindir)
5496a73423d7Smrg	prev=bindir
5497a73423d7Smrg	continue
5498a73423d7Smrg	;;
5499a73423d7Smrg
5500b3e38ee4Smrg      -dlopen)
5501b3e38ee4Smrg	prev=dlfiles
5502b3e38ee4Smrg	continue
5503b3e38ee4Smrg	;;
5504af1a9c97Smrg
5505b3e38ee4Smrg      -dlpreopen)
5506b3e38ee4Smrg	prev=dlprefiles
5507b3e38ee4Smrg	continue
5508b3e38ee4Smrg	;;
5509af1a9c97Smrg
5510b3e38ee4Smrg      -export-dynamic)
5511b3e38ee4Smrg	export_dynamic=yes
5512b3e38ee4Smrg	continue
5513b3e38ee4Smrg	;;
5514af1a9c97Smrg
5515b3e38ee4Smrg      -export-symbols | -export-symbols-regex)
5516b3e38ee4Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517b3e38ee4Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518b3e38ee4Smrg	fi
5519b3e38ee4Smrg	if test "X$arg" = "X-export-symbols"; then
5520b3e38ee4Smrg	  prev=expsyms
5521b3e38ee4Smrg	else
5522b3e38ee4Smrg	  prev=expsyms_regex
5523b3e38ee4Smrg	fi
5524b3e38ee4Smrg	continue
5525b3e38ee4Smrg	;;
5526af1a9c97Smrg
5527b3e38ee4Smrg      -framework)
5528b3e38ee4Smrg	prev=framework
5529b3e38ee4Smrg	continue
5530b3e38ee4Smrg	;;
5531af1a9c97Smrg
5532b3e38ee4Smrg      -inst-prefix-dir)
5533b3e38ee4Smrg	prev=inst_prefix
5534b3e38ee4Smrg	continue
5535b3e38ee4Smrg	;;
5536af1a9c97Smrg
5537b3e38ee4Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538b3e38ee4Smrg      # so, if we see these flags be careful not to treat them like -L
5539b3e38ee4Smrg      -L[A-Z][A-Z]*:*)
5540b3e38ee4Smrg	case $with_gcc/$host in
5541b3e38ee4Smrg	no/*-*-irix* | /*-*-irix*)
5542b3e38ee4Smrg	  func_append compile_command " $arg"
5543b3e38ee4Smrg	  func_append finalize_command " $arg"
5544b3e38ee4Smrg	  ;;
5545b3e38ee4Smrg	esac
5546b3e38ee4Smrg	continue
5547b3e38ee4Smrg	;;
5548af1a9c97Smrg
5549b3e38ee4Smrg      -L*)
5550a73423d7Smrg	func_stripname "-L" '' "$arg"
5551a73423d7Smrg	if test -z "$func_stripname_result"; then
5552b3e38ee4Smrg	  if test "$#" -gt 0; then
5553b3e38ee4Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554b3e38ee4Smrg	  else
5555b3e38ee4Smrg	    func_fatal_error "need path for \`-L' option"
5556b3e38ee4Smrg	  fi
5557b3e38ee4Smrg	fi
5558a73423d7Smrg	func_resolve_sysroot "$func_stripname_result"
5559a73423d7Smrg	dir=$func_resolve_sysroot_result
5560b3e38ee4Smrg	# We need an absolute path.
5561b3e38ee4Smrg	case $dir in
5562b3e38ee4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563b3e38ee4Smrg	*)
5564b3e38ee4Smrg	  absdir=`cd "$dir" && pwd`
5565b3e38ee4Smrg	  test -z "$absdir" && \
5566b3e38ee4Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567b3e38ee4Smrg	  dir="$absdir"
5568b3e38ee4Smrg	  ;;
5569b3e38ee4Smrg	esac
5570b3e38ee4Smrg	case "$deplibs " in
5571a73423d7Smrg	*" -L$dir "* | *" $arg "*)
5572a73423d7Smrg	  # Will only happen for absolute or sysroot arguments
5573a73423d7Smrg	  ;;
5574b3e38ee4Smrg	*)
5575a73423d7Smrg	  # Preserve sysroot, but never include relative directories
5576a73423d7Smrg	  case $dir in
5577a73423d7Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5578a73423d7Smrg	    *) func_append deplibs " -L$dir" ;;
5579a73423d7Smrg	  esac
5580a73423d7Smrg	  func_append lib_search_path " $dir"
5581b3e38ee4Smrg	  ;;
5582b3e38ee4Smrg	esac
5583b3e38ee4Smrg	case $host in
5584b3e38ee4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5585a73423d7Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586b3e38ee4Smrg	  case :$dllsearchpath: in
5587b3e38ee4Smrg	  *":$dir:"*) ;;
5588b3e38ee4Smrg	  ::) dllsearchpath=$dir;;
5589a73423d7Smrg	  *) func_append dllsearchpath ":$dir";;
5590b3e38ee4Smrg	  esac
5591b3e38ee4Smrg	  case :$dllsearchpath: in
5592b3e38ee4Smrg	  *":$testbindir:"*) ;;
5593b3e38ee4Smrg	  ::) dllsearchpath=$testbindir;;
5594a73423d7Smrg	  *) func_append dllsearchpath ":$testbindir";;
5595b3e38ee4Smrg	  esac
5596b3e38ee4Smrg	  ;;
5597b3e38ee4Smrg	esac
5598b3e38ee4Smrg	continue
5599b3e38ee4Smrg	;;
5600af1a9c97Smrg
5601b3e38ee4Smrg      -l*)
5602b3e38ee4Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603b3e38ee4Smrg	  case $host in
5604a73423d7Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605b3e38ee4Smrg	    # These systems don't actually have a C or math library (as such)
5606b3e38ee4Smrg	    continue
5607b3e38ee4Smrg	    ;;
5608b3e38ee4Smrg	  *-*-os2*)
5609b3e38ee4Smrg	    # These systems don't actually have a C library (as such)
5610b3e38ee4Smrg	    test "X$arg" = "X-lc" && continue
5611b3e38ee4Smrg	    ;;
5612b3e38ee4Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613b3e38ee4Smrg	    # Do not include libc due to us having libc/libc_r.
5614b3e38ee4Smrg	    test "X$arg" = "X-lc" && continue
5615b3e38ee4Smrg	    ;;
5616b3e38ee4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617b3e38ee4Smrg	    # Rhapsody C and math libraries are in the System framework
5618a73423d7Smrg	    func_append deplibs " System.ltframework"
5619b3e38ee4Smrg	    continue
5620b3e38ee4Smrg	    ;;
5621b3e38ee4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622b3e38ee4Smrg	    # Causes problems with __ctype
5623b3e38ee4Smrg	    test "X$arg" = "X-lc" && continue
5624b3e38ee4Smrg	    ;;
5625b3e38ee4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626b3e38ee4Smrg	    # Compiler inserts libc in the correct place for threads to work
5627b3e38ee4Smrg	    test "X$arg" = "X-lc" && continue
5628b3e38ee4Smrg	    ;;
5629b3e38ee4Smrg	  esac
5630b3e38ee4Smrg	elif test "X$arg" = "X-lc_r"; then
5631b3e38ee4Smrg	 case $host in
5632b3e38ee4Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633b3e38ee4Smrg	   # Do not include libc_r directly, use -pthread flag.
5634b3e38ee4Smrg	   continue
5635b3e38ee4Smrg	   ;;
5636b3e38ee4Smrg	 esac
5637b3e38ee4Smrg	fi
5638a73423d7Smrg	func_append deplibs " $arg"
5639b3e38ee4Smrg	continue
5640b3e38ee4Smrg	;;
5641af1a9c97Smrg
5642b3e38ee4Smrg      -module)
5643b3e38ee4Smrg	module=yes
5644b3e38ee4Smrg	continue
5645b3e38ee4Smrg	;;
5646af1a9c97Smrg
5647b3e38ee4Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648b3e38ee4Smrg      # classes, name mangling, and exception handling.
5649b3e38ee4Smrg      # Darwin uses the -arch flag to determine output architecture.
5650a73423d7Smrg      -model|-arch|-isysroot|--sysroot)
5651a73423d7Smrg	func_append compiler_flags " $arg"
5652b3e38ee4Smrg	func_append compile_command " $arg"
5653b3e38ee4Smrg	func_append finalize_command " $arg"
5654b3e38ee4Smrg	prev=xcompiler
5655b3e38ee4Smrg	continue
5656b3e38ee4Smrg	;;
5657af1a9c97Smrg
5658a73423d7Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659a73423d7Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
5660a73423d7Smrg	func_append compiler_flags " $arg"
5661b3e38ee4Smrg	func_append compile_command " $arg"
5662b3e38ee4Smrg	func_append finalize_command " $arg"
5663b3e38ee4Smrg	case "$new_inherited_linker_flags " in
5664b3e38ee4Smrg	    *" $arg "*) ;;
5665a73423d7Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666b3e38ee4Smrg	esac
5667b3e38ee4Smrg	continue
5668b3e38ee4Smrg	;;
5669af1a9c97Smrg
5670b3e38ee4Smrg      -multi_module)
5671b3e38ee4Smrg	single_module="${wl}-multi_module"
5672b3e38ee4Smrg	continue
5673b3e38ee4Smrg	;;
5674af1a9c97Smrg
5675b3e38ee4Smrg      -no-fast-install)
5676b3e38ee4Smrg	fast_install=no
5677b3e38ee4Smrg	continue
5678b3e38ee4Smrg	;;
5679af1a9c97Smrg
5680b3e38ee4Smrg      -no-install)
5681b3e38ee4Smrg	case $host in
5682b3e38ee4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683b3e38ee4Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5684b3e38ee4Smrg	  # and Darwin in order for the loader to find any dlls it needs.
5685b3e38ee4Smrg	  func_warning "\`-no-install' is ignored for $host"
5686b3e38ee4Smrg	  func_warning "assuming \`-no-fast-install' instead"
5687b3e38ee4Smrg	  fast_install=no
5688b3e38ee4Smrg	  ;;
5689b3e38ee4Smrg	*) no_install=yes ;;
5690b3e38ee4Smrg	esac
5691b3e38ee4Smrg	continue
5692b3e38ee4Smrg	;;
5693af1a9c97Smrg
5694b3e38ee4Smrg      -no-undefined)
5695b3e38ee4Smrg	allow_undefined=no
5696b3e38ee4Smrg	continue
5697b3e38ee4Smrg	;;
5698af1a9c97Smrg
5699b3e38ee4Smrg      -objectlist)
5700b3e38ee4Smrg	prev=objectlist
5701b3e38ee4Smrg	continue
5702b3e38ee4Smrg	;;
5703af1a9c97Smrg
5704b3e38ee4Smrg      -o) prev=output ;;
5705af1a9c97Smrg
5706b3e38ee4Smrg      -precious-files-regex)
5707b3e38ee4Smrg	prev=precious_regex
5708b3e38ee4Smrg	continue
5709b3e38ee4Smrg	;;
5710af1a9c97Smrg
5711b3e38ee4Smrg      -release)
5712b3e38ee4Smrg	prev=release
5713b3e38ee4Smrg	continue
5714b3e38ee4Smrg	;;
5715af1a9c97Smrg
5716b3e38ee4Smrg      -rpath)
5717b3e38ee4Smrg	prev=rpath
5718b3e38ee4Smrg	continue
5719b3e38ee4Smrg	;;
5720af1a9c97Smrg
5721b3e38ee4Smrg      -R)
5722b3e38ee4Smrg	prev=xrpath
5723b3e38ee4Smrg	continue
5724b3e38ee4Smrg	;;
5725af1a9c97Smrg
5726b3e38ee4Smrg      -R*)
5727b3e38ee4Smrg	func_stripname '-R' '' "$arg"
5728b3e38ee4Smrg	dir=$func_stripname_result
5729b3e38ee4Smrg	# We need an absolute path.
5730b3e38ee4Smrg	case $dir in
5731b3e38ee4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5732a73423d7Smrg	=*)
5733a73423d7Smrg	  func_stripname '=' '' "$dir"
5734a73423d7Smrg	  dir=$lt_sysroot$func_stripname_result
5735a73423d7Smrg	  ;;
5736b3e38ee4Smrg	*)
5737b3e38ee4Smrg	  func_fatal_error "only absolute run-paths are allowed"
5738b3e38ee4Smrg	  ;;
5739b3e38ee4Smrg	esac
5740b3e38ee4Smrg	case "$xrpath " in
5741b3e38ee4Smrg	*" $dir "*) ;;
5742a73423d7Smrg	*) func_append xrpath " $dir" ;;
5743b3e38ee4Smrg	esac
5744b3e38ee4Smrg	continue
5745b3e38ee4Smrg	;;
5746af1a9c97Smrg
5747b3e38ee4Smrg      -shared)
5748b3e38ee4Smrg	# The effects of -shared are defined in a previous loop.
5749b3e38ee4Smrg	continue
5750b3e38ee4Smrg	;;
5751af1a9c97Smrg
5752b3e38ee4Smrg      -shrext)
5753b3e38ee4Smrg	prev=shrext
5754b3e38ee4Smrg	continue
5755b3e38ee4Smrg	;;
5756af1a9c97Smrg
5757b3e38ee4Smrg      -static | -static-libtool-libs)
5758b3e38ee4Smrg	# The effects of -static are defined in a previous loop.
5759b3e38ee4Smrg	# We used to do the same as -all-static on platforms that
5760b3e38ee4Smrg	# didn't have a PIC flag, but the assumption that the effects
5761b3e38ee4Smrg	# would be equivalent was wrong.  It would break on at least
5762b3e38ee4Smrg	# Digital Unix and AIX.
5763b3e38ee4Smrg	continue
5764b3e38ee4Smrg	;;
5765af1a9c97Smrg
5766b3e38ee4Smrg      -thread-safe)
5767b3e38ee4Smrg	thread_safe=yes
5768b3e38ee4Smrg	continue
5769b3e38ee4Smrg	;;
5770af1a9c97Smrg
5771b3e38ee4Smrg      -version-info)
5772b3e38ee4Smrg	prev=vinfo
5773b3e38ee4Smrg	continue
5774b3e38ee4Smrg	;;
5775af1a9c97Smrg
5776b3e38ee4Smrg      -version-number)
5777b3e38ee4Smrg	prev=vinfo
5778b3e38ee4Smrg	vinfo_number=yes
5779b3e38ee4Smrg	continue
5780b3e38ee4Smrg	;;
5781af1a9c97Smrg
5782b3e38ee4Smrg      -weak)
5783b3e38ee4Smrg        prev=weak
5784b3e38ee4Smrg	continue
5785b3e38ee4Smrg	;;
578650806d53Smrg
5787b3e38ee4Smrg      -Wc,*)
5788b3e38ee4Smrg	func_stripname '-Wc,' '' "$arg"
5789b3e38ee4Smrg	args=$func_stripname_result
5790b3e38ee4Smrg	arg=
5791b3e38ee4Smrg	save_ifs="$IFS"; IFS=','
5792b3e38ee4Smrg	for flag in $args; do
5793b3e38ee4Smrg	  IFS="$save_ifs"
5794b3e38ee4Smrg          func_quote_for_eval "$flag"
5795a73423d7Smrg	  func_append arg " $func_quote_for_eval_result"
5796a73423d7Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797b3e38ee4Smrg	done
5798b3e38ee4Smrg	IFS="$save_ifs"
5799b3e38ee4Smrg	func_stripname ' ' '' "$arg"
5800b3e38ee4Smrg	arg=$func_stripname_result
5801b3e38ee4Smrg	;;
5802a18ebfb2Smrg
5803b3e38ee4Smrg      -Wl,*)
5804b3e38ee4Smrg	func_stripname '-Wl,' '' "$arg"
5805b3e38ee4Smrg	args=$func_stripname_result
5806b3e38ee4Smrg	arg=
5807b3e38ee4Smrg	save_ifs="$IFS"; IFS=','
5808b3e38ee4Smrg	for flag in $args; do
5809b3e38ee4Smrg	  IFS="$save_ifs"
5810b3e38ee4Smrg          func_quote_for_eval "$flag"
5811a73423d7Smrg	  func_append arg " $wl$func_quote_for_eval_result"
5812a73423d7Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5813a73423d7Smrg	  func_append linker_flags " $func_quote_for_eval_result"
5814b3e38ee4Smrg	done
5815b3e38ee4Smrg	IFS="$save_ifs"
5816b3e38ee4Smrg	func_stripname ' ' '' "$arg"
5817b3e38ee4Smrg	arg=$func_stripname_result
5818b3e38ee4Smrg	;;
5819a18ebfb2Smrg
5820b3e38ee4Smrg      -Xcompiler)
5821b3e38ee4Smrg	prev=xcompiler
5822b3e38ee4Smrg	continue
5823b3e38ee4Smrg	;;
5824a18ebfb2Smrg
5825b3e38ee4Smrg      -Xlinker)
5826b3e38ee4Smrg	prev=xlinker
5827b3e38ee4Smrg	continue
5828b3e38ee4Smrg	;;
5829a18ebfb2Smrg
5830b3e38ee4Smrg      -XCClinker)
5831b3e38ee4Smrg	prev=xcclinker
5832b3e38ee4Smrg	continue
5833b3e38ee4Smrg	;;
5834a18ebfb2Smrg
5835b3e38ee4Smrg      # -msg_* for osf cc
5836b3e38ee4Smrg      -msg_*)
5837b3e38ee4Smrg	func_quote_for_eval "$arg"
5838b3e38ee4Smrg	arg="$func_quote_for_eval_result"
5839b3e38ee4Smrg	;;
5840a18ebfb2Smrg
5841a73423d7Smrg      # Flags to be passed through unchanged, with rationale:
5842a73423d7Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5843a73423d7Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
5844a73423d7Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5845a73423d7Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5846a73423d7Smrg      # -q*                  compiler args for the IBM compiler
5847a73423d7Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5848a73423d7Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
5849a73423d7Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5850a73423d7Smrg      # @file                GCC response files
5851a73423d7Smrg      # -tp=*                Portland pgcc target processor selection
5852a73423d7Smrg      # --sysroot=*          for sysroot support
5853a73423d7Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854b3e38ee4Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5855a73423d7Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
5856a73423d7Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857b3e38ee4Smrg        func_quote_for_eval "$arg"
5858b3e38ee4Smrg	arg="$func_quote_for_eval_result"
5859b3e38ee4Smrg        func_append compile_command " $arg"
5860b3e38ee4Smrg        func_append finalize_command " $arg"
5861a73423d7Smrg        func_append compiler_flags " $arg"
5862b3e38ee4Smrg        continue
5863b3e38ee4Smrg        ;;
5864a18ebfb2Smrg
5865b3e38ee4Smrg      # Some other compiler flag.
5866b3e38ee4Smrg      -* | +*)
5867b3e38ee4Smrg        func_quote_for_eval "$arg"
5868b3e38ee4Smrg	arg="$func_quote_for_eval_result"
5869b3e38ee4Smrg	;;
5870a18ebfb2Smrg
5871b3e38ee4Smrg      *.$objext)
5872b3e38ee4Smrg	# A standard object.
5873a73423d7Smrg	func_append objs " $arg"
5874b3e38ee4Smrg	;;
5875a18ebfb2Smrg
5876b3e38ee4Smrg      *.lo)
5877b3e38ee4Smrg	# A libtool-controlled object.
5878a18ebfb2Smrg
5879b3e38ee4Smrg	# Check to see that this really is a libtool object.
5880b3e38ee4Smrg	if func_lalib_unsafe_p "$arg"; then
5881b3e38ee4Smrg	  pic_object=
5882b3e38ee4Smrg	  non_pic_object=
5883a18ebfb2Smrg
5884b3e38ee4Smrg	  # Read the .lo file
5885b3e38ee4Smrg	  func_source "$arg"
5886a18ebfb2Smrg
5887b3e38ee4Smrg	  if test -z "$pic_object" ||
5888b3e38ee4Smrg	     test -z "$non_pic_object" ||
5889b3e38ee4Smrg	     test "$pic_object" = none &&
5890b3e38ee4Smrg	     test "$non_pic_object" = none; then
5891b3e38ee4Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892b3e38ee4Smrg	  fi
5893a18ebfb2Smrg
5894b3e38ee4Smrg	  # Extract subdirectory from the argument.
5895b3e38ee4Smrg	  func_dirname "$arg" "/" ""
5896b3e38ee4Smrg	  xdir="$func_dirname_result"
5897a18ebfb2Smrg
5898b3e38ee4Smrg	  if test "$pic_object" != none; then
5899b3e38ee4Smrg	    # Prepend the subdirectory the object is found in.
5900b3e38ee4Smrg	    pic_object="$xdir$pic_object"
5901a18ebfb2Smrg
5902b3e38ee4Smrg	    if test "$prev" = dlfiles; then
5903b3e38ee4Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5904a73423d7Smrg		func_append dlfiles " $pic_object"
5905b3e38ee4Smrg		prev=
5906b3e38ee4Smrg		continue
5907b3e38ee4Smrg	      else
5908b3e38ee4Smrg		# If libtool objects are unsupported, then we need to preload.
5909b3e38ee4Smrg		prev=dlprefiles
5910b3e38ee4Smrg	      fi
5911b3e38ee4Smrg	    fi
5912a18ebfb2Smrg
5913b3e38ee4Smrg	    # CHECK ME:  I think I busted this.  -Ossama
5914b3e38ee4Smrg	    if test "$prev" = dlprefiles; then
5915b3e38ee4Smrg	      # Preload the old-style object.
5916a73423d7Smrg	      func_append dlprefiles " $pic_object"
5917b3e38ee4Smrg	      prev=
5918b3e38ee4Smrg	    fi
591950806d53Smrg
5920b3e38ee4Smrg	    # A PIC object.
5921b3e38ee4Smrg	    func_append libobjs " $pic_object"
5922b3e38ee4Smrg	    arg="$pic_object"
5923b3e38ee4Smrg	  fi
592450806d53Smrg
5925b3e38ee4Smrg	  # Non-PIC object.
5926b3e38ee4Smrg	  if test "$non_pic_object" != none; then
5927b3e38ee4Smrg	    # Prepend the subdirectory the object is found in.
5928b3e38ee4Smrg	    non_pic_object="$xdir$non_pic_object"
592950806d53Smrg
5930b3e38ee4Smrg	    # A standard non-PIC object
5931b3e38ee4Smrg	    func_append non_pic_objects " $non_pic_object"
5932b3e38ee4Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933b3e38ee4Smrg	      arg="$non_pic_object"
5934b3e38ee4Smrg	    fi
5935b3e38ee4Smrg	  else
5936b3e38ee4Smrg	    # If the PIC object exists, use it instead.
5937b3e38ee4Smrg	    # $xdir was prepended to $pic_object above.
5938b3e38ee4Smrg	    non_pic_object="$pic_object"
5939b3e38ee4Smrg	    func_append non_pic_objects " $non_pic_object"
5940b3e38ee4Smrg	  fi
5941b3e38ee4Smrg	else
5942b3e38ee4Smrg	  # Only an error if not doing a dry-run.
5943b3e38ee4Smrg	  if $opt_dry_run; then
5944b3e38ee4Smrg	    # Extract subdirectory from the argument.
5945b3e38ee4Smrg	    func_dirname "$arg" "/" ""
5946b3e38ee4Smrg	    xdir="$func_dirname_result"
5947b3e38ee4Smrg
5948b3e38ee4Smrg	    func_lo2o "$arg"
5949b3e38ee4Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950b3e38ee4Smrg	    non_pic_object=$xdir$func_lo2o_result
5951b3e38ee4Smrg	    func_append libobjs " $pic_object"
5952b3e38ee4Smrg	    func_append non_pic_objects " $non_pic_object"
5953b3e38ee4Smrg	  else
5954b3e38ee4Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955b3e38ee4Smrg	  fi
5956b3e38ee4Smrg	fi
5957b3e38ee4Smrg	;;
595850806d53Smrg
5959b3e38ee4Smrg      *.$libext)
5960b3e38ee4Smrg	# An archive.
5961a73423d7Smrg	func_append deplibs " $arg"
5962a73423d7Smrg	func_append old_deplibs " $arg"
5963b3e38ee4Smrg	continue
5964b3e38ee4Smrg	;;
5965b3e38ee4Smrg
5966b3e38ee4Smrg      *.la)
5967b3e38ee4Smrg	# A libtool-controlled library.
5968b3e38ee4Smrg
5969a73423d7Smrg	func_resolve_sysroot "$arg"
5970b3e38ee4Smrg	if test "$prev" = dlfiles; then
5971b3e38ee4Smrg	  # This library was specified with -dlopen.
5972a73423d7Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973b3e38ee4Smrg	  prev=
5974b3e38ee4Smrg	elif test "$prev" = dlprefiles; then
5975b3e38ee4Smrg	  # The library was specified with -dlpreopen.
5976a73423d7Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977b3e38ee4Smrg	  prev=
5978b3e38ee4Smrg	else
5979a73423d7Smrg	  func_append deplibs " $func_resolve_sysroot_result"
5980b3e38ee4Smrg	fi
5981b3e38ee4Smrg	continue
5982b3e38ee4Smrg	;;
5983b3e38ee4Smrg
5984b3e38ee4Smrg      # Some other compiler argument.
5985b3e38ee4Smrg      *)
5986b3e38ee4Smrg	# Unknown arguments in both finalize_command and compile_command need
5987b3e38ee4Smrg	# to be aesthetically quoted because they are evaled later.
5988b3e38ee4Smrg	func_quote_for_eval "$arg"
5989b3e38ee4Smrg	arg="$func_quote_for_eval_result"
5990b3e38ee4Smrg	;;
5991b3e38ee4Smrg      esac # arg
5992b3e38ee4Smrg
5993b3e38ee4Smrg      # Now actually substitute the argument into the commands.
5994b3e38ee4Smrg      if test -n "$arg"; then
5995b3e38ee4Smrg	func_append compile_command " $arg"
5996b3e38ee4Smrg	func_append finalize_command " $arg"
5997b3e38ee4Smrg      fi
5998b3e38ee4Smrg    done # argument parsing loop
5999b3e38ee4Smrg
6000b3e38ee4Smrg    test -n "$prev" && \
6001b3e38ee4Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002b3e38ee4Smrg
6003b3e38ee4Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004b3e38ee4Smrg      eval arg=\"$export_dynamic_flag_spec\"
6005b3e38ee4Smrg      func_append compile_command " $arg"
6006b3e38ee4Smrg      func_append finalize_command " $arg"
6007b3e38ee4Smrg    fi
6008b3e38ee4Smrg
6009b3e38ee4Smrg    oldlibs=
6010b3e38ee4Smrg    # calculate the name of the file, without its directory
6011b3e38ee4Smrg    func_basename "$output"
6012b3e38ee4Smrg    outputname="$func_basename_result"
6013b3e38ee4Smrg    libobjs_save="$libobjs"
6014b3e38ee4Smrg
6015b3e38ee4Smrg    if test -n "$shlibpath_var"; then
6016b3e38ee4Smrg      # get the directories listed in $shlibpath_var
6017a73423d7Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018b3e38ee4Smrg    else
6019b3e38ee4Smrg      shlib_search_path=
6020b3e38ee4Smrg    fi
6021b3e38ee4Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022b3e38ee4Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023b3e38ee4Smrg
6024b3e38ee4Smrg    func_dirname "$output" "/" ""
6025b3e38ee4Smrg    output_objdir="$func_dirname_result$objdir"
6026a73423d7Smrg    func_to_tool_file "$output_objdir/"
6027a73423d7Smrg    tool_output_objdir=$func_to_tool_file_result
6028b3e38ee4Smrg    # Create the object directory.
6029b3e38ee4Smrg    func_mkdir_p "$output_objdir"
6030b3e38ee4Smrg
6031b3e38ee4Smrg    # Determine the type of output
6032b3e38ee4Smrg    case $output in
6033b3e38ee4Smrg    "")
6034b3e38ee4Smrg      func_fatal_help "you must specify an output file"
6035b3e38ee4Smrg      ;;
6036b3e38ee4Smrg    *.$libext) linkmode=oldlib ;;
6037b3e38ee4Smrg    *.lo | *.$objext) linkmode=obj ;;
6038b3e38ee4Smrg    *.la) linkmode=lib ;;
6039b3e38ee4Smrg    *) linkmode=prog ;; # Anything else should be a program.
6040b3e38ee4Smrg    esac
6041b3e38ee4Smrg
6042b3e38ee4Smrg    specialdeplibs=
6043b3e38ee4Smrg
6044b3e38ee4Smrg    libs=
6045b3e38ee4Smrg    # Find all interdependent deplibs by searching for libraries
6046b3e38ee4Smrg    # that are linked more than once (e.g. -la -lb -la)
6047b3e38ee4Smrg    for deplib in $deplibs; do
6048a73423d7Smrg      if $opt_preserve_dup_deps ; then
6049b3e38ee4Smrg	case "$libs " in
6050a73423d7Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051b3e38ee4Smrg	esac
6052b3e38ee4Smrg      fi
6053a73423d7Smrg      func_append libs " $deplib"
6054b3e38ee4Smrg    done
6055b3e38ee4Smrg
6056b3e38ee4Smrg    if test "$linkmode" = lib; then
6057b3e38ee4Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058b3e38ee4Smrg
6059b3e38ee4Smrg      # Compute libraries that are listed more than once in $predeps
6060b3e38ee4Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061b3e38ee4Smrg      # not to be eliminated).
6062b3e38ee4Smrg      pre_post_deps=
6063b3e38ee4Smrg      if $opt_duplicate_compiler_generated_deps; then
6064b3e38ee4Smrg	for pre_post_dep in $predeps $postdeps; do
6065b3e38ee4Smrg	  case "$pre_post_deps " in
6066a73423d7Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067b3e38ee4Smrg	  esac
6068a73423d7Smrg	  func_append pre_post_deps " $pre_post_dep"
6069b3e38ee4Smrg	done
6070b3e38ee4Smrg      fi
6071b3e38ee4Smrg      pre_post_deps=
6072b3e38ee4Smrg    fi
6073b3e38ee4Smrg
6074b3e38ee4Smrg    deplibs=
6075b3e38ee4Smrg    newdependency_libs=
6076b3e38ee4Smrg    newlib_search_path=
6077b3e38ee4Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078b3e38ee4Smrg    notinst_deplibs= # not-installed libtool libraries
6079b3e38ee4Smrg    notinst_path= # paths that contain not-installed libtool libraries
6080b3e38ee4Smrg
6081b3e38ee4Smrg    case $linkmode in
6082b3e38ee4Smrg    lib)
6083b3e38ee4Smrg	passes="conv dlpreopen link"
6084b3e38ee4Smrg	for file in $dlfiles $dlprefiles; do
6085b3e38ee4Smrg	  case $file in
6086b3e38ee4Smrg	  *.la) ;;
6087b3e38ee4Smrg	  *)
6088b3e38ee4Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089b3e38ee4Smrg	    ;;
6090b3e38ee4Smrg	  esac
6091b3e38ee4Smrg	done
6092b3e38ee4Smrg	;;
6093b3e38ee4Smrg    prog)
6094b3e38ee4Smrg	compile_deplibs=
6095b3e38ee4Smrg	finalize_deplibs=
6096b3e38ee4Smrg	alldeplibs=no
6097b3e38ee4Smrg	newdlfiles=
6098b3e38ee4Smrg	newdlprefiles=
6099b3e38ee4Smrg	passes="conv scan dlopen dlpreopen link"
6100b3e38ee4Smrg	;;
6101b3e38ee4Smrg    *)  passes="conv"
6102b3e38ee4Smrg	;;
6103b3e38ee4Smrg    esac
6104b3e38ee4Smrg
6105b3e38ee4Smrg    for pass in $passes; do
6106b3e38ee4Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107b3e38ee4Smrg      # so that -L comes before libs that need it for instance...
6108b3e38ee4Smrg      if test "$linkmode,$pass" = "lib,link"; then
6109b3e38ee4Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110b3e38ee4Smrg	##        order, and fix it there properly
6111b3e38ee4Smrg        tmp_deplibs=
6112b3e38ee4Smrg	for deplib in $deplibs; do
6113b3e38ee4Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114b3e38ee4Smrg	done
6115b3e38ee4Smrg	deplibs="$tmp_deplibs"
6116b3e38ee4Smrg      fi
6117b3e38ee4Smrg
6118b3e38ee4Smrg      if test "$linkmode,$pass" = "lib,link" ||
6119b3e38ee4Smrg	 test "$linkmode,$pass" = "prog,scan"; then
6120b3e38ee4Smrg	libs="$deplibs"
6121b3e38ee4Smrg	deplibs=
6122b3e38ee4Smrg      fi
6123b3e38ee4Smrg      if test "$linkmode" = prog; then
6124b3e38ee4Smrg	case $pass in
6125b3e38ee4Smrg	dlopen) libs="$dlfiles" ;;
6126b3e38ee4Smrg	dlpreopen) libs="$dlprefiles" ;;
6127b3e38ee4Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128b3e38ee4Smrg	esac
6129b3e38ee4Smrg      fi
6130b3e38ee4Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131b3e38ee4Smrg	# Collect and forward deplibs of preopened libtool libs
6132b3e38ee4Smrg	for lib in $dlprefiles; do
6133b3e38ee4Smrg	  # Ignore non-libtool-libs
6134b3e38ee4Smrg	  dependency_libs=
6135a73423d7Smrg	  func_resolve_sysroot "$lib"
6136b3e38ee4Smrg	  case $lib in
6137a73423d7Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138b3e38ee4Smrg	  esac
6139b3e38ee4Smrg
6140b3e38ee4Smrg	  # Collect preopened libtool deplibs, except any this library
6141b3e38ee4Smrg	  # has declared as weak libs
6142b3e38ee4Smrg	  for deplib in $dependency_libs; do
6143a73423d7Smrg	    func_basename "$deplib"
6144a73423d7Smrg            deplib_base=$func_basename_result
6145b3e38ee4Smrg	    case " $weak_libs " in
6146b3e38ee4Smrg	    *" $deplib_base "*) ;;
6147a73423d7Smrg	    *) func_append deplibs " $deplib" ;;
6148b3e38ee4Smrg	    esac
6149b3e38ee4Smrg	  done
6150b3e38ee4Smrg	done
6151b3e38ee4Smrg	libs="$dlprefiles"
6152b3e38ee4Smrg      fi
6153b3e38ee4Smrg      if test "$pass" = dlopen; then
6154b3e38ee4Smrg	# Collect dlpreopened libraries
6155b3e38ee4Smrg	save_deplibs="$deplibs"
6156b3e38ee4Smrg	deplibs=
6157b3e38ee4Smrg      fi
6158b3e38ee4Smrg
6159b3e38ee4Smrg      for deplib in $libs; do
6160b3e38ee4Smrg	lib=
6161b3e38ee4Smrg	found=no
6162b3e38ee4Smrg	case $deplib in
6163a73423d7Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6164a73423d7Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165b3e38ee4Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6166b3e38ee4Smrg	    compile_deplibs="$deplib $compile_deplibs"
6167b3e38ee4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168b3e38ee4Smrg	  else
6169a73423d7Smrg	    func_append compiler_flags " $deplib"
6170b3e38ee4Smrg	    if test "$linkmode" = lib ; then
6171b3e38ee4Smrg		case "$new_inherited_linker_flags " in
6172b3e38ee4Smrg		    *" $deplib "*) ;;
6173a73423d7Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174b3e38ee4Smrg		esac
6175b3e38ee4Smrg	    fi
6176b3e38ee4Smrg	  fi
6177b3e38ee4Smrg	  continue
6178b3e38ee4Smrg	  ;;
6179b3e38ee4Smrg	-l*)
6180b3e38ee4Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181b3e38ee4Smrg	    func_warning "\`-l' is ignored for archives/objects"
6182b3e38ee4Smrg	    continue
6183b3e38ee4Smrg	  fi
6184b3e38ee4Smrg	  func_stripname '-l' '' "$deplib"
6185b3e38ee4Smrg	  name=$func_stripname_result
6186b3e38ee4Smrg	  if test "$linkmode" = lib; then
6187b3e38ee4Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188b3e38ee4Smrg	  else
6189b3e38ee4Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190b3e38ee4Smrg	  fi
6191b3e38ee4Smrg	  for searchdir in $searchdirs; do
6192b3e38ee4Smrg	    for search_ext in .la $std_shrext .so .a; do
6193b3e38ee4Smrg	      # Search the libtool library
6194b3e38ee4Smrg	      lib="$searchdir/lib${name}${search_ext}"
6195b3e38ee4Smrg	      if test -f "$lib"; then
6196b3e38ee4Smrg		if test "$search_ext" = ".la"; then
6197b3e38ee4Smrg		  found=yes
6198b3e38ee4Smrg		else
6199b3e38ee4Smrg		  found=no
6200b3e38ee4Smrg		fi
6201b3e38ee4Smrg		break 2
6202b3e38ee4Smrg	      fi
6203b3e38ee4Smrg	    done
6204b3e38ee4Smrg	  done
6205b3e38ee4Smrg	  if test "$found" != yes; then
6206b3e38ee4Smrg	    # deplib doesn't seem to be a libtool library
6207b3e38ee4Smrg	    if test "$linkmode,$pass" = "prog,link"; then
6208b3e38ee4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6209b3e38ee4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6210b3e38ee4Smrg	    else
6211b3e38ee4Smrg	      deplibs="$deplib $deplibs"
6212b3e38ee4Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213b3e38ee4Smrg	    fi
6214b3e38ee4Smrg	    continue
6215b3e38ee4Smrg	  else # deplib is a libtool library
6216b3e38ee4Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217b3e38ee4Smrg	    # We need to do some special things here, and not later.
6218b3e38ee4Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219b3e38ee4Smrg	      case " $predeps $postdeps " in
6220b3e38ee4Smrg	      *" $deplib "*)
6221b3e38ee4Smrg		if func_lalib_p "$lib"; then
6222b3e38ee4Smrg		  library_names=
6223b3e38ee4Smrg		  old_library=
6224b3e38ee4Smrg		  func_source "$lib"
6225b3e38ee4Smrg		  for l in $old_library $library_names; do
6226b3e38ee4Smrg		    ll="$l"
6227b3e38ee4Smrg		  done
6228b3e38ee4Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6229b3e38ee4Smrg		    found=no
6230b3e38ee4Smrg		    func_dirname "$lib" "" "."
6231b3e38ee4Smrg		    ladir="$func_dirname_result"
6232b3e38ee4Smrg		    lib=$ladir/$old_library
6233b3e38ee4Smrg		    if test "$linkmode,$pass" = "prog,link"; then
6234b3e38ee4Smrg		      compile_deplibs="$deplib $compile_deplibs"
6235b3e38ee4Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236b3e38ee4Smrg		    else
6237b3e38ee4Smrg		      deplibs="$deplib $deplibs"
6238b3e38ee4Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239b3e38ee4Smrg		    fi
6240b3e38ee4Smrg		    continue
6241b3e38ee4Smrg		  fi
6242b3e38ee4Smrg		fi
6243b3e38ee4Smrg		;;
6244b3e38ee4Smrg	      *) ;;
6245b3e38ee4Smrg	      esac
6246b3e38ee4Smrg	    fi
6247b3e38ee4Smrg	  fi
6248b3e38ee4Smrg	  ;; # -l
6249b3e38ee4Smrg	*.ltframework)
6250b3e38ee4Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6251b3e38ee4Smrg	    compile_deplibs="$deplib $compile_deplibs"
6252b3e38ee4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253b3e38ee4Smrg	  else
6254b3e38ee4Smrg	    deplibs="$deplib $deplibs"
6255b3e38ee4Smrg	    if test "$linkmode" = lib ; then
6256b3e38ee4Smrg		case "$new_inherited_linker_flags " in
6257b3e38ee4Smrg		    *" $deplib "*) ;;
6258a73423d7Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259b3e38ee4Smrg		esac
6260b3e38ee4Smrg	    fi
6261b3e38ee4Smrg	  fi
6262b3e38ee4Smrg	  continue
6263b3e38ee4Smrg	  ;;
6264b3e38ee4Smrg	-L*)
6265b3e38ee4Smrg	  case $linkmode in
6266b3e38ee4Smrg	  lib)
6267b3e38ee4Smrg	    deplibs="$deplib $deplibs"
6268b3e38ee4Smrg	    test "$pass" = conv && continue
6269b3e38ee4Smrg	    newdependency_libs="$deplib $newdependency_libs"
6270b3e38ee4Smrg	    func_stripname '-L' '' "$deplib"
6271a73423d7Smrg	    func_resolve_sysroot "$func_stripname_result"
6272a73423d7Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273b3e38ee4Smrg	    ;;
6274b3e38ee4Smrg	  prog)
6275b3e38ee4Smrg	    if test "$pass" = conv; then
6276b3e38ee4Smrg	      deplibs="$deplib $deplibs"
6277b3e38ee4Smrg	      continue
6278b3e38ee4Smrg	    fi
6279b3e38ee4Smrg	    if test "$pass" = scan; then
6280b3e38ee4Smrg	      deplibs="$deplib $deplibs"
6281b3e38ee4Smrg	    else
6282b3e38ee4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6283b3e38ee4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284b3e38ee4Smrg	    fi
6285b3e38ee4Smrg	    func_stripname '-L' '' "$deplib"
6286a73423d7Smrg	    func_resolve_sysroot "$func_stripname_result"
6287a73423d7Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288b3e38ee4Smrg	    ;;
6289b3e38ee4Smrg	  *)
6290b3e38ee4Smrg	    func_warning "\`-L' is ignored for archives/objects"
6291b3e38ee4Smrg	    ;;
6292b3e38ee4Smrg	  esac # linkmode
6293b3e38ee4Smrg	  continue
6294b3e38ee4Smrg	  ;; # -L
6295b3e38ee4Smrg	-R*)
6296b3e38ee4Smrg	  if test "$pass" = link; then
6297b3e38ee4Smrg	    func_stripname '-R' '' "$deplib"
6298a73423d7Smrg	    func_resolve_sysroot "$func_stripname_result"
6299a73423d7Smrg	    dir=$func_resolve_sysroot_result
6300b3e38ee4Smrg	    # Make sure the xrpath contains only unique directories.
6301b3e38ee4Smrg	    case "$xrpath " in
6302b3e38ee4Smrg	    *" $dir "*) ;;
6303a73423d7Smrg	    *) func_append xrpath " $dir" ;;
6304b3e38ee4Smrg	    esac
6305b3e38ee4Smrg	  fi
6306b3e38ee4Smrg	  deplibs="$deplib $deplibs"
6307b3e38ee4Smrg	  continue
6308b3e38ee4Smrg	  ;;
6309a73423d7Smrg	*.la)
6310a73423d7Smrg	  func_resolve_sysroot "$deplib"
6311a73423d7Smrg	  lib=$func_resolve_sysroot_result
6312a73423d7Smrg	  ;;
6313b3e38ee4Smrg	*.$libext)
6314b3e38ee4Smrg	  if test "$pass" = conv; then
6315b3e38ee4Smrg	    deplibs="$deplib $deplibs"
6316b3e38ee4Smrg	    continue
6317b3e38ee4Smrg	  fi
6318b3e38ee4Smrg	  case $linkmode in
6319b3e38ee4Smrg	  lib)
6320b3e38ee4Smrg	    # Linking convenience modules into shared libraries is allowed,
6321b3e38ee4Smrg	    # but linking other static libraries is non-portable.
6322b3e38ee4Smrg	    case " $dlpreconveniencelibs " in
6323b3e38ee4Smrg	    *" $deplib "*) ;;
6324b3e38ee4Smrg	    *)
6325b3e38ee4Smrg	      valid_a_lib=no
6326b3e38ee4Smrg	      case $deplibs_check_method in
6327b3e38ee4Smrg		match_pattern*)
6328b3e38ee4Smrg		  set dummy $deplibs_check_method; shift
6329b3e38ee4Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6330a73423d7Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331b3e38ee4Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332b3e38ee4Smrg		    valid_a_lib=yes
6333b3e38ee4Smrg		  fi
6334b3e38ee4Smrg		;;
6335b3e38ee4Smrg		pass_all)
6336b3e38ee4Smrg		  valid_a_lib=yes
6337b3e38ee4Smrg		;;
6338b3e38ee4Smrg	      esac
6339b3e38ee4Smrg	      if test "$valid_a_lib" != yes; then
6340a73423d7Smrg		echo
6341b3e38ee4Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6342a73423d7Smrg		echo "*** I have the capability to make that library automatically link in when"
6343a73423d7Smrg		echo "*** you link to this library.  But I can only do this if you have a"
6344a73423d7Smrg		echo "*** shared version of the library, which you do not appear to have"
6345a73423d7Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
6346a73423d7Smrg		echo "*** that it is just a static archive that I should not use here."
6347b3e38ee4Smrg	      else
6348a73423d7Smrg		echo
6349b3e38ee4Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
6350b3e38ee4Smrg		$ECHO "*** static library $deplib is not portable!"
6351b3e38ee4Smrg		deplibs="$deplib $deplibs"
6352b3e38ee4Smrg	      fi
6353b3e38ee4Smrg	      ;;
6354b3e38ee4Smrg	    esac
6355b3e38ee4Smrg	    continue
6356b3e38ee4Smrg	    ;;
6357b3e38ee4Smrg	  prog)
6358b3e38ee4Smrg	    if test "$pass" != link; then
6359b3e38ee4Smrg	      deplibs="$deplib $deplibs"
6360b3e38ee4Smrg	    else
6361b3e38ee4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6362b3e38ee4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363b3e38ee4Smrg	    fi
6364b3e38ee4Smrg	    continue
6365b3e38ee4Smrg	    ;;
6366b3e38ee4Smrg	  esac # linkmode
6367b3e38ee4Smrg	  ;; # *.$libext
6368b3e38ee4Smrg	*.lo | *.$objext)
6369b3e38ee4Smrg	  if test "$pass" = conv; then
6370b3e38ee4Smrg	    deplibs="$deplib $deplibs"
6371b3e38ee4Smrg	  elif test "$linkmode" = prog; then
6372b3e38ee4Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373b3e38ee4Smrg	      # If there is no dlopen support or we're linking statically,
6374b3e38ee4Smrg	      # we need to preload.
6375a73423d7Smrg	      func_append newdlprefiles " $deplib"
6376b3e38ee4Smrg	      compile_deplibs="$deplib $compile_deplibs"
6377b3e38ee4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378b3e38ee4Smrg	    else
6379a73423d7Smrg	      func_append newdlfiles " $deplib"
6380b3e38ee4Smrg	    fi
6381b3e38ee4Smrg	  fi
6382b3e38ee4Smrg	  continue
6383b3e38ee4Smrg	  ;;
6384b3e38ee4Smrg	%DEPLIBS%)
6385b3e38ee4Smrg	  alldeplibs=yes
6386b3e38ee4Smrg	  continue
6387b3e38ee4Smrg	  ;;
6388b3e38ee4Smrg	esac # case $deplib
6389b3e38ee4Smrg
6390b3e38ee4Smrg	if test "$found" = yes || test -f "$lib"; then :
6391b3e38ee4Smrg	else
6392b3e38ee4Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393b3e38ee4Smrg	fi
6394b3e38ee4Smrg
6395b3e38ee4Smrg	# Check to see that this really is a libtool archive.
6396b3e38ee4Smrg	func_lalib_unsafe_p "$lib" \
6397b3e38ee4Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398b3e38ee4Smrg
6399b3e38ee4Smrg	func_dirname "$lib" "" "."
6400b3e38ee4Smrg	ladir="$func_dirname_result"
6401b3e38ee4Smrg
6402b3e38ee4Smrg	dlname=
6403b3e38ee4Smrg	dlopen=
6404b3e38ee4Smrg	dlpreopen=
6405b3e38ee4Smrg	libdir=
6406b3e38ee4Smrg	library_names=
6407b3e38ee4Smrg	old_library=
6408b3e38ee4Smrg	inherited_linker_flags=
6409b3e38ee4Smrg	# If the library was installed with an old release of libtool,
6410b3e38ee4Smrg	# it will not redefine variables installed, or shouldnotlink
6411b3e38ee4Smrg	installed=yes
6412b3e38ee4Smrg	shouldnotlink=no
6413b3e38ee4Smrg	avoidtemprpath=
6414b3e38ee4Smrg
6415b3e38ee4Smrg
6416b3e38ee4Smrg	# Read the .la file
6417b3e38ee4Smrg	func_source "$lib"
6418b3e38ee4Smrg
6419b3e38ee4Smrg	# Convert "-framework foo" to "foo.ltframework"
6420b3e38ee4Smrg	if test -n "$inherited_linker_flags"; then
6421a73423d7Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422b3e38ee4Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423b3e38ee4Smrg	    case " $new_inherited_linker_flags " in
6424b3e38ee4Smrg	      *" $tmp_inherited_linker_flag "*) ;;
6425a73423d7Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426b3e38ee4Smrg	    esac
6427b3e38ee4Smrg	  done
6428b3e38ee4Smrg	fi
6429a73423d7Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430b3e38ee4Smrg	if test "$linkmode,$pass" = "lib,link" ||
6431b3e38ee4Smrg	   test "$linkmode,$pass" = "prog,scan" ||
6432b3e38ee4Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6433a73423d7Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6434a73423d7Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435b3e38ee4Smrg	fi
6436b3e38ee4Smrg
6437b3e38ee4Smrg	if test "$pass" = conv; then
6438b3e38ee4Smrg	  # Only check for convenience libraries
6439b3e38ee4Smrg	  deplibs="$lib $deplibs"
6440b3e38ee4Smrg	  if test -z "$libdir"; then
6441b3e38ee4Smrg	    if test -z "$old_library"; then
6442b3e38ee4Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443b3e38ee4Smrg	    fi
6444b3e38ee4Smrg	    # It is a libtool convenience library, so add in its objects.
6445a73423d7Smrg	    func_append convenience " $ladir/$objdir/$old_library"
6446a73423d7Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6447b3e38ee4Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448b3e38ee4Smrg	    func_fatal_error "\`$lib' is not a convenience library"
6449b3e38ee4Smrg	  fi
6450b3e38ee4Smrg	  tmp_libs=
6451b3e38ee4Smrg	  for deplib in $dependency_libs; do
6452b3e38ee4Smrg	    deplibs="$deplib $deplibs"
6453a73423d7Smrg	    if $opt_preserve_dup_deps ; then
6454b3e38ee4Smrg	      case "$tmp_libs " in
6455a73423d7Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456b3e38ee4Smrg	      esac
6457b3e38ee4Smrg	    fi
6458a73423d7Smrg	    func_append tmp_libs " $deplib"
6459b3e38ee4Smrg	  done
6460b3e38ee4Smrg	  continue
6461b3e38ee4Smrg	fi # $pass = conv
6462b3e38ee4Smrg
6463b3e38ee4Smrg
6464b3e38ee4Smrg	# Get the name of the library we link against.
6465b3e38ee4Smrg	linklib=
6466a73423d7Smrg	if test -n "$old_library" &&
6467a73423d7Smrg	   { test "$prefer_static_libs" = yes ||
6468a73423d7Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6469a73423d7Smrg	  linklib=$old_library
6470a73423d7Smrg	else
6471a73423d7Smrg	  for l in $old_library $library_names; do
6472a73423d7Smrg	    linklib="$l"
6473a73423d7Smrg	  done
6474a73423d7Smrg	fi
6475b3e38ee4Smrg	if test -z "$linklib"; then
6476b3e38ee4Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477b3e38ee4Smrg	fi
6478b3e38ee4Smrg
6479b3e38ee4Smrg	# This library was specified with -dlopen.
6480b3e38ee4Smrg	if test "$pass" = dlopen; then
6481b3e38ee4Smrg	  if test -z "$libdir"; then
6482b3e38ee4Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483b3e38ee4Smrg	  fi
6484b3e38ee4Smrg	  if test -z "$dlname" ||
6485b3e38ee4Smrg	     test "$dlopen_support" != yes ||
6486b3e38ee4Smrg	     test "$build_libtool_libs" = no; then
6487b3e38ee4Smrg	    # If there is no dlname, no dlopen support or we're linking
6488b3e38ee4Smrg	    # statically, we need to preload.  We also need to preload any
6489b3e38ee4Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490b3e38ee4Smrg	    # bomb out in the load deplibs phase.
6491a73423d7Smrg	    func_append dlprefiles " $lib $dependency_libs"
6492b3e38ee4Smrg	  else
6493a73423d7Smrg	    func_append newdlfiles " $lib"
6494b3e38ee4Smrg	  fi
6495b3e38ee4Smrg	  continue
6496b3e38ee4Smrg	fi # $pass = dlopen
6497b3e38ee4Smrg
6498b3e38ee4Smrg	# We need an absolute path.
6499b3e38ee4Smrg	case $ladir in
6500b3e38ee4Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501b3e38ee4Smrg	*)
6502b3e38ee4Smrg	  abs_ladir=`cd "$ladir" && pwd`
6503b3e38ee4Smrg	  if test -z "$abs_ladir"; then
6504b3e38ee4Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505b3e38ee4Smrg	    func_warning "passing it literally to the linker, although it might fail"
6506b3e38ee4Smrg	    abs_ladir="$ladir"
6507b3e38ee4Smrg	  fi
6508b3e38ee4Smrg	  ;;
6509b3e38ee4Smrg	esac
6510b3e38ee4Smrg	func_basename "$lib"
6511b3e38ee4Smrg	laname="$func_basename_result"
6512b3e38ee4Smrg
6513b3e38ee4Smrg	# Find the relevant object directory and library name.
6514b3e38ee4Smrg	if test "X$installed" = Xyes; then
6515a73423d7Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516b3e38ee4Smrg	    func_warning "library \`$lib' was moved."
6517b3e38ee4Smrg	    dir="$ladir"
6518b3e38ee4Smrg	    absdir="$abs_ladir"
6519b3e38ee4Smrg	    libdir="$abs_ladir"
6520b3e38ee4Smrg	  else
6521a73423d7Smrg	    dir="$lt_sysroot$libdir"
6522a73423d7Smrg	    absdir="$lt_sysroot$libdir"
6523b3e38ee4Smrg	  fi
6524b3e38ee4Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525b3e38ee4Smrg	else
6526b3e38ee4Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527b3e38ee4Smrg	    dir="$ladir"
6528b3e38ee4Smrg	    absdir="$abs_ladir"
6529b3e38ee4Smrg	    # Remove this search path later
6530a73423d7Smrg	    func_append notinst_path " $abs_ladir"
6531b3e38ee4Smrg	  else
6532b3e38ee4Smrg	    dir="$ladir/$objdir"
6533b3e38ee4Smrg	    absdir="$abs_ladir/$objdir"
6534b3e38ee4Smrg	    # Remove this search path later
6535a73423d7Smrg	    func_append notinst_path " $abs_ladir"
6536b3e38ee4Smrg	  fi
6537b3e38ee4Smrg	fi # $installed = yes
6538b3e38ee4Smrg	func_stripname 'lib' '.la' "$laname"
6539b3e38ee4Smrg	name=$func_stripname_result
6540b3e38ee4Smrg
6541b3e38ee4Smrg	# This library was specified with -dlpreopen.
6542b3e38ee4Smrg	if test "$pass" = dlpreopen; then
6543b3e38ee4Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6544b3e38ee4Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545b3e38ee4Smrg	  fi
6546a73423d7Smrg	  case "$host" in
6547a73423d7Smrg	    # special handling for platforms with PE-DLLs.
6548a73423d7Smrg	    *cygwin* | *mingw* | *cegcc* )
6549a73423d7Smrg	      # Linker will automatically link against shared library if both
6550a73423d7Smrg	      # static and shared are present.  Therefore, ensure we extract
6551a73423d7Smrg	      # symbols from the import library if a shared library is present
6552a73423d7Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
6553a73423d7Smrg	      # this by putting the import library name into $newdlprefiles.
6554a73423d7Smrg	      # We recover the dlopen module name by 'saving' the la file
6555a73423d7Smrg	      # name in a special purpose variable, and (later) extracting the
6556a73423d7Smrg	      # dlname from the la file.
6557a73423d7Smrg	      if test -n "$dlname"; then
6558a73423d7Smrg	        func_tr_sh "$dir/$linklib"
6559a73423d7Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6560a73423d7Smrg	        func_append newdlprefiles " $dir/$linklib"
6561a73423d7Smrg	      else
6562a73423d7Smrg	        func_append newdlprefiles " $dir/$old_library"
6563a73423d7Smrg	        # Keep a list of preopened convenience libraries to check
6564a73423d7Smrg	        # that they are being used correctly in the link pass.
6565a73423d7Smrg	        test -z "$libdir" && \
6566a73423d7Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6567a73423d7Smrg	      fi
6568a73423d7Smrg	    ;;
6569a73423d7Smrg	    * )
6570a73423d7Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6571a73423d7Smrg	      # are required to link).
6572a73423d7Smrg	      if test -n "$old_library"; then
6573a73423d7Smrg	        func_append newdlprefiles " $dir/$old_library"
6574a73423d7Smrg	        # Keep a list of preopened convenience libraries to check
6575a73423d7Smrg	        # that they are being used correctly in the link pass.
6576a73423d7Smrg	        test -z "$libdir" && \
6577a73423d7Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6578a73423d7Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6579a73423d7Smrg	      elif test -n "$dlname"; then
6580a73423d7Smrg	        func_append newdlprefiles " $dir/$dlname"
6581a73423d7Smrg	      else
6582a73423d7Smrg	        func_append newdlprefiles " $dir/$linklib"
6583a73423d7Smrg	      fi
6584a73423d7Smrg	    ;;
6585a73423d7Smrg	  esac
6586b3e38ee4Smrg	fi # $pass = dlpreopen
6587b3e38ee4Smrg
6588b3e38ee4Smrg	if test -z "$libdir"; then
6589b3e38ee4Smrg	  # Link the convenience library
6590b3e38ee4Smrg	  if test "$linkmode" = lib; then
6591b3e38ee4Smrg	    deplibs="$dir/$old_library $deplibs"
6592b3e38ee4Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593b3e38ee4Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594b3e38ee4Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595b3e38ee4Smrg	  else
6596b3e38ee4Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597b3e38ee4Smrg	  fi
6598b3e38ee4Smrg	  continue
6599b3e38ee4Smrg	fi
6600b3e38ee4Smrg
6601b3e38ee4Smrg
6602b3e38ee4Smrg	if test "$linkmode" = prog && test "$pass" != link; then
6603a73423d7Smrg	  func_append newlib_search_path " $ladir"
6604b3e38ee4Smrg	  deplibs="$lib $deplibs"
6605b3e38ee4Smrg
6606b3e38ee4Smrg	  linkalldeplibs=no
6607b3e38ee4Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608b3e38ee4Smrg	     test "$build_libtool_libs" = no; then
6609b3e38ee4Smrg	    linkalldeplibs=yes
6610b3e38ee4Smrg	  fi
6611b3e38ee4Smrg
6612b3e38ee4Smrg	  tmp_libs=
6613b3e38ee4Smrg	  for deplib in $dependency_libs; do
6614b3e38ee4Smrg	    case $deplib in
6615b3e38ee4Smrg	    -L*) func_stripname '-L' '' "$deplib"
6616a73423d7Smrg	         func_resolve_sysroot "$func_stripname_result"
6617a73423d7Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618b3e38ee4Smrg		 ;;
6619b3e38ee4Smrg	    esac
6620b3e38ee4Smrg	    # Need to link against all dependency_libs?
6621b3e38ee4Smrg	    if test "$linkalldeplibs" = yes; then
6622b3e38ee4Smrg	      deplibs="$deplib $deplibs"
6623b3e38ee4Smrg	    else
6624b3e38ee4Smrg	      # Need to hardcode shared library paths
6625b3e38ee4Smrg	      # or/and link against static libraries
6626b3e38ee4Smrg	      newdependency_libs="$deplib $newdependency_libs"
6627b3e38ee4Smrg	    fi
6628a73423d7Smrg	    if $opt_preserve_dup_deps ; then
6629b3e38ee4Smrg	      case "$tmp_libs " in
6630a73423d7Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631b3e38ee4Smrg	      esac
6632b3e38ee4Smrg	    fi
6633a73423d7Smrg	    func_append tmp_libs " $deplib"
6634b3e38ee4Smrg	  done # for deplib
6635b3e38ee4Smrg	  continue
6636b3e38ee4Smrg	fi # $linkmode = prog...
6637b3e38ee4Smrg
6638b3e38ee4Smrg	if test "$linkmode,$pass" = "prog,link"; then
6639b3e38ee4Smrg	  if test -n "$library_names" &&
6640b3e38ee4Smrg	     { { test "$prefer_static_libs" = no ||
6641b3e38ee4Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642b3e38ee4Smrg	       test -z "$old_library"; }; then
6643b3e38ee4Smrg	    # We need to hardcode the library path
6644b3e38ee4Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645b3e38ee4Smrg	      # Make sure the rpath contains only unique directories.
6646b3e38ee4Smrg	      case "$temp_rpath:" in
6647b3e38ee4Smrg	      *"$absdir:"*) ;;
6648a73423d7Smrg	      *) func_append temp_rpath "$absdir:" ;;
6649b3e38ee4Smrg	      esac
6650b3e38ee4Smrg	    fi
6651b3e38ee4Smrg
6652b3e38ee4Smrg	    # Hardcode the library path.
6653b3e38ee4Smrg	    # Skip directories that are in the system default run-time
6654b3e38ee4Smrg	    # search path.
6655b3e38ee4Smrg	    case " $sys_lib_dlsearch_path " in
6656b3e38ee4Smrg	    *" $absdir "*) ;;
6657b3e38ee4Smrg	    *)
6658b3e38ee4Smrg	      case "$compile_rpath " in
6659b3e38ee4Smrg	      *" $absdir "*) ;;
6660a73423d7Smrg	      *) func_append compile_rpath " $absdir" ;;
6661b3e38ee4Smrg	      esac
6662b3e38ee4Smrg	      ;;
6663b3e38ee4Smrg	    esac
6664b3e38ee4Smrg	    case " $sys_lib_dlsearch_path " in
6665b3e38ee4Smrg	    *" $libdir "*) ;;
6666b3e38ee4Smrg	    *)
6667b3e38ee4Smrg	      case "$finalize_rpath " in
6668b3e38ee4Smrg	      *" $libdir "*) ;;
6669a73423d7Smrg	      *) func_append finalize_rpath " $libdir" ;;
6670b3e38ee4Smrg	      esac
6671b3e38ee4Smrg	      ;;
6672b3e38ee4Smrg	    esac
6673b3e38ee4Smrg	  fi # $linkmode,$pass = prog,link...
6674b3e38ee4Smrg
6675b3e38ee4Smrg	  if test "$alldeplibs" = yes &&
6676b3e38ee4Smrg	     { test "$deplibs_check_method" = pass_all ||
6677b3e38ee4Smrg	       { test "$build_libtool_libs" = yes &&
6678b3e38ee4Smrg		 test -n "$library_names"; }; }; then
6679b3e38ee4Smrg	    # We only need to search for static libraries
6680b3e38ee4Smrg	    continue
6681b3e38ee4Smrg	  fi
6682b3e38ee4Smrg	fi
6683b3e38ee4Smrg
6684b3e38ee4Smrg	link_static=no # Whether the deplib will be linked statically
6685b3e38ee4Smrg	use_static_libs=$prefer_static_libs
6686b3e38ee4Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687b3e38ee4Smrg	  use_static_libs=no
6688b3e38ee4Smrg	fi
6689b3e38ee4Smrg	if test -n "$library_names" &&
6690b3e38ee4Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691b3e38ee4Smrg	  case $host in
6692b3e38ee4Smrg	  *cygwin* | *mingw* | *cegcc*)
6693b3e38ee4Smrg	      # No point in relinking DLLs because paths are not encoded
6694a73423d7Smrg	      func_append notinst_deplibs " $lib"
6695b3e38ee4Smrg	      need_relink=no
6696b3e38ee4Smrg	    ;;
6697b3e38ee4Smrg	  *)
6698b3e38ee4Smrg	    if test "$installed" = no; then
6699a73423d7Smrg	      func_append notinst_deplibs " $lib"
6700b3e38ee4Smrg	      need_relink=yes
6701b3e38ee4Smrg	    fi
6702b3e38ee4Smrg	    ;;
6703b3e38ee4Smrg	  esac
6704b3e38ee4Smrg	  # This is a shared library
6705b3e38ee4Smrg
6706b3e38ee4Smrg	  # Warn about portability, can't link against -module's on some
6707b3e38ee4Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6708b3e38ee4Smrg	  dlopenmodule=""
6709b3e38ee4Smrg	  for dlpremoduletest in $dlprefiles; do
6710b3e38ee4Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
6711b3e38ee4Smrg	      dlopenmodule="$dlpremoduletest"
6712b3e38ee4Smrg	      break
6713b3e38ee4Smrg	    fi
6714b3e38ee4Smrg	  done
6715b3e38ee4Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6716a73423d7Smrg	    echo
6717b3e38ee4Smrg	    if test "$linkmode" = prog; then
6718b3e38ee4Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719b3e38ee4Smrg	    else
6720b3e38ee4Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721b3e38ee4Smrg	    fi
6722b3e38ee4Smrg	    $ECHO "*** $linklib is not portable!"
6723b3e38ee4Smrg	  fi
6724b3e38ee4Smrg	  if test "$linkmode" = lib &&
6725b3e38ee4Smrg	     test "$hardcode_into_libs" = yes; then
6726b3e38ee4Smrg	    # Hardcode the library path.
6727b3e38ee4Smrg	    # Skip directories that are in the system default run-time
6728b3e38ee4Smrg	    # search path.
6729b3e38ee4Smrg	    case " $sys_lib_dlsearch_path " in
6730b3e38ee4Smrg	    *" $absdir "*) ;;
6731b3e38ee4Smrg	    *)
6732b3e38ee4Smrg	      case "$compile_rpath " in
6733b3e38ee4Smrg	      *" $absdir "*) ;;
6734a73423d7Smrg	      *) func_append compile_rpath " $absdir" ;;
6735b3e38ee4Smrg	      esac
6736b3e38ee4Smrg	      ;;
6737b3e38ee4Smrg	    esac
6738b3e38ee4Smrg	    case " $sys_lib_dlsearch_path " in
6739b3e38ee4Smrg	    *" $libdir "*) ;;
6740b3e38ee4Smrg	    *)
6741b3e38ee4Smrg	      case "$finalize_rpath " in
6742b3e38ee4Smrg	      *" $libdir "*) ;;
6743a73423d7Smrg	      *) func_append finalize_rpath " $libdir" ;;
6744b3e38ee4Smrg	      esac
6745b3e38ee4Smrg	      ;;
6746b3e38ee4Smrg	    esac
6747b3e38ee4Smrg	  fi
6748b3e38ee4Smrg
6749b3e38ee4Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750b3e38ee4Smrg	    # figure out the soname
6751b3e38ee4Smrg	    set dummy $library_names
6752b3e38ee4Smrg	    shift
6753b3e38ee4Smrg	    realname="$1"
6754b3e38ee4Smrg	    shift
6755b3e38ee4Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756b3e38ee4Smrg	    # use dlname if we got it. it's perfectly good, no?
6757b3e38ee4Smrg	    if test -n "$dlname"; then
6758b3e38ee4Smrg	      soname="$dlname"
6759b3e38ee4Smrg	    elif test -n "$soname_spec"; then
6760b3e38ee4Smrg	      # bleh windows
6761b3e38ee4Smrg	      case $host in
6762b3e38ee4Smrg	      *cygwin* | mingw* | *cegcc*)
6763b3e38ee4Smrg	        func_arith $current - $age
6764b3e38ee4Smrg		major=$func_arith_result
6765b3e38ee4Smrg		versuffix="-$major"
6766b3e38ee4Smrg		;;
6767b3e38ee4Smrg	      esac
6768b3e38ee4Smrg	      eval soname=\"$soname_spec\"
6769b3e38ee4Smrg	    else
6770b3e38ee4Smrg	      soname="$realname"
6771b3e38ee4Smrg	    fi
6772b3e38ee4Smrg
6773b3e38ee4Smrg	    # Make a new name for the extract_expsyms_cmds to use
6774b3e38ee4Smrg	    soroot="$soname"
6775b3e38ee4Smrg	    func_basename "$soroot"
6776b3e38ee4Smrg	    soname="$func_basename_result"
6777b3e38ee4Smrg	    func_stripname 'lib' '.dll' "$soname"
6778b3e38ee4Smrg	    newlib=libimp-$func_stripname_result.a
6779b3e38ee4Smrg
6780b3e38ee4Smrg	    # If the library has no export list, then create one now
6781b3e38ee4Smrg	    if test -f "$output_objdir/$soname-def"; then :
6782b3e38ee4Smrg	    else
6783b3e38ee4Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784b3e38ee4Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785b3e38ee4Smrg	    fi
6786b3e38ee4Smrg
6787b3e38ee4Smrg	    # Create $newlib
6788b3e38ee4Smrg	    if test -f "$output_objdir/$newlib"; then :; else
6789b3e38ee4Smrg	      func_verbose "generating import library for \`$soname'"
6790b3e38ee4Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791b3e38ee4Smrg	    fi
6792b3e38ee4Smrg	    # make sure the library variables are pointing to the new library
6793b3e38ee4Smrg	    dir=$output_objdir
6794b3e38ee4Smrg	    linklib=$newlib
6795b3e38ee4Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796b3e38ee4Smrg
6797a73423d7Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798b3e38ee4Smrg	    add_shlibpath=
6799b3e38ee4Smrg	    add_dir=
6800b3e38ee4Smrg	    add=
6801b3e38ee4Smrg	    lib_linked=yes
6802b3e38ee4Smrg	    case $hardcode_action in
6803b3e38ee4Smrg	    immediate | unsupported)
6804b3e38ee4Smrg	      if test "$hardcode_direct" = no; then
6805b3e38ee4Smrg		add="$dir/$linklib"
6806b3e38ee4Smrg		case $host in
6807b3e38ee4Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808b3e38ee4Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809b3e38ee4Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810b3e38ee4Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811b3e38ee4Smrg		  *-*-darwin* )
6812b3e38ee4Smrg		    # if the lib is a (non-dlopened) module then we can not
6813b3e38ee4Smrg		    # link against it, someone is ignoring the earlier warnings
6814b3e38ee4Smrg		    if /usr/bin/file -L $add 2> /dev/null |
6815b3e38ee4Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816b3e38ee4Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6817b3e38ee4Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818b3e38ee4Smrg			if test -z "$old_library" ; then
6819a73423d7Smrg			  echo
6820a73423d7Smrg			  echo "*** And there doesn't seem to be a static archive available"
6821a73423d7Smrg			  echo "*** The link will probably fail, sorry"
6822b3e38ee4Smrg			else
6823b3e38ee4Smrg			  add="$dir/$old_library"
6824b3e38ee4Smrg			fi
6825b3e38ee4Smrg		      elif test -n "$old_library"; then
6826b3e38ee4Smrg			add="$dir/$old_library"
6827b3e38ee4Smrg		      fi
6828b3e38ee4Smrg		    fi
6829b3e38ee4Smrg		esac
6830b3e38ee4Smrg	      elif test "$hardcode_minus_L" = no; then
6831b3e38ee4Smrg		case $host in
6832b3e38ee4Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833b3e38ee4Smrg		esac
6834b3e38ee4Smrg		add_dir="-L$dir"
6835b3e38ee4Smrg		add="-l$name"
6836b3e38ee4Smrg	      elif test "$hardcode_shlibpath_var" = no; then
6837b3e38ee4Smrg		add_shlibpath="$dir"
6838b3e38ee4Smrg		add="-l$name"
6839b3e38ee4Smrg	      else
6840b3e38ee4Smrg		lib_linked=no
6841b3e38ee4Smrg	      fi
6842b3e38ee4Smrg	      ;;
6843b3e38ee4Smrg	    relink)
6844b3e38ee4Smrg	      if test "$hardcode_direct" = yes &&
6845b3e38ee4Smrg	         test "$hardcode_direct_absolute" = no; then
6846b3e38ee4Smrg		add="$dir/$linklib"
6847b3e38ee4Smrg	      elif test "$hardcode_minus_L" = yes; then
6848a73423d7Smrg		add_dir="-L$absdir"
6849b3e38ee4Smrg		# Try looking first in the location we're being installed to.
6850b3e38ee4Smrg		if test -n "$inst_prefix_dir"; then
6851b3e38ee4Smrg		  case $libdir in
6852b3e38ee4Smrg		    [\\/]*)
6853a73423d7Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854b3e38ee4Smrg		      ;;
6855b3e38ee4Smrg		  esac
6856b3e38ee4Smrg		fi
6857b3e38ee4Smrg		add="-l$name"
6858b3e38ee4Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
6859b3e38ee4Smrg		add_shlibpath="$dir"
6860b3e38ee4Smrg		add="-l$name"
6861b3e38ee4Smrg	      else
6862b3e38ee4Smrg		lib_linked=no
6863b3e38ee4Smrg	      fi
6864b3e38ee4Smrg	      ;;
6865b3e38ee4Smrg	    *) lib_linked=no ;;
6866b3e38ee4Smrg	    esac
6867b3e38ee4Smrg
6868b3e38ee4Smrg	    if test "$lib_linked" != yes; then
6869b3e38ee4Smrg	      func_fatal_configuration "unsupported hardcode properties"
6870b3e38ee4Smrg	    fi
6871b3e38ee4Smrg
6872b3e38ee4Smrg	    if test -n "$add_shlibpath"; then
6873b3e38ee4Smrg	      case :$compile_shlibpath: in
6874b3e38ee4Smrg	      *":$add_shlibpath:"*) ;;
6875a73423d7Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876b3e38ee4Smrg	      esac
6877b3e38ee4Smrg	    fi
6878b3e38ee4Smrg	    if test "$linkmode" = prog; then
6879b3e38ee4Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880b3e38ee4Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881b3e38ee4Smrg	    else
6882b3e38ee4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883b3e38ee4Smrg	      test -n "$add" && deplibs="$add $deplibs"
6884b3e38ee4Smrg	      if test "$hardcode_direct" != yes &&
6885b3e38ee4Smrg		 test "$hardcode_minus_L" != yes &&
6886b3e38ee4Smrg		 test "$hardcode_shlibpath_var" = yes; then
6887b3e38ee4Smrg		case :$finalize_shlibpath: in
6888b3e38ee4Smrg		*":$libdir:"*) ;;
6889a73423d7Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890b3e38ee4Smrg		esac
6891b3e38ee4Smrg	      fi
6892b3e38ee4Smrg	    fi
6893b3e38ee4Smrg	  fi
6894b3e38ee4Smrg
6895a73423d7Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896b3e38ee4Smrg	    add_shlibpath=
6897b3e38ee4Smrg	    add_dir=
6898b3e38ee4Smrg	    add=
6899b3e38ee4Smrg	    # Finalize command for both is simple: just hardcode it.
6900b3e38ee4Smrg	    if test "$hardcode_direct" = yes &&
6901b3e38ee4Smrg	       test "$hardcode_direct_absolute" = no; then
6902b3e38ee4Smrg	      add="$libdir/$linklib"
6903b3e38ee4Smrg	    elif test "$hardcode_minus_L" = yes; then
6904b3e38ee4Smrg	      add_dir="-L$libdir"
6905b3e38ee4Smrg	      add="-l$name"
6906b3e38ee4Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907b3e38ee4Smrg	      case :$finalize_shlibpath: in
6908b3e38ee4Smrg	      *":$libdir:"*) ;;
6909a73423d7Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910b3e38ee4Smrg	      esac
6911b3e38ee4Smrg	      add="-l$name"
6912b3e38ee4Smrg	    elif test "$hardcode_automatic" = yes; then
6913b3e38ee4Smrg	      if test -n "$inst_prefix_dir" &&
6914b3e38ee4Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915b3e38ee4Smrg		add="$inst_prefix_dir$libdir/$linklib"
6916b3e38ee4Smrg	      else
6917b3e38ee4Smrg		add="$libdir/$linklib"
6918b3e38ee4Smrg	      fi
6919b3e38ee4Smrg	    else
6920b3e38ee4Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
6921b3e38ee4Smrg	      add_dir="-L$libdir"
6922b3e38ee4Smrg	      # Try looking first in the location we're being installed to.
6923b3e38ee4Smrg	      if test -n "$inst_prefix_dir"; then
6924b3e38ee4Smrg		case $libdir in
6925b3e38ee4Smrg		  [\\/]*)
6926a73423d7Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927b3e38ee4Smrg		    ;;
6928b3e38ee4Smrg		esac
6929b3e38ee4Smrg	      fi
6930b3e38ee4Smrg	      add="-l$name"
6931b3e38ee4Smrg	    fi
6932b3e38ee4Smrg
6933b3e38ee4Smrg	    if test "$linkmode" = prog; then
6934b3e38ee4Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935b3e38ee4Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936b3e38ee4Smrg	    else
6937b3e38ee4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938b3e38ee4Smrg	      test -n "$add" && deplibs="$add $deplibs"
6939b3e38ee4Smrg	    fi
6940b3e38ee4Smrg	  fi
6941b3e38ee4Smrg	elif test "$linkmode" = prog; then
6942b3e38ee4Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943b3e38ee4Smrg	  # is not unsupported.  This is valid on all known static and
6944b3e38ee4Smrg	  # shared platforms.
6945b3e38ee4Smrg	  if test "$hardcode_direct" != unsupported; then
6946b3e38ee4Smrg	    test -n "$old_library" && linklib="$old_library"
6947b3e38ee4Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948b3e38ee4Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949b3e38ee4Smrg	  else
6950b3e38ee4Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951b3e38ee4Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952b3e38ee4Smrg	  fi
6953b3e38ee4Smrg	elif test "$build_libtool_libs" = yes; then
6954b3e38ee4Smrg	  # Not a shared library
6955b3e38ee4Smrg	  if test "$deplibs_check_method" != pass_all; then
6956b3e38ee4Smrg	    # We're trying link a shared library against a static one
6957b3e38ee4Smrg	    # but the system doesn't support it.
6958b3e38ee4Smrg
6959b3e38ee4Smrg	    # Just print a warning and add the library to dependency_libs so
6960b3e38ee4Smrg	    # that the program can be linked against the static library.
6961a73423d7Smrg	    echo
6962b3e38ee4Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6963a73423d7Smrg	    echo "*** I have the capability to make that library automatically link in when"
6964a73423d7Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
6965a73423d7Smrg	    echo "*** shared version of the library, which you do not appear to have."
6966b3e38ee4Smrg	    if test "$module" = yes; then
6967a73423d7Smrg	      echo "*** But as you try to build a module library, libtool will still create "
6968a73423d7Smrg	      echo "*** a static module, that should work as long as the dlopening application"
6969a73423d7Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970b3e38ee4Smrg	      if test -z "$global_symbol_pipe"; then
6971a73423d7Smrg		echo
6972a73423d7Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
6973a73423d7Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6974a73423d7Smrg		echo "*** not find such a program.  So, this module is probably useless."
6975a73423d7Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976b3e38ee4Smrg	      fi
6977b3e38ee4Smrg	      if test "$build_old_libs" = no; then
6978b3e38ee4Smrg		build_libtool_libs=module
6979b3e38ee4Smrg		build_old_libs=yes
6980b3e38ee4Smrg	      else
6981b3e38ee4Smrg		build_libtool_libs=no
6982b3e38ee4Smrg	      fi
6983b3e38ee4Smrg	    fi
6984b3e38ee4Smrg	  else
6985b3e38ee4Smrg	    deplibs="$dir/$old_library $deplibs"
6986b3e38ee4Smrg	    link_static=yes
6987b3e38ee4Smrg	  fi
6988b3e38ee4Smrg	fi # link shared/static library?
6989b3e38ee4Smrg
6990b3e38ee4Smrg	if test "$linkmode" = lib; then
6991b3e38ee4Smrg	  if test -n "$dependency_libs" &&
6992b3e38ee4Smrg	     { test "$hardcode_into_libs" != yes ||
6993b3e38ee4Smrg	       test "$build_old_libs" = yes ||
6994b3e38ee4Smrg	       test "$link_static" = yes; }; then
6995b3e38ee4Smrg	    # Extract -R from dependency_libs
6996b3e38ee4Smrg	    temp_deplibs=
6997b3e38ee4Smrg	    for libdir in $dependency_libs; do
6998b3e38ee4Smrg	      case $libdir in
6999b3e38ee4Smrg	      -R*) func_stripname '-R' '' "$libdir"
7000b3e38ee4Smrg	           temp_xrpath=$func_stripname_result
7001b3e38ee4Smrg		   case " $xrpath " in
7002b3e38ee4Smrg		   *" $temp_xrpath "*) ;;
7003a73423d7Smrg		   *) func_append xrpath " $temp_xrpath";;
7004b3e38ee4Smrg		   esac;;
7005a73423d7Smrg	      *) func_append temp_deplibs " $libdir";;
7006b3e38ee4Smrg	      esac
7007b3e38ee4Smrg	    done
7008b3e38ee4Smrg	    dependency_libs="$temp_deplibs"
7009b3e38ee4Smrg	  fi
7010b3e38ee4Smrg
7011a73423d7Smrg	  func_append newlib_search_path " $absdir"
7012b3e38ee4Smrg	  # Link against this library
7013b3e38ee4Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014b3e38ee4Smrg	  # ... and its dependency_libs
7015b3e38ee4Smrg	  tmp_libs=
7016b3e38ee4Smrg	  for deplib in $dependency_libs; do
7017b3e38ee4Smrg	    newdependency_libs="$deplib $newdependency_libs"
7018a73423d7Smrg	    case $deplib in
7019a73423d7Smrg              -L*) func_stripname '-L' '' "$deplib"
7020a73423d7Smrg                   func_resolve_sysroot "$func_stripname_result";;
7021a73423d7Smrg              *) func_resolve_sysroot "$deplib" ;;
7022a73423d7Smrg            esac
7023a73423d7Smrg	    if $opt_preserve_dup_deps ; then
7024b3e38ee4Smrg	      case "$tmp_libs " in
7025a73423d7Smrg	      *" $func_resolve_sysroot_result "*)
7026a73423d7Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027b3e38ee4Smrg	      esac
7028b3e38ee4Smrg	    fi
7029a73423d7Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030b3e38ee4Smrg	  done
7031b3e38ee4Smrg
7032b3e38ee4Smrg	  if test "$link_all_deplibs" != no; then
7033b3e38ee4Smrg	    # Add the search paths of all dependency libraries
7034b3e38ee4Smrg	    for deplib in $dependency_libs; do
7035a73423d7Smrg	      path=
7036b3e38ee4Smrg	      case $deplib in
7037b3e38ee4Smrg	      -L*) path="$deplib" ;;
7038b3e38ee4Smrg	      *.la)
7039a73423d7Smrg	        func_resolve_sysroot "$deplib"
7040a73423d7Smrg	        deplib=$func_resolve_sysroot_result
7041b3e38ee4Smrg	        func_dirname "$deplib" "" "."
7042a73423d7Smrg		dir=$func_dirname_result
7043b3e38ee4Smrg		# We need an absolute path.
7044b3e38ee4Smrg		case $dir in
7045b3e38ee4Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046b3e38ee4Smrg		*)
7047b3e38ee4Smrg		  absdir=`cd "$dir" && pwd`
7048b3e38ee4Smrg		  if test -z "$absdir"; then
7049b3e38ee4Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7050b3e38ee4Smrg		    absdir="$dir"
7051b3e38ee4Smrg		  fi
7052b3e38ee4Smrg		  ;;
7053b3e38ee4Smrg		esac
7054b3e38ee4Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055b3e38ee4Smrg		case $host in
7056b3e38ee4Smrg		*-*-darwin*)
7057b3e38ee4Smrg		  depdepl=
7058b3e38ee4Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059b3e38ee4Smrg		  if test -n "$deplibrary_names" ; then
7060b3e38ee4Smrg		    for tmp in $deplibrary_names ; do
7061b3e38ee4Smrg		      depdepl=$tmp
7062b3e38ee4Smrg		    done
7063b3e38ee4Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7064b3e38ee4Smrg		      depdepl="$absdir/$objdir/$depdepl"
7065b3e38ee4Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066b3e38ee4Smrg                      if test -z "$darwin_install_name"; then
7067b3e38ee4Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068b3e38ee4Smrg                      fi
7069a73423d7Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
7070a73423d7Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071b3e38ee4Smrg		      path=
7072b3e38ee4Smrg		    fi
7073b3e38ee4Smrg		  fi
7074b3e38ee4Smrg		  ;;
7075b3e38ee4Smrg		*)
7076b3e38ee4Smrg		  path="-L$absdir/$objdir"
7077b3e38ee4Smrg		  ;;
7078b3e38ee4Smrg		esac
7079b3e38ee4Smrg		else
7080b3e38ee4Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081b3e38ee4Smrg		  test -z "$libdir" && \
7082b3e38ee4Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083b3e38ee4Smrg		  test "$absdir" != "$libdir" && \
7084b3e38ee4Smrg		    func_warning "\`$deplib' seems to be moved"
7085b3e38ee4Smrg
7086b3e38ee4Smrg		  path="-L$absdir"
7087b3e38ee4Smrg		fi
7088b3e38ee4Smrg		;;
7089b3e38ee4Smrg	      esac
7090b3e38ee4Smrg	      case " $deplibs " in
7091b3e38ee4Smrg	      *" $path "*) ;;
7092b3e38ee4Smrg	      *) deplibs="$path $deplibs" ;;
7093b3e38ee4Smrg	      esac
7094b3e38ee4Smrg	    done
7095b3e38ee4Smrg	  fi # link_all_deplibs != no
7096b3e38ee4Smrg	fi # linkmode = lib
7097b3e38ee4Smrg      done # for deplib in $libs
7098b3e38ee4Smrg      if test "$pass" = link; then
7099b3e38ee4Smrg	if test "$linkmode" = "prog"; then
7100b3e38ee4Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101b3e38ee4Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102b3e38ee4Smrg	else
7103a73423d7Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104b3e38ee4Smrg	fi
7105b3e38ee4Smrg      fi
7106b3e38ee4Smrg      dependency_libs="$newdependency_libs"
7107b3e38ee4Smrg      if test "$pass" = dlpreopen; then
7108b3e38ee4Smrg	# Link the dlpreopened libraries before other libraries
7109b3e38ee4Smrg	for deplib in $save_deplibs; do
7110b3e38ee4Smrg	  deplibs="$deplib $deplibs"
7111b3e38ee4Smrg	done
7112b3e38ee4Smrg      fi
7113b3e38ee4Smrg      if test "$pass" != dlopen; then
7114b3e38ee4Smrg	if test "$pass" != conv; then
7115b3e38ee4Smrg	  # Make sure lib_search_path contains only unique directories.
7116b3e38ee4Smrg	  lib_search_path=
7117b3e38ee4Smrg	  for dir in $newlib_search_path; do
7118b3e38ee4Smrg	    case "$lib_search_path " in
7119b3e38ee4Smrg	    *" $dir "*) ;;
7120a73423d7Smrg	    *) func_append lib_search_path " $dir" ;;
7121b3e38ee4Smrg	    esac
7122b3e38ee4Smrg	  done
7123b3e38ee4Smrg	  newlib_search_path=
7124b3e38ee4Smrg	fi
7125b3e38ee4Smrg
7126b3e38ee4Smrg	if test "$linkmode,$pass" != "prog,link"; then
7127b3e38ee4Smrg	  vars="deplibs"
7128b3e38ee4Smrg	else
7129b3e38ee4Smrg	  vars="compile_deplibs finalize_deplibs"
7130b3e38ee4Smrg	fi
7131b3e38ee4Smrg	for var in $vars dependency_libs; do
7132b3e38ee4Smrg	  # Add libraries to $var in reverse order
7133b3e38ee4Smrg	  eval tmp_libs=\"\$$var\"
7134b3e38ee4Smrg	  new_libs=
7135b3e38ee4Smrg	  for deplib in $tmp_libs; do
7136b3e38ee4Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7137b3e38ee4Smrg	    #        that some nasty dependency loop isn't accidentally
7138b3e38ee4Smrg	    #        broken:
7139b3e38ee4Smrg	    #new_libs="$deplib $new_libs"
7140b3e38ee4Smrg	    # Pragmatically, this seems to cause very few problems in
7141b3e38ee4Smrg	    # practice:
7142b3e38ee4Smrg	    case $deplib in
7143b3e38ee4Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7144b3e38ee4Smrg	    -R*) ;;
7145b3e38ee4Smrg	    *)
7146b3e38ee4Smrg	      # And here is the reason: when a library appears more
7147b3e38ee4Smrg	      # than once as an explicit dependence of a library, or
7148b3e38ee4Smrg	      # is implicitly linked in more than once by the
7149b3e38ee4Smrg	      # compiler, it is considered special, and multiple
7150b3e38ee4Smrg	      # occurrences thereof are not removed.  Compare this
7151b3e38ee4Smrg	      # with having the same library being listed as a
7152b3e38ee4Smrg	      # dependency of multiple other libraries: in this case,
7153b3e38ee4Smrg	      # we know (pedantically, we assume) the library does not
7154b3e38ee4Smrg	      # need to be listed more than once, so we keep only the
7155b3e38ee4Smrg	      # last copy.  This is not always right, but it is rare
7156b3e38ee4Smrg	      # enough that we require users that really mean to play
7157b3e38ee4Smrg	      # such unportable linking tricks to link the library
7158b3e38ee4Smrg	      # using -Wl,-lname, so that libtool does not consider it
7159b3e38ee4Smrg	      # for duplicate removal.
7160b3e38ee4Smrg	      case " $specialdeplibs " in
7161b3e38ee4Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162b3e38ee4Smrg	      *)
7163b3e38ee4Smrg		case " $new_libs " in
7164b3e38ee4Smrg		*" $deplib "*) ;;
7165b3e38ee4Smrg		*) new_libs="$deplib $new_libs" ;;
7166b3e38ee4Smrg		esac
7167b3e38ee4Smrg		;;
7168b3e38ee4Smrg	      esac
7169b3e38ee4Smrg	      ;;
7170b3e38ee4Smrg	    esac
7171b3e38ee4Smrg	  done
7172b3e38ee4Smrg	  tmp_libs=
7173b3e38ee4Smrg	  for deplib in $new_libs; do
7174b3e38ee4Smrg	    case $deplib in
7175b3e38ee4Smrg	    -L*)
7176b3e38ee4Smrg	      case " $tmp_libs " in
7177b3e38ee4Smrg	      *" $deplib "*) ;;
7178a73423d7Smrg	      *) func_append tmp_libs " $deplib" ;;
7179b3e38ee4Smrg	      esac
7180b3e38ee4Smrg	      ;;
7181a73423d7Smrg	    *) func_append tmp_libs " $deplib" ;;
7182b3e38ee4Smrg	    esac
7183b3e38ee4Smrg	  done
7184b3e38ee4Smrg	  eval $var=\"$tmp_libs\"
7185b3e38ee4Smrg	done # for var
7186b3e38ee4Smrg      fi
7187b3e38ee4Smrg      # Last step: remove runtime libs from dependency_libs
7188b3e38ee4Smrg      # (they stay in deplibs)
7189b3e38ee4Smrg      tmp_libs=
7190b3e38ee4Smrg      for i in $dependency_libs ; do
7191b3e38ee4Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192b3e38ee4Smrg	*" $i "*)
7193b3e38ee4Smrg	  i=""
7194b3e38ee4Smrg	  ;;
7195b3e38ee4Smrg	esac
7196b3e38ee4Smrg	if test -n "$i" ; then
7197a73423d7Smrg	  func_append tmp_libs " $i"
7198b3e38ee4Smrg	fi
7199b3e38ee4Smrg      done
7200b3e38ee4Smrg      dependency_libs=$tmp_libs
7201b3e38ee4Smrg    done # for pass
7202b3e38ee4Smrg    if test "$linkmode" = prog; then
7203b3e38ee4Smrg      dlfiles="$newdlfiles"
7204b3e38ee4Smrg    fi
7205b3e38ee4Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206b3e38ee4Smrg      dlprefiles="$newdlprefiles"
7207b3e38ee4Smrg    fi
7208b3e38ee4Smrg
7209b3e38ee4Smrg    case $linkmode in
7210b3e38ee4Smrg    oldlib)
7211b3e38ee4Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212b3e38ee4Smrg	func_warning "\`-dlopen' is ignored for archives"
7213b3e38ee4Smrg      fi
7214b3e38ee4Smrg
7215b3e38ee4Smrg      case " $deplibs" in
7216b3e38ee4Smrg      *\ -l* | *\ -L*)
7217b3e38ee4Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218b3e38ee4Smrg      esac
7219b3e38ee4Smrg
7220b3e38ee4Smrg      test -n "$rpath" && \
7221b3e38ee4Smrg	func_warning "\`-rpath' is ignored for archives"
7222b3e38ee4Smrg
7223b3e38ee4Smrg      test -n "$xrpath" && \
7224b3e38ee4Smrg	func_warning "\`-R' is ignored for archives"
7225b3e38ee4Smrg
7226b3e38ee4Smrg      test -n "$vinfo" && \
7227b3e38ee4Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228b3e38ee4Smrg
7229b3e38ee4Smrg      test -n "$release" && \
7230b3e38ee4Smrg	func_warning "\`-release' is ignored for archives"
7231b3e38ee4Smrg
7232b3e38ee4Smrg      test -n "$export_symbols$export_symbols_regex" && \
7233b3e38ee4Smrg	func_warning "\`-export-symbols' is ignored for archives"
7234b3e38ee4Smrg
7235b3e38ee4Smrg      # Now set the variables for building old libraries.
7236b3e38ee4Smrg      build_libtool_libs=no
7237b3e38ee4Smrg      oldlibs="$output"
7238a73423d7Smrg      func_append objs "$old_deplibs"
7239b3e38ee4Smrg      ;;
7240b3e38ee4Smrg
7241b3e38ee4Smrg    lib)
7242b3e38ee4Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243b3e38ee4Smrg      case $outputname in
7244b3e38ee4Smrg      lib*)
7245b3e38ee4Smrg	func_stripname 'lib' '.la' "$outputname"
7246b3e38ee4Smrg	name=$func_stripname_result
7247b3e38ee4Smrg	eval shared_ext=\"$shrext_cmds\"
7248b3e38ee4Smrg	eval libname=\"$libname_spec\"
7249b3e38ee4Smrg	;;
7250b3e38ee4Smrg      *)
7251b3e38ee4Smrg	test "$module" = no && \
7252b3e38ee4Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253b3e38ee4Smrg
7254b3e38ee4Smrg	if test "$need_lib_prefix" != no; then
7255b3e38ee4Smrg	  # Add the "lib" prefix for modules if required
7256b3e38ee4Smrg	  func_stripname '' '.la' "$outputname"
7257b3e38ee4Smrg	  name=$func_stripname_result
7258b3e38ee4Smrg	  eval shared_ext=\"$shrext_cmds\"
7259b3e38ee4Smrg	  eval libname=\"$libname_spec\"
7260b3e38ee4Smrg	else
7261b3e38ee4Smrg	  func_stripname '' '.la' "$outputname"
7262b3e38ee4Smrg	  libname=$func_stripname_result
7263b3e38ee4Smrg	fi
7264b3e38ee4Smrg	;;
7265b3e38ee4Smrg      esac
7266b3e38ee4Smrg
7267b3e38ee4Smrg      if test -n "$objs"; then
7268b3e38ee4Smrg	if test "$deplibs_check_method" != pass_all; then
7269b3e38ee4Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270b3e38ee4Smrg	else
7271a73423d7Smrg	  echo
7272b3e38ee4Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273b3e38ee4Smrg	  $ECHO "*** objects $objs is not portable!"
7274a73423d7Smrg	  func_append libobjs " $objs"
7275b3e38ee4Smrg	fi
7276b3e38ee4Smrg      fi
7277b3e38ee4Smrg
7278b3e38ee4Smrg      test "$dlself" != no && \
7279b3e38ee4Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280b3e38ee4Smrg
7281b3e38ee4Smrg      set dummy $rpath
7282b3e38ee4Smrg      shift
7283b3e38ee4Smrg      test "$#" -gt 1 && \
7284b3e38ee4Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285b3e38ee4Smrg
7286b3e38ee4Smrg      install_libdir="$1"
7287b3e38ee4Smrg
7288b3e38ee4Smrg      oldlibs=
7289b3e38ee4Smrg      if test -z "$rpath"; then
7290b3e38ee4Smrg	if test "$build_libtool_libs" = yes; then
7291b3e38ee4Smrg	  # Building a libtool convenience library.
7292b3e38ee4Smrg	  # Some compilers have problems with a `.al' extension so
7293b3e38ee4Smrg	  # convenience libraries should have the same extension an
7294b3e38ee4Smrg	  # archive normally would.
7295b3e38ee4Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296b3e38ee4Smrg	  build_libtool_libs=convenience
7297b3e38ee4Smrg	  build_old_libs=yes
7298b3e38ee4Smrg	fi
7299b3e38ee4Smrg
7300b3e38ee4Smrg	test -n "$vinfo" && \
7301b3e38ee4Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302b3e38ee4Smrg
7303b3e38ee4Smrg	test -n "$release" && \
7304b3e38ee4Smrg	  func_warning "\`-release' is ignored for convenience libraries"
7305b3e38ee4Smrg      else
7306b3e38ee4Smrg
7307b3e38ee4Smrg	# Parse the version information argument.
7308b3e38ee4Smrg	save_ifs="$IFS"; IFS=':'
7309b3e38ee4Smrg	set dummy $vinfo 0 0 0
7310b3e38ee4Smrg	shift
7311b3e38ee4Smrg	IFS="$save_ifs"
7312b3e38ee4Smrg
7313b3e38ee4Smrg	test -n "$7" && \
7314b3e38ee4Smrg	  func_fatal_help "too many parameters to \`-version-info'"
7315b3e38ee4Smrg
7316b3e38ee4Smrg	# convert absolute version numbers to libtool ages
7317b3e38ee4Smrg	# this retains compatibility with .la files and attempts
7318b3e38ee4Smrg	# to make the code below a bit more comprehensible
7319b3e38ee4Smrg
7320b3e38ee4Smrg	case $vinfo_number in
7321b3e38ee4Smrg	yes)
7322b3e38ee4Smrg	  number_major="$1"
7323b3e38ee4Smrg	  number_minor="$2"
7324b3e38ee4Smrg	  number_revision="$3"
7325b3e38ee4Smrg	  #
7326b3e38ee4Smrg	  # There are really only two kinds -- those that
7327b3e38ee4Smrg	  # use the current revision as the major version
7328b3e38ee4Smrg	  # and those that subtract age and use age as
7329b3e38ee4Smrg	  # a minor version.  But, then there is irix
7330b3e38ee4Smrg	  # which has an extra 1 added just for fun
7331b3e38ee4Smrg	  #
7332b3e38ee4Smrg	  case $version_type in
7333a73423d7Smrg	  # correct linux to gnu/linux during the next big refactor
7334b3e38ee4Smrg	  darwin|linux|osf|windows|none)
7335b3e38ee4Smrg	    func_arith $number_major + $number_minor
7336b3e38ee4Smrg	    current=$func_arith_result
7337b3e38ee4Smrg	    age="$number_minor"
7338b3e38ee4Smrg	    revision="$number_revision"
7339b3e38ee4Smrg	    ;;
7340a73423d7Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7341b3e38ee4Smrg	    current="$number_major"
7342b3e38ee4Smrg	    revision="$number_minor"
7343b3e38ee4Smrg	    age="0"
7344b3e38ee4Smrg	    ;;
7345b3e38ee4Smrg	  irix|nonstopux)
7346b3e38ee4Smrg	    func_arith $number_major + $number_minor
7347b3e38ee4Smrg	    current=$func_arith_result
7348b3e38ee4Smrg	    age="$number_minor"
7349b3e38ee4Smrg	    revision="$number_minor"
7350b3e38ee4Smrg	    lt_irix_increment=no
7351b3e38ee4Smrg	    ;;
7352b3e38ee4Smrg	  esac
7353b3e38ee4Smrg	  ;;
7354b3e38ee4Smrg	no)
7355b3e38ee4Smrg	  current="$1"
7356b3e38ee4Smrg	  revision="$2"
7357b3e38ee4Smrg	  age="$3"
7358b3e38ee4Smrg	  ;;
7359b3e38ee4Smrg	esac
7360b3e38ee4Smrg
7361b3e38ee4Smrg	# Check that each of the things are valid numbers.
7362b3e38ee4Smrg	case $current in
7363b3e38ee4Smrg	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]) ;;
7364b3e38ee4Smrg	*)
7365b3e38ee4Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366b3e38ee4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367b3e38ee4Smrg	  ;;
7368b3e38ee4Smrg	esac
7369b3e38ee4Smrg
7370b3e38ee4Smrg	case $revision in
7371b3e38ee4Smrg	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]) ;;
7372b3e38ee4Smrg	*)
7373b3e38ee4Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374b3e38ee4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375b3e38ee4Smrg	  ;;
7376b3e38ee4Smrg	esac
7377b3e38ee4Smrg
7378b3e38ee4Smrg	case $age in
7379b3e38ee4Smrg	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]) ;;
7380b3e38ee4Smrg	*)
7381b3e38ee4Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
7382b3e38ee4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383b3e38ee4Smrg	  ;;
7384b3e38ee4Smrg	esac
7385b3e38ee4Smrg
7386b3e38ee4Smrg	if test "$age" -gt "$current"; then
7387b3e38ee4Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388b3e38ee4Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389b3e38ee4Smrg	fi
7390b3e38ee4Smrg
7391b3e38ee4Smrg	# Calculate the version variables.
7392b3e38ee4Smrg	major=
7393b3e38ee4Smrg	versuffix=
7394b3e38ee4Smrg	verstring=
7395b3e38ee4Smrg	case $version_type in
7396b3e38ee4Smrg	none) ;;
7397b3e38ee4Smrg
7398b3e38ee4Smrg	darwin)
7399b3e38ee4Smrg	  # Like Linux, but with the current version available in
7400b3e38ee4Smrg	  # verstring for coding it into the library header
7401b3e38ee4Smrg	  func_arith $current - $age
7402b3e38ee4Smrg	  major=.$func_arith_result
7403b3e38ee4Smrg	  versuffix="$major.$age.$revision"
7404b3e38ee4Smrg	  # Darwin ld doesn't like 0 for these options...
7405b3e38ee4Smrg	  func_arith $current + 1
7406b3e38ee4Smrg	  minor_current=$func_arith_result
7407b3e38ee4Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408b3e38ee4Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409b3e38ee4Smrg	  ;;
7410b3e38ee4Smrg
7411b3e38ee4Smrg	freebsd-aout)
7412b3e38ee4Smrg	  major=".$current"
7413b3e38ee4Smrg	  versuffix=".$current.$revision";
7414b3e38ee4Smrg	  ;;
7415b3e38ee4Smrg
7416b3e38ee4Smrg	freebsd-elf)
7417b3e38ee4Smrg	  major=".$current"
7418b3e38ee4Smrg	  versuffix=".$current"
7419b3e38ee4Smrg	  ;;
7420b3e38ee4Smrg
7421b3e38ee4Smrg	irix | nonstopux)
7422b3e38ee4Smrg	  if test "X$lt_irix_increment" = "Xno"; then
7423b3e38ee4Smrg	    func_arith $current - $age
7424b3e38ee4Smrg	  else
7425b3e38ee4Smrg	    func_arith $current - $age + 1
7426b3e38ee4Smrg	  fi
7427b3e38ee4Smrg	  major=$func_arith_result
7428b3e38ee4Smrg
7429b3e38ee4Smrg	  case $version_type in
7430b3e38ee4Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7431b3e38ee4Smrg	    *)         verstring_prefix=sgi ;;
7432b3e38ee4Smrg	  esac
7433b3e38ee4Smrg	  verstring="$verstring_prefix$major.$revision"
7434b3e38ee4Smrg
7435b3e38ee4Smrg	  # Add in all the interfaces that we are compatible with.
7436b3e38ee4Smrg	  loop=$revision
7437b3e38ee4Smrg	  while test "$loop" -ne 0; do
7438b3e38ee4Smrg	    func_arith $revision - $loop
7439b3e38ee4Smrg	    iface=$func_arith_result
7440b3e38ee4Smrg	    func_arith $loop - 1
7441b3e38ee4Smrg	    loop=$func_arith_result
7442b3e38ee4Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443b3e38ee4Smrg	  done
7444b3e38ee4Smrg
7445b3e38ee4Smrg	  # Before this point, $major must not contain `.'.
7446b3e38ee4Smrg	  major=.$major
7447b3e38ee4Smrg	  versuffix="$major.$revision"
7448b3e38ee4Smrg	  ;;
7449b3e38ee4Smrg
7450a73423d7Smrg	linux) # correct to gnu/linux during the next big refactor
7451b3e38ee4Smrg	  func_arith $current - $age
7452b3e38ee4Smrg	  major=.$func_arith_result
7453b3e38ee4Smrg	  versuffix="$major.$age.$revision"
7454b3e38ee4Smrg	  ;;
7455b3e38ee4Smrg
7456b3e38ee4Smrg	osf)
7457b3e38ee4Smrg	  func_arith $current - $age
7458b3e38ee4Smrg	  major=.$func_arith_result
7459b3e38ee4Smrg	  versuffix=".$current.$age.$revision"
7460b3e38ee4Smrg	  verstring="$current.$age.$revision"
7461b3e38ee4Smrg
7462b3e38ee4Smrg	  # Add in all the interfaces that we are compatible with.
7463b3e38ee4Smrg	  loop=$age
7464b3e38ee4Smrg	  while test "$loop" -ne 0; do
7465b3e38ee4Smrg	    func_arith $current - $loop
7466b3e38ee4Smrg	    iface=$func_arith_result
7467b3e38ee4Smrg	    func_arith $loop - 1
7468b3e38ee4Smrg	    loop=$func_arith_result
7469b3e38ee4Smrg	    verstring="$verstring:${iface}.0"
7470b3e38ee4Smrg	  done
7471b3e38ee4Smrg
7472b3e38ee4Smrg	  # Make executables depend on our current version.
7473a73423d7Smrg	  func_append verstring ":${current}.0"
7474b3e38ee4Smrg	  ;;
7475b3e38ee4Smrg
7476b3e38ee4Smrg	qnx)
7477b3e38ee4Smrg	  major=".$current"
7478b3e38ee4Smrg	  versuffix=".$current"
7479b3e38ee4Smrg	  ;;
7480b3e38ee4Smrg
7481b3e38ee4Smrg	sunos)
7482b3e38ee4Smrg	  major=".$current"
7483b3e38ee4Smrg	  versuffix=".$current.$revision"
7484b3e38ee4Smrg	  ;;
7485b3e38ee4Smrg
7486b3e38ee4Smrg	windows)
7487b3e38ee4Smrg	  # Use '-' rather than '.', since we only want one
7488b3e38ee4Smrg	  # extension on DOS 8.3 filesystems.
7489b3e38ee4Smrg	  func_arith $current - $age
7490b3e38ee4Smrg	  major=$func_arith_result
7491b3e38ee4Smrg	  versuffix="-$major"
7492b3e38ee4Smrg	  ;;
7493b3e38ee4Smrg
7494b3e38ee4Smrg	*)
7495b3e38ee4Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496b3e38ee4Smrg	  ;;
7497b3e38ee4Smrg	esac
7498b3e38ee4Smrg
7499b3e38ee4Smrg	# Clear the version info if we defaulted, and they specified a release.
7500b3e38ee4Smrg	if test -z "$vinfo" && test -n "$release"; then
7501b3e38ee4Smrg	  major=
7502b3e38ee4Smrg	  case $version_type in
7503b3e38ee4Smrg	  darwin)
7504b3e38ee4Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505b3e38ee4Smrg	    # problems, so we reset it completely
7506b3e38ee4Smrg	    verstring=
7507b3e38ee4Smrg	    ;;
7508b3e38ee4Smrg	  *)
7509b3e38ee4Smrg	    verstring="0.0"
7510b3e38ee4Smrg	    ;;
7511b3e38ee4Smrg	  esac
7512b3e38ee4Smrg	  if test "$need_version" = no; then
7513b3e38ee4Smrg	    versuffix=
7514b3e38ee4Smrg	  else
7515b3e38ee4Smrg	    versuffix=".0.0"
7516b3e38ee4Smrg	  fi
7517b3e38ee4Smrg	fi
7518b3e38ee4Smrg
7519b3e38ee4Smrg	# Remove version info from name if versioning should be avoided
7520b3e38ee4Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521b3e38ee4Smrg	  major=
7522b3e38ee4Smrg	  versuffix=
7523b3e38ee4Smrg	  verstring=""
7524b3e38ee4Smrg	fi
7525b3e38ee4Smrg
7526b3e38ee4Smrg	# Check to see if the archive will have undefined symbols.
7527b3e38ee4Smrg	if test "$allow_undefined" = yes; then
7528b3e38ee4Smrg	  if test "$allow_undefined_flag" = unsupported; then
7529b3e38ee4Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7530b3e38ee4Smrg	    build_libtool_libs=no
7531b3e38ee4Smrg	    build_old_libs=yes
7532b3e38ee4Smrg	  fi
7533b3e38ee4Smrg	else
7534b3e38ee4Smrg	  # Don't allow undefined symbols.
7535b3e38ee4Smrg	  allow_undefined_flag="$no_undefined_flag"
7536b3e38ee4Smrg	fi
7537b3e38ee4Smrg
7538b3e38ee4Smrg      fi
7539b3e38ee4Smrg
7540b3e38ee4Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
7541a73423d7Smrg      func_append libobjs " $symfileobj"
7542b3e38ee4Smrg      test "X$libobjs" = "X " && libobjs=
7543b3e38ee4Smrg
7544a73423d7Smrg      if test "$opt_mode" != relink; then
7545b3e38ee4Smrg	# Remove our outputs, but don't remove object files since they
7546b3e38ee4Smrg	# may have been created when compiling PIC objects.
7547b3e38ee4Smrg	removelist=
7548b3e38ee4Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549b3e38ee4Smrg	for p in $tempremovelist; do
7550b3e38ee4Smrg	  case $p in
7551b3e38ee4Smrg	    *.$objext | *.gcno)
7552b3e38ee4Smrg	       ;;
7553b3e38ee4Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554b3e38ee4Smrg	       if test "X$precious_files_regex" != "X"; then
7555b3e38ee4Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556b3e38ee4Smrg		 then
7557b3e38ee4Smrg		   continue
7558b3e38ee4Smrg		 fi
7559b3e38ee4Smrg	       fi
7560a73423d7Smrg	       func_append removelist " $p"
7561b3e38ee4Smrg	       ;;
7562b3e38ee4Smrg	    *) ;;
7563b3e38ee4Smrg	  esac
7564b3e38ee4Smrg	done
7565b3e38ee4Smrg	test -n "$removelist" && \
7566b3e38ee4Smrg	  func_show_eval "${RM}r \$removelist"
7567b3e38ee4Smrg      fi
7568b3e38ee4Smrg
7569b3e38ee4Smrg      # Now set the variables for building old libraries.
7570b3e38ee4Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7571a73423d7Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572b3e38ee4Smrg
7573b3e38ee4Smrg	# Transform .lo files to .o files.
7574a73423d7Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575b3e38ee4Smrg      fi
7576b3e38ee4Smrg
7577b3e38ee4Smrg      # Eliminate all temporary directories.
7578b3e38ee4Smrg      #for path in $notinst_path; do
7579a73423d7Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7580a73423d7Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7581a73423d7Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582b3e38ee4Smrg      #done
7583b3e38ee4Smrg
7584b3e38ee4Smrg      if test -n "$xrpath"; then
7585b3e38ee4Smrg	# If the user specified any rpath flags, then add them.
7586b3e38ee4Smrg	temp_xrpath=
7587b3e38ee4Smrg	for libdir in $xrpath; do
7588a73423d7Smrg	  func_replace_sysroot "$libdir"
7589a73423d7Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590b3e38ee4Smrg	  case "$finalize_rpath " in
7591b3e38ee4Smrg	  *" $libdir "*) ;;
7592a73423d7Smrg	  *) func_append finalize_rpath " $libdir" ;;
7593b3e38ee4Smrg	  esac
7594b3e38ee4Smrg	done
7595b3e38ee4Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596b3e38ee4Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597b3e38ee4Smrg	fi
7598b3e38ee4Smrg      fi
7599b3e38ee4Smrg
7600b3e38ee4Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601b3e38ee4Smrg      old_dlfiles="$dlfiles"
7602b3e38ee4Smrg      dlfiles=
7603b3e38ee4Smrg      for lib in $old_dlfiles; do
7604b3e38ee4Smrg	case " $dlprefiles $dlfiles " in
7605b3e38ee4Smrg	*" $lib "*) ;;
7606a73423d7Smrg	*) func_append dlfiles " $lib" ;;
7607b3e38ee4Smrg	esac
7608b3e38ee4Smrg      done
7609b3e38ee4Smrg
7610b3e38ee4Smrg      # Make sure dlprefiles contains only unique files
7611b3e38ee4Smrg      old_dlprefiles="$dlprefiles"
7612b3e38ee4Smrg      dlprefiles=
7613b3e38ee4Smrg      for lib in $old_dlprefiles; do
7614b3e38ee4Smrg	case "$dlprefiles " in
7615b3e38ee4Smrg	*" $lib "*) ;;
7616a73423d7Smrg	*) func_append dlprefiles " $lib" ;;
7617b3e38ee4Smrg	esac
7618b3e38ee4Smrg      done
7619b3e38ee4Smrg
7620b3e38ee4Smrg      if test "$build_libtool_libs" = yes; then
7621b3e38ee4Smrg	if test -n "$rpath"; then
7622b3e38ee4Smrg	  case $host in
7623a73423d7Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624b3e38ee4Smrg	    # these systems don't actually have a c library (as such)!
7625b3e38ee4Smrg	    ;;
7626b3e38ee4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627b3e38ee4Smrg	    # Rhapsody C library is in the System framework
7628a73423d7Smrg	    func_append deplibs " System.ltframework"
7629b3e38ee4Smrg	    ;;
7630b3e38ee4Smrg	  *-*-netbsd*)
7631b3e38ee4Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7632b3e38ee4Smrg	    ;;
7633b3e38ee4Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634b3e38ee4Smrg	    # Do not include libc due to us having libc/libc_r.
7635b3e38ee4Smrg	    ;;
7636b3e38ee4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637b3e38ee4Smrg	    # Causes problems with __ctype
7638b3e38ee4Smrg	    ;;
7639b3e38ee4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640b3e38ee4Smrg	    # Compiler inserts libc in the correct place for threads to work
7641b3e38ee4Smrg	    ;;
7642b3e38ee4Smrg	  *)
7643b3e38ee4Smrg	    # Add libc to deplibs on all other systems if necessary.
7644b3e38ee4Smrg	    if test "$build_libtool_need_lc" = "yes"; then
7645a73423d7Smrg	      func_append deplibs " -lc"
7646b3e38ee4Smrg	    fi
7647b3e38ee4Smrg	    ;;
7648b3e38ee4Smrg	  esac
7649b3e38ee4Smrg	fi
7650b3e38ee4Smrg
7651b3e38ee4Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7652b3e38ee4Smrg	name_save=$name
7653b3e38ee4Smrg	libname_save=$libname
7654b3e38ee4Smrg	release_save=$release
7655b3e38ee4Smrg	versuffix_save=$versuffix
7656b3e38ee4Smrg	major_save=$major
7657b3e38ee4Smrg	# I'm not sure if I'm treating the release correctly.  I think
7658b3e38ee4Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659b3e38ee4Smrg	# add it in twice.  Is that correct?
7660b3e38ee4Smrg	release=""
7661b3e38ee4Smrg	versuffix=""
7662b3e38ee4Smrg	major=""
7663b3e38ee4Smrg	newdeplibs=
7664b3e38ee4Smrg	droppeddeps=no
7665b3e38ee4Smrg	case $deplibs_check_method in
7666b3e38ee4Smrg	pass_all)
7667b3e38ee4Smrg	  # Don't check for shared/static.  Everything works.
7668b3e38ee4Smrg	  # This might be a little naive.  We might want to check
7669b3e38ee4Smrg	  # whether the library exists or not.  But this is on
7670b3e38ee4Smrg	  # osf3 & osf4 and I'm not really sure... Just
7671b3e38ee4Smrg	  # implementing what was already the behavior.
7672b3e38ee4Smrg	  newdeplibs=$deplibs
7673b3e38ee4Smrg	  ;;
7674b3e38ee4Smrg	test_compile)
7675b3e38ee4Smrg	  # This code stresses the "libraries are programs" paradigm to its
7676b3e38ee4Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677b3e38ee4Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7678b3e38ee4Smrg	  # whether they linked in statically or dynamically with ldd.
7679b3e38ee4Smrg	  $opt_dry_run || $RM conftest.c
7680b3e38ee4Smrg	  cat > conftest.c <<EOF
7681b3e38ee4Smrg	  int main() { return 0; }
7682b3e38ee4SmrgEOF
7683b3e38ee4Smrg	  $opt_dry_run || $RM conftest
7684b3e38ee4Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685b3e38ee4Smrg	    ldd_output=`ldd conftest`
7686b3e38ee4Smrg	    for i in $deplibs; do
7687b3e38ee4Smrg	      case $i in
7688b3e38ee4Smrg	      -l*)
7689b3e38ee4Smrg		func_stripname -l '' "$i"
7690b3e38ee4Smrg		name=$func_stripname_result
7691b3e38ee4Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692b3e38ee4Smrg		  case " $predeps $postdeps " in
7693b3e38ee4Smrg		  *" $i "*)
7694a73423d7Smrg		    func_append newdeplibs " $i"
7695b3e38ee4Smrg		    i=""
7696b3e38ee4Smrg		    ;;
7697b3e38ee4Smrg		  esac
7698b3e38ee4Smrg		fi
7699b3e38ee4Smrg		if test -n "$i" ; then
7700b3e38ee4Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701b3e38ee4Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702b3e38ee4Smrg		  set dummy $deplib_matches; shift
7703b3e38ee4Smrg		  deplib_match=$1
7704b3e38ee4Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7705a73423d7Smrg		    func_append newdeplibs " $i"
7706b3e38ee4Smrg		  else
7707b3e38ee4Smrg		    droppeddeps=yes
7708a73423d7Smrg		    echo
7709b3e38ee4Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7710a73423d7Smrg		    echo "*** I have the capability to make that library automatically link in when"
7711a73423d7Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
7712a73423d7Smrg		    echo "*** shared version of the library, which I believe you do not have"
7713a73423d7Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
7714a73423d7Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715b3e38ee4Smrg		  fi
7716b3e38ee4Smrg		fi
7717b3e38ee4Smrg		;;
7718b3e38ee4Smrg	      *)
7719a73423d7Smrg		func_append newdeplibs " $i"
7720b3e38ee4Smrg		;;
7721b3e38ee4Smrg	      esac
7722b3e38ee4Smrg	    done
7723b3e38ee4Smrg	  else
7724b3e38ee4Smrg	    # Error occurred in the first compile.  Let's try to salvage
7725b3e38ee4Smrg	    # the situation: Compile a separate program for each library.
7726b3e38ee4Smrg	    for i in $deplibs; do
7727b3e38ee4Smrg	      case $i in
7728b3e38ee4Smrg	      -l*)
7729b3e38ee4Smrg		func_stripname -l '' "$i"
7730b3e38ee4Smrg		name=$func_stripname_result
7731b3e38ee4Smrg		$opt_dry_run || $RM conftest
7732b3e38ee4Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733b3e38ee4Smrg		  ldd_output=`ldd conftest`
7734b3e38ee4Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735b3e38ee4Smrg		    case " $predeps $postdeps " in
7736b3e38ee4Smrg		    *" $i "*)
7737a73423d7Smrg		      func_append newdeplibs " $i"
7738b3e38ee4Smrg		      i=""
7739b3e38ee4Smrg		      ;;
7740b3e38ee4Smrg		    esac
7741b3e38ee4Smrg		  fi
7742b3e38ee4Smrg		  if test -n "$i" ; then
7743b3e38ee4Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744b3e38ee4Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745b3e38ee4Smrg		    set dummy $deplib_matches; shift
7746b3e38ee4Smrg		    deplib_match=$1
7747b3e38ee4Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7748a73423d7Smrg		      func_append newdeplibs " $i"
7749b3e38ee4Smrg		    else
7750b3e38ee4Smrg		      droppeddeps=yes
7751a73423d7Smrg		      echo
7752b3e38ee4Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7753a73423d7Smrg		      echo "*** I have the capability to make that library automatically link in when"
7754a73423d7Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
7755a73423d7Smrg		      echo "*** shared version of the library, which you do not appear to have"
7756a73423d7Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
7757a73423d7Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758b3e38ee4Smrg		    fi
7759b3e38ee4Smrg		  fi
7760b3e38ee4Smrg		else
7761b3e38ee4Smrg		  droppeddeps=yes
7762a73423d7Smrg		  echo
7763b3e38ee4Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7764a73423d7Smrg		  echo "*** make it link in!  You will probably need to install it or some"
7765a73423d7Smrg		  echo "*** library that it depends on before this library will be fully"
7766a73423d7Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7767b3e38ee4Smrg		fi
7768b3e38ee4Smrg		;;
7769b3e38ee4Smrg	      *)
7770a73423d7Smrg		func_append newdeplibs " $i"
7771b3e38ee4Smrg		;;
7772b3e38ee4Smrg	      esac
7773b3e38ee4Smrg	    done
7774b3e38ee4Smrg	  fi
7775b3e38ee4Smrg	  ;;
7776b3e38ee4Smrg	file_magic*)
7777b3e38ee4Smrg	  set dummy $deplibs_check_method; shift
7778b3e38ee4Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779b3e38ee4Smrg	  for a_deplib in $deplibs; do
7780b3e38ee4Smrg	    case $a_deplib in
7781b3e38ee4Smrg	    -l*)
7782b3e38ee4Smrg	      func_stripname -l '' "$a_deplib"
7783b3e38ee4Smrg	      name=$func_stripname_result
7784b3e38ee4Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785b3e38ee4Smrg		case " $predeps $postdeps " in
7786b3e38ee4Smrg		*" $a_deplib "*)
7787a73423d7Smrg		  func_append newdeplibs " $a_deplib"
7788b3e38ee4Smrg		  a_deplib=""
7789b3e38ee4Smrg		  ;;
7790b3e38ee4Smrg		esac
7791b3e38ee4Smrg	      fi
7792b3e38ee4Smrg	      if test -n "$a_deplib" ; then
7793b3e38ee4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7794a73423d7Smrg		if test -n "$file_magic_glob"; then
7795a73423d7Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7796a73423d7Smrg		else
7797a73423d7Smrg		  libnameglob=$libname
7798a73423d7Smrg		fi
7799a73423d7Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800b3e38ee4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7801a73423d7Smrg		  if test "$want_nocaseglob" = yes; then
7802a73423d7Smrg		    shopt -s nocaseglob
7803a73423d7Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7804a73423d7Smrg		    $nocaseglob
7805a73423d7Smrg		  else
7806a73423d7Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7807a73423d7Smrg		  fi
7808b3e38ee4Smrg		  for potent_lib in $potential_libs; do
7809b3e38ee4Smrg		      # Follow soft links.
7810b3e38ee4Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811b3e38ee4Smrg			 $GREP " -> " >/dev/null; then
7812b3e38ee4Smrg			continue
7813b3e38ee4Smrg		      fi
7814b3e38ee4Smrg		      # The statement above tries to avoid entering an
7815b3e38ee4Smrg		      # endless loop below, in case of cyclic links.
7816b3e38ee4Smrg		      # We might still enter an endless loop, since a link
7817b3e38ee4Smrg		      # loop can be closed while we follow links,
7818b3e38ee4Smrg		      # but so what?
7819b3e38ee4Smrg		      potlib="$potent_lib"
7820b3e38ee4Smrg		      while test -h "$potlib" 2>/dev/null; do
7821b3e38ee4Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822b3e38ee4Smrg			case $potliblink in
7823b3e38ee4Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
7824a73423d7Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825b3e38ee4Smrg			esac
7826b3e38ee4Smrg		      done
7827b3e38ee4Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828b3e38ee4Smrg			 $SED -e 10q |
7829b3e38ee4Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
7830a73423d7Smrg			func_append newdeplibs " $a_deplib"
7831b3e38ee4Smrg			a_deplib=""
7832b3e38ee4Smrg			break 2
7833b3e38ee4Smrg		      fi
7834b3e38ee4Smrg		  done
7835b3e38ee4Smrg		done
7836b3e38ee4Smrg	      fi
7837b3e38ee4Smrg	      if test -n "$a_deplib" ; then
7838b3e38ee4Smrg		droppeddeps=yes
7839a73423d7Smrg		echo
7840b3e38ee4Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7841a73423d7Smrg		echo "*** I have the capability to make that library automatically link in when"
7842a73423d7Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7843a73423d7Smrg		echo "*** shared version of the library, which you do not appear to have"
7844a73423d7Smrg		echo "*** because I did check the linker path looking for a file starting"
7845b3e38ee4Smrg		if test -z "$potlib" ; then
7846b3e38ee4Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847b3e38ee4Smrg		else
7848b3e38ee4Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849b3e38ee4Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850b3e38ee4Smrg		fi
7851b3e38ee4Smrg	      fi
7852b3e38ee4Smrg	      ;;
7853b3e38ee4Smrg	    *)
7854b3e38ee4Smrg	      # Add a -L argument.
7855a73423d7Smrg	      func_append newdeplibs " $a_deplib"
7856b3e38ee4Smrg	      ;;
7857b3e38ee4Smrg	    esac
7858b3e38ee4Smrg	  done # Gone through all deplibs.
7859b3e38ee4Smrg	  ;;
7860b3e38ee4Smrg	match_pattern*)
7861b3e38ee4Smrg	  set dummy $deplibs_check_method; shift
7862b3e38ee4Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863b3e38ee4Smrg	  for a_deplib in $deplibs; do
7864b3e38ee4Smrg	    case $a_deplib in
7865b3e38ee4Smrg	    -l*)
7866b3e38ee4Smrg	      func_stripname -l '' "$a_deplib"
7867b3e38ee4Smrg	      name=$func_stripname_result
7868b3e38ee4Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869b3e38ee4Smrg		case " $predeps $postdeps " in
7870b3e38ee4Smrg		*" $a_deplib "*)
7871a73423d7Smrg		  func_append newdeplibs " $a_deplib"
7872b3e38ee4Smrg		  a_deplib=""
7873b3e38ee4Smrg		  ;;
7874b3e38ee4Smrg		esac
7875b3e38ee4Smrg	      fi
7876b3e38ee4Smrg	      if test -n "$a_deplib" ; then
7877b3e38ee4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878b3e38ee4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879b3e38ee4Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880b3e38ee4Smrg		  for potent_lib in $potential_libs; do
7881b3e38ee4Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
7882a73423d7Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883b3e38ee4Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
7884a73423d7Smrg		      func_append newdeplibs " $a_deplib"
7885b3e38ee4Smrg		      a_deplib=""
7886b3e38ee4Smrg		      break 2
7887b3e38ee4Smrg		    fi
7888b3e38ee4Smrg		  done
7889b3e38ee4Smrg		done
7890b3e38ee4Smrg	      fi
7891b3e38ee4Smrg	      if test -n "$a_deplib" ; then
7892b3e38ee4Smrg		droppeddeps=yes
7893a73423d7Smrg		echo
7894b3e38ee4Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7895a73423d7Smrg		echo "*** I have the capability to make that library automatically link in when"
7896a73423d7Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7897a73423d7Smrg		echo "*** shared version of the library, which you do not appear to have"
7898a73423d7Smrg		echo "*** because I did check the linker path looking for a file starting"
7899b3e38ee4Smrg		if test -z "$potlib" ; then
7900b3e38ee4Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901b3e38ee4Smrg		else
7902b3e38ee4Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903b3e38ee4Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904b3e38ee4Smrg		fi
7905b3e38ee4Smrg	      fi
7906b3e38ee4Smrg	      ;;
7907b3e38ee4Smrg	    *)
7908b3e38ee4Smrg	      # Add a -L argument.
7909a73423d7Smrg	      func_append newdeplibs " $a_deplib"
7910b3e38ee4Smrg	      ;;
7911b3e38ee4Smrg	    esac
7912b3e38ee4Smrg	  done # Gone through all deplibs.
7913b3e38ee4Smrg	  ;;
7914b3e38ee4Smrg	none | unknown | *)
7915b3e38ee4Smrg	  newdeplibs=""
7916a73423d7Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917b3e38ee4Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918b3e38ee4Smrg	    for i in $predeps $postdeps ; do
7919b3e38ee4Smrg	      # can't use Xsed below, because $i might contain '/'
7920a73423d7Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921b3e38ee4Smrg	    done
7922b3e38ee4Smrg	  fi
7923a73423d7Smrg	  case $tmp_deplibs in
7924a73423d7Smrg	  *[!\	\ ]*)
7925a73423d7Smrg	    echo
7926b3e38ee4Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
7927a73423d7Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928b3e38ee4Smrg	    else
7929a73423d7Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930b3e38ee4Smrg	    fi
7931a73423d7Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7932b3e38ee4Smrg	    droppeddeps=yes
7933a73423d7Smrg	    ;;
7934a73423d7Smrg	  esac
7935b3e38ee4Smrg	  ;;
7936b3e38ee4Smrg	esac
7937b3e38ee4Smrg	versuffix=$versuffix_save
7938b3e38ee4Smrg	major=$major_save
7939b3e38ee4Smrg	release=$release_save
7940b3e38ee4Smrg	libname=$libname_save
7941b3e38ee4Smrg	name=$name_save
7942b3e38ee4Smrg
7943b3e38ee4Smrg	case $host in
7944b3e38ee4Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7945b3e38ee4Smrg	  # On Rhapsody replace the C library with the System framework
7946a73423d7Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947b3e38ee4Smrg	  ;;
7948b3e38ee4Smrg	esac
7949b3e38ee4Smrg
7950b3e38ee4Smrg	if test "$droppeddeps" = yes; then
7951b3e38ee4Smrg	  if test "$module" = yes; then
7952a73423d7Smrg	    echo
7953a73423d7Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954b3e38ee4Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7955a73423d7Smrg	    echo "*** a static module, that should work as long as the dlopening"
7956a73423d7Smrg	    echo "*** application is linked with the -dlopen flag."
7957b3e38ee4Smrg	    if test -z "$global_symbol_pipe"; then
7958a73423d7Smrg	      echo
7959a73423d7Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
7960a73423d7Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7961a73423d7Smrg	      echo "*** not find such a program.  So, this module is probably useless."
7962a73423d7Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963b3e38ee4Smrg	    fi
7964b3e38ee4Smrg	    if test "$build_old_libs" = no; then
7965b3e38ee4Smrg	      oldlibs="$output_objdir/$libname.$libext"
7966b3e38ee4Smrg	      build_libtool_libs=module
7967b3e38ee4Smrg	      build_old_libs=yes
7968b3e38ee4Smrg	    else
7969b3e38ee4Smrg	      build_libtool_libs=no
7970b3e38ee4Smrg	    fi
7971b3e38ee4Smrg	  else
7972a73423d7Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
7973a73423d7Smrg	    echo "*** automatically added whenever a program is linked with this library"
7974a73423d7Smrg	    echo "*** or is declared to -dlopen it."
7975b3e38ee4Smrg
7976b3e38ee4Smrg	    if test "$allow_undefined" = no; then
7977a73423d7Smrg	      echo
7978a73423d7Smrg	      echo "*** Since this library must not contain undefined symbols,"
7979a73423d7Smrg	      echo "*** because either the platform does not support them or"
7980a73423d7Smrg	      echo "*** it was explicitly requested with -no-undefined,"
7981a73423d7Smrg	      echo "*** libtool will only create a static version of it."
7982b3e38ee4Smrg	      if test "$build_old_libs" = no; then
7983b3e38ee4Smrg		oldlibs="$output_objdir/$libname.$libext"
7984b3e38ee4Smrg		build_libtool_libs=module
7985b3e38ee4Smrg		build_old_libs=yes
7986b3e38ee4Smrg	      else
7987b3e38ee4Smrg		build_libtool_libs=no
7988b3e38ee4Smrg	      fi
7989b3e38ee4Smrg	    fi
7990b3e38ee4Smrg	  fi
7991b3e38ee4Smrg	fi
7992b3e38ee4Smrg	# Done checking deplibs!
7993b3e38ee4Smrg	deplibs=$newdeplibs
7994b3e38ee4Smrg      fi
7995b3e38ee4Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996b3e38ee4Smrg      case $host in
7997b3e38ee4Smrg	*-*-darwin*)
7998a73423d7Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7999a73423d7Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8000a73423d7Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001b3e38ee4Smrg	  ;;
8002b3e38ee4Smrg      esac
8003b3e38ee4Smrg
8004b3e38ee4Smrg      # move library search paths that coincide with paths to not yet
8005b3e38ee4Smrg      # installed libraries to the beginning of the library search list
8006b3e38ee4Smrg      new_libs=
8007b3e38ee4Smrg      for path in $notinst_path; do
8008b3e38ee4Smrg	case " $new_libs " in
8009b3e38ee4Smrg	*" -L$path/$objdir "*) ;;
8010b3e38ee4Smrg	*)
8011b3e38ee4Smrg	  case " $deplibs " in
8012b3e38ee4Smrg	  *" -L$path/$objdir "*)
8013a73423d7Smrg	    func_append new_libs " -L$path/$objdir" ;;
8014b3e38ee4Smrg	  esac
8015b3e38ee4Smrg	  ;;
8016b3e38ee4Smrg	esac
8017b3e38ee4Smrg      done
8018b3e38ee4Smrg      for deplib in $deplibs; do
8019b3e38ee4Smrg	case $deplib in
8020b3e38ee4Smrg	-L*)
8021b3e38ee4Smrg	  case " $new_libs " in
8022b3e38ee4Smrg	  *" $deplib "*) ;;
8023a73423d7Smrg	  *) func_append new_libs " $deplib" ;;
8024b3e38ee4Smrg	  esac
8025b3e38ee4Smrg	  ;;
8026a73423d7Smrg	*) func_append new_libs " $deplib" ;;
8027b3e38ee4Smrg	esac
8028b3e38ee4Smrg      done
8029b3e38ee4Smrg      deplibs="$new_libs"
8030b3e38ee4Smrg
8031b3e38ee4Smrg      # All the library-specific variables (install_libdir is set above).
8032b3e38ee4Smrg      library_names=
8033b3e38ee4Smrg      old_library=
8034b3e38ee4Smrg      dlname=
8035b3e38ee4Smrg
8036b3e38ee4Smrg      # Test again, we may have decided not to build it any more
8037b3e38ee4Smrg      if test "$build_libtool_libs" = yes; then
8038a73423d7Smrg	# Remove ${wl} instances when linking with ld.
8039a73423d7Smrg	# FIXME: should test the right _cmds variable.
8040a73423d7Smrg	case $archive_cmds in
8041a73423d7Smrg	  *\$LD\ *) wl= ;;
8042a73423d7Smrg        esac
8043b3e38ee4Smrg	if test "$hardcode_into_libs" = yes; then
8044b3e38ee4Smrg	  # Hardcode the library paths
8045b3e38ee4Smrg	  hardcode_libdirs=
8046b3e38ee4Smrg	  dep_rpath=
8047b3e38ee4Smrg	  rpath="$finalize_rpath"
8048a73423d7Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049b3e38ee4Smrg	  for libdir in $rpath; do
8050b3e38ee4Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051b3e38ee4Smrg	      if test -n "$hardcode_libdir_separator"; then
8052a73423d7Smrg		func_replace_sysroot "$libdir"
8053a73423d7Smrg		libdir=$func_replace_sysroot_result
8054b3e38ee4Smrg		if test -z "$hardcode_libdirs"; then
8055b3e38ee4Smrg		  hardcode_libdirs="$libdir"
8056b3e38ee4Smrg		else
8057b3e38ee4Smrg		  # Just accumulate the unique libdirs.
8058b3e38ee4Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059b3e38ee4Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060b3e38ee4Smrg		    ;;
8061b3e38ee4Smrg		  *)
8062a73423d7Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063b3e38ee4Smrg		    ;;
8064b3e38ee4Smrg		  esac
8065b3e38ee4Smrg		fi
8066b3e38ee4Smrg	      else
8067b3e38ee4Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
8068a73423d7Smrg		func_append dep_rpath " $flag"
8069b3e38ee4Smrg	      fi
8070b3e38ee4Smrg	    elif test -n "$runpath_var"; then
8071b3e38ee4Smrg	      case "$perm_rpath " in
8072b3e38ee4Smrg	      *" $libdir "*) ;;
8073a73423d7Smrg	      *) func_append perm_rpath " $libdir" ;;
8074b3e38ee4Smrg	      esac
8075b3e38ee4Smrg	    fi
8076b3e38ee4Smrg	  done
8077b3e38ee4Smrg	  # Substitute the hardcoded libdirs into the rpath.
8078b3e38ee4Smrg	  if test -n "$hardcode_libdir_separator" &&
8079b3e38ee4Smrg	     test -n "$hardcode_libdirs"; then
8080b3e38ee4Smrg	    libdir="$hardcode_libdirs"
8081a73423d7Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082b3e38ee4Smrg	  fi
8083b3e38ee4Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084b3e38ee4Smrg	    # We should set the runpath_var.
8085b3e38ee4Smrg	    rpath=
8086b3e38ee4Smrg	    for dir in $perm_rpath; do
8087a73423d7Smrg	      func_append rpath "$dir:"
8088b3e38ee4Smrg	    done
8089b3e38ee4Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090b3e38ee4Smrg	  fi
8091b3e38ee4Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092b3e38ee4Smrg	fi
809350806d53Smrg
8094b3e38ee4Smrg	shlibpath="$finalize_shlibpath"
8095a73423d7Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096b3e38ee4Smrg	if test -n "$shlibpath"; then
8097b3e38ee4Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098b3e38ee4Smrg	fi
809950806d53Smrg
8100b3e38ee4Smrg	# Get the real and link names of the library.
8101b3e38ee4Smrg	eval shared_ext=\"$shrext_cmds\"
8102b3e38ee4Smrg	eval library_names=\"$library_names_spec\"
8103b3e38ee4Smrg	set dummy $library_names
8104b3e38ee4Smrg	shift
8105b3e38ee4Smrg	realname="$1"
8106b3e38ee4Smrg	shift
810750806d53Smrg
8108b3e38ee4Smrg	if test -n "$soname_spec"; then
8109b3e38ee4Smrg	  eval soname=\"$soname_spec\"
8110b3e38ee4Smrg	else
8111b3e38ee4Smrg	  soname="$realname"
8112b3e38ee4Smrg	fi
8113b3e38ee4Smrg	if test -z "$dlname"; then
8114b3e38ee4Smrg	  dlname=$soname
8115b3e38ee4Smrg	fi
811650806d53Smrg
8117b3e38ee4Smrg	lib="$output_objdir/$realname"
8118b3e38ee4Smrg	linknames=
8119b3e38ee4Smrg	for link
8120b3e38ee4Smrg	do
8121a73423d7Smrg	  func_append linknames " $link"
8122b3e38ee4Smrg	done
812350806d53Smrg
8124b3e38ee4Smrg	# Use standard objects if they are pic
8125a73423d7Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126b3e38ee4Smrg	test "X$libobjs" = "X " && libobjs=
812750806d53Smrg
8128b3e38ee4Smrg	delfiles=
8129b3e38ee4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130b3e38ee4Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131b3e38ee4Smrg	  export_symbols="$output_objdir/$libname.uexp"
8132a73423d7Smrg	  func_append delfiles " $export_symbols"
8133b3e38ee4Smrg	fi
813450806d53Smrg
8135b3e38ee4Smrg	orig_export_symbols=
8136b3e38ee4Smrg	case $host_os in
8137b3e38ee4Smrg	cygwin* | mingw* | cegcc*)
8138b3e38ee4Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139b3e38ee4Smrg	    # exporting using user supplied symfile
8140b3e38ee4Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141b3e38ee4Smrg	      # and it's NOT already a .def file. Must figure out
8142b3e38ee4Smrg	      # which of the given symbols are data symbols and tag
8143b3e38ee4Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8144b3e38ee4Smrg	      # export_symbols gets reassigned inside the "prepare
8145b3e38ee4Smrg	      # the list of exported symbols" if statement, so the
8146b3e38ee4Smrg	      # include_expsyms logic still works.
8147b3e38ee4Smrg	      orig_export_symbols="$export_symbols"
8148b3e38ee4Smrg	      export_symbols=
8149b3e38ee4Smrg	      always_export_symbols=yes
8150b3e38ee4Smrg	    fi
8151b3e38ee4Smrg	  fi
8152b3e38ee4Smrg	  ;;
8153b3e38ee4Smrg	esac
815450806d53Smrg
8155b3e38ee4Smrg	# Prepare the list of exported symbols
8156b3e38ee4Smrg	if test -z "$export_symbols"; then
8157b3e38ee4Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158b3e38ee4Smrg	    func_verbose "generating symbol list for \`$libname.la'"
8159b3e38ee4Smrg	    export_symbols="$output_objdir/$libname.exp"
8160b3e38ee4Smrg	    $opt_dry_run || $RM $export_symbols
8161b3e38ee4Smrg	    cmds=$export_symbols_cmds
8162b3e38ee4Smrg	    save_ifs="$IFS"; IFS='~'
8163a73423d7Smrg	    for cmd1 in $cmds; do
8164b3e38ee4Smrg	      IFS="$save_ifs"
8165a73423d7Smrg	      # Take the normal branch if the nm_file_list_spec branch
8166a73423d7Smrg	      # doesn't work or if tool conversion is not needed.
8167a73423d7Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
8168a73423d7Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8169a73423d7Smrg		  try_normal_branch=yes
8170a73423d7Smrg		  eval cmd=\"$cmd1\"
8171a73423d7Smrg		  func_len " $cmd"
8172a73423d7Smrg		  len=$func_len_result
8173a73423d7Smrg		  ;;
8174a73423d7Smrg		*)
8175a73423d7Smrg		  try_normal_branch=no
8176a73423d7Smrg		  ;;
8177a73423d7Smrg	      esac
8178a73423d7Smrg	      if test "$try_normal_branch" = yes \
8179a73423d7Smrg		 && { test "$len" -lt "$max_cmd_len" \
8180a73423d7Smrg		      || test "$max_cmd_len" -le -1; }
8181a73423d7Smrg	      then
8182a73423d7Smrg		func_show_eval "$cmd" 'exit $?'
8183a73423d7Smrg		skipped_export=false
8184a73423d7Smrg	      elif test -n "$nm_file_list_spec"; then
8185a73423d7Smrg		func_basename "$output"
8186a73423d7Smrg		output_la=$func_basename_result
8187a73423d7Smrg		save_libobjs=$libobjs
8188a73423d7Smrg		save_output=$output
8189a73423d7Smrg		output=${output_objdir}/${output_la}.nm
8190a73423d7Smrg		func_to_tool_file "$output"
8191a73423d7Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
8192a73423d7Smrg		func_append delfiles " $output"
8193a73423d7Smrg		func_verbose "creating $NM input file list: $output"
8194a73423d7Smrg		for obj in $save_libobjs; do
8195a73423d7Smrg		  func_to_tool_file "$obj"
8196a73423d7Smrg		  $ECHO "$func_to_tool_file_result"
8197a73423d7Smrg		done > "$output"
8198a73423d7Smrg		eval cmd=\"$cmd1\"
8199b3e38ee4Smrg		func_show_eval "$cmd" 'exit $?'
8200a73423d7Smrg		output=$save_output
8201a73423d7Smrg		libobjs=$save_libobjs
8202b3e38ee4Smrg		skipped_export=false
8203b3e38ee4Smrg	      else
8204b3e38ee4Smrg		# The command line is too long to execute in one step.
8205b3e38ee4Smrg		func_verbose "using reloadable object file for export list..."
8206b3e38ee4Smrg		skipped_export=:
8207b3e38ee4Smrg		# Break out early, otherwise skipped_export may be
8208b3e38ee4Smrg		# set to false by a later but shorter cmd.
8209b3e38ee4Smrg		break
8210b3e38ee4Smrg	      fi
8211b3e38ee4Smrg	    done
8212b3e38ee4Smrg	    IFS="$save_ifs"
8213b3e38ee4Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214b3e38ee4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215b3e38ee4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216b3e38ee4Smrg	    fi
8217b3e38ee4Smrg	  fi
821850806d53Smrg	fi
821950806d53Smrg
8220b3e38ee4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221b3e38ee4Smrg	  tmp_export_symbols="$export_symbols"
8222b3e38ee4Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8223a73423d7Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224b3e38ee4Smrg	fi
822550806d53Smrg
8226b3e38ee4Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227b3e38ee4Smrg	  # The given exports_symbols file has to be filtered, so filter it.
8228b3e38ee4Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229b3e38ee4Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230b3e38ee4Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231b3e38ee4Smrg	  # though. Also, the filter scales superlinearly with the number of
8232b3e38ee4Smrg	  # global variables. join(1) would be nice here, but unfortunately
8233b3e38ee4Smrg	  # isn't a blessed tool.
8234b3e38ee4Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8235a73423d7Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236b3e38ee4Smrg	  export_symbols=$output_objdir/$libname.def
8237b3e38ee4Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238b3e38ee4Smrg	fi
823950806d53Smrg
8240b3e38ee4Smrg	tmp_deplibs=
8241b3e38ee4Smrg	for test_deplib in $deplibs; do
8242b3e38ee4Smrg	  case " $convenience " in
8243b3e38ee4Smrg	  *" $test_deplib "*) ;;
8244b3e38ee4Smrg	  *)
8245a73423d7Smrg	    func_append tmp_deplibs " $test_deplib"
8246b3e38ee4Smrg	    ;;
8247b3e38ee4Smrg	  esac
8248b3e38ee4Smrg	done
8249b3e38ee4Smrg	deplibs="$tmp_deplibs"
825050806d53Smrg
8251b3e38ee4Smrg	if test -n "$convenience"; then
8252b3e38ee4Smrg	  if test -n "$whole_archive_flag_spec" &&
8253b3e38ee4Smrg	    test "$compiler_needs_object" = yes &&
8254b3e38ee4Smrg	    test -z "$libobjs"; then
8255b3e38ee4Smrg	    # extract the archives, so we have objects to list.
8256b3e38ee4Smrg	    # TODO: could optimize this to just extract one archive.
8257b3e38ee4Smrg	    whole_archive_flag_spec=
8258b3e38ee4Smrg	  fi
8259b3e38ee4Smrg	  if test -n "$whole_archive_flag_spec"; then
8260b3e38ee4Smrg	    save_libobjs=$libobjs
8261b3e38ee4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262b3e38ee4Smrg	    test "X$libobjs" = "X " && libobjs=
8263b3e38ee4Smrg	  else
8264b3e38ee4Smrg	    gentop="$output_objdir/${outputname}x"
8265a73423d7Smrg	    func_append generated " $gentop"
826650806d53Smrg
8267b3e38ee4Smrg	    func_extract_archives $gentop $convenience
8268a73423d7Smrg	    func_append libobjs " $func_extract_archives_result"
8269b3e38ee4Smrg	    test "X$libobjs" = "X " && libobjs=
8270b3e38ee4Smrg	  fi
8271a18ebfb2Smrg	fi
827250806d53Smrg
8273b3e38ee4Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274b3e38ee4Smrg	  eval flag=\"$thread_safe_flag_spec\"
8275a73423d7Smrg	  func_append linker_flags " $flag"
8276a18ebfb2Smrg	fi
8277af1a9c97Smrg
8278b3e38ee4Smrg	# Make a backup of the uninstalled library when relinking
8279a73423d7Smrg	if test "$opt_mode" = relink; then
8280b3e38ee4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281b3e38ee4Smrg	fi
828250806d53Smrg
8283b3e38ee4Smrg	# Do each of the archive commands.
8284b3e38ee4Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285b3e38ee4Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286b3e38ee4Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8287b3e38ee4Smrg	    cmds=$module_expsym_cmds
8288b3e38ee4Smrg	  else
8289b3e38ee4Smrg	    eval test_cmds=\"$module_cmds\"
8290b3e38ee4Smrg	    cmds=$module_cmds
8291b3e38ee4Smrg	  fi
8292a18ebfb2Smrg	else
8293b3e38ee4Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294b3e38ee4Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295b3e38ee4Smrg	    cmds=$archive_expsym_cmds
8296b3e38ee4Smrg	  else
8297b3e38ee4Smrg	    eval test_cmds=\"$archive_cmds\"
8298b3e38ee4Smrg	    cmds=$archive_cmds
8299b3e38ee4Smrg	  fi
8300a18ebfb2Smrg	fi
830150806d53Smrg
8302b3e38ee4Smrg	if test "X$skipped_export" != "X:" &&
8303b3e38ee4Smrg	   func_len " $test_cmds" &&
8304b3e38ee4Smrg	   len=$func_len_result &&
8305b3e38ee4Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306b3e38ee4Smrg	  :
8307b3e38ee4Smrg	else
8308b3e38ee4Smrg	  # The command line is too long to link in one step, link piecewise
8309b3e38ee4Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310b3e38ee4Smrg	  # script.
831150806d53Smrg
8312b3e38ee4Smrg	  # Save the value of $output and $libobjs because we want to
8313b3e38ee4Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8314b3e38ee4Smrg	  # want to use save_libobjs as it was before
8315b3e38ee4Smrg	  # whole_archive_flag_spec was expanded, because we can't
8316b3e38ee4Smrg	  # assume the linker understands whole_archive_flag_spec.
8317b3e38ee4Smrg	  # This may have to be revisited, in case too many
8318b3e38ee4Smrg	  # convenience libraries get linked in and end up exceeding
8319b3e38ee4Smrg	  # the spec.
8320b3e38ee4Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321b3e38ee4Smrg	    save_libobjs=$libobjs
8322b3e38ee4Smrg	  fi
8323b3e38ee4Smrg	  save_output=$output
8324a73423d7Smrg	  func_basename "$output"
8325a73423d7Smrg	  output_la=$func_basename_result
832650806d53Smrg
8327b3e38ee4Smrg	  # Clear the reloadable object creation command queue and
8328b3e38ee4Smrg	  # initialize k to one.
8329b3e38ee4Smrg	  test_cmds=
8330b3e38ee4Smrg	  concat_cmds=
8331b3e38ee4Smrg	  objlist=
8332b3e38ee4Smrg	  last_robj=
8333b3e38ee4Smrg	  k=1
8334b3e38ee4Smrg
8335b3e38ee4Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336b3e38ee4Smrg	    output=${output_objdir}/${output_la}.lnkscript
8337b3e38ee4Smrg	    func_verbose "creating GNU ld script: $output"
8338a73423d7Smrg	    echo 'INPUT (' > $output
8339b3e38ee4Smrg	    for obj in $save_libobjs
8340a18ebfb2Smrg	    do
8341a73423d7Smrg	      func_to_tool_file "$obj"
8342a73423d7Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8343b3e38ee4Smrg	    done
8344a73423d7Smrg	    echo ')' >> $output
8345a73423d7Smrg	    func_append delfiles " $output"
8346a73423d7Smrg	    func_to_tool_file "$output"
8347a73423d7Smrg	    output=$func_to_tool_file_result
8348b3e38ee4Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349b3e38ee4Smrg	    output=${output_objdir}/${output_la}.lnk
8350b3e38ee4Smrg	    func_verbose "creating linker input file list: $output"
8351b3e38ee4Smrg	    : > $output
8352b3e38ee4Smrg	    set x $save_libobjs
8353b3e38ee4Smrg	    shift
8354b3e38ee4Smrg	    firstobj=
8355b3e38ee4Smrg	    if test "$compiler_needs_object" = yes; then
8356b3e38ee4Smrg	      firstobj="$1 "
8357b3e38ee4Smrg	      shift
8358b3e38ee4Smrg	    fi
8359b3e38ee4Smrg	    for obj
8360b3e38ee4Smrg	    do
8361a73423d7Smrg	      func_to_tool_file "$obj"
8362a73423d7Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8363b3e38ee4Smrg	    done
8364a73423d7Smrg	    func_append delfiles " $output"
8365a73423d7Smrg	    func_to_tool_file "$output"
8366a73423d7Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367b3e38ee4Smrg	  else
8368b3e38ee4Smrg	    if test -n "$save_libobjs"; then
8369b3e38ee4Smrg	      func_verbose "creating reloadable object files..."
8370b3e38ee4Smrg	      output=$output_objdir/$output_la-${k}.$objext
8371b3e38ee4Smrg	      eval test_cmds=\"$reload_cmds\"
8372b3e38ee4Smrg	      func_len " $test_cmds"
8373b3e38ee4Smrg	      len0=$func_len_result
8374b3e38ee4Smrg	      len=$len0
8375b3e38ee4Smrg
8376b3e38ee4Smrg	      # Loop over the list of objects to be linked.
8377b3e38ee4Smrg	      for obj in $save_libobjs
8378b3e38ee4Smrg	      do
8379b3e38ee4Smrg		func_len " $obj"
8380b3e38ee4Smrg		func_arith $len + $func_len_result
8381b3e38ee4Smrg		len=$func_arith_result
8382b3e38ee4Smrg		if test "X$objlist" = X ||
8383b3e38ee4Smrg		   test "$len" -lt "$max_cmd_len"; then
8384b3e38ee4Smrg		  func_append objlist " $obj"
8385b3e38ee4Smrg		else
8386b3e38ee4Smrg		  # The command $test_cmds is almost too long, add a
8387b3e38ee4Smrg		  # command to the queue.
8388b3e38ee4Smrg		  if test "$k" -eq 1 ; then
8389b3e38ee4Smrg		    # The first file doesn't have a previous command to add.
8390a73423d7Smrg		    reload_objs=$objlist
8391a73423d7Smrg		    eval concat_cmds=\"$reload_cmds\"
8392b3e38ee4Smrg		  else
8393b3e38ee4Smrg		    # All subsequent reloadable object files will link in
8394b3e38ee4Smrg		    # the last one created.
8395a73423d7Smrg		    reload_objs="$objlist $last_robj"
8396a73423d7Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397b3e38ee4Smrg		  fi
8398b3e38ee4Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399b3e38ee4Smrg		  func_arith $k + 1
8400b3e38ee4Smrg		  k=$func_arith_result
8401b3e38ee4Smrg		  output=$output_objdir/$output_la-${k}.$objext
8402a73423d7Smrg		  objlist=" $obj"
8403b3e38ee4Smrg		  func_len " $last_robj"
8404b3e38ee4Smrg		  func_arith $len0 + $func_len_result
8405b3e38ee4Smrg		  len=$func_arith_result
8406b3e38ee4Smrg		fi
8407b3e38ee4Smrg	      done
8408b3e38ee4Smrg	      # Handle the remaining objects by creating one last
8409b3e38ee4Smrg	      # reloadable object file.  All subsequent reloadable object
8410b3e38ee4Smrg	      # files will link in the last one created.
8411b3e38ee4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8412a73423d7Smrg	      reload_objs="$objlist $last_robj"
8413a73423d7Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414b3e38ee4Smrg	      if test -n "$last_robj"; then
8415b3e38ee4Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416b3e38ee4Smrg	      fi
8417a73423d7Smrg	      func_append delfiles " $output"
841850806d53Smrg
8419b3e38ee4Smrg	    else
8420b3e38ee4Smrg	      output=
8421b3e38ee4Smrg	    fi
842250806d53Smrg
8423b3e38ee4Smrg	    if ${skipped_export-false}; then
8424b3e38ee4Smrg	      func_verbose "generating symbol list for \`$libname.la'"
8425b3e38ee4Smrg	      export_symbols="$output_objdir/$libname.exp"
8426b3e38ee4Smrg	      $opt_dry_run || $RM $export_symbols
8427b3e38ee4Smrg	      libobjs=$output
8428b3e38ee4Smrg	      # Append the command to create the export file.
8429b3e38ee4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430b3e38ee4Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431b3e38ee4Smrg	      if test -n "$last_robj"; then
8432b3e38ee4Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433b3e38ee4Smrg	      fi
8434af1a9c97Smrg	    fi
843550806d53Smrg
8436b3e38ee4Smrg	    test -n "$save_libobjs" &&
8437b3e38ee4Smrg	      func_verbose "creating a temporary reloadable object file: $output"
843850806d53Smrg
8439b3e38ee4Smrg	    # Loop through the commands generated above and execute them.
8440b3e38ee4Smrg	    save_ifs="$IFS"; IFS='~'
8441b3e38ee4Smrg	    for cmd in $concat_cmds; do
8442b3e38ee4Smrg	      IFS="$save_ifs"
8443b3e38ee4Smrg	      $opt_silent || {
8444b3e38ee4Smrg		  func_quote_for_expand "$cmd"
8445b3e38ee4Smrg		  eval "func_echo $func_quote_for_expand_result"
8446b3e38ee4Smrg	      }
8447b3e38ee4Smrg	      $opt_dry_run || eval "$cmd" || {
8448b3e38ee4Smrg		lt_exit=$?
8449b3e38ee4Smrg
8450b3e38ee4Smrg		# Restore the uninstalled library and exit
8451a73423d7Smrg		if test "$opt_mode" = relink; then
8452b3e38ee4Smrg		  ( cd "$output_objdir" && \
8453b3e38ee4Smrg		    $RM "${realname}T" && \
8454b3e38ee4Smrg		    $MV "${realname}U" "$realname" )
8455b3e38ee4Smrg		fi
845650806d53Smrg
8457b3e38ee4Smrg		exit $lt_exit
8458b3e38ee4Smrg	      }
8459b3e38ee4Smrg	    done
8460b3e38ee4Smrg	    IFS="$save_ifs"
8461a18ebfb2Smrg
8462b3e38ee4Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463b3e38ee4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464b3e38ee4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
846550806d53Smrg	    fi
846650806d53Smrg	  fi
846750806d53Smrg
8468b3e38ee4Smrg          if ${skipped_export-false}; then
8469b3e38ee4Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470b3e38ee4Smrg	      tmp_export_symbols="$export_symbols"
8471b3e38ee4Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8472a73423d7Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473b3e38ee4Smrg	    fi
8474af1a9c97Smrg
8475b3e38ee4Smrg	    if test -n "$orig_export_symbols"; then
8476b3e38ee4Smrg	      # The given exports_symbols file has to be filtered, so filter it.
8477b3e38ee4Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478b3e38ee4Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479b3e38ee4Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480b3e38ee4Smrg	      # though. Also, the filter scales superlinearly with the number of
8481b3e38ee4Smrg	      # global variables. join(1) would be nice here, but unfortunately
8482b3e38ee4Smrg	      # isn't a blessed tool.
8483b3e38ee4Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8484a73423d7Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485b3e38ee4Smrg	      export_symbols=$output_objdir/$libname.def
8486b3e38ee4Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487b3e38ee4Smrg	    fi
8488b3e38ee4Smrg	  fi
848950806d53Smrg
8490b3e38ee4Smrg	  libobjs=$output
8491b3e38ee4Smrg	  # Restore the value of output.
8492b3e38ee4Smrg	  output=$save_output
849350806d53Smrg
8494b3e38ee4Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495b3e38ee4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496b3e38ee4Smrg	    test "X$libobjs" = "X " && libobjs=
8497b3e38ee4Smrg	  fi
8498b3e38ee4Smrg	  # Expand the library linking commands again to reset the
8499b3e38ee4Smrg	  # value of $libobjs for piecewise linking.
850050806d53Smrg
8501b3e38ee4Smrg	  # Do each of the archive commands.
8502b3e38ee4Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503b3e38ee4Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504b3e38ee4Smrg	      cmds=$module_expsym_cmds
8505b3e38ee4Smrg	    else
8506b3e38ee4Smrg	      cmds=$module_cmds
8507a18ebfb2Smrg	    fi
8508a18ebfb2Smrg	  else
8509b3e38ee4Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510b3e38ee4Smrg	      cmds=$archive_expsym_cmds
8511b3e38ee4Smrg	    else
8512b3e38ee4Smrg	      cmds=$archive_cmds
8513b3e38ee4Smrg	    fi
8514a18ebfb2Smrg	  fi
8515b3e38ee4Smrg	fi
851650806d53Smrg
8517b3e38ee4Smrg	if test -n "$delfiles"; then
8518b3e38ee4Smrg	  # Append the command to remove temporary files to $cmds.
8519b3e38ee4Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520b3e38ee4Smrg	fi
852150806d53Smrg
8522b3e38ee4Smrg	# Add any objects from preloaded convenience libraries
8523b3e38ee4Smrg	if test -n "$dlprefiles"; then
8524b3e38ee4Smrg	  gentop="$output_objdir/${outputname}x"
8525a73423d7Smrg	  func_append generated " $gentop"
852650806d53Smrg
8527b3e38ee4Smrg	  func_extract_archives $gentop $dlprefiles
8528a73423d7Smrg	  func_append libobjs " $func_extract_archives_result"
8529b3e38ee4Smrg	  test "X$libobjs" = "X " && libobjs=
8530b3e38ee4Smrg	fi
853150806d53Smrg
8532b3e38ee4Smrg	save_ifs="$IFS"; IFS='~'
8533b3e38ee4Smrg	for cmd in $cmds; do
8534b3e38ee4Smrg	  IFS="$save_ifs"
8535b3e38ee4Smrg	  eval cmd=\"$cmd\"
8536b3e38ee4Smrg	  $opt_silent || {
8537b3e38ee4Smrg	    func_quote_for_expand "$cmd"
8538b3e38ee4Smrg	    eval "func_echo $func_quote_for_expand_result"
8539b3e38ee4Smrg	  }
8540b3e38ee4Smrg	  $opt_dry_run || eval "$cmd" || {
8541b3e38ee4Smrg	    lt_exit=$?
8542af1a9c97Smrg
8543b3e38ee4Smrg	    # Restore the uninstalled library and exit
8544a73423d7Smrg	    if test "$opt_mode" = relink; then
8545b3e38ee4Smrg	      ( cd "$output_objdir" && \
8546b3e38ee4Smrg	        $RM "${realname}T" && \
8547b3e38ee4Smrg		$MV "${realname}U" "$realname" )
8548b3e38ee4Smrg	    fi
8549af1a9c97Smrg
8550b3e38ee4Smrg	    exit $lt_exit
8551b3e38ee4Smrg	  }
8552b3e38ee4Smrg	done
8553b3e38ee4Smrg	IFS="$save_ifs"
8554af1a9c97Smrg
8555b3e38ee4Smrg	# Restore the uninstalled library and exit
8556a73423d7Smrg	if test "$opt_mode" = relink; then
8557b3e38ee4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558af1a9c97Smrg
8559b3e38ee4Smrg	  if test -n "$convenience"; then
8560b3e38ee4Smrg	    if test -z "$whole_archive_flag_spec"; then
8561b3e38ee4Smrg	      func_show_eval '${RM}r "$gentop"'
8562b3e38ee4Smrg	    fi
8563b3e38ee4Smrg	  fi
8564af1a9c97Smrg
8565b3e38ee4Smrg	  exit $EXIT_SUCCESS
8566b3e38ee4Smrg	fi
8567b3e38ee4Smrg
8568b3e38ee4Smrg	# Create links to the real library.
8569b3e38ee4Smrg	for linkname in $linknames; do
8570b3e38ee4Smrg	  if test "$realname" != "$linkname"; then
8571b3e38ee4Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572a18ebfb2Smrg	  fi
8573a18ebfb2Smrg	done
8574af1a9c97Smrg
8575b3e38ee4Smrg	# If -module or -export-dynamic was specified, set the dlname.
8576b3e38ee4Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577b3e38ee4Smrg	  # On all known operating systems, these are identical.
8578b3e38ee4Smrg	  dlname="$soname"
8579b3e38ee4Smrg	fi
8580b3e38ee4Smrg      fi
858150806d53Smrg      ;;
858250806d53Smrg
8583b3e38ee4Smrg    obj)
8584b3e38ee4Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585b3e38ee4Smrg	func_warning "\`-dlopen' is ignored for objects"
8586b3e38ee4Smrg      fi
8587a18ebfb2Smrg
8588b3e38ee4Smrg      case " $deplibs" in
8589b3e38ee4Smrg      *\ -l* | *\ -L*)
8590b3e38ee4Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591af1a9c97Smrg      esac
859250806d53Smrg
8593b3e38ee4Smrg      test -n "$rpath" && \
8594b3e38ee4Smrg	func_warning "\`-rpath' is ignored for objects"
8595b3e38ee4Smrg
8596b3e38ee4Smrg      test -n "$xrpath" && \
8597b3e38ee4Smrg	func_warning "\`-R' is ignored for objects"
859850806d53Smrg
8599b3e38ee4Smrg      test -n "$vinfo" && \
8600b3e38ee4Smrg	func_warning "\`-version-info' is ignored for objects"
8601af1a9c97Smrg
8602b3e38ee4Smrg      test -n "$release" && \
8603b3e38ee4Smrg	func_warning "\`-release' is ignored for objects"
8604b3e38ee4Smrg
8605b3e38ee4Smrg      case $output in
8606b3e38ee4Smrg      *.lo)
8607b3e38ee4Smrg	test -n "$objs$old_deplibs" && \
8608b3e38ee4Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609b3e38ee4Smrg
8610b3e38ee4Smrg	libobj=$output
8611b3e38ee4Smrg	func_lo2o "$libobj"
8612b3e38ee4Smrg	obj=$func_lo2o_result
8613a18ebfb2Smrg	;;
8614a18ebfb2Smrg      *)
8615b3e38ee4Smrg	libobj=
8616b3e38ee4Smrg	obj="$output"
861750806d53Smrg	;;
8618af1a9c97Smrg      esac
861950806d53Smrg
8620b3e38ee4Smrg      # Delete the old objects.
8621b3e38ee4Smrg      $opt_dry_run || $RM $obj $libobj
862250806d53Smrg
8623b3e38ee4Smrg      # Objects from convenience libraries.  This assumes
8624b3e38ee4Smrg      # single-version convenience libraries.  Whenever we create
8625b3e38ee4Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626b3e38ee4Smrg      # the extraction.
8627b3e38ee4Smrg      reload_conv_objs=
8628b3e38ee4Smrg      gentop=
8629b3e38ee4Smrg      # reload_cmds runs $LD directly, so let us get rid of
8630b3e38ee4Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8631b3e38ee4Smrg      # turning comma into space..
8632b3e38ee4Smrg      wl=
863350806d53Smrg
8634b3e38ee4Smrg      if test -n "$convenience"; then
8635b3e38ee4Smrg	if test -n "$whole_archive_flag_spec"; then
8636b3e38ee4Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
8637a73423d7Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638b3e38ee4Smrg	else
8639b3e38ee4Smrg	  gentop="$output_objdir/${obj}x"
8640a73423d7Smrg	  func_append generated " $gentop"
8641a18ebfb2Smrg
8642b3e38ee4Smrg	  func_extract_archives $gentop $convenience
8643b3e38ee4Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644b3e38ee4Smrg	fi
8645a18ebfb2Smrg      fi
8646a18ebfb2Smrg
8647a73423d7Smrg      # If we're not building shared, we need to use non_pic_objs
8648a73423d7Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8649a73423d7Smrg
8650b3e38ee4Smrg      # Create the old-style object.
8651a73423d7Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652a18ebfb2Smrg
8653b3e38ee4Smrg      output="$obj"
8654b3e38ee4Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8655a18ebfb2Smrg
8656b3e38ee4Smrg      # Exit if we aren't doing a library object file.
8657b3e38ee4Smrg      if test -z "$libobj"; then
8658b3e38ee4Smrg	if test -n "$gentop"; then
8659b3e38ee4Smrg	  func_show_eval '${RM}r "$gentop"'
8660b3e38ee4Smrg	fi
8661b3e38ee4Smrg
8662b3e38ee4Smrg	exit $EXIT_SUCCESS
8663a18ebfb2Smrg      fi
8664b3e38ee4Smrg
8665b3e38ee4Smrg      if test "$build_libtool_libs" != yes; then
8666b3e38ee4Smrg	if test -n "$gentop"; then
8667b3e38ee4Smrg	  func_show_eval '${RM}r "$gentop"'
8668b3e38ee4Smrg	fi
8669b3e38ee4Smrg
8670b3e38ee4Smrg	# Create an invalid libtool object if no PIC, so that we don't
8671b3e38ee4Smrg	# accidentally link it into a program.
8672b3e38ee4Smrg	# $show "echo timestamp > $libobj"
8673b3e38ee4Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674b3e38ee4Smrg	exit $EXIT_SUCCESS
8675b3e38ee4Smrg      fi
8676b3e38ee4Smrg
8677b3e38ee4Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678b3e38ee4Smrg	# Only do commands if we really have different PIC objects.
8679b3e38ee4Smrg	reload_objs="$libobjs $reload_conv_objs"
8680b3e38ee4Smrg	output="$libobj"
8681b3e38ee4Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682b3e38ee4Smrg      fi
8683b3e38ee4Smrg
8684b3e38ee4Smrg      if test -n "$gentop"; then
8685b3e38ee4Smrg	func_show_eval '${RM}r "$gentop"'
8686b3e38ee4Smrg      fi
8687b3e38ee4Smrg
8688b3e38ee4Smrg      exit $EXIT_SUCCESS
8689a18ebfb2Smrg      ;;
869050806d53Smrg
8691b3e38ee4Smrg    prog)
8692b3e38ee4Smrg      case $host in
8693b3e38ee4Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8694b3e38ee4Smrg	          output=$func_stripname_result.exe;;
8695b3e38ee4Smrg      esac
8696b3e38ee4Smrg      test -n "$vinfo" && \
8697b3e38ee4Smrg	func_warning "\`-version-info' is ignored for programs"
869850806d53Smrg
8699b3e38ee4Smrg      test -n "$release" && \
8700b3e38ee4Smrg	func_warning "\`-release' is ignored for programs"
870150806d53Smrg
8702b3e38ee4Smrg      test "$preload" = yes \
8703b3e38ee4Smrg        && test "$dlopen_support" = unknown \
8704b3e38ee4Smrg	&& test "$dlopen_self" = unknown \
8705b3e38ee4Smrg	&& test "$dlopen_self_static" = unknown && \
8706b3e38ee4Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707b3e38ee4Smrg
8708b3e38ee4Smrg      case $host in
8709b3e38ee4Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8710b3e38ee4Smrg	# On Rhapsody replace the C library is the System framework
8711a73423d7Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8712a73423d7Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713a18ebfb2Smrg	;;
8714b3e38ee4Smrg      esac
8715a18ebfb2Smrg
8716b3e38ee4Smrg      case $host in
8717b3e38ee4Smrg      *-*-darwin*)
8718b3e38ee4Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8719b3e38ee4Smrg	# But is supposedly fixed on 10.4 or later (yay!).
8720b3e38ee4Smrg	if test "$tagname" = CXX ; then
8721b3e38ee4Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722b3e38ee4Smrg	    10.[0123])
8723a73423d7Smrg	      func_append compile_command " ${wl}-bind_at_load"
8724a73423d7Smrg	      func_append finalize_command " ${wl}-bind_at_load"
8725b3e38ee4Smrg	    ;;
8726b3e38ee4Smrg	  esac
8727a18ebfb2Smrg	fi
8728b3e38ee4Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8729a73423d7Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8730a73423d7Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731b3e38ee4Smrg	;;
8732b3e38ee4Smrg      esac
8733a18ebfb2Smrg
8734a18ebfb2Smrg
8735b3e38ee4Smrg      # move library search paths that coincide with paths to not yet
8736b3e38ee4Smrg      # installed libraries to the beginning of the library search list
8737b3e38ee4Smrg      new_libs=
8738b3e38ee4Smrg      for path in $notinst_path; do
8739b3e38ee4Smrg	case " $new_libs " in
8740b3e38ee4Smrg	*" -L$path/$objdir "*) ;;
8741b3e38ee4Smrg	*)
8742b3e38ee4Smrg	  case " $compile_deplibs " in
8743b3e38ee4Smrg	  *" -L$path/$objdir "*)
8744a73423d7Smrg	    func_append new_libs " -L$path/$objdir" ;;
8745af1a9c97Smrg	  esac
8746b3e38ee4Smrg	  ;;
8747b3e38ee4Smrg	esac
8748b3e38ee4Smrg      done
8749b3e38ee4Smrg      for deplib in $compile_deplibs; do
8750b3e38ee4Smrg	case $deplib in
8751b3e38ee4Smrg	-L*)
8752b3e38ee4Smrg	  case " $new_libs " in
8753b3e38ee4Smrg	  *" $deplib "*) ;;
8754a73423d7Smrg	  *) func_append new_libs " $deplib" ;;
8755af1a9c97Smrg	  esac
8756b3e38ee4Smrg	  ;;
8757a73423d7Smrg	*) func_append new_libs " $deplib" ;;
8758b3e38ee4Smrg	esac
8759b3e38ee4Smrg      done
8760b3e38ee4Smrg      compile_deplibs="$new_libs"
876150806d53Smrg
8762a18ebfb2Smrg
8763a73423d7Smrg      func_append compile_command " $compile_deplibs"
8764a73423d7Smrg      func_append finalize_command " $finalize_deplibs"
8765a18ebfb2Smrg
8766b3e38ee4Smrg      if test -n "$rpath$xrpath"; then
8767b3e38ee4Smrg	# If the user specified any rpath flags, then add them.
8768b3e38ee4Smrg	for libdir in $rpath $xrpath; do
8769b3e38ee4Smrg	  # This is the magic to use -rpath.
8770b3e38ee4Smrg	  case "$finalize_rpath " in
8771b3e38ee4Smrg	  *" $libdir "*) ;;
8772a73423d7Smrg	  *) func_append finalize_rpath " $libdir" ;;
8773b3e38ee4Smrg	  esac
8774b3e38ee4Smrg	done
8775b3e38ee4Smrg      fi
8776a18ebfb2Smrg
8777b3e38ee4Smrg      # Now hardcode the library paths
8778b3e38ee4Smrg      rpath=
8779b3e38ee4Smrg      hardcode_libdirs=
8780b3e38ee4Smrg      for libdir in $compile_rpath $finalize_rpath; do
8781b3e38ee4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8782b3e38ee4Smrg	  if test -n "$hardcode_libdir_separator"; then
8783b3e38ee4Smrg	    if test -z "$hardcode_libdirs"; then
8784b3e38ee4Smrg	      hardcode_libdirs="$libdir"
8785b3e38ee4Smrg	    else
8786b3e38ee4Smrg	      # Just accumulate the unique libdirs.
8787b3e38ee4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788b3e38ee4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789b3e38ee4Smrg		;;
8790b3e38ee4Smrg	      *)
8791a73423d7Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792b3e38ee4Smrg		;;
8793b3e38ee4Smrg	      esac
8794b3e38ee4Smrg	    fi
8795a18ebfb2Smrg	  else
8796b3e38ee4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8797a73423d7Smrg	    func_append rpath " $flag"
8798a18ebfb2Smrg	  fi
8799b3e38ee4Smrg	elif test -n "$runpath_var"; then
8800b3e38ee4Smrg	  case "$perm_rpath " in
8801b3e38ee4Smrg	  *" $libdir "*) ;;
8802a73423d7Smrg	  *) func_append perm_rpath " $libdir" ;;
8803b3e38ee4Smrg	  esac
8804b3e38ee4Smrg	fi
8805b3e38ee4Smrg	case $host in
8806b3e38ee4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807b3e38ee4Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808b3e38ee4Smrg	  case :$dllsearchpath: in
8809b3e38ee4Smrg	  *":$libdir:"*) ;;
8810b3e38ee4Smrg	  ::) dllsearchpath=$libdir;;
8811a73423d7Smrg	  *) func_append dllsearchpath ":$libdir";;
8812b3e38ee4Smrg	  esac
8813b3e38ee4Smrg	  case :$dllsearchpath: in
8814b3e38ee4Smrg	  *":$testbindir:"*) ;;
8815b3e38ee4Smrg	  ::) dllsearchpath=$testbindir;;
8816a73423d7Smrg	  *) func_append dllsearchpath ":$testbindir";;
8817b3e38ee4Smrg	  esac
8818b3e38ee4Smrg	  ;;
8819b3e38ee4Smrg	esac
8820b3e38ee4Smrg      done
8821b3e38ee4Smrg      # Substitute the hardcoded libdirs into the rpath.
8822b3e38ee4Smrg      if test -n "$hardcode_libdir_separator" &&
8823b3e38ee4Smrg	 test -n "$hardcode_libdirs"; then
8824b3e38ee4Smrg	libdir="$hardcode_libdirs"
8825b3e38ee4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826b3e38ee4Smrg      fi
8827b3e38ee4Smrg      compile_rpath="$rpath"
8828a18ebfb2Smrg
8829b3e38ee4Smrg      rpath=
8830b3e38ee4Smrg      hardcode_libdirs=
8831b3e38ee4Smrg      for libdir in $finalize_rpath; do
8832b3e38ee4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8833b3e38ee4Smrg	  if test -n "$hardcode_libdir_separator"; then
8834b3e38ee4Smrg	    if test -z "$hardcode_libdirs"; then
8835b3e38ee4Smrg	      hardcode_libdirs="$libdir"
8836b3e38ee4Smrg	    else
8837b3e38ee4Smrg	      # Just accumulate the unique libdirs.
8838b3e38ee4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839b3e38ee4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840b3e38ee4Smrg		;;
8841b3e38ee4Smrg	      *)
8842a73423d7Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843b3e38ee4Smrg		;;
8844b3e38ee4Smrg	      esac
8845b3e38ee4Smrg	    fi
884650806d53Smrg	  else
8847b3e38ee4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8848a73423d7Smrg	    func_append rpath " $flag"
884950806d53Smrg	  fi
8850b3e38ee4Smrg	elif test -n "$runpath_var"; then
8851b3e38ee4Smrg	  case "$finalize_perm_rpath " in
8852b3e38ee4Smrg	  *" $libdir "*) ;;
8853a73423d7Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8854b3e38ee4Smrg	  esac
885550806d53Smrg	fi
8856b3e38ee4Smrg      done
8857b3e38ee4Smrg      # Substitute the hardcoded libdirs into the rpath.
8858b3e38ee4Smrg      if test -n "$hardcode_libdir_separator" &&
8859b3e38ee4Smrg	 test -n "$hardcode_libdirs"; then
8860b3e38ee4Smrg	libdir="$hardcode_libdirs"
8861b3e38ee4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862b3e38ee4Smrg      fi
8863b3e38ee4Smrg      finalize_rpath="$rpath"
886450806d53Smrg
8865b3e38ee4Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866b3e38ee4Smrg	# Transform all the library objects into standard objects.
8867a73423d7Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8868a73423d7Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869b3e38ee4Smrg      fi
887050806d53Smrg
8871b3e38ee4Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
887250806d53Smrg
8873b3e38ee4Smrg      # template prelinking step
8874b3e38ee4Smrg      if test -n "$prelink_cmds"; then
8875b3e38ee4Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876b3e38ee4Smrg      fi
887750806d53Smrg
8878b3e38ee4Smrg      wrappers_required=yes
8879b3e38ee4Smrg      case $host in
8880a73423d7Smrg      *cegcc* | *mingw32ce*)
8881a73423d7Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8882a73423d7Smrg        wrappers_required=no
8883a73423d7Smrg        ;;
8884b3e38ee4Smrg      *cygwin* | *mingw* )
8885b3e38ee4Smrg        if test "$build_libtool_libs" != yes; then
8886b3e38ee4Smrg          wrappers_required=no
8887b3e38ee4Smrg        fi
8888b3e38ee4Smrg        ;;
8889b3e38ee4Smrg      *)
8890b3e38ee4Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891b3e38ee4Smrg          wrappers_required=no
8892b3e38ee4Smrg        fi
8893b3e38ee4Smrg        ;;
8894b3e38ee4Smrg      esac
8895b3e38ee4Smrg      if test "$wrappers_required" = no; then
8896b3e38ee4Smrg	# Replace the output file specification.
8897a73423d7Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898b3e38ee4Smrg	link_command="$compile_command$compile_rpath"
889950806d53Smrg
8900b3e38ee4Smrg	# We have no uninstalled library dependencies, so finalize right now.
8901b3e38ee4Smrg	exit_status=0
8902b3e38ee4Smrg	func_show_eval "$link_command" 'exit_status=$?'
890350806d53Smrg
8904a73423d7Smrg	if test -n "$postlink_cmds"; then
8905a73423d7Smrg	  func_to_tool_file "$output"
8906a73423d7Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8907a73423d7Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8908a73423d7Smrg	fi
8909a73423d7Smrg
8910b3e38ee4Smrg	# Delete the generated files.
8911b3e38ee4Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912b3e38ee4Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
891350806d53Smrg	fi
891450806d53Smrg
8915b3e38ee4Smrg	exit $exit_status
8916b3e38ee4Smrg      fi
891750806d53Smrg
8918b3e38ee4Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919b3e38ee4Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920b3e38ee4Smrg      fi
8921b3e38ee4Smrg      if test -n "$finalize_shlibpath"; then
8922b3e38ee4Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923b3e38ee4Smrg      fi
8924a18ebfb2Smrg
8925b3e38ee4Smrg      compile_var=
8926b3e38ee4Smrg      finalize_var=
8927b3e38ee4Smrg      if test -n "$runpath_var"; then
8928b3e38ee4Smrg	if test -n "$perm_rpath"; then
8929b3e38ee4Smrg	  # We should set the runpath_var.
8930b3e38ee4Smrg	  rpath=
8931b3e38ee4Smrg	  for dir in $perm_rpath; do
8932a73423d7Smrg	    func_append rpath "$dir:"
8933b3e38ee4Smrg	  done
8934b3e38ee4Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
893550806d53Smrg	fi
8936b3e38ee4Smrg	if test -n "$finalize_perm_rpath"; then
8937b3e38ee4Smrg	  # We should set the runpath_var.
8938b3e38ee4Smrg	  rpath=
8939b3e38ee4Smrg	  for dir in $finalize_perm_rpath; do
8940a73423d7Smrg	    func_append rpath "$dir:"
8941b3e38ee4Smrg	  done
8942b3e38ee4Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
894350806d53Smrg	fi
8944b3e38ee4Smrg      fi
894550806d53Smrg
8946b3e38ee4Smrg      if test "$no_install" = yes; then
8947b3e38ee4Smrg	# We don't need to create a wrapper script.
8948b3e38ee4Smrg	link_command="$compile_var$compile_command$compile_rpath"
8949b3e38ee4Smrg	# Replace the output file specification.
8950a73423d7Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951b3e38ee4Smrg	# Delete the old output file.
8952b3e38ee4Smrg	$opt_dry_run || $RM $output
8953b3e38ee4Smrg	# Link the executable and exit
8954b3e38ee4Smrg	func_show_eval "$link_command" 'exit $?'
8955a73423d7Smrg
8956a73423d7Smrg	if test -n "$postlink_cmds"; then
8957a73423d7Smrg	  func_to_tool_file "$output"
8958a73423d7Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8959a73423d7Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8960a73423d7Smrg	fi
8961a73423d7Smrg
8962a18ebfb2Smrg	exit $EXIT_SUCCESS
8963b3e38ee4Smrg      fi
8964af1a9c97Smrg
8965b3e38ee4Smrg      if test "$hardcode_action" = relink; then
8966b3e38ee4Smrg	# Fast installation is not supported
8967b3e38ee4Smrg	link_command="$compile_var$compile_command$compile_rpath"
8968b3e38ee4Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969b3e38ee4Smrg
8970b3e38ee4Smrg	func_warning "this platform does not like uninstalled shared libraries"
8971b3e38ee4Smrg	func_warning "\`$output' will be relinked during installation"
8972b3e38ee4Smrg      else
8973b3e38ee4Smrg	if test "$fast_install" != no; then
8974b3e38ee4Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8975b3e38ee4Smrg	  if test "$fast_install" = yes; then
8976a73423d7Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977b3e38ee4Smrg	  else
8978b3e38ee4Smrg	    # fast_install is set to needless
8979b3e38ee4Smrg	    relink_command=
8980b3e38ee4Smrg	  fi
898150806d53Smrg	else
8982b3e38ee4Smrg	  link_command="$compile_var$compile_command$compile_rpath"
8983b3e38ee4Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
898450806d53Smrg	fi
8985b3e38ee4Smrg      fi
898650806d53Smrg
8987b3e38ee4Smrg      # Replace the output file specification.
8988a73423d7Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
898950806d53Smrg
8990b3e38ee4Smrg      # Delete the old output files.
8991b3e38ee4Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
899250806d53Smrg
8993b3e38ee4Smrg      func_show_eval "$link_command" 'exit $?'
8994a18ebfb2Smrg
8995a73423d7Smrg      if test -n "$postlink_cmds"; then
8996a73423d7Smrg	func_to_tool_file "$output_objdir/$outputname"
8997a73423d7Smrg	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'`
8998a73423d7Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
8999a73423d7Smrg      fi
9000a73423d7Smrg
9001b3e38ee4Smrg      # Now create the wrapper script.
9002b3e38ee4Smrg      func_verbose "creating $output"
9003a18ebfb2Smrg
9004b3e38ee4Smrg      # Quote the relink command for shipping.
9005b3e38ee4Smrg      if test -n "$relink_command"; then
9006b3e38ee4Smrg	# Preserve any variables that may affect compiler behavior
9007b3e38ee4Smrg	for var in $variables_saved_for_relink; do
9008b3e38ee4Smrg	  if eval test -z \"\${$var+set}\"; then
9009b3e38ee4Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010b3e38ee4Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011b3e38ee4Smrg	    relink_command="$var=; export $var; $relink_command"
901250806d53Smrg	  else
9013b3e38ee4Smrg	    func_quote_for_eval "$var_value"
9014b3e38ee4Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
901550806d53Smrg	  fi
9016b3e38ee4Smrg	done
9017b3e38ee4Smrg	relink_command="(cd `pwd`; $relink_command)"
9018a73423d7Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019b3e38ee4Smrg      fi
9020b3e38ee4Smrg
9021b3e38ee4Smrg      # Only actually do things if not in dry run mode.
9022b3e38ee4Smrg      $opt_dry_run || {
9023b3e38ee4Smrg	# win32 will think the script is a binary if it has
9024b3e38ee4Smrg	# a .exe suffix, so we strip it off here.
9025b3e38ee4Smrg	case $output in
9026b3e38ee4Smrg	  *.exe) func_stripname '' '.exe' "$output"
9027b3e38ee4Smrg	         output=$func_stripname_result ;;
9028b3e38ee4Smrg	esac
9029b3e38ee4Smrg	# test for cygwin because mv fails w/o .exe extensions
9030b3e38ee4Smrg	case $host in
9031b3e38ee4Smrg	  *cygwin*)
9032b3e38ee4Smrg	    exeext=.exe
9033b3e38ee4Smrg	    func_stripname '' '.exe' "$outputname"
9034b3e38ee4Smrg	    outputname=$func_stripname_result ;;
9035b3e38ee4Smrg	  *) exeext= ;;
903650806d53Smrg	esac
9037b3e38ee4Smrg	case $host in
9038b3e38ee4Smrg	  *cygwin* | *mingw* )
9039b3e38ee4Smrg	    func_dirname_and_basename "$output" "" "."
9040b3e38ee4Smrg	    output_name=$func_basename_result
9041b3e38ee4Smrg	    output_path=$func_dirname_result
9042b3e38ee4Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043b3e38ee4Smrg	    cwrapper="$output_path/$output_name.exe"
9044b3e38ee4Smrg	    $RM $cwrappersource $cwrapper
9045b3e38ee4Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046b3e38ee4Smrg
9047b3e38ee4Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9048b3e38ee4Smrg
9049b3e38ee4Smrg	    # The wrapper executable is built using the $host compiler,
9050b3e38ee4Smrg	    # because it contains $host paths and files. If cross-
9051b3e38ee4Smrg	    # compiling, it, like the target executable, must be
9052b3e38ee4Smrg	    # executed on the $host or under an emulation environment.
9053b3e38ee4Smrg	    $opt_dry_run || {
9054b3e38ee4Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055b3e38ee4Smrg	      $STRIP $cwrapper
9056b3e38ee4Smrg	    }
905750806d53Smrg
9058b3e38ee4Smrg	    # Now, create the wrapper script for func_source use:
9059b3e38ee4Smrg	    func_ltwrapper_scriptname $cwrapper
9060b3e38ee4Smrg	    $RM $func_ltwrapper_scriptname_result
9061b3e38ee4Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062b3e38ee4Smrg	    $opt_dry_run || {
9063b3e38ee4Smrg	      # note: this script will not be executed, so do not chmod.
9064b3e38ee4Smrg	      if test "x$build" = "x$host" ; then
9065b3e38ee4Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066b3e38ee4Smrg	      else
9067b3e38ee4Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068b3e38ee4Smrg	      fi
9069b3e38ee4Smrg	    }
9070b3e38ee4Smrg	  ;;
9071b3e38ee4Smrg	  * )
9072b3e38ee4Smrg	    $RM $output
9073b3e38ee4Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
907450806d53Smrg
9075b3e38ee4Smrg	    func_emit_wrapper no > $output
9076b3e38ee4Smrg	    chmod +x $output
9077b3e38ee4Smrg	  ;;
9078b3e38ee4Smrg	esac
9079b3e38ee4Smrg      }
9080b3e38ee4Smrg      exit $EXIT_SUCCESS
9081b3e38ee4Smrg      ;;
9082b3e38ee4Smrg    esac
908350806d53Smrg
9084b3e38ee4Smrg    # See if we need to build an old-fashioned archive.
9085b3e38ee4Smrg    for oldlib in $oldlibs; do
908650806d53Smrg
9087b3e38ee4Smrg      if test "$build_libtool_libs" = convenience; then
9088b3e38ee4Smrg	oldobjs="$libobjs_save $symfileobj"
9089b3e38ee4Smrg	addlibs="$convenience"
9090b3e38ee4Smrg	build_libtool_libs=no
9091b3e38ee4Smrg      else
9092b3e38ee4Smrg	if test "$build_libtool_libs" = module; then
9093b3e38ee4Smrg	  oldobjs="$libobjs_save"
9094b3e38ee4Smrg	  build_libtool_libs=no
9095b3e38ee4Smrg	else
9096b3e38ee4Smrg	  oldobjs="$old_deplibs $non_pic_objects"
9097b3e38ee4Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
9098a73423d7Smrg	    func_append oldobjs " $symfileobj"
9099b3e38ee4Smrg	  fi
9100b3e38ee4Smrg	fi
9101b3e38ee4Smrg	addlibs="$old_convenience"
910250806d53Smrg      fi
910350806d53Smrg
9104b3e38ee4Smrg      if test -n "$addlibs"; then
9105b3e38ee4Smrg	gentop="$output_objdir/${outputname}x"
9106a73423d7Smrg	func_append generated " $gentop"
910750806d53Smrg
9108b3e38ee4Smrg	func_extract_archives $gentop $addlibs
9109a73423d7Smrg	func_append oldobjs " $func_extract_archives_result"
9110b3e38ee4Smrg      fi
911150806d53Smrg
9112b3e38ee4Smrg      # Do each command in the archive commands.
9113b3e38ee4Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114b3e38ee4Smrg	cmds=$old_archive_from_new_cmds
9115b3e38ee4Smrg      else
911650806d53Smrg
9117b3e38ee4Smrg	# Add any objects from preloaded convenience libraries
9118b3e38ee4Smrg	if test -n "$dlprefiles"; then
9119b3e38ee4Smrg	  gentop="$output_objdir/${outputname}x"
9120a73423d7Smrg	  func_append generated " $gentop"
912150806d53Smrg
9122b3e38ee4Smrg	  func_extract_archives $gentop $dlprefiles
9123a73423d7Smrg	  func_append oldobjs " $func_extract_archives_result"
9124b3e38ee4Smrg	fi
912550806d53Smrg
9126b3e38ee4Smrg	# POSIX demands no paths to be encoded in archives.  We have
9127b3e38ee4Smrg	# to avoid creating archives with duplicate basenames if we
9128b3e38ee4Smrg	# might have to extract them afterwards, e.g., when creating a
9129b3e38ee4Smrg	# static archive out of a convenience library, or when linking
9130b3e38ee4Smrg	# the entirety of a libtool archive into another (currently
9131b3e38ee4Smrg	# not supported by libtool).
9132b3e38ee4Smrg	if (for obj in $oldobjs
9133b3e38ee4Smrg	    do
9134b3e38ee4Smrg	      func_basename "$obj"
9135b3e38ee4Smrg	      $ECHO "$func_basename_result"
9136b3e38ee4Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137b3e38ee4Smrg	  :
9138b3e38ee4Smrg	else
9139a73423d7Smrg	  echo "copying selected object files to avoid basename conflicts..."
9140b3e38ee4Smrg	  gentop="$output_objdir/${outputname}x"
9141a73423d7Smrg	  func_append generated " $gentop"
9142b3e38ee4Smrg	  func_mkdir_p "$gentop"
9143b3e38ee4Smrg	  save_oldobjs=$oldobjs
9144b3e38ee4Smrg	  oldobjs=
9145b3e38ee4Smrg	  counter=1
9146b3e38ee4Smrg	  for obj in $save_oldobjs
9147b3e38ee4Smrg	  do
9148b3e38ee4Smrg	    func_basename "$obj"
9149b3e38ee4Smrg	    objbase="$func_basename_result"
9150b3e38ee4Smrg	    case " $oldobjs " in
9151b3e38ee4Smrg	    " ") oldobjs=$obj ;;
9152b3e38ee4Smrg	    *[\ /]"$objbase "*)
9153b3e38ee4Smrg	      while :; do
9154b3e38ee4Smrg		# Make sure we don't pick an alternate name that also
9155b3e38ee4Smrg		# overlaps.
9156b3e38ee4Smrg		newobj=lt$counter-$objbase
9157b3e38ee4Smrg		func_arith $counter + 1
9158b3e38ee4Smrg		counter=$func_arith_result
9159b3e38ee4Smrg		case " $oldobjs " in
9160b3e38ee4Smrg		*[\ /]"$newobj "*) ;;
9161b3e38ee4Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162b3e38ee4Smrg		esac
9163b3e38ee4Smrg	      done
9164b3e38ee4Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9165a73423d7Smrg	      func_append oldobjs " $gentop/$newobj"
9166b3e38ee4Smrg	      ;;
9167a73423d7Smrg	    *) func_append oldobjs " $obj" ;;
9168b3e38ee4Smrg	    esac
916950806d53Smrg	  done
9170af1a9c97Smrg	fi
9171a73423d7Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9172a73423d7Smrg	tool_oldlib=$func_to_tool_file_result
9173b3e38ee4Smrg	eval cmds=\"$old_archive_cmds\"
9174a18ebfb2Smrg
9175b3e38ee4Smrg	func_len " $cmds"
9176b3e38ee4Smrg	len=$func_len_result
9177b3e38ee4Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178b3e38ee4Smrg	  cmds=$old_archive_cmds
9179a73423d7Smrg	elif test -n "$archiver_list_spec"; then
9180a73423d7Smrg	  func_verbose "using command file archive linking..."
9181a73423d7Smrg	  for obj in $oldobjs
9182a73423d7Smrg	  do
9183a73423d7Smrg	    func_to_tool_file "$obj"
9184a73423d7Smrg	    $ECHO "$func_to_tool_file_result"
9185a73423d7Smrg	  done > $output_objdir/$libname.libcmd
9186a73423d7Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
9187a73423d7Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9188a73423d7Smrg	  cmds=$old_archive_cmds
9189b3e38ee4Smrg	else
9190b3e38ee4Smrg	  # the command line is too long to link in one step, link in parts
9191b3e38ee4Smrg	  func_verbose "using piecewise archive linking..."
9192b3e38ee4Smrg	  save_RANLIB=$RANLIB
9193b3e38ee4Smrg	  RANLIB=:
9194b3e38ee4Smrg	  objlist=
9195b3e38ee4Smrg	  concat_cmds=
9196b3e38ee4Smrg	  save_oldobjs=$oldobjs
9197b3e38ee4Smrg	  oldobjs=
9198b3e38ee4Smrg	  # Is there a better way of finding the last object in the list?
9199b3e38ee4Smrg	  for obj in $save_oldobjs
9200b3e38ee4Smrg	  do
9201b3e38ee4Smrg	    last_oldobj=$obj
9202b3e38ee4Smrg	  done
9203b3e38ee4Smrg	  eval test_cmds=\"$old_archive_cmds\"
9204b3e38ee4Smrg	  func_len " $test_cmds"
9205b3e38ee4Smrg	  len0=$func_len_result
9206b3e38ee4Smrg	  len=$len0
9207b3e38ee4Smrg	  for obj in $save_oldobjs
9208b3e38ee4Smrg	  do
9209b3e38ee4Smrg	    func_len " $obj"
9210b3e38ee4Smrg	    func_arith $len + $func_len_result
9211b3e38ee4Smrg	    len=$func_arith_result
9212b3e38ee4Smrg	    func_append objlist " $obj"
9213b3e38ee4Smrg	    if test "$len" -lt "$max_cmd_len"; then
9214b3e38ee4Smrg	      :
9215b3e38ee4Smrg	    else
9216b3e38ee4Smrg	      # the above command should be used before it gets too long
9217b3e38ee4Smrg	      oldobjs=$objlist
9218b3e38ee4Smrg	      if test "$obj" = "$last_oldobj" ; then
9219b3e38ee4Smrg		RANLIB=$save_RANLIB
9220b3e38ee4Smrg	      fi
9221b3e38ee4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222b3e38ee4Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223b3e38ee4Smrg	      objlist=
9224b3e38ee4Smrg	      len=$len0
9225b3e38ee4Smrg	    fi
9226b3e38ee4Smrg	  done
9227b3e38ee4Smrg	  RANLIB=$save_RANLIB
9228b3e38ee4Smrg	  oldobjs=$objlist
9229b3e38ee4Smrg	  if test "X$oldobjs" = "X" ; then
9230b3e38ee4Smrg	    eval cmds=\"\$concat_cmds\"
9231b3e38ee4Smrg	  else
9232b3e38ee4Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233b3e38ee4Smrg	  fi
9234b3e38ee4Smrg	fi
9235b3e38ee4Smrg      fi
9236b3e38ee4Smrg      func_execute_cmds "$cmds" 'exit $?'
923750806d53Smrg    done
923850806d53Smrg
9239b3e38ee4Smrg    test -n "$generated" && \
9240b3e38ee4Smrg      func_show_eval "${RM}r$generated"
924150806d53Smrg
9242b3e38ee4Smrg    # Now create the libtool archive.
9243b3e38ee4Smrg    case $output in
9244b3e38ee4Smrg    *.la)
9245b3e38ee4Smrg      old_library=
9246b3e38ee4Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247b3e38ee4Smrg      func_verbose "creating $output"
9248af1a9c97Smrg
9249b3e38ee4Smrg      # Preserve any variables that may affect compiler behavior
9250b3e38ee4Smrg      for var in $variables_saved_for_relink; do
9251b3e38ee4Smrg	if eval test -z \"\${$var+set}\"; then
9252b3e38ee4Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253b3e38ee4Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254b3e38ee4Smrg	  relink_command="$var=; export $var; $relink_command"
9255a18ebfb2Smrg	else
9256b3e38ee4Smrg	  func_quote_for_eval "$var_value"
9257b3e38ee4Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258a18ebfb2Smrg	fi
9259b3e38ee4Smrg      done
9260b3e38ee4Smrg      # Quote the link command for shipping.
9261b3e38ee4Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9262a73423d7Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263b3e38ee4Smrg      if test "$hardcode_automatic" = yes ; then
9264b3e38ee4Smrg	relink_command=
9265b3e38ee4Smrg      fi
926650806d53Smrg
9267b3e38ee4Smrg      # Only create the output if not a dry run.
9268b3e38ee4Smrg      $opt_dry_run || {
9269b3e38ee4Smrg	for installed in no yes; do
9270b3e38ee4Smrg	  if test "$installed" = yes; then
9271b3e38ee4Smrg	    if test -z "$install_libdir"; then
9272b3e38ee4Smrg	      break
9273b3e38ee4Smrg	    fi
9274b3e38ee4Smrg	    output="$output_objdir/$outputname"i
9275b3e38ee4Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9276b3e38ee4Smrg	    newdependency_libs=
9277b3e38ee4Smrg	    for deplib in $dependency_libs; do
9278b3e38ee4Smrg	      case $deplib in
9279b3e38ee4Smrg	      *.la)
9280b3e38ee4Smrg		func_basename "$deplib"
9281b3e38ee4Smrg		name="$func_basename_result"
9282a73423d7Smrg		func_resolve_sysroot "$deplib"
9283a73423d7Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284b3e38ee4Smrg		test -z "$libdir" && \
9285b3e38ee4Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9286a73423d7Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9287a73423d7Smrg		;;
9288a73423d7Smrg	      -L*)
9289a73423d7Smrg		func_stripname -L '' "$deplib"
9290a73423d7Smrg		func_replace_sysroot "$func_stripname_result"
9291a73423d7Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292b3e38ee4Smrg		;;
9293a73423d7Smrg	      -R*)
9294a73423d7Smrg		func_stripname -R '' "$deplib"
9295a73423d7Smrg		func_replace_sysroot "$func_stripname_result"
9296a73423d7Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
9297a73423d7Smrg		;;
9298a73423d7Smrg	      *) func_append newdependency_libs " $deplib" ;;
9299b3e38ee4Smrg	      esac
9300b3e38ee4Smrg	    done
9301b3e38ee4Smrg	    dependency_libs="$newdependency_libs"
9302b3e38ee4Smrg	    newdlfiles=
9303b3e38ee4Smrg
9304b3e38ee4Smrg	    for lib in $dlfiles; do
9305b3e38ee4Smrg	      case $lib in
9306b3e38ee4Smrg	      *.la)
9307b3e38ee4Smrg	        func_basename "$lib"
9308b3e38ee4Smrg		name="$func_basename_result"
9309b3e38ee4Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310b3e38ee4Smrg		test -z "$libdir" && \
9311b3e38ee4Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312a73423d7Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313b3e38ee4Smrg		;;
9314a73423d7Smrg	      *) func_append newdlfiles " $lib" ;;
9315b3e38ee4Smrg	      esac
9316b3e38ee4Smrg	    done
9317b3e38ee4Smrg	    dlfiles="$newdlfiles"
9318b3e38ee4Smrg	    newdlprefiles=
9319b3e38ee4Smrg	    for lib in $dlprefiles; do
9320b3e38ee4Smrg	      case $lib in
9321b3e38ee4Smrg	      *.la)
9322b3e38ee4Smrg		# Only pass preopened files to the pseudo-archive (for
9323b3e38ee4Smrg		# eventual linking with the app. that links it) if we
9324b3e38ee4Smrg		# didn't already link the preopened objects directly into
9325b3e38ee4Smrg		# the library:
9326b3e38ee4Smrg		func_basename "$lib"
9327b3e38ee4Smrg		name="$func_basename_result"
9328b3e38ee4Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329b3e38ee4Smrg		test -z "$libdir" && \
9330b3e38ee4Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9331a73423d7Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332b3e38ee4Smrg		;;
9333b3e38ee4Smrg	      esac
9334b3e38ee4Smrg	    done
9335b3e38ee4Smrg	    dlprefiles="$newdlprefiles"
9336b3e38ee4Smrg	  else
9337b3e38ee4Smrg	    newdlfiles=
9338b3e38ee4Smrg	    for lib in $dlfiles; do
9339b3e38ee4Smrg	      case $lib in
9340b3e38ee4Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341b3e38ee4Smrg		*) abs=`pwd`"/$lib" ;;
9342b3e38ee4Smrg	      esac
9343a73423d7Smrg	      func_append newdlfiles " $abs"
9344b3e38ee4Smrg	    done
9345b3e38ee4Smrg	    dlfiles="$newdlfiles"
9346b3e38ee4Smrg	    newdlprefiles=
9347b3e38ee4Smrg	    for lib in $dlprefiles; do
9348b3e38ee4Smrg	      case $lib in
9349b3e38ee4Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350b3e38ee4Smrg		*) abs=`pwd`"/$lib" ;;
9351b3e38ee4Smrg	      esac
9352a73423d7Smrg	      func_append newdlprefiles " $abs"
9353b3e38ee4Smrg	    done
9354b3e38ee4Smrg	    dlprefiles="$newdlprefiles"
9355b3e38ee4Smrg	  fi
9356b3e38ee4Smrg	  $RM $output
9357b3e38ee4Smrg	  # place dlname in correct position for cygwin
9358a73423d7Smrg	  # In fact, it would be nice if we could use this code for all target
9359a73423d7Smrg	  # systems that can't hard-code library paths into their executables
9360a73423d7Smrg	  # and that have no shared library path variable independent of PATH,
9361a73423d7Smrg	  # but it turns out we can't easily determine that from inspecting
9362a73423d7Smrg	  # libtool variables, so we have to hard-code the OSs to which it
9363a73423d7Smrg	  # applies here; at the moment, that means platforms that use the PE
9364a73423d7Smrg	  # object format with DLL files.  See the long comment at the top of
9365a73423d7Smrg	  # tests/bindir.at for full details.
9366b3e38ee4Smrg	  tdlname=$dlname
9367b3e38ee4Smrg	  case $host,$output,$installed,$module,$dlname in
9368a73423d7Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9369a73423d7Smrg	      # If a -bindir argument was supplied, place the dll there.
9370a73423d7Smrg	      if test "x$bindir" != x ;
9371a73423d7Smrg	      then
9372a73423d7Smrg		func_relative_path "$install_libdir" "$bindir"
9373a73423d7Smrg		tdlname=$func_relative_path_result$dlname
9374a73423d7Smrg	      else
9375a73423d7Smrg		# Otherwise fall back on heuristic.
9376a73423d7Smrg		tdlname=../bin/$dlname
9377a73423d7Smrg	      fi
9378a73423d7Smrg	      ;;
9379b3e38ee4Smrg	  esac
9380b3e38ee4Smrg	  $ECHO > $output "\
9381b3e38ee4Smrg# $outputname - a libtool library file
9382b3e38ee4Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383b3e38ee4Smrg#
9384b3e38ee4Smrg# Please DO NOT delete this file!
9385b3e38ee4Smrg# It is necessary for linking the library.
938650806d53Smrg
9387b3e38ee4Smrg# The name that we can dlopen(3).
9388b3e38ee4Smrgdlname='$tdlname'
938950806d53Smrg
9390b3e38ee4Smrg# Names of this library.
9391b3e38ee4Smrglibrary_names='$library_names'
939250806d53Smrg
9393b3e38ee4Smrg# The name of the static archive.
9394b3e38ee4Smrgold_library='$old_library'
939550806d53Smrg
9396b3e38ee4Smrg# Linker flags that can not go in dependency_libs.
9397b3e38ee4Smrginherited_linker_flags='$new_inherited_linker_flags'
939850806d53Smrg
9399b3e38ee4Smrg# Libraries that this one depends upon.
9400b3e38ee4Smrgdependency_libs='$dependency_libs'
940150806d53Smrg
9402b3e38ee4Smrg# Names of additional weak libraries provided by this library
9403b3e38ee4Smrgweak_library_names='$weak_libs'
940450806d53Smrg
9405b3e38ee4Smrg# Version information for $libname.
9406b3e38ee4Smrgcurrent=$current
9407b3e38ee4Smrgage=$age
9408b3e38ee4Smrgrevision=$revision
940950806d53Smrg
9410b3e38ee4Smrg# Is this an already installed library?
9411b3e38ee4Smrginstalled=$installed
941250806d53Smrg
9413b3e38ee4Smrg# Should we warn about portability when linking against -modules?
9414b3e38ee4Smrgshouldnotlink=$module
941550806d53Smrg
9416b3e38ee4Smrg# Files to dlopen/dlpreopen
9417b3e38ee4Smrgdlopen='$dlfiles'
9418b3e38ee4Smrgdlpreopen='$dlprefiles'
941950806d53Smrg
9420b3e38ee4Smrg# Directory that this library needs to be installed in:
9421b3e38ee4Smrglibdir='$install_libdir'"
9422b3e38ee4Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423b3e38ee4Smrg	    $ECHO >> $output "\
9424b3e38ee4Smrgrelink_command=\"$relink_command\""
9425b3e38ee4Smrg	  fi
9426b3e38ee4Smrg	done
9427b3e38ee4Smrg      }
942850806d53Smrg
9429b3e38ee4Smrg      # Do a symbolic link so that the libtool archive can be found in
9430b3e38ee4Smrg      # LD_LIBRARY_PATH before the program is installed.
9431b3e38ee4Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432b3e38ee4Smrg      ;;
9433b3e38ee4Smrg    esac
9434b3e38ee4Smrg    exit $EXIT_SUCCESS
9435b3e38ee4Smrg}
9436a18ebfb2Smrg
9437a73423d7Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438b3e38ee4Smrg    func_mode_link ${1+"$@"}
943950806d53Smrg
944050806d53Smrg
9441b3e38ee4Smrg# func_mode_uninstall arg...
9442b3e38ee4Smrgfunc_mode_uninstall ()
9443b3e38ee4Smrg{
9444b3e38ee4Smrg    $opt_debug
9445b3e38ee4Smrg    RM="$nonopt"
944650806d53Smrg    files=
944750806d53Smrg    rmforce=
944850806d53Smrg    exit_status=0
944950806d53Smrg
945050806d53Smrg    # This variable tells wrapper scripts just to set variables rather
945150806d53Smrg    # than running their programs.
945250806d53Smrg    libtool_install_magic="$magic"
945350806d53Smrg
945450806d53Smrg    for arg
945550806d53Smrg    do
945650806d53Smrg      case $arg in
9457a73423d7Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
9458a73423d7Smrg      -*) func_append RM " $arg" ;;
9459a73423d7Smrg      *) func_append files " $arg" ;;
946050806d53Smrg      esac
946150806d53Smrg    done
946250806d53Smrg
9463b3e38ee4Smrg    test -z "$RM" && \
9464b3e38ee4Smrg      func_fatal_help "you must specify an RM program"
946550806d53Smrg
946650806d53Smrg    rmdirs=
946750806d53Smrg
946850806d53Smrg    for file in $files; do
9469b3e38ee4Smrg      func_dirname "$file" "" "."
9470b3e38ee4Smrg      dir="$func_dirname_result"
9471b3e38ee4Smrg      if test "X$dir" = X.; then
9472a73423d7Smrg	odir="$objdir"
947350806d53Smrg      else
9474a73423d7Smrg	odir="$dir/$objdir"
947550806d53Smrg      fi
9476b3e38ee4Smrg      func_basename "$file"
9477b3e38ee4Smrg      name="$func_basename_result"
9478a73423d7Smrg      test "$opt_mode" = uninstall && odir="$dir"
947950806d53Smrg
9480a73423d7Smrg      # Remember odir for removal later, being careful to avoid duplicates
9481a73423d7Smrg      if test "$opt_mode" = clean; then
948250806d53Smrg	case " $rmdirs " in
9483a73423d7Smrg	  *" $odir "*) ;;
9484a73423d7Smrg	  *) func_append rmdirs " $odir" ;;
948550806d53Smrg	esac
948650806d53Smrg      fi
948750806d53Smrg
948850806d53Smrg      # Don't error if the file doesn't exist and rm -f was used.
9489b3e38ee4Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490b3e38ee4Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491b3e38ee4Smrg	 test -f "$file"; then
949250806d53Smrg	:
949350806d53Smrg      elif test -d "$file"; then
949450806d53Smrg	exit_status=1
949550806d53Smrg	continue
949650806d53Smrg      elif test "$rmforce" = yes; then
949750806d53Smrg	continue
949850806d53Smrg      fi
949950806d53Smrg
950050806d53Smrg      rmfiles="$file"
950150806d53Smrg
950250806d53Smrg      case $name in
950350806d53Smrg      *.la)
950450806d53Smrg	# Possibly a libtool archive, so verify it.
9505b3e38ee4Smrg	if func_lalib_p "$file"; then
9506b3e38ee4Smrg	  func_source $dir/$name
950750806d53Smrg
950850806d53Smrg	  # Delete the libtool libraries and symlinks.
950950806d53Smrg	  for n in $library_names; do
9510a73423d7Smrg	    func_append rmfiles " $odir/$n"
951150806d53Smrg	  done
9512a73423d7Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
951350806d53Smrg
9514a73423d7Smrg	  case "$opt_mode" in
951550806d53Smrg	  clean)
9516a73423d7Smrg	    case " $library_names " in
951750806d53Smrg	    *" $dlname "*) ;;
9518a73423d7Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
951950806d53Smrg	    esac
9520a73423d7Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
952150806d53Smrg	    ;;
952250806d53Smrg	  uninstall)
952350806d53Smrg	    if test -n "$library_names"; then
952450806d53Smrg	      # Do each command in the postuninstall commands.
9525b3e38ee4Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
952650806d53Smrg	    fi
952750806d53Smrg
952850806d53Smrg	    if test -n "$old_library"; then
952950806d53Smrg	      # Do each command in the old_postuninstall commands.
9530b3e38ee4Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
953150806d53Smrg	    fi
953250806d53Smrg	    # FIXME: should reinstall the best remaining shared library.
953350806d53Smrg	    ;;
953450806d53Smrg	  esac
953550806d53Smrg	fi
953650806d53Smrg	;;
953750806d53Smrg
953850806d53Smrg      *.lo)
953950806d53Smrg	# Possibly a libtool object, so verify it.
9540b3e38ee4Smrg	if func_lalib_p "$file"; then
954150806d53Smrg
954250806d53Smrg	  # Read the .lo file
9543b3e38ee4Smrg	  func_source $dir/$name
954450806d53Smrg
954550806d53Smrg	  # Add PIC object to the list of files to remove.
9546b3e38ee4Smrg	  if test -n "$pic_object" &&
9547b3e38ee4Smrg	     test "$pic_object" != none; then
9548a73423d7Smrg	    func_append rmfiles " $dir/$pic_object"
954950806d53Smrg	  fi
955050806d53Smrg
955150806d53Smrg	  # Add non-PIC object to the list of files to remove.
9552b3e38ee4Smrg	  if test -n "$non_pic_object" &&
9553b3e38ee4Smrg	     test "$non_pic_object" != none; then
9554a73423d7Smrg	    func_append rmfiles " $dir/$non_pic_object"
955550806d53Smrg	  fi
955650806d53Smrg	fi
955750806d53Smrg	;;
955850806d53Smrg
955950806d53Smrg      *)
9560a73423d7Smrg	if test "$opt_mode" = clean ; then
956150806d53Smrg	  noexename=$name
956250806d53Smrg	  case $file in
956350806d53Smrg	  *.exe)
9564b3e38ee4Smrg	    func_stripname '' '.exe' "$file"
9565b3e38ee4Smrg	    file=$func_stripname_result
9566b3e38ee4Smrg	    func_stripname '' '.exe' "$name"
9567b3e38ee4Smrg	    noexename=$func_stripname_result
956850806d53Smrg	    # $file with .exe has already been added to rmfiles,
956950806d53Smrg	    # add $file without .exe
9570a73423d7Smrg	    func_append rmfiles " $file"
957150806d53Smrg	    ;;
957250806d53Smrg	  esac
957350806d53Smrg	  # Do a test to see if this is a libtool program.
9574b3e38ee4Smrg	  if func_ltwrapper_p "$file"; then
9575b3e38ee4Smrg	    if func_ltwrapper_executable_p "$file"; then
9576b3e38ee4Smrg	      func_ltwrapper_scriptname "$file"
9577b3e38ee4Smrg	      relink_command=
9578b3e38ee4Smrg	      func_source $func_ltwrapper_scriptname_result
9579a73423d7Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580b3e38ee4Smrg	    else
9581b3e38ee4Smrg	      relink_command=
9582b3e38ee4Smrg	      func_source $dir/$noexename
9583b3e38ee4Smrg	    fi
958450806d53Smrg
958550806d53Smrg	    # note $name still contains .exe if it was in $file originally
958650806d53Smrg	    # as does the version of $file that was added into $rmfiles
9587a73423d7Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
958850806d53Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
9589a73423d7Smrg	      func_append rmfiles " $odir/lt-$name"
959050806d53Smrg	    fi
959150806d53Smrg	    if test "X$noexename" != "X$name" ; then
9592a73423d7Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
959350806d53Smrg	    fi
959450806d53Smrg	  fi
959550806d53Smrg	fi
959650806d53Smrg	;;
959750806d53Smrg      esac
9598b3e38ee4Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
959950806d53Smrg    done
960050806d53Smrg
960150806d53Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
960250806d53Smrg    for dir in $rmdirs; do
960350806d53Smrg      if test -d "$dir"; then
9604b3e38ee4Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
960550806d53Smrg      fi
960650806d53Smrg    done
960750806d53Smrg
960850806d53Smrg    exit $exit_status
9609b3e38ee4Smrg}
961050806d53Smrg
9611a73423d7Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612b3e38ee4Smrg    func_mode_uninstall ${1+"$@"}
9613af1a9c97Smrg
9614a73423d7Smrgtest -z "$opt_mode" && {
9615b3e38ee4Smrg  help="$generic_help"
9616b3e38ee4Smrg  func_fatal_help "you must specify a MODE"
9617b3e38ee4Smrg}
9618b3e38ee4Smrg
9619b3e38ee4Smrgtest -z "$exec_cmd" && \
9620a73423d7Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
962150806d53Smrg
962250806d53Smrgif test -n "$exec_cmd"; then
9623b3e38ee4Smrg  eval exec "$exec_cmd"
962450806d53Smrg  exit $EXIT_FAILURE
962550806d53Smrgfi
962650806d53Smrg
9627b3e38ee4Smrgexit $exit_status
962850806d53Smrg
962950806d53Smrg
963050806d53Smrg# The TAGs below are defined such that we never get into a situation
963150806d53Smrg# in which we disable both kinds of libraries.  Given conflicting
963250806d53Smrg# choices, we go for a static library, that is the most portable,
963350806d53Smrg# since we can't tell whether shared libraries were disabled because
963450806d53Smrg# the user asked for that or because the platform doesn't support
963550806d53Smrg# them.  This is particularly important on AIX, because we don't
963650806d53Smrg# support having both static and shared libraries enabled at the same
963750806d53Smrg# time on that platform, so we default to a shared-only configuration.
963850806d53Smrg# If a disable-shared tag is given, we'll fallback to a static-only
963950806d53Smrg# configuration.  But we'll never go from static-only to shared-only.
964050806d53Smrg
964150806d53Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642b3e38ee4Smrgbuild_libtool_libs=no
9643b3e38ee4Smrgbuild_old_libs=yes
964450806d53Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
964550806d53Smrg
964650806d53Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647b3e38ee4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
964850806d53Smrg# ### END LIBTOOL TAG CONFIG: disable-static
964950806d53Smrg
965050806d53Smrg# Local Variables:
965150806d53Smrg# mode:shell-script
965250806d53Smrg# sh-indentation:2
965350806d53Smrg# End:
9654b3e38ee4Smrg# vi:sw=2
9655b3e38ee4Smrg
9656