ltmain.sh revision d63fdb69
1d63fdb69Smrg# Generated from ltmain.m4sh.
2d63fdb69Smrg
3d63fdb69Smrg# ltmain.sh (GNU libtool) 2.2.6
4d63fdb69Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
5d63fdb69Smrg
6d63fdb69Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
7d63fdb69Smrg# This is free software; see the source for copying conditions.  There is NO
8d63fdb69Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9d63fdb69Smrg
10d63fdb69Smrg# GNU Libtool is free software; you can redistribute it and/or modify
113da084b3Smrg# it under the terms of the GNU General Public License as published by
123da084b3Smrg# the Free Software Foundation; either version 2 of the License, or
133da084b3Smrg# (at your option) any later version.
143da084b3Smrg#
15d63fdb69Smrg# As a special exception to the GNU General Public License,
16d63fdb69Smrg# if you distribute this file as part of a program or library that
17d63fdb69Smrg# is built using GNU Libtool, you may include this file under the
18d63fdb69Smrg# same distribution terms that you use for the rest of that program.
19d63fdb69Smrg#
20d63fdb69Smrg# GNU Libtool is distributed in the hope that it will be useful, but
213da084b3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
223da084b3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
233da084b3Smrg# General Public License for more details.
243da084b3Smrg#
253da084b3Smrg# You should have received a copy of the GNU General Public License
26d63fdb69Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27d63fdb69Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28d63fdb69Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29d63fdb69Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30d63fdb69Smrg
31d63fdb69Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32d63fdb69Smrg#
33d63fdb69Smrg# Provide generalized library-building support services.
343da084b3Smrg#
35d63fdb69Smrg#     --config             show all configuration variables
36d63fdb69Smrg#     --debug              enable verbose shell tracing
37d63fdb69Smrg# -n, --dry-run            display commands without modifying any files
38d63fdb69Smrg#     --features           display basic configuration information and exit
39d63fdb69Smrg#     --mode=MODE          use operation mode MODE
40d63fdb69Smrg#     --preserve-dup-deps  don't remove duplicate dependency libraries
41d63fdb69Smrg#     --quiet, --silent    don't print informational messages
42d63fdb69Smrg#     --tag=TAG            use configuration variables from tag TAG
43d63fdb69Smrg# -v, --verbose            print informational messages (default)
44d63fdb69Smrg#     --version            print version information
45d63fdb69Smrg# -h, --help               print short or long help message
46d63fdb69Smrg#
47d63fdb69Smrg# MODE must be one of the following:
48d63fdb69Smrg#
49d63fdb69Smrg#       clean              remove files from the build directory
50d63fdb69Smrg#       compile            compile a source file into a libtool object
51d63fdb69Smrg#       execute            automatically set library path, then run a program
52d63fdb69Smrg#       finish             complete the installation of libtool libraries
53d63fdb69Smrg#       install            install libraries or executables
54d63fdb69Smrg#       link               create a library or an executable
55d63fdb69Smrg#       uninstall          remove libraries from an installed directory
56d63fdb69Smrg#
57d63fdb69Smrg# MODE-ARGS vary depending on the MODE.
58d63fdb69Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
59d63fdb69Smrg#
60d63fdb69Smrg# When reporting a bug, please describe a test case to reproduce it and
61d63fdb69Smrg# include the following information:
62d63fdb69Smrg#
63d63fdb69Smrg#       host-triplet:	$host
64d63fdb69Smrg#       shell:		$SHELL
65d63fdb69Smrg#       compiler:		$LTCC
66d63fdb69Smrg#       compiler flags:		$LTCFLAGS
67d63fdb69Smrg#       linker:		$LD (gnu? $with_gnu_ld)
68d63fdb69Smrg#       $progname:		(GNU libtool) 2.2.6
69d63fdb69Smrg#       automake:		$automake_version
70d63fdb69Smrg#       autoconf:		$autoconf_version
71d63fdb69Smrg#
72d63fdb69Smrg# Report bugs to <bug-libtool@gnu.org>.
73d63fdb69Smrg
74d63fdb69SmrgPROGRAM=ltmain.sh
75d63fdb69SmrgPACKAGE=libtool
76d63fdb69SmrgVERSION=2.2.6
77d63fdb69SmrgTIMESTAMP=""
78d63fdb69Smrgpackage_revision=1.3012
79d63fdb69Smrg
80d63fdb69Smrg# Be Bourne compatible
81d63fdb69Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
82d63fdb69Smrg  emulate sh
83d63fdb69Smrg  NULLCMD=:
84d63fdb69Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
85d63fdb69Smrg  # is contrary to our usage.  Disable this feature.
86d63fdb69Smrg  alias -g '${1+"$@"}'='"$@"'
87d63fdb69Smrg  setopt NO_GLOB_SUBST
88d63fdb69Smrgelse
89d63fdb69Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
90d63fdb69Smrgfi
91d63fdb69SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
92d63fdb69SmrgDUALCASE=1; export DUALCASE # for MKS sh
93d63fdb69Smrg
94d63fdb69Smrg# NLS nuisances: We save the old values to restore during execute mode.
95d63fdb69Smrg# Only set LANG and LC_ALL to C if already set.
96d63fdb69Smrg# These must not be set unconditionally because not all systems understand
97d63fdb69Smrg# e.g. LANG=C (notably SCO).
98d63fdb69Smrglt_user_locale=
99d63fdb69Smrglt_safe_locale=
100d63fdb69Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
101d63fdb69Smrgdo
102d63fdb69Smrg  eval "if test \"\${$lt_var+set}\" = set; then
103d63fdb69Smrg          save_$lt_var=\$$lt_var
104d63fdb69Smrg          $lt_var=C
105d63fdb69Smrg	  export $lt_var
106d63fdb69Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
107d63fdb69Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
108d63fdb69Smrg	fi"
109d63fdb69Smrgdone
110d63fdb69Smrg
111d63fdb69Smrg$lt_unset CDPATH
112d63fdb69Smrg
113d63fdb69Smrg
114d63fdb69Smrg
115d63fdb69Smrg
116d63fdb69Smrg
117d63fdb69Smrg: ${CP="cp -f"}
118d63fdb69Smrg: ${ECHO="echo"}
119d63fdb69Smrg: ${EGREP="/bin/grep -E"}
120d63fdb69Smrg: ${FGREP="/bin/grep -F"}
121d63fdb69Smrg: ${GREP="/bin/grep"}
122d63fdb69Smrg: ${LN_S="ln -s"}
123d63fdb69Smrg: ${MAKE="make"}
124d63fdb69Smrg: ${MKDIR="mkdir"}
125d63fdb69Smrg: ${MV="mv -f"}
126d63fdb69Smrg: ${RM="rm -f"}
127d63fdb69Smrg: ${SED="/bin/sed"}
128d63fdb69Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
129d63fdb69Smrg: ${Xsed="$SED -e 1s/^X//"}
1303da084b3Smrg
131d63fdb69Smrg# Global variables:
132d63fdb69SmrgEXIT_SUCCESS=0
133d63fdb69SmrgEXIT_FAILURE=1
134d63fdb69SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
135d63fdb69SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
136d63fdb69Smrg
137d63fdb69Smrgexit_status=$EXIT_SUCCESS
138d63fdb69Smrg
139d63fdb69Smrg# Make sure IFS has a sensible default
140d63fdb69Smrglt_nl='
141d63fdb69Smrg'
142d63fdb69SmrgIFS=" 	$lt_nl"
143d63fdb69Smrg
144d63fdb69Smrgdirname="s,/[^/]*$,,"
145d63fdb69Smrgbasename="s,^.*/,,"
146d63fdb69Smrg
147d63fdb69Smrg# func_dirname_and_basename file append nondir_replacement
148d63fdb69Smrg# perform func_basename and func_dirname in a single function
149d63fdb69Smrg# call:
150d63fdb69Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
151d63fdb69Smrg#             add APPEND to the result, otherwise set result
152d63fdb69Smrg#             to NONDIR_REPLACEMENT.
153d63fdb69Smrg#             value returned in "$func_dirname_result"
154d63fdb69Smrg#   basename: Compute filename of FILE.
155d63fdb69Smrg#             value retuned in "$func_basename_result"
156d63fdb69Smrg# Implementation must be kept synchronized with func_dirname
157d63fdb69Smrg# and func_basename. For efficiency, we do not delegate to
158d63fdb69Smrg# those functions but instead duplicate the functionality here.
159d63fdb69Smrgfunc_dirname_and_basename ()
160d63fdb69Smrg{
161d63fdb69Smrg  # Extract subdirectory from the argument.
162d63fdb69Smrg  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
163d63fdb69Smrg  if test "X$func_dirname_result" = "X${1}"; then
164d63fdb69Smrg    func_dirname_result="${3}"
165d63fdb69Smrg  else
166d63fdb69Smrg    func_dirname_result="$func_dirname_result${2}"
167d63fdb69Smrg  fi
168d63fdb69Smrg  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
169d63fdb69Smrg}
170d63fdb69Smrg
171d63fdb69Smrg# Generated shell functions inserted here.
1723da084b3Smrg
1733da084b3Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1743da084b3Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1753da084b3Smrg# the _XPG environment variable is not equal to 1 (one), the special
1763da084b3Smrg# positional parameter $0, within a function call, is the name of the
1773da084b3Smrg# function.
1783da084b3Smrgprogpath="$0"
1793da084b3Smrg
1803da084b3Smrg# The name of this program:
181d63fdb69Smrg# In the unlikely event $progname began with a '-', it would play havoc with
182d63fdb69Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case:
183d63fdb69Smrgfunc_dirname_and_basename "$progpath"
184d63fdb69Smrgprogname=$func_basename_result
185d63fdb69Smrgcase $progname in
186d63fdb69Smrg  -*) progname=./$progname ;;
187d63fdb69Smrgesac
1883da084b3Smrg
189d63fdb69Smrg# Make sure we have an absolute path for reexecution:
190d63fdb69Smrgcase $progpath in
191d63fdb69Smrg  [\\/]*|[A-Za-z]:\\*) ;;
192d63fdb69Smrg  *[\\/]*)
193d63fdb69Smrg     progdir=$func_dirname_result
194d63fdb69Smrg     progdir=`cd "$progdir" && pwd`
195d63fdb69Smrg     progpath="$progdir/$progname"
196d63fdb69Smrg     ;;
197d63fdb69Smrg  *)
198d63fdb69Smrg     save_IFS="$IFS"
199d63fdb69Smrg     IFS=:
200d63fdb69Smrg     for progdir in $PATH; do
201d63fdb69Smrg       IFS="$save_IFS"
202d63fdb69Smrg       test -x "$progdir/$progname" && break
203d63fdb69Smrg     done
204d63fdb69Smrg     IFS="$save_IFS"
205d63fdb69Smrg     test -n "$progdir" || progdir=`pwd`
206d63fdb69Smrg     progpath="$progdir/$progname"
207d63fdb69Smrg     ;;
208d63fdb69Smrgesac
2093da084b3Smrg
210d63fdb69Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
211d63fdb69Smrg# metacharacters that are still active within double-quoted strings.
212d63fdb69SmrgXsed="${SED}"' -e 1s/^X//'
213d63fdb69Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
214d63fdb69Smrg
215d63fdb69Smrg# Same as above, but do not quote variable references.
216d63fdb69Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
217d63fdb69Smrg
218d63fdb69Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
219d63fdb69Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
220d63fdb69Smrg# in input to double_quote_subst, that '$' was protected from expansion.
221d63fdb69Smrg# Since each input `\' is now two `\'s, look for any number of runs of
222d63fdb69Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
223d63fdb69Smrgbs='\\'
224d63fdb69Smrgbs2='\\\\'
225d63fdb69Smrgbs4='\\\\\\\\'
226d63fdb69Smrgdollar='\$'
227d63fdb69Smrgsed_double_backslash="\
228d63fdb69Smrg  s/$bs4/&\\
229d63fdb69Smrg/g
230d63fdb69Smrg  s/^$bs2$dollar/$bs&/
231d63fdb69Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
232d63fdb69Smrg  s/\n//g"
233d63fdb69Smrg
234d63fdb69Smrg# Standard options:
235d63fdb69Smrgopt_dry_run=false
236d63fdb69Smrgopt_help=false
237d63fdb69Smrgopt_quiet=false
238d63fdb69Smrgopt_verbose=false
239d63fdb69Smrgopt_warning=:
240d63fdb69Smrg
241d63fdb69Smrg# func_echo arg...
242d63fdb69Smrg# Echo program name prefixed message, along with the current mode
243d63fdb69Smrg# name if it has been set yet.
244d63fdb69Smrgfunc_echo ()
245d63fdb69Smrg{
246d63fdb69Smrg    $ECHO "$progname${mode+: }$mode: $*"
247d63fdb69Smrg}
2483da084b3Smrg
249d63fdb69Smrg# func_verbose arg...
250d63fdb69Smrg# Echo program name prefixed message in verbose mode only.
251d63fdb69Smrgfunc_verbose ()
252d63fdb69Smrg{
253d63fdb69Smrg    $opt_verbose && func_echo ${1+"$@"}
2543da084b3Smrg
255d63fdb69Smrg    # A bug in bash halts the script if the last line of a function
256d63fdb69Smrg    # fails when set -e is in force, so we need another command to
257d63fdb69Smrg    # work around that:
258d63fdb69Smrg    :
259d63fdb69Smrg}
2603da084b3Smrg
261d63fdb69Smrg# func_error arg...
262d63fdb69Smrg# Echo program name prefixed message to standard error.
263d63fdb69Smrgfunc_error ()
264d63fdb69Smrg{
265d63fdb69Smrg    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
266d63fdb69Smrg}
2673da084b3Smrg
268d63fdb69Smrg# func_warning arg...
269d63fdb69Smrg# Echo program name prefixed warning message to standard error.
270d63fdb69Smrgfunc_warning ()
271d63fdb69Smrg{
272d63fdb69Smrg    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
2733da084b3Smrg
274d63fdb69Smrg    # bash bug again:
275d63fdb69Smrg    :
276d63fdb69Smrg}
2773da084b3Smrg
278d63fdb69Smrg# func_fatal_error arg...
279d63fdb69Smrg# Echo program name prefixed message to standard error, and exit.
280d63fdb69Smrgfunc_fatal_error ()
281d63fdb69Smrg{
282d63fdb69Smrg    func_error ${1+"$@"}
283d63fdb69Smrg    exit $EXIT_FAILURE
284d63fdb69Smrg}
2853da084b3Smrg
286d63fdb69Smrg# func_fatal_help arg...
287d63fdb69Smrg# Echo program name prefixed message to standard error, followed by
288d63fdb69Smrg# a help hint, and exit.
289d63fdb69Smrgfunc_fatal_help ()
290d63fdb69Smrg{
291d63fdb69Smrg    func_error ${1+"$@"}
292d63fdb69Smrg    func_fatal_error "$help"
293d63fdb69Smrg}
294d63fdb69Smrghelp="Try \`$progname --help' for more information."  ## default
2953da084b3Smrg
2963da084b3Smrg
297d63fdb69Smrg# func_grep expression filename
298d63fdb69Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
299d63fdb69Smrgfunc_grep ()
300d63fdb69Smrg{
301d63fdb69Smrg    $GREP "$1" "$2" >/dev/null 2>&1
302d63fdb69Smrg}
303d63fdb69Smrg
304d63fdb69Smrg
305d63fdb69Smrg# func_mkdir_p directory-path
306d63fdb69Smrg# Make sure the entire path to DIRECTORY-PATH is available.
307d63fdb69Smrgfunc_mkdir_p ()
308d63fdb69Smrg{
309d63fdb69Smrg    my_directory_path="$1"
310d63fdb69Smrg    my_dir_list=
311d63fdb69Smrg
312d63fdb69Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
313d63fdb69Smrg
314d63fdb69Smrg      # Protect directory names starting with `-'
315d63fdb69Smrg      case $my_directory_path in
316d63fdb69Smrg        -*) my_directory_path="./$my_directory_path" ;;
317d63fdb69Smrg      esac
318d63fdb69Smrg
319d63fdb69Smrg      # While some portion of DIR does not yet exist...
320d63fdb69Smrg      while test ! -d "$my_directory_path"; do
321d63fdb69Smrg        # ...make a list in topmost first order.  Use a colon delimited
322d63fdb69Smrg	# list incase some portion of path contains whitespace.
323d63fdb69Smrg        my_dir_list="$my_directory_path:$my_dir_list"
324d63fdb69Smrg
325d63fdb69Smrg        # If the last portion added has no slash in it, the list is done
326d63fdb69Smrg        case $my_directory_path in */*) ;; *) break ;; esac
327d63fdb69Smrg
328d63fdb69Smrg        # ...otherwise throw away the child directory and loop
329d63fdb69Smrg        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
330d63fdb69Smrg      done
331d63fdb69Smrg      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
332d63fdb69Smrg
333d63fdb69Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
334d63fdb69Smrg      for my_dir in $my_dir_list; do
335d63fdb69Smrg	IFS="$save_mkdir_p_IFS"
336d63fdb69Smrg        # mkdir can fail with a `File exist' error if two processes
337d63fdb69Smrg        # try to create one of the directories concurrently.  Don't
338d63fdb69Smrg        # stop in that case!
339d63fdb69Smrg        $MKDIR "$my_dir" 2>/dev/null || :
340d63fdb69Smrg      done
341d63fdb69Smrg      IFS="$save_mkdir_p_IFS"
342d63fdb69Smrg
343d63fdb69Smrg      # Bail out if we (or some other process) failed to create a directory.
344d63fdb69Smrg      test -d "$my_directory_path" || \
345d63fdb69Smrg        func_fatal_error "Failed to create \`$1'"
346d63fdb69Smrg    fi
347d63fdb69Smrg}
3483da084b3Smrg
3493da084b3Smrg
3503da084b3Smrg# func_mktempdir [string]
3513da084b3Smrg# Make a temporary directory that won't clash with other running
3523da084b3Smrg# libtool processes, and avoids race conditions if possible.  If
3533da084b3Smrg# given, STRING is the basename for that directory.
3543da084b3Smrgfunc_mktempdir ()
3553da084b3Smrg{
3563da084b3Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
3573da084b3Smrg
358d63fdb69Smrg    if test "$opt_dry_run" = ":"; then
3593da084b3Smrg      # Return a directory name, but don't create it in dry-run mode
3603da084b3Smrg      my_tmpdir="${my_template}-$$"
3613da084b3Smrg    else
3623da084b3Smrg
3633da084b3Smrg      # If mktemp works, use that first and foremost
3643da084b3Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
3653da084b3Smrg
3663da084b3Smrg      if test ! -d "$my_tmpdir"; then
367d63fdb69Smrg        # Failing that, at least try and use $RANDOM to avoid a race
368d63fdb69Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
3693da084b3Smrg
370d63fdb69Smrg        save_mktempdir_umask=`umask`
371d63fdb69Smrg        umask 0077
372d63fdb69Smrg        $MKDIR "$my_tmpdir"
373d63fdb69Smrg        umask $save_mktempdir_umask
3743da084b3Smrg      fi
3753da084b3Smrg
3763da084b3Smrg      # If we're not in dry-run mode, bomb out on failure
377d63fdb69Smrg      test -d "$my_tmpdir" || \
378d63fdb69Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
3793da084b3Smrg    fi
3803da084b3Smrg
381d63fdb69Smrg    $ECHO "X$my_tmpdir" | $Xsed
3823da084b3Smrg}
3833da084b3Smrg
3843da084b3Smrg
385d63fdb69Smrg# func_quote_for_eval arg
386d63fdb69Smrg# Aesthetically quote ARG to be evaled later.
387d63fdb69Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
388d63fdb69Smrg# is double-quoted, suitable for a subsequent eval, whereas
389d63fdb69Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
390d63fdb69Smrg# which are still active within double quotes backslashified.
391d63fdb69Smrgfunc_quote_for_eval ()
3923da084b3Smrg{
393d63fdb69Smrg    case $1 in
394d63fdb69Smrg      *[\\\`\"\$]*)
395d63fdb69Smrg	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
396d63fdb69Smrg      *)
397d63fdb69Smrg        func_quote_for_eval_unquoted_result="$1" ;;
398d63fdb69Smrg    esac
399d63fdb69Smrg
400d63fdb69Smrg    case $func_quote_for_eval_unquoted_result in
401d63fdb69Smrg      # Double-quote args containing shell metacharacters to delay
402d63fdb69Smrg      # word splitting, command substitution and and variable
403d63fdb69Smrg      # expansion for a subsequent eval.
404d63fdb69Smrg      # Many Bourne shells cannot handle close brackets correctly
405d63fdb69Smrg      # in scan sets, so we specify it separately.
406d63fdb69Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
407d63fdb69Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
408d63fdb69Smrg        ;;
409d63fdb69Smrg      *)
410d63fdb69Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
4113da084b3Smrg    esac
4123da084b3Smrg}
4133da084b3Smrg
4143da084b3Smrg
415d63fdb69Smrg# func_quote_for_expand arg
416d63fdb69Smrg# Aesthetically quote ARG to be evaled later; same as above,
417d63fdb69Smrg# but do not quote variable references.
418d63fdb69Smrgfunc_quote_for_expand ()
4193da084b3Smrg{
420d63fdb69Smrg    case $1 in
421d63fdb69Smrg      *[\\\`\"]*)
422d63fdb69Smrg	my_arg=`$ECHO "X$1" | $Xsed \
423d63fdb69Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
4243da084b3Smrg      *)
425d63fdb69Smrg        my_arg="$1" ;;
426d63fdb69Smrg    esac
427d63fdb69Smrg
428d63fdb69Smrg    case $my_arg in
429d63fdb69Smrg      # Double-quote args containing shell metacharacters to delay
430d63fdb69Smrg      # word splitting and command substitution for a subsequent eval.
431d63fdb69Smrg      # Many Bourne shells cannot handle close brackets correctly
432d63fdb69Smrg      # in scan sets, so we specify it separately.
433d63fdb69Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
434d63fdb69Smrg        my_arg="\"$my_arg\""
435d63fdb69Smrg        ;;
436d63fdb69Smrg    esac
437d63fdb69Smrg
438d63fdb69Smrg    func_quote_for_expand_result="$my_arg"
4393da084b3Smrg}
4403da084b3Smrg
4413da084b3Smrg
442d63fdb69Smrg# func_show_eval cmd [fail_exp]
443d63fdb69Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
444d63fdb69Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
445d63fdb69Smrg# is given, then evaluate it.
446d63fdb69Smrgfunc_show_eval ()
4473da084b3Smrg{
448d63fdb69Smrg    my_cmd="$1"
449d63fdb69Smrg    my_fail_exp="${2-:}"
4503da084b3Smrg
451d63fdb69Smrg    ${opt_silent-false} || {
452d63fdb69Smrg      func_quote_for_expand "$my_cmd"
453d63fdb69Smrg      eval "func_echo $func_quote_for_expand_result"
454d63fdb69Smrg    }
455d63fdb69Smrg
456d63fdb69Smrg    if ${opt_dry_run-false}; then :; else
457d63fdb69Smrg      eval "$my_cmd"
458d63fdb69Smrg      my_status=$?
459d63fdb69Smrg      if test "$my_status" -eq 0; then :; else
460d63fdb69Smrg	eval "(exit $my_status); $my_fail_exp"
461d63fdb69Smrg      fi
4623da084b3Smrg    fi
4633da084b3Smrg}
4643da084b3Smrg
465d63fdb69Smrg
466d63fdb69Smrg# func_show_eval_locale cmd [fail_exp]
467d63fdb69Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
468d63fdb69Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
469d63fdb69Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
470d63fdb69Smrgfunc_show_eval_locale ()
4713da084b3Smrg{
472d63fdb69Smrg    my_cmd="$1"
473d63fdb69Smrg    my_fail_exp="${2-:}"
4743da084b3Smrg
475d63fdb69Smrg    ${opt_silent-false} || {
476d63fdb69Smrg      func_quote_for_expand "$my_cmd"
477d63fdb69Smrg      eval "func_echo $func_quote_for_expand_result"
478d63fdb69Smrg    }
479d63fdb69Smrg
480d63fdb69Smrg    if ${opt_dry_run-false}; then :; else
481d63fdb69Smrg      eval "$lt_user_locale
482d63fdb69Smrg	    $my_cmd"
483d63fdb69Smrg      my_status=$?
484d63fdb69Smrg      eval "$lt_safe_locale"
485d63fdb69Smrg      if test "$my_status" -eq 0; then :; else
486d63fdb69Smrg	eval "(exit $my_status); $my_fail_exp"
4873da084b3Smrg      fi
488d63fdb69Smrg    fi
4893da084b3Smrg}
4903da084b3Smrg
4913da084b3Smrg
4923da084b3Smrg
493d63fdb69Smrg
494d63fdb69Smrg
495d63fdb69Smrg# func_version
496d63fdb69Smrg# Echo version message to standard output and exit.
497d63fdb69Smrgfunc_version ()
498d63fdb69Smrg{
499d63fdb69Smrg    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
500d63fdb69Smrg        s/^# //
501d63fdb69Smrg	s/^# *$//
502d63fdb69Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
503d63fdb69Smrg        p
504d63fdb69Smrg     }' < "$progpath"
505d63fdb69Smrg     exit $?
506d63fdb69Smrg}
507d63fdb69Smrg
508d63fdb69Smrg# func_usage
509d63fdb69Smrg# Echo short help message to standard output and exit.
510d63fdb69Smrgfunc_usage ()
511d63fdb69Smrg{
512d63fdb69Smrg    $SED -n '/^# Usage:/,/# -h/ {
513d63fdb69Smrg        s/^# //
514d63fdb69Smrg	s/^# *$//
515d63fdb69Smrg	s/\$progname/'$progname'/
516d63fdb69Smrg	p
517d63fdb69Smrg    }' < "$progpath"
518d63fdb69Smrg    $ECHO
519d63fdb69Smrg    $ECHO "run \`$progname --help | more' for full usage"
520d63fdb69Smrg    exit $?
521d63fdb69Smrg}
522d63fdb69Smrg
523d63fdb69Smrg# func_help
524d63fdb69Smrg# Echo long help message to standard output and exit.
525d63fdb69Smrgfunc_help ()
526d63fdb69Smrg{
527d63fdb69Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
528d63fdb69Smrg        s/^# //
529d63fdb69Smrg	s/^# *$//
530d63fdb69Smrg	s*\$progname*'$progname'*
531d63fdb69Smrg	s*\$host*'"$host"'*
532d63fdb69Smrg	s*\$SHELL*'"$SHELL"'*
533d63fdb69Smrg	s*\$LTCC*'"$LTCC"'*
534d63fdb69Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
535d63fdb69Smrg	s*\$LD*'"$LD"'*
536d63fdb69Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
537d63fdb69Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
538d63fdb69Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
539d63fdb69Smrg	p
540d63fdb69Smrg     }' < "$progpath"
541d63fdb69Smrg    exit $?
542d63fdb69Smrg}
543d63fdb69Smrg
544d63fdb69Smrg# func_missing_arg argname
545d63fdb69Smrg# Echo program name prefixed message to standard error and set global
546d63fdb69Smrg# exit_cmd.
547d63fdb69Smrgfunc_missing_arg ()
548d63fdb69Smrg{
549d63fdb69Smrg    func_error "missing argument for $1"
550d63fdb69Smrg    exit_cmd=exit
551d63fdb69Smrg}
552d63fdb69Smrg
553d63fdb69Smrgexit_cmd=:
554d63fdb69Smrg
555d63fdb69Smrg
556d63fdb69Smrg
557d63fdb69Smrg
558d63fdb69Smrg
559d63fdb69Smrg# Check that we have a working $ECHO.
560d63fdb69Smrgif test "X$1" = X--no-reexec; then
561d63fdb69Smrg  # Discard the --no-reexec flag, and continue.
5623da084b3Smrg  shift
563d63fdb69Smrgelif test "X$1" = X--fallback-echo; then
564d63fdb69Smrg  # Avoid inline document here, it may be left over
565d63fdb69Smrg  :
566d63fdb69Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
567d63fdb69Smrg  # Yippee, $ECHO works!
568d63fdb69Smrg  :
569d63fdb69Smrgelse
570d63fdb69Smrg  # Restart under the correct shell, and then maybe $ECHO will work.
571d63fdb69Smrg  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
572d63fdb69Smrgfi
5733da084b3Smrg
574d63fdb69Smrgif test "X$1" = X--fallback-echo; then
575d63fdb69Smrg  # used as fallback echo
576d63fdb69Smrg  shift
577d63fdb69Smrg  cat <<EOF
578d63fdb69Smrg$*
579d63fdb69SmrgEOF
580d63fdb69Smrg  exit $EXIT_SUCCESS
581d63fdb69Smrgfi
5823da084b3Smrg
583d63fdb69Smrgmagic="%%%MAGIC variable%%%"
584d63fdb69Smrgmagic_exe="%%%MAGIC EXE variable%%%"
5853da084b3Smrg
586d63fdb69Smrg# Global variables.
587d63fdb69Smrg# $mode is unset
588d63fdb69Smrgnonopt=
589d63fdb69Smrgexecute_dlfiles=
590d63fdb69Smrgpreserve_args=
591d63fdb69Smrglo2o="s/\\.lo\$/.${objext}/"
592d63fdb69Smrgo2lo="s/\\.${objext}\$/.lo/"
593d63fdb69Smrgextracted_archives=
594d63fdb69Smrgextracted_serial=0
5953da084b3Smrg
596d63fdb69Smrgopt_dry_run=false
597d63fdb69Smrgopt_duplicate_deps=false
598d63fdb69Smrgopt_silent=false
599d63fdb69Smrgopt_debug=:
6003da084b3Smrg
601d63fdb69Smrg# If this variable is set in any of the actions, the command in it
602d63fdb69Smrg# will be execed at the end.  This prevents here-documents from being
603d63fdb69Smrg# left over by shells.
604d63fdb69Smrgexec_cmd=
6053da084b3Smrg
606d63fdb69Smrg# func_fatal_configuration arg...
607d63fdb69Smrg# Echo program name prefixed message to standard error, followed by
608d63fdb69Smrg# a configuration failure hint, and exit.
609d63fdb69Smrgfunc_fatal_configuration ()
610d63fdb69Smrg{
611d63fdb69Smrg    func_error ${1+"$@"}
612d63fdb69Smrg    func_error "See the $PACKAGE documentation for more information."
613d63fdb69Smrg    func_fatal_error "Fatal configuration error."
614d63fdb69Smrg}
615d63fdb69Smrg
616d63fdb69Smrg
617d63fdb69Smrg# func_config
618d63fdb69Smrg# Display the configuration for all the tags in this script.
619d63fdb69Smrgfunc_config ()
620d63fdb69Smrg{
621d63fdb69Smrg    re_begincf='^# ### BEGIN LIBTOOL'
622d63fdb69Smrg    re_endcf='^# ### END LIBTOOL'
623d63fdb69Smrg
624d63fdb69Smrg    # Default configuration.
625d63fdb69Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
6263da084b3Smrg
6273da084b3Smrg    # Now print the configurations for the tags.
6283da084b3Smrg    for tagname in $taglist; do
629d63fdb69Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
6303da084b3Smrg    done
6313da084b3Smrg
632d63fdb69Smrg    exit $?
633d63fdb69Smrg}
6343da084b3Smrg
635d63fdb69Smrg# func_features
636d63fdb69Smrg# Display the features supported by this script.
637d63fdb69Smrgfunc_features ()
638d63fdb69Smrg{
639d63fdb69Smrg    $ECHO "host: $host"
6403da084b3Smrg    if test "$build_libtool_libs" = yes; then
641d63fdb69Smrg      $ECHO "enable shared libraries"
6423da084b3Smrg    else
643d63fdb69Smrg      $ECHO "disable shared libraries"
6443da084b3Smrg    fi
6453da084b3Smrg    if test "$build_old_libs" = yes; then
646d63fdb69Smrg      $ECHO "enable static libraries"
6473da084b3Smrg    else
648d63fdb69Smrg      $ECHO "disable static libraries"
6493da084b3Smrg    fi
650d63fdb69Smrg
6513da084b3Smrg    exit $?
652d63fdb69Smrg}
653d63fdb69Smrg
654d63fdb69Smrg# func_enable_tag tagname
655d63fdb69Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
656d63fdb69Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
657d63fdb69Smrg# variable here.
658d63fdb69Smrgfunc_enable_tag ()
659d63fdb69Smrg{
660d63fdb69Smrg  # Global variable:
661d63fdb69Smrg  tagname="$1"
6623da084b3Smrg
663d63fdb69Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
664d63fdb69Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
665d63fdb69Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
6663da084b3Smrg
667d63fdb69Smrg  # Validate tagname.
668d63fdb69Smrg  case $tagname in
669d63fdb69Smrg    *[!-_A-Za-z0-9,/]*)
670d63fdb69Smrg      func_fatal_error "invalid tag name: $tagname"
671d63fdb69Smrg      ;;
672d63fdb69Smrg  esac
6733da084b3Smrg
674d63fdb69Smrg  # Don't test for the "default" C tag, as we know it's
675d63fdb69Smrg  # there but not specially marked.
676d63fdb69Smrg  case $tagname in
677d63fdb69Smrg    CC) ;;
678d63fdb69Smrg    *)
679d63fdb69Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
680d63fdb69Smrg	taglist="$taglist $tagname"
681d63fdb69Smrg
682d63fdb69Smrg	# Evaluate the configuration.  Be careful to quote the path
683d63fdb69Smrg	# and the sed script, to avoid splitting on whitespace, but
684d63fdb69Smrg	# also don't use non-portable quotes within backquotes within
685d63fdb69Smrg	# quotes we have to do it in 2 steps:
686d63fdb69Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
687d63fdb69Smrg	eval "$extractedcf"
688d63fdb69Smrg      else
689d63fdb69Smrg	func_error "ignoring unknown tag $tagname"
690d63fdb69Smrg      fi
691d63fdb69Smrg      ;;
692d63fdb69Smrg  esac
693d63fdb69Smrg}
6943da084b3Smrg
695d63fdb69Smrg# Parse options once, thoroughly.  This comes as soon as possible in
696d63fdb69Smrg# the script to make things like `libtool --version' happen quickly.
697d63fdb69Smrg{
6983da084b3Smrg
699d63fdb69Smrg  # Shorthand for --mode=foo, only valid as the first argument
700d63fdb69Smrg  case $1 in
701d63fdb69Smrg  clean|clea|cle|cl)
702d63fdb69Smrg    shift; set dummy --mode clean ${1+"$@"}; shift
7033da084b3Smrg    ;;
704d63fdb69Smrg  compile|compil|compi|comp|com|co|c)
705d63fdb69Smrg    shift; set dummy --mode compile ${1+"$@"}; shift
7063da084b3Smrg    ;;
707d63fdb69Smrg  execute|execut|execu|exec|exe|ex|e)
708d63fdb69Smrg    shift; set dummy --mode execute ${1+"$@"}; shift
7093da084b3Smrg    ;;
710d63fdb69Smrg  finish|finis|fini|fin|fi|f)
711d63fdb69Smrg    shift; set dummy --mode finish ${1+"$@"}; shift
7123da084b3Smrg    ;;
713d63fdb69Smrg  install|instal|insta|inst|ins|in|i)
714d63fdb69Smrg    shift; set dummy --mode install ${1+"$@"}; shift
715d63fdb69Smrg    ;;
716d63fdb69Smrg  link|lin|li|l)
717d63fdb69Smrg    shift; set dummy --mode link ${1+"$@"}; shift
718d63fdb69Smrg    ;;
719d63fdb69Smrg  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
720d63fdb69Smrg    shift; set dummy --mode uninstall ${1+"$@"}; shift
7213da084b3Smrg    ;;
7223da084b3Smrg  esac
7233da084b3Smrg
724d63fdb69Smrg  # Parse non-mode specific arguments:
725d63fdb69Smrg  while test "$#" -gt 0; do
726d63fdb69Smrg    opt="$1"
727d63fdb69Smrg    shift
7283da084b3Smrg
729d63fdb69Smrg    case $opt in
730d63fdb69Smrg      --config)		func_config					;;
7313da084b3Smrg
732d63fdb69Smrg      --debug)		preserve_args="$preserve_args $opt"
733d63fdb69Smrg			func_echo "enabling shell trace mode"
734d63fdb69Smrg			opt_debug='set -x'
735d63fdb69Smrg			$opt_debug
736d63fdb69Smrg			;;
7373da084b3Smrg
738d63fdb69Smrg      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
739d63fdb69Smrg			execute_dlfiles="$execute_dlfiles $1"
740d63fdb69Smrg			shift
741d63fdb69Smrg			;;
7423da084b3Smrg
743d63fdb69Smrg      --dry-run | -n)	opt_dry_run=:					;;
744d63fdb69Smrg      --features)       func_features					;;
745d63fdb69Smrg      --finish)		mode="finish"					;;
746d63fdb69Smrg
747d63fdb69Smrg      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
748d63fdb69Smrg			case $1 in
749d63fdb69Smrg			  # Valid mode arguments:
750d63fdb69Smrg			  clean)	;;
751d63fdb69Smrg			  compile)	;;
752d63fdb69Smrg			  execute)	;;
753d63fdb69Smrg			  finish)	;;
754d63fdb69Smrg			  install)	;;
755d63fdb69Smrg			  link)		;;
756d63fdb69Smrg			  relink)	;;
757d63fdb69Smrg			  uninstall)	;;
758d63fdb69Smrg
759d63fdb69Smrg			  # Catch anything else as an error
760d63fdb69Smrg			  *) func_error "invalid argument for $opt"
761d63fdb69Smrg			     exit_cmd=exit
762d63fdb69Smrg			     break
763d63fdb69Smrg			     ;;
764d63fdb69Smrg		        esac
765d63fdb69Smrg
766d63fdb69Smrg			mode="$1"
767d63fdb69Smrg			shift
768d63fdb69Smrg			;;
769d63fdb69Smrg
770d63fdb69Smrg      --preserve-dup-deps)
771d63fdb69Smrg			opt_duplicate_deps=:				;;
772d63fdb69Smrg
773d63fdb69Smrg      --quiet|--silent)	preserve_args="$preserve_args $opt"
774d63fdb69Smrg			opt_silent=:
775d63fdb69Smrg			;;
776d63fdb69Smrg
777d63fdb69Smrg      --verbose| -v)	preserve_args="$preserve_args $opt"
778d63fdb69Smrg			opt_silent=false
779d63fdb69Smrg			;;
780d63fdb69Smrg
781d63fdb69Smrg      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
782d63fdb69Smrg			preserve_args="$preserve_args $opt $1"
783d63fdb69Smrg			func_enable_tag "$1"	# tagname is set here
784d63fdb69Smrg			shift
785d63fdb69Smrg			;;
786d63fdb69Smrg
787d63fdb69Smrg      # Separate optargs to long options:
788d63fdb69Smrg      -dlopen=*|--mode=*|--tag=*)
789d63fdb69Smrg			func_opt_split "$opt"
790d63fdb69Smrg			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
791d63fdb69Smrg			shift
792d63fdb69Smrg			;;
793d63fdb69Smrg
794d63fdb69Smrg      -\?|-h)		func_usage					;;
795d63fdb69Smrg      --help)		opt_help=:					;;
796d63fdb69Smrg      --version)	func_version					;;
797d63fdb69Smrg
798d63fdb69Smrg      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
799d63fdb69Smrg
800d63fdb69Smrg      *)		nonopt="$opt"
801d63fdb69Smrg			break
802d63fdb69Smrg			;;
803d63fdb69Smrg    esac
804d63fdb69Smrg  done
805d63fdb69Smrg
806d63fdb69Smrg
807d63fdb69Smrg  case $host in
808d63fdb69Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
809d63fdb69Smrg      # don't eliminate duplications in $postdeps and $predeps
810d63fdb69Smrg      opt_duplicate_compiler_generated_deps=:
8113da084b3Smrg      ;;
8123da084b3Smrg    *)
813d63fdb69Smrg      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
814d63fdb69Smrg      ;;
815d63fdb69Smrg  esac
8163da084b3Smrg
817d63fdb69Smrg  # Having warned about all mis-specified options, bail out if
818d63fdb69Smrg  # anything was wrong.
819d63fdb69Smrg  $exit_cmd $EXIT_FAILURE
820d63fdb69Smrg}
821d63fdb69Smrg
822d63fdb69Smrg# func_check_version_match
823d63fdb69Smrg# Ensure that we are using m4 macros, and libtool script from the same
824d63fdb69Smrg# release of libtool.
825d63fdb69Smrgfunc_check_version_match ()
826d63fdb69Smrg{
827d63fdb69Smrg  if test "$package_revision" != "$macro_revision"; then
828d63fdb69Smrg    if test "$VERSION" != "$macro_version"; then
829d63fdb69Smrg      if test -z "$macro_version"; then
830d63fdb69Smrg        cat >&2 <<_LT_EOF
831d63fdb69Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
832d63fdb69Smrg$progname: definition of this LT_INIT comes from an older release.
833d63fdb69Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
834d63fdb69Smrg$progname: and run autoconf again.
835d63fdb69Smrg_LT_EOF
836d63fdb69Smrg      else
837d63fdb69Smrg        cat >&2 <<_LT_EOF
838d63fdb69Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
839d63fdb69Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
840d63fdb69Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
841d63fdb69Smrg$progname: and run autoconf again.
842d63fdb69Smrg_LT_EOF
8433da084b3Smrg      fi
844d63fdb69Smrg    else
845d63fdb69Smrg      cat >&2 <<_LT_EOF
846d63fdb69Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
847d63fdb69Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
848d63fdb69Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
849d63fdb69Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
850d63fdb69Smrg_LT_EOF
851d63fdb69Smrg    fi
852d63fdb69Smrg
853d63fdb69Smrg    exit $EXIT_MISMATCH
854d63fdb69Smrg  fi
855d63fdb69Smrg}
856d63fdb69Smrg
857d63fdb69Smrg
858d63fdb69Smrg## ----------- ##
859d63fdb69Smrg##    Main.    ##
860d63fdb69Smrg## ----------- ##
861d63fdb69Smrg
862d63fdb69Smrg$opt_help || {
863d63fdb69Smrg  # Sanity checks first:
864d63fdb69Smrg  func_check_version_match
865d63fdb69Smrg
866d63fdb69Smrg  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
867d63fdb69Smrg    func_fatal_configuration "not configured to build any kind of library"
8683da084b3Smrg  fi
8693da084b3Smrg
870d63fdb69Smrg  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
871d63fdb69Smrg
872d63fdb69Smrg
873d63fdb69Smrg  # Darwin sucks
874d63fdb69Smrg  eval std_shrext=\"$shrext_cmds\"
875d63fdb69Smrg
876d63fdb69Smrg
8773da084b3Smrg  # Only execute mode is allowed to have -dlopen flags.
8783da084b3Smrg  if test -n "$execute_dlfiles" && test "$mode" != execute; then
879d63fdb69Smrg    func_error "unrecognized option \`-dlopen'"
880d63fdb69Smrg    $ECHO "$help" 1>&2
8813da084b3Smrg    exit $EXIT_FAILURE
8823da084b3Smrg  fi
8833da084b3Smrg
8843da084b3Smrg  # Change the help message to a mode-specific one.
8853da084b3Smrg  generic_help="$help"
886d63fdb69Smrg  help="Try \`$progname --help --mode=$mode' for more information."
887d63fdb69Smrg}
8883da084b3Smrg
8893da084b3Smrg
890d63fdb69Smrg# func_lalib_p file
891d63fdb69Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
892d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out
893d63fdb69Smrg# determined imposters.
894d63fdb69Smrgfunc_lalib_p ()
895d63fdb69Smrg{
896d63fdb69Smrg    test -f "$1" &&
897d63fdb69Smrg      $SED -e 4q "$1" 2>/dev/null \
898d63fdb69Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
899d63fdb69Smrg}
9003da084b3Smrg
901d63fdb69Smrg# func_lalib_unsafe_p file
902d63fdb69Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
903d63fdb69Smrg# This function implements the same check as func_lalib_p without
904d63fdb69Smrg# resorting to external programs.  To this end, it redirects stdin and
905d63fdb69Smrg# closes it afterwards, without saving the original file descriptor.
906d63fdb69Smrg# As a safety measure, use it only where a negative result would be
907d63fdb69Smrg# fatal anyway.  Works if `file' does not exist.
908d63fdb69Smrgfunc_lalib_unsafe_p ()
909d63fdb69Smrg{
910d63fdb69Smrg    lalib_p=no
911d63fdb69Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
912d63fdb69Smrg	for lalib_p_l in 1 2 3 4
913d63fdb69Smrg	do
914d63fdb69Smrg	    read lalib_p_line
915d63fdb69Smrg	    case "$lalib_p_line" in
916d63fdb69Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
917d63fdb69Smrg	    esac
918d63fdb69Smrg	done
919d63fdb69Smrg	exec 0<&5 5<&-
920d63fdb69Smrg    fi
921d63fdb69Smrg    test "$lalib_p" = yes
922d63fdb69Smrg}
9233da084b3Smrg
924d63fdb69Smrg# func_ltwrapper_script_p file
925d63fdb69Smrg# True iff FILE is a libtool wrapper script
926d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out
927d63fdb69Smrg# determined imposters.
928d63fdb69Smrgfunc_ltwrapper_script_p ()
929d63fdb69Smrg{
930d63fdb69Smrg    func_lalib_p "$1"
931d63fdb69Smrg}
9323da084b3Smrg
933d63fdb69Smrg# func_ltwrapper_executable_p file
934d63fdb69Smrg# True iff FILE is a libtool wrapper executable
935d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out
936d63fdb69Smrg# determined imposters.
937d63fdb69Smrgfunc_ltwrapper_executable_p ()
938d63fdb69Smrg{
939d63fdb69Smrg    func_ltwrapper_exec_suffix=
940d63fdb69Smrg    case $1 in
941d63fdb69Smrg    *.exe) ;;
942d63fdb69Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
943d63fdb69Smrg    esac
944d63fdb69Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
945d63fdb69Smrg}
9463da084b3Smrg
947d63fdb69Smrg# func_ltwrapper_scriptname file
948d63fdb69Smrg# Assumes file is an ltwrapper_executable
949d63fdb69Smrg# uses $file to determine the appropriate filename for a
950d63fdb69Smrg# temporary ltwrapper_script.
951d63fdb69Smrgfunc_ltwrapper_scriptname ()
952d63fdb69Smrg{
953d63fdb69Smrg    func_ltwrapper_scriptname_result=""
954d63fdb69Smrg    if func_ltwrapper_executable_p "$1"; then
955d63fdb69Smrg	func_dirname_and_basename "$1" "" "."
956d63fdb69Smrg	func_stripname '' '.exe' "$func_basename_result"
957d63fdb69Smrg	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
958d63fdb69Smrg    fi
959d63fdb69Smrg}
9603da084b3Smrg
961d63fdb69Smrg# func_ltwrapper_p file
962d63fdb69Smrg# True iff FILE is a libtool wrapper script or wrapper executable
963d63fdb69Smrg# This function is only a basic sanity check; it will hardly flush out
964d63fdb69Smrg# determined imposters.
965d63fdb69Smrgfunc_ltwrapper_p ()
966d63fdb69Smrg{
967d63fdb69Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
968d63fdb69Smrg}
9693da084b3Smrg
9703da084b3Smrg
971d63fdb69Smrg# func_execute_cmds commands fail_cmd
972d63fdb69Smrg# Execute tilde-delimited COMMANDS.
973d63fdb69Smrg# If FAIL_CMD is given, eval that upon failure.
974d63fdb69Smrg# FAIL_CMD may read-access the current command in variable CMD!
975d63fdb69Smrgfunc_execute_cmds ()
976d63fdb69Smrg{
977d63fdb69Smrg    $opt_debug
978d63fdb69Smrg    save_ifs=$IFS; IFS='~'
979d63fdb69Smrg    for cmd in $1; do
980d63fdb69Smrg      IFS=$save_ifs
981d63fdb69Smrg      eval cmd=\"$cmd\"
982d63fdb69Smrg      func_show_eval "$cmd" "${2-:}"
983d63fdb69Smrg    done
984d63fdb69Smrg    IFS=$save_ifs
985d63fdb69Smrg}
986d63fdb69Smrg
987d63fdb69Smrg
988d63fdb69Smrg# func_source file
989d63fdb69Smrg# Source FILE, adding directory component if necessary.
990d63fdb69Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
991d63fdb69Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
992d63fdb69Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
993d63fdb69Smrg# `FILE.' does not work on cygwin managed mounts.
994d63fdb69Smrgfunc_source ()
995d63fdb69Smrg{
996d63fdb69Smrg    $opt_debug
997d63fdb69Smrg    case $1 in
998d63fdb69Smrg    */* | *\\*)	. "$1" ;;
999d63fdb69Smrg    *)		. "./$1" ;;
1000d63fdb69Smrg    esac
1001d63fdb69Smrg}
1002d63fdb69Smrg
1003d63fdb69Smrg
1004d63fdb69Smrg# func_infer_tag arg
1005d63fdb69Smrg# Infer tagged configuration to use if any are available and
1006d63fdb69Smrg# if one wasn't chosen via the "--tag" command line option.
1007d63fdb69Smrg# Only attempt this if the compiler in the base compile
1008d63fdb69Smrg# command doesn't match the default compiler.
1009d63fdb69Smrg# arg is usually of the form 'gcc ...'
1010d63fdb69Smrgfunc_infer_tag ()
1011d63fdb69Smrg{
1012d63fdb69Smrg    $opt_debug
1013d63fdb69Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1014d63fdb69Smrg      CC_quoted=
1015d63fdb69Smrg      for arg in $CC; do
1016d63fdb69Smrg        func_quote_for_eval "$arg"
1017d63fdb69Smrg	CC_quoted="$CC_quoted $func_quote_for_eval_result"
1018d63fdb69Smrg      done
1019d63fdb69Smrg      case $@ in
1020d63fdb69Smrg      # Blanks in the command may have been stripped by the calling shell,
1021d63fdb69Smrg      # but not from the CC environment variable when configure was run.
1022d63fdb69Smrg      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
1023d63fdb69Smrg      # Blanks at the start of $base_compile will cause this to fail
1024d63fdb69Smrg      # if we don't check for them as well.
1025d63fdb69Smrg      *)
1026d63fdb69Smrg	for z in $available_tags; do
1027d63fdb69Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1028d63fdb69Smrg	    # Evaluate the configuration.
1029d63fdb69Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1030d63fdb69Smrg	    CC_quoted=
1031d63fdb69Smrg	    for arg in $CC; do
1032d63fdb69Smrg	      # Double-quote args containing other shell metacharacters.
1033d63fdb69Smrg	      func_quote_for_eval "$arg"
1034d63fdb69Smrg	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
1035d63fdb69Smrg	    done
1036d63fdb69Smrg	    case "$@ " in
1037d63fdb69Smrg	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
1038d63fdb69Smrg	      # The compiler in the base compile command matches
1039d63fdb69Smrg	      # the one in the tagged configuration.
1040d63fdb69Smrg	      # Assume this is the tagged configuration we want.
1041d63fdb69Smrg	      tagname=$z
1042d63fdb69Smrg	      break
1043d63fdb69Smrg	      ;;
10443da084b3Smrg	    esac
1045d63fdb69Smrg	  fi
1046d63fdb69Smrg	done
1047d63fdb69Smrg	# If $tagname still isn't set, then no tagged configuration
1048d63fdb69Smrg	# was found and let the user know that the "--tag" command
1049d63fdb69Smrg	# line option must be used.
1050d63fdb69Smrg	if test -z "$tagname"; then
1051d63fdb69Smrg	  func_echo "unable to infer tagged configuration"
1052d63fdb69Smrg	  func_fatal_error "specify a tag with \`--tag'"
1053d63fdb69Smrg#	else
1054d63fdb69Smrg#	  func_verbose "using $tagname tagged configuration"
1055d63fdb69Smrg	fi
1056d63fdb69Smrg	;;
1057d63fdb69Smrg      esac
1058d63fdb69Smrg    fi
1059d63fdb69Smrg}
1060d63fdb69Smrg
1061d63fdb69Smrg
1062d63fdb69Smrg
1063d63fdb69Smrg# func_write_libtool_object output_name pic_name nonpic_name
1064d63fdb69Smrg# Create a libtool object file (analogous to a ".la" file),
1065d63fdb69Smrg# but don't create it if we're doing a dry run.
1066d63fdb69Smrgfunc_write_libtool_object ()
1067d63fdb69Smrg{
1068d63fdb69Smrg    write_libobj=${1}
1069d63fdb69Smrg    if test "$build_libtool_libs" = yes; then
1070d63fdb69Smrg      write_lobj=\'${2}\'
1071d63fdb69Smrg    else
1072d63fdb69Smrg      write_lobj=none
1073d63fdb69Smrg    fi
1074d63fdb69Smrg
1075d63fdb69Smrg    if test "$build_old_libs" = yes; then
1076d63fdb69Smrg      write_oldobj=\'${3}\'
1077d63fdb69Smrg    else
1078d63fdb69Smrg      write_oldobj=none
1079d63fdb69Smrg    fi
1080d63fdb69Smrg
1081d63fdb69Smrg    $opt_dry_run || {
1082d63fdb69Smrg      cat >${write_libobj}T <<EOF
1083d63fdb69Smrg# $write_libobj - a libtool object file
1084d63fdb69Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1085d63fdb69Smrg#
1086d63fdb69Smrg# Please DO NOT delete this file!
1087d63fdb69Smrg# It is necessary for linking the library.
1088d63fdb69Smrg
1089d63fdb69Smrg# Name of the PIC object.
1090d63fdb69Smrgpic_object=$write_lobj
1091d63fdb69Smrg
1092d63fdb69Smrg# Name of the non-PIC object
1093d63fdb69Smrgnon_pic_object=$write_oldobj
1094d63fdb69Smrg
1095d63fdb69SmrgEOF
1096d63fdb69Smrg      $MV "${write_libobj}T" "${write_libobj}"
1097d63fdb69Smrg    }
1098d63fdb69Smrg}
1099d63fdb69Smrg
1100d63fdb69Smrg# func_mode_compile arg...
1101d63fdb69Smrgfunc_mode_compile ()
1102d63fdb69Smrg{
1103d63fdb69Smrg    $opt_debug
1104d63fdb69Smrg    # Get the compilation command and the source file.
1105d63fdb69Smrg    base_compile=
1106d63fdb69Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1107d63fdb69Smrg    suppress_opt=yes
1108d63fdb69Smrg    suppress_output=
1109d63fdb69Smrg    arg_mode=normal
1110d63fdb69Smrg    libobj=
1111d63fdb69Smrg    later=
1112d63fdb69Smrg    pie_flag=
1113d63fdb69Smrg
1114d63fdb69Smrg    for arg
1115d63fdb69Smrg    do
1116d63fdb69Smrg      case $arg_mode in
1117d63fdb69Smrg      arg  )
1118d63fdb69Smrg	# do not "continue".  Instead, add this to base_compile
1119d63fdb69Smrg	lastarg="$arg"
1120d63fdb69Smrg	arg_mode=normal
1121d63fdb69Smrg	;;
1122d63fdb69Smrg
1123d63fdb69Smrg      target )
1124d63fdb69Smrg	libobj="$arg"
1125d63fdb69Smrg	arg_mode=normal
1126d63fdb69Smrg	continue
1127d63fdb69Smrg	;;
1128d63fdb69Smrg
1129d63fdb69Smrg      normal )
1130d63fdb69Smrg	# Accept any command-line options.
1131d63fdb69Smrg	case $arg in
1132d63fdb69Smrg	-o)
1133d63fdb69Smrg	  test -n "$libobj" && \
1134d63fdb69Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1135d63fdb69Smrg	  arg_mode=target
1136d63fdb69Smrg	  continue
1137d63fdb69Smrg	  ;;
1138d63fdb69Smrg
1139d63fdb69Smrg	-pie | -fpie | -fPIE)
1140d63fdb69Smrg          pie_flag="$pie_flag $arg"
1141d63fdb69Smrg	  continue
1142d63fdb69Smrg	  ;;
1143d63fdb69Smrg
1144d63fdb69Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1145d63fdb69Smrg	  later="$later $arg"
1146d63fdb69Smrg	  continue
1147d63fdb69Smrg	  ;;
1148d63fdb69Smrg
1149d63fdb69Smrg	-no-suppress)
1150d63fdb69Smrg	  suppress_opt=no
1151d63fdb69Smrg	  continue
1152d63fdb69Smrg	  ;;
1153d63fdb69Smrg
1154d63fdb69Smrg	-Xcompiler)
1155d63fdb69Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
1156d63fdb69Smrg	  continue      #  The current "srcfile" will either be retained or
1157d63fdb69Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
1158d63fdb69Smrg
1159d63fdb69Smrg	-Wc,*)
1160d63fdb69Smrg	  func_stripname '-Wc,' '' "$arg"
1161d63fdb69Smrg	  args=$func_stripname_result
1162d63fdb69Smrg	  lastarg=
1163d63fdb69Smrg	  save_ifs="$IFS"; IFS=','
1164d63fdb69Smrg	  for arg in $args; do
1165d63fdb69Smrg	    IFS="$save_ifs"
1166d63fdb69Smrg	    func_quote_for_eval "$arg"
1167d63fdb69Smrg	    lastarg="$lastarg $func_quote_for_eval_result"
11683da084b3Smrg	  done
11693da084b3Smrg	  IFS="$save_ifs"
1170d63fdb69Smrg	  func_stripname ' ' '' "$lastarg"
1171d63fdb69Smrg	  lastarg=$func_stripname_result
11723da084b3Smrg
11733da084b3Smrg	  # Add the arguments to base_compile.
11743da084b3Smrg	  base_compile="$base_compile $lastarg"
11753da084b3Smrg	  continue
11763da084b3Smrg	  ;;
11773da084b3Smrg
1178d63fdb69Smrg	*)
11793da084b3Smrg	  # Accept the current argument as the source file.
11803da084b3Smrg	  # The previous "srcfile" becomes the current argument.
11813da084b3Smrg	  #
11823da084b3Smrg	  lastarg="$srcfile"
11833da084b3Smrg	  srcfile="$arg"
11843da084b3Smrg	  ;;
11853da084b3Smrg	esac  #  case $arg
11863da084b3Smrg	;;
11873da084b3Smrg      esac    #  case $arg_mode
11883da084b3Smrg
11893da084b3Smrg      # Aesthetically quote the previous argument.
1190d63fdb69Smrg      func_quote_for_eval "$lastarg"
1191d63fdb69Smrg      base_compile="$base_compile $func_quote_for_eval_result"
11923da084b3Smrg    done # for arg
11933da084b3Smrg
11943da084b3Smrg    case $arg_mode in
11953da084b3Smrg    arg)
1196d63fdb69Smrg      func_fatal_error "you must specify an argument for -Xcompile"
11973da084b3Smrg      ;;
11983da084b3Smrg    target)
1199d63fdb69Smrg      func_fatal_error "you must specify a target with \`-o'"
12003da084b3Smrg      ;;
12013da084b3Smrg    *)
12023da084b3Smrg      # Get the name of the library object.
1203d63fdb69Smrg      test -z "$libobj" && {
1204d63fdb69Smrg	func_basename "$srcfile"
1205d63fdb69Smrg	libobj="$func_basename_result"
1206d63fdb69Smrg      }
12073da084b3Smrg      ;;
12083da084b3Smrg    esac
12093da084b3Smrg
12103da084b3Smrg    # Recognize several different file suffixes.
12113da084b3Smrg    # If the user specifies -o file.o, it is replaced with file.lo
12123da084b3Smrg    case $libobj in
1213d63fdb69Smrg    *.[cCFSifmso] | \
1214d63fdb69Smrg    *.ada | *.adb | *.ads | *.asm | \
1215d63fdb69Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
1216d63fdb69Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
1217d63fdb69Smrg      func_xform "$libobj"
1218d63fdb69Smrg      libobj=$func_xform_result
1219d63fdb69Smrg      ;;
12203da084b3Smrg    esac
12213da084b3Smrg
12223da084b3Smrg    case $libobj in
1223d63fdb69Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
12243da084b3Smrg    *)
1225d63fdb69Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
12263da084b3Smrg      ;;
12273da084b3Smrg    esac
12283da084b3Smrg
12293da084b3Smrg    func_infer_tag $base_compile
12303da084b3Smrg
12313da084b3Smrg    for arg in $later; do
12323da084b3Smrg      case $arg in
1233d63fdb69Smrg      -shared)
1234d63fdb69Smrg	test "$build_libtool_libs" != yes && \
1235d63fdb69Smrg	  func_fatal_configuration "can not build a shared library"
1236d63fdb69Smrg	build_old_libs=no
1237d63fdb69Smrg	continue
1238d63fdb69Smrg	;;
1239d63fdb69Smrg
12403da084b3Smrg      -static)
1241d63fdb69Smrg	build_libtool_libs=no
12423da084b3Smrg	build_old_libs=yes
12433da084b3Smrg	continue
12443da084b3Smrg	;;
12453da084b3Smrg
12463da084b3Smrg      -prefer-pic)
12473da084b3Smrg	pic_mode=yes
12483da084b3Smrg	continue
12493da084b3Smrg	;;
12503da084b3Smrg
12513da084b3Smrg      -prefer-non-pic)
12523da084b3Smrg	pic_mode=no
12533da084b3Smrg	continue
12543da084b3Smrg	;;
12553da084b3Smrg      esac
12563da084b3Smrg    done
12573da084b3Smrg
1258d63fdb69Smrg    func_quote_for_eval "$libobj"
1259d63fdb69Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
1260d63fdb69Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
1261d63fdb69Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
1262d63fdb69Smrg    func_dirname_and_basename "$obj" "/" ""
1263d63fdb69Smrg    objname="$func_basename_result"
1264d63fdb69Smrg    xdir="$func_dirname_result"
12653da084b3Smrg    lobj=${xdir}$objdir/$objname
12663da084b3Smrg
1267d63fdb69Smrg    test -z "$base_compile" && \
1268d63fdb69Smrg      func_fatal_help "you must specify a compilation command"
12693da084b3Smrg
12703da084b3Smrg    # Delete any leftover library objects.
12713da084b3Smrg    if test "$build_old_libs" = yes; then
12723da084b3Smrg      removelist="$obj $lobj $libobj ${libobj}T"
12733da084b3Smrg    else
12743da084b3Smrg      removelist="$lobj $libobj ${libobj}T"
12753da084b3Smrg    fi
12763da084b3Smrg
12773da084b3Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
12783da084b3Smrg    case $host_os in
1279d63fdb69Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
12803da084b3Smrg      pic_mode=default
12813da084b3Smrg      ;;
12823da084b3Smrg    esac
12833da084b3Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
12843da084b3Smrg      # non-PIC code in shared libraries is not supported
12853da084b3Smrg      pic_mode=default
12863da084b3Smrg    fi
12873da084b3Smrg
12883da084b3Smrg    # Calculate the filename of the output object if compiler does
12893da084b3Smrg    # not support -o with -c
12903da084b3Smrg    if test "$compiler_c_o" = no; then
1291d63fdb69Smrg      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
12923da084b3Smrg      lockfile="$output_obj.lock"
12933da084b3Smrg    else
12943da084b3Smrg      output_obj=
12953da084b3Smrg      need_locks=no
12963da084b3Smrg      lockfile=
12973da084b3Smrg    fi
12983da084b3Smrg
12993da084b3Smrg    # Lock this critical section if it is needed
13003da084b3Smrg    # We use this script file to make the link, it avoids creating a new file
13013da084b3Smrg    if test "$need_locks" = yes; then
1302d63fdb69Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
1303d63fdb69Smrg	func_echo "Waiting for $lockfile to be removed"
13043da084b3Smrg	sleep 2
13053da084b3Smrg      done
13063da084b3Smrg    elif test "$need_locks" = warn; then
13073da084b3Smrg      if test -f "$lockfile"; then
1308d63fdb69Smrg	$ECHO "\
13093da084b3Smrg*** ERROR, $lockfile exists and contains:
13103da084b3Smrg`cat $lockfile 2>/dev/null`
13113da084b3Smrg
13123da084b3SmrgThis indicates that another process is trying to use the same
13133da084b3Smrgtemporary object file, and libtool could not work around it because
13143da084b3Smrgyour compiler does not support \`-c' and \`-o' together.  If you
13153da084b3Smrgrepeat this compilation, it may succeed, by chance, but you had better
13163da084b3Smrgavoid parallel builds (make -j) in this platform, or get a better
13173da084b3Smrgcompiler."
13183da084b3Smrg
1319d63fdb69Smrg	$opt_dry_run || $RM $removelist
13203da084b3Smrg	exit $EXIT_FAILURE
13213da084b3Smrg      fi
1322d63fdb69Smrg      removelist="$removelist $output_obj"
1323d63fdb69Smrg      $ECHO "$srcfile" > "$lockfile"
13243da084b3Smrg    fi
13253da084b3Smrg
1326d63fdb69Smrg    $opt_dry_run || $RM $removelist
1327d63fdb69Smrg    removelist="$removelist $lockfile"
1328d63fdb69Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
1329d63fdb69Smrg
13303da084b3Smrg    if test -n "$fix_srcfile_path"; then
13313da084b3Smrg      eval srcfile=\"$fix_srcfile_path\"
13323da084b3Smrg    fi
1333d63fdb69Smrg    func_quote_for_eval "$srcfile"
1334d63fdb69Smrg    qsrcfile=$func_quote_for_eval_result
13353da084b3Smrg
13363da084b3Smrg    # Only build a PIC object if we are building libtool libraries.
13373da084b3Smrg    if test "$build_libtool_libs" = yes; then
13383da084b3Smrg      # Without this assignment, base_compile gets emptied.
13393da084b3Smrg      fbsd_hideous_sh_bug=$base_compile
13403da084b3Smrg
13413da084b3Smrg      if test "$pic_mode" != no; then
13423da084b3Smrg	command="$base_compile $qsrcfile $pic_flag"
13433da084b3Smrg      else
13443da084b3Smrg	# Don't build PIC code
13453da084b3Smrg	command="$base_compile $qsrcfile"
13463da084b3Smrg      fi
13473da084b3Smrg
1348d63fdb69Smrg      func_mkdir_p "$xdir$objdir"
13493da084b3Smrg
13503da084b3Smrg      if test -z "$output_obj"; then
13513da084b3Smrg	# Place PIC objects in $objdir
13523da084b3Smrg	command="$command -o $lobj"
13533da084b3Smrg      fi
13543da084b3Smrg
1355d63fdb69Smrg      func_show_eval_locale "$command"	\
1356d63fdb69Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
13573da084b3Smrg
13583da084b3Smrg      if test "$need_locks" = warn &&
13593da084b3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
1360d63fdb69Smrg	$ECHO "\
13613da084b3Smrg*** ERROR, $lockfile contains:
13623da084b3Smrg`cat $lockfile 2>/dev/null`
13633da084b3Smrg
13643da084b3Smrgbut it should contain:
13653da084b3Smrg$srcfile
13663da084b3Smrg
13673da084b3SmrgThis indicates that another process is trying to use the same
13683da084b3Smrgtemporary object file, and libtool could not work around it because
13693da084b3Smrgyour compiler does not support \`-c' and \`-o' together.  If you
13703da084b3Smrgrepeat this compilation, it may succeed, by chance, but you had better
13713da084b3Smrgavoid parallel builds (make -j) in this platform, or get a better
13723da084b3Smrgcompiler."
13733da084b3Smrg
1374d63fdb69Smrg	$opt_dry_run || $RM $removelist
13753da084b3Smrg	exit $EXIT_FAILURE
13763da084b3Smrg      fi
13773da084b3Smrg
13783da084b3Smrg      # Just move the object if needed, then go on to compile the next one
13793da084b3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
1380d63fdb69Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
1381d63fdb69Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
13823da084b3Smrg      fi
13833da084b3Smrg
13843da084b3Smrg      # Allow error messages only from the first compilation.
13853da084b3Smrg      if test "$suppress_opt" = yes; then
1386d63fdb69Smrg	suppress_output=' >/dev/null 2>&1'
13873da084b3Smrg      fi
13883da084b3Smrg    fi
13893da084b3Smrg
13903da084b3Smrg    # Only build a position-dependent object if we build old libraries.
13913da084b3Smrg    if test "$build_old_libs" = yes; then
13923da084b3Smrg      if test "$pic_mode" != yes; then
13933da084b3Smrg	# Don't build PIC code
1394d63fdb69Smrg	command="$base_compile $qsrcfile$pie_flag"
13953da084b3Smrg      else
13963da084b3Smrg	command="$base_compile $qsrcfile $pic_flag"
13973da084b3Smrg      fi
13983da084b3Smrg      if test "$compiler_c_o" = yes; then
13993da084b3Smrg	command="$command -o $obj"
14003da084b3Smrg      fi
14013da084b3Smrg
14023da084b3Smrg      # Suppress compiler output if we already did a PIC compilation.
14033da084b3Smrg      command="$command$suppress_output"
1404d63fdb69Smrg      func_show_eval_locale "$command" \
1405d63fdb69Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
14063da084b3Smrg
14073da084b3Smrg      if test "$need_locks" = warn &&
14083da084b3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
1409d63fdb69Smrg	$ECHO "\
14103da084b3Smrg*** ERROR, $lockfile contains:
14113da084b3Smrg`cat $lockfile 2>/dev/null`
14123da084b3Smrg
14133da084b3Smrgbut it should contain:
14143da084b3Smrg$srcfile
14153da084b3Smrg
14163da084b3SmrgThis indicates that another process is trying to use the same
14173da084b3Smrgtemporary object file, and libtool could not work around it because
14183da084b3Smrgyour compiler does not support \`-c' and \`-o' together.  If you
14193da084b3Smrgrepeat this compilation, it may succeed, by chance, but you had better
14203da084b3Smrgavoid parallel builds (make -j) in this platform, or get a better
14213da084b3Smrgcompiler."
14223da084b3Smrg
1423d63fdb69Smrg	$opt_dry_run || $RM $removelist
14243da084b3Smrg	exit $EXIT_FAILURE
14253da084b3Smrg      fi
14263da084b3Smrg
14273da084b3Smrg      # Just move the object if needed
14283da084b3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
1429d63fdb69Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
1430d63fdb69Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
14313da084b3Smrg      fi
14323da084b3Smrg    fi
14333da084b3Smrg
1434d63fdb69Smrg    $opt_dry_run || {
1435d63fdb69Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
14363da084b3Smrg
1437d63fdb69Smrg      # Unlock the critical section if it was locked
1438d63fdb69Smrg      if test "$need_locks" != no; then
1439d63fdb69Smrg	removelist=$lockfile
1440d63fdb69Smrg        $RM "$lockfile"
1441d63fdb69Smrg      fi
1442d63fdb69Smrg    }
14433da084b3Smrg
14443da084b3Smrg    exit $EXIT_SUCCESS
1445d63fdb69Smrg}
14463da084b3Smrg
1447d63fdb69Smrg$opt_help || {
1448d63fdb69Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"}
1449d63fdb69Smrg}
14503da084b3Smrg
1451d63fdb69Smrgfunc_mode_help ()
1452d63fdb69Smrg{
1453d63fdb69Smrg    # We need to display help for each of the modes.
1454d63fdb69Smrg    case $mode in
1455d63fdb69Smrg      "")
1456d63fdb69Smrg        # Generic help is extracted from the usage comments
1457d63fdb69Smrg        # at the start of this file.
1458d63fdb69Smrg        func_help
1459d63fdb69Smrg        ;;
14603da084b3Smrg
1461d63fdb69Smrg      clean)
1462d63fdb69Smrg        $ECHO \
1463d63fdb69Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
14643da084b3Smrg
1465d63fdb69SmrgRemove files from the build directory.
14663da084b3Smrg
1467d63fdb69SmrgRM is the name of the program to use to delete files associated with each FILE
1468d63fdb69Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
1469d63fdb69Smrgto RM.
14703da084b3Smrg
1471d63fdb69SmrgIf FILE is a libtool library, object or program, all the files associated
1472d63fdb69Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
1473d63fdb69Smrg        ;;
14743da084b3Smrg
1475d63fdb69Smrg      compile)
1476d63fdb69Smrg      $ECHO \
1477d63fdb69Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
14783da084b3Smrg
1479d63fdb69SmrgCompile a source file into a libtool library object.
14803da084b3Smrg
1481d63fdb69SmrgThis mode accepts the following additional options:
14823da084b3Smrg
1483d63fdb69Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
1484d63fdb69Smrg  -no-suppress      do not suppress compiler output for multiple passes
1485d63fdb69Smrg  -prefer-pic       try to building PIC objects only
1486d63fdb69Smrg  -prefer-non-pic   try to building non-PIC objects only
1487d63fdb69Smrg  -shared           do not build a \`.o' file suitable for static linking
1488d63fdb69Smrg  -static           only build a \`.o' file suitable for static linking
14893da084b3Smrg
1490d63fdb69SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
1491d63fdb69Smrgfrom the given SOURCEFILE.
14923da084b3Smrg
1493d63fdb69SmrgThe output file name is determined by removing the directory component from
1494d63fdb69SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
1495d63fdb69Smrglibrary object suffix, \`.lo'."
1496d63fdb69Smrg        ;;
14973da084b3Smrg
1498d63fdb69Smrg      execute)
1499d63fdb69Smrg        $ECHO \
1500d63fdb69Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
15013da084b3Smrg
1502d63fdb69SmrgAutomatically set library path, then run a program.
15033da084b3Smrg
1504d63fdb69SmrgThis mode accepts the following additional options:
15053da084b3Smrg
1506d63fdb69Smrg  -dlopen FILE      add the directory containing FILE to the library path
15073da084b3Smrg
1508d63fdb69SmrgThis mode sets the library path environment variable according to \`-dlopen'
1509d63fdb69Smrgflags.
15103da084b3Smrg
1511d63fdb69SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
1512d63fdb69Smrginto their corresponding uninstalled binary, and any of their required library
1513d63fdb69Smrgdirectories are added to the library path.
15143da084b3Smrg
1515d63fdb69SmrgThen, COMMAND is executed, with ARGS as arguments."
1516d63fdb69Smrg        ;;
15173da084b3Smrg
1518d63fdb69Smrg      finish)
1519d63fdb69Smrg        $ECHO \
1520d63fdb69Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
15213da084b3Smrg
1522d63fdb69SmrgComplete the installation of libtool libraries.
15233da084b3Smrg
1524d63fdb69SmrgEach LIBDIR is a directory that contains libtool libraries.
15253da084b3Smrg
1526d63fdb69SmrgThe commands that this mode executes may require superuser privileges.  Use
1527d63fdb69Smrgthe \`--dry-run' option if you just want to see what would be executed."
1528d63fdb69Smrg        ;;
15293da084b3Smrg
1530d63fdb69Smrg      install)
1531d63fdb69Smrg        $ECHO \
1532d63fdb69Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
15333da084b3Smrg
1534d63fdb69SmrgInstall executables or libraries.
15353da084b3Smrg
1536d63fdb69SmrgINSTALL-COMMAND is the installation command.  The first component should be
1537d63fdb69Smrgeither the \`install' or \`cp' program.
15383da084b3Smrg
1539d63fdb69SmrgThe following components of INSTALL-COMMAND are treated specially:
15403da084b3Smrg
1541d63fdb69Smrg  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
15423da084b3Smrg
1543d63fdb69SmrgThe rest of the components are interpreted as arguments to that command (only
1544d63fdb69SmrgBSD-compatible install options are recognized)."
1545d63fdb69Smrg        ;;
15463da084b3Smrg
1547d63fdb69Smrg      link)
1548d63fdb69Smrg        $ECHO \
1549d63fdb69Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
15503da084b3Smrg
1551d63fdb69SmrgLink object files or libraries together to form another library, or to
1552d63fdb69Smrgcreate an executable program.
15533da084b3Smrg
1554d63fdb69SmrgLINK-COMMAND is a command using the C compiler that you would use to create
1555d63fdb69Smrga program from several object files.
15563da084b3Smrg
1557d63fdb69SmrgThe following components of LINK-COMMAND are treated specially:
15583da084b3Smrg
1559d63fdb69Smrg  -all-static       do not do any dynamic linking at all
1560d63fdb69Smrg  -avoid-version    do not add a version suffix if possible
1561d63fdb69Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
1562d63fdb69Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
1563d63fdb69Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
1564d63fdb69Smrg  -export-symbols SYMFILE
1565d63fdb69Smrg                    try to export only the symbols listed in SYMFILE
1566d63fdb69Smrg  -export-symbols-regex REGEX
1567d63fdb69Smrg                    try to export only the symbols matching REGEX
1568d63fdb69Smrg  -LLIBDIR          search LIBDIR for required installed libraries
1569d63fdb69Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
1570d63fdb69Smrg  -module           build a library that can dlopened
1571d63fdb69Smrg  -no-fast-install  disable the fast-install mode
1572d63fdb69Smrg  -no-install       link a not-installable executable
1573d63fdb69Smrg  -no-undefined     declare that a library does not refer to external symbols
1574d63fdb69Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
1575d63fdb69Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
1576d63fdb69Smrg  -precious-files-regex REGEX
1577d63fdb69Smrg                    don't remove output files matching REGEX
1578d63fdb69Smrg  -release RELEASE  specify package release information
1579d63fdb69Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
1580d63fdb69Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
1581d63fdb69Smrg  -shared           only do dynamic linking of libtool libraries
1582d63fdb69Smrg  -shrext SUFFIX    override the standard shared library file extension
1583d63fdb69Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
1584d63fdb69Smrg  -static-libtool-libs
1585d63fdb69Smrg                    do not do any dynamic linking of libtool libraries
1586d63fdb69Smrg  -version-info CURRENT[:REVISION[:AGE]]
1587d63fdb69Smrg                    specify library version info [each variable defaults to 0]
1588d63fdb69Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
15893da084b3Smrg
1590d63fdb69SmrgAll other options (arguments beginning with \`-') are ignored.
15913da084b3Smrg
1592d63fdb69SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
1593d63fdb69Smrgtreated as uninstalled libtool libraries, other files are standard or library
1594d63fdb69Smrgobject files.
15953da084b3Smrg
1596d63fdb69SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
1597d63fdb69Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
1598d63fdb69Smrgrequired, except when creating a convenience library.
15993da084b3Smrg
1600d63fdb69SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
1601d63fdb69Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
16023da084b3Smrg
1603d63fdb69SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
1604d63fdb69Smrgis created, otherwise an executable program is created."
16053da084b3Smrg        ;;
16063da084b3Smrg
1607d63fdb69Smrg      uninstall)
1608d63fdb69Smrg        $ECHO \
1609d63fdb69Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
16103da084b3Smrg
1611d63fdb69SmrgRemove libraries from an installation directory.
16123da084b3Smrg
1613d63fdb69SmrgRM is the name of the program to use to delete files associated with each FILE
1614d63fdb69Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
1615d63fdb69Smrgto RM.
16163da084b3Smrg
1617d63fdb69SmrgIf FILE is a libtool library, all the files associated with it are deleted.
1618d63fdb69SmrgOtherwise, only FILE itself is deleted using RM."
1619d63fdb69Smrg        ;;
16203da084b3Smrg
1621d63fdb69Smrg      *)
1622d63fdb69Smrg        func_fatal_help "invalid operation mode \`$mode'"
1623d63fdb69Smrg        ;;
1624d63fdb69Smrg    esac
16253da084b3Smrg
1626d63fdb69Smrg    $ECHO
1627d63fdb69Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
16283da084b3Smrg
1629d63fdb69Smrg    exit $?
1630d63fdb69Smrg}
16313da084b3Smrg
1632d63fdb69Smrg  # Now that we've collected a possible --mode arg, show help if necessary
1633d63fdb69Smrg  $opt_help && func_mode_help
16343da084b3Smrg
16353da084b3Smrg
1636d63fdb69Smrg# func_mode_execute arg...
1637d63fdb69Smrgfunc_mode_execute ()
1638d63fdb69Smrg{
1639d63fdb69Smrg    $opt_debug
1640d63fdb69Smrg    # The first argument is the command name.
1641d63fdb69Smrg    cmd="$nonopt"
1642d63fdb69Smrg    test -z "$cmd" && \
1643d63fdb69Smrg      func_fatal_help "you must specify a COMMAND"
16443da084b3Smrg
1645d63fdb69Smrg    # Handle -dlopen flags immediately.
1646d63fdb69Smrg    for file in $execute_dlfiles; do
1647d63fdb69Smrg      test -f "$file" \
1648d63fdb69Smrg	|| func_fatal_help "\`$file' is not a file"
16493da084b3Smrg
1650d63fdb69Smrg      dir=
1651d63fdb69Smrg      case $file in
1652d63fdb69Smrg      *.la)
1653d63fdb69Smrg	# Check to see that this really is a libtool archive.
1654d63fdb69Smrg	func_lalib_unsafe_p "$file" \
1655d63fdb69Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
16563da084b3Smrg
1657d63fdb69Smrg	# Read the libtool library.
1658d63fdb69Smrg	dlname=
1659d63fdb69Smrg	library_names=
1660d63fdb69Smrg	func_source "$file"
16613da084b3Smrg
1662d63fdb69Smrg	# Skip this library if it cannot be dlopened.
1663d63fdb69Smrg	if test -z "$dlname"; then
1664d63fdb69Smrg	  # Warn if it was a shared library.
1665d63fdb69Smrg	  test -n "$library_names" && \
1666d63fdb69Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
1667d63fdb69Smrg	  continue
1668d63fdb69Smrg	fi
16693da084b3Smrg
1670d63fdb69Smrg	func_dirname "$file" "" "."
1671d63fdb69Smrg	dir="$func_dirname_result"
16723da084b3Smrg
1673d63fdb69Smrg	if test -f "$dir/$objdir/$dlname"; then
1674d63fdb69Smrg	  dir="$dir/$objdir"
1675d63fdb69Smrg	else
1676d63fdb69Smrg	  if test ! -f "$dir/$dlname"; then
1677d63fdb69Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
1678d63fdb69Smrg	  fi
1679d63fdb69Smrg	fi
16803da084b3Smrg	;;
16813da084b3Smrg
1682d63fdb69Smrg      *.lo)
1683d63fdb69Smrg	# Just add the directory containing the .lo file.
1684d63fdb69Smrg	func_dirname "$file" "" "."
1685d63fdb69Smrg	dir="$func_dirname_result"
16863da084b3Smrg	;;
16873da084b3Smrg
1688d63fdb69Smrg      *)
1689d63fdb69Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
16903da084b3Smrg	continue
16913da084b3Smrg	;;
1692d63fdb69Smrg      esac
16933da084b3Smrg
1694d63fdb69Smrg      # Get the absolute pathname.
1695d63fdb69Smrg      absdir=`cd "$dir" && pwd`
1696d63fdb69Smrg      test -n "$absdir" && dir="$absdir"
16973da084b3Smrg
1698d63fdb69Smrg      # Now add the directory to shlibpath_var.
1699d63fdb69Smrg      if eval "test -z \"\$$shlibpath_var\""; then
1700d63fdb69Smrg	eval "$shlibpath_var=\"\$dir\""
1701d63fdb69Smrg      else
1702d63fdb69Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
1703d63fdb69Smrg      fi
1704d63fdb69Smrg    done
17053da084b3Smrg
1706d63fdb69Smrg    # This variable tells wrapper scripts just to set shlibpath_var
1707d63fdb69Smrg    # rather than running their programs.
1708d63fdb69Smrg    libtool_execute_magic="$magic"
17093da084b3Smrg
1710d63fdb69Smrg    # Check if any of the arguments is a wrapper script.
1711d63fdb69Smrg    args=
1712d63fdb69Smrg    for file
1713d63fdb69Smrg    do
1714d63fdb69Smrg      case $file in
1715d63fdb69Smrg      -*) ;;
1716d63fdb69Smrg      *)
1717d63fdb69Smrg	# Do a test to see if this is really a libtool program.
1718d63fdb69Smrg	if func_ltwrapper_script_p "$file"; then
1719d63fdb69Smrg	  func_source "$file"
1720d63fdb69Smrg	  # Transform arg to wrapped name.
1721d63fdb69Smrg	  file="$progdir/$program"
1722d63fdb69Smrg	elif func_ltwrapper_executable_p "$file"; then
1723d63fdb69Smrg	  func_ltwrapper_scriptname "$file"
1724d63fdb69Smrg	  func_source "$func_ltwrapper_scriptname_result"
1725d63fdb69Smrg	  # Transform arg to wrapped name.
1726d63fdb69Smrg	  file="$progdir/$program"
1727d63fdb69Smrg	fi
1728d63fdb69Smrg	;;
1729d63fdb69Smrg      esac
1730d63fdb69Smrg      # Quote arguments (to preserve shell metacharacters).
1731d63fdb69Smrg      func_quote_for_eval "$file"
1732d63fdb69Smrg      args="$args $func_quote_for_eval_result"
1733d63fdb69Smrg    done
17343da084b3Smrg
1735d63fdb69Smrg    if test "X$opt_dry_run" = Xfalse; then
1736d63fdb69Smrg      if test -n "$shlibpath_var"; then
1737d63fdb69Smrg	# Export the shlibpath_var.
1738d63fdb69Smrg	eval "export $shlibpath_var"
1739d63fdb69Smrg      fi
17403da084b3Smrg
1741d63fdb69Smrg      # Restore saved environment variables
1742d63fdb69Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1743d63fdb69Smrg      do
1744d63fdb69Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
1745d63fdb69Smrg                $lt_var=\$save_$lt_var; export $lt_var
1746d63fdb69Smrg	      else
1747d63fdb69Smrg		$lt_unset $lt_var
1748d63fdb69Smrg	      fi"
1749d63fdb69Smrg      done
17503da084b3Smrg
1751d63fdb69Smrg      # Now prepare to actually exec the command.
1752d63fdb69Smrg      exec_cmd="\$cmd$args"
1753d63fdb69Smrg    else
1754d63fdb69Smrg      # Display what would be done.
1755d63fdb69Smrg      if test -n "$shlibpath_var"; then
1756d63fdb69Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
1757d63fdb69Smrg	$ECHO "export $shlibpath_var"
1758d63fdb69Smrg      fi
1759d63fdb69Smrg      $ECHO "$cmd$args"
1760d63fdb69Smrg      exit $EXIT_SUCCESS
1761d63fdb69Smrg    fi
1762d63fdb69Smrg}
17633da084b3Smrg
1764d63fdb69Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"}
17653da084b3Smrg
17663da084b3Smrg
1767d63fdb69Smrg# func_mode_finish arg...
1768d63fdb69Smrgfunc_mode_finish ()
1769d63fdb69Smrg{
1770d63fdb69Smrg    $opt_debug
1771d63fdb69Smrg    libdirs="$nonopt"
1772d63fdb69Smrg    admincmds=
17733da084b3Smrg
1774d63fdb69Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
1775d63fdb69Smrg      for dir
1776d63fdb69Smrg      do
1777d63fdb69Smrg	libdirs="$libdirs $dir"
1778d63fdb69Smrg      done
17793da084b3Smrg
1780d63fdb69Smrg      for libdir in $libdirs; do
1781d63fdb69Smrg	if test -n "$finish_cmds"; then
1782d63fdb69Smrg	  # Do each command in the finish commands.
1783d63fdb69Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
1784d63fdb69Smrg'"$cmd"'"'
1785d63fdb69Smrg	fi
1786d63fdb69Smrg	if test -n "$finish_eval"; then
1787d63fdb69Smrg	  # Do the single finish_eval.
1788d63fdb69Smrg	  eval cmds=\"$finish_eval\"
1789d63fdb69Smrg	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
1790d63fdb69Smrg       $cmds"
1791d63fdb69Smrg	fi
1792d63fdb69Smrg      done
1793d63fdb69Smrg    fi
17943da084b3Smrg
1795d63fdb69Smrg    # Exit here if they wanted silent mode.
1796d63fdb69Smrg    $opt_silent && exit $EXIT_SUCCESS
17973da084b3Smrg
1798d63fdb69Smrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
1799d63fdb69Smrg    $ECHO "Libraries have been installed in:"
1800d63fdb69Smrg    for libdir in $libdirs; do
1801d63fdb69Smrg      $ECHO "   $libdir"
1802d63fdb69Smrg    done
1803d63fdb69Smrg    $ECHO
1804d63fdb69Smrg    $ECHO "If you ever happen to want to link against installed libraries"
1805d63fdb69Smrg    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
1806d63fdb69Smrg    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
1807d63fdb69Smrg    $ECHO "flag during linking and do at least one of the following:"
1808d63fdb69Smrg    if test -n "$shlibpath_var"; then
1809d63fdb69Smrg      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
1810d63fdb69Smrg      $ECHO "     during execution"
1811d63fdb69Smrg    fi
1812d63fdb69Smrg    if test -n "$runpath_var"; then
1813d63fdb69Smrg      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
1814d63fdb69Smrg      $ECHO "     during linking"
1815d63fdb69Smrg    fi
1816d63fdb69Smrg    if test -n "$hardcode_libdir_flag_spec"; then
1817d63fdb69Smrg      libdir=LIBDIR
1818d63fdb69Smrg      eval flag=\"$hardcode_libdir_flag_spec\"
18193da084b3Smrg
1820d63fdb69Smrg      $ECHO "   - use the \`$flag' linker flag"
1821d63fdb69Smrg    fi
1822d63fdb69Smrg    if test -n "$admincmds"; then
1823d63fdb69Smrg      $ECHO "   - have your system administrator run these commands:$admincmds"
1824d63fdb69Smrg    fi
1825d63fdb69Smrg    if test -f /etc/ld.so.conf; then
1826d63fdb69Smrg      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
1827d63fdb69Smrg    fi
1828d63fdb69Smrg    $ECHO
18293da084b3Smrg
1830d63fdb69Smrg    $ECHO "See any operating system documentation about shared libraries for"
1831d63fdb69Smrg    case $host in
1832d63fdb69Smrg      solaris2.[6789]|solaris2.1[0-9])
1833d63fdb69Smrg        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
1834d63fdb69Smrg	$ECHO "pages."
18353da084b3Smrg	;;
1836d63fdb69Smrg      *)
1837d63fdb69Smrg        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
1838d63fdb69Smrg        ;;
1839d63fdb69Smrg    esac
1840d63fdb69Smrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
1841d63fdb69Smrg    exit $EXIT_SUCCESS
1842d63fdb69Smrg}
18433da084b3Smrg
1844d63fdb69Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"}
18453da084b3Smrg
18463da084b3Smrg
1847d63fdb69Smrg# func_mode_install arg...
1848d63fdb69Smrgfunc_mode_install ()
1849d63fdb69Smrg{
1850d63fdb69Smrg    $opt_debug
1851d63fdb69Smrg    # There may be an optional sh(1) argument at the beginning of
1852d63fdb69Smrg    # install_prog (especially on Windows NT).
1853d63fdb69Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
1854d63fdb69Smrg       # Allow the use of GNU shtool's install command.
1855d63fdb69Smrg       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
1856d63fdb69Smrg      # Aesthetically quote it.
1857d63fdb69Smrg      func_quote_for_eval "$nonopt"
1858d63fdb69Smrg      install_prog="$func_quote_for_eval_result "
1859d63fdb69Smrg      arg=$1
1860d63fdb69Smrg      shift
1861d63fdb69Smrg    else
1862d63fdb69Smrg      install_prog=
1863d63fdb69Smrg      arg=$nonopt
1864d63fdb69Smrg    fi
18653da084b3Smrg
1866d63fdb69Smrg    # The real first argument should be the name of the installation program.
1867d63fdb69Smrg    # Aesthetically quote it.
1868d63fdb69Smrg    func_quote_for_eval "$arg"
1869d63fdb69Smrg    install_prog="$install_prog$func_quote_for_eval_result"
1870d63fdb69Smrg
1871d63fdb69Smrg    # We need to accept at least all the BSD install flags.
1872d63fdb69Smrg    dest=
1873d63fdb69Smrg    files=
1874d63fdb69Smrg    opts=
1875d63fdb69Smrg    prev=
1876d63fdb69Smrg    install_type=
1877d63fdb69Smrg    isdir=no
1878d63fdb69Smrg    stripme=
1879d63fdb69Smrg    for arg
1880d63fdb69Smrg    do
1881d63fdb69Smrg      if test -n "$dest"; then
1882d63fdb69Smrg	files="$files $dest"
1883d63fdb69Smrg	dest=$arg
1884d63fdb69Smrg	continue
18853da084b3Smrg      fi
18863da084b3Smrg
1887d63fdb69Smrg      case $arg in
1888d63fdb69Smrg      -d) isdir=yes ;;
1889d63fdb69Smrg      -f)
1890d63fdb69Smrg	case " $install_prog " in
1891d63fdb69Smrg	*[\\\ /]cp\ *) ;;
1892d63fdb69Smrg	*) prev=$arg ;;
1893d63fdb69Smrg	esac
1894d63fdb69Smrg	;;
1895d63fdb69Smrg      -g | -m | -o)
1896d63fdb69Smrg	prev=$arg
1897d63fdb69Smrg	;;
1898d63fdb69Smrg      -s)
1899d63fdb69Smrg	stripme=" -s"
1900d63fdb69Smrg	continue
1901d63fdb69Smrg	;;
1902d63fdb69Smrg      -*)
1903d63fdb69Smrg	;;
1904d63fdb69Smrg      *)
1905d63fdb69Smrg	# If the previous option needed an argument, then skip it.
1906d63fdb69Smrg	if test -n "$prev"; then
1907d63fdb69Smrg	  prev=
1908d63fdb69Smrg	else
1909d63fdb69Smrg	  dest=$arg
1910d63fdb69Smrg	  continue
1911d63fdb69Smrg	fi
1912d63fdb69Smrg	;;
1913d63fdb69Smrg      esac
19143da084b3Smrg
1915d63fdb69Smrg      # Aesthetically quote the argument.
1916d63fdb69Smrg      func_quote_for_eval "$arg"
1917d63fdb69Smrg      install_prog="$install_prog $func_quote_for_eval_result"
1918d63fdb69Smrg    done
19193da084b3Smrg
1920d63fdb69Smrg    test -z "$install_prog" && \
1921d63fdb69Smrg      func_fatal_help "you must specify an install program"
19223da084b3Smrg
1923d63fdb69Smrg    test -n "$prev" && \
1924d63fdb69Smrg      func_fatal_help "the \`$prev' option requires an argument"
19253da084b3Smrg
1926d63fdb69Smrg    if test -z "$files"; then
1927d63fdb69Smrg      if test -z "$dest"; then
1928d63fdb69Smrg	func_fatal_help "no file or destination specified"
1929d63fdb69Smrg      else
1930d63fdb69Smrg	func_fatal_help "you must specify a destination"
19313da084b3Smrg      fi
19323da084b3Smrg    fi
19333da084b3Smrg
1934d63fdb69Smrg    # Strip any trailing slash from the destination.
1935d63fdb69Smrg    func_stripname '' '/' "$dest"
1936d63fdb69Smrg    dest=$func_stripname_result
19373da084b3Smrg
1938d63fdb69Smrg    # Check to see that the destination is a directory.
1939d63fdb69Smrg    test -d "$dest" && isdir=yes
1940d63fdb69Smrg    if test "$isdir" = yes; then
1941d63fdb69Smrg      destdir="$dest"
1942d63fdb69Smrg      destname=
1943d63fdb69Smrg    else
1944d63fdb69Smrg      func_dirname_and_basename "$dest" "" "."
1945d63fdb69Smrg      destdir="$func_dirname_result"
1946d63fdb69Smrg      destname="$func_basename_result"
1947d63fdb69Smrg
1948d63fdb69Smrg      # Not a directory, so check to see that there is only one file specified.
1949d63fdb69Smrg      set dummy $files; shift
1950d63fdb69Smrg      test "$#" -gt 1 && \
1951d63fdb69Smrg	func_fatal_help "\`$dest' is not a directory"
1952d63fdb69Smrg    fi
1953d63fdb69Smrg    case $destdir in
1954d63fdb69Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
19553da084b3Smrg    *)
1956d63fdb69Smrg      for file in $files; do
1957d63fdb69Smrg	case $file in
1958d63fdb69Smrg	*.lo) ;;
1959d63fdb69Smrg	*)
1960d63fdb69Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
1961d63fdb69Smrg	  ;;
1962d63fdb69Smrg	esac
1963d63fdb69Smrg      done
19643da084b3Smrg      ;;
19653da084b3Smrg    esac
19663da084b3Smrg
1967d63fdb69Smrg    # This variable tells wrapper scripts just to set variables rather
1968d63fdb69Smrg    # than running their programs.
1969d63fdb69Smrg    libtool_install_magic="$magic"
19703da084b3Smrg
1971d63fdb69Smrg    staticlibs=
1972d63fdb69Smrg    future_libdirs=
1973d63fdb69Smrg    current_libdirs=
1974d63fdb69Smrg    for file in $files; do
19753da084b3Smrg
1976d63fdb69Smrg      # Do each installation.
1977d63fdb69Smrg      case $file in
1978d63fdb69Smrg      *.$libext)
1979d63fdb69Smrg	# Do the static libraries later.
1980d63fdb69Smrg	staticlibs="$staticlibs $file"
1981d63fdb69Smrg	;;
1982d63fdb69Smrg
1983d63fdb69Smrg      *.la)
1984d63fdb69Smrg	# Check to see that this really is a libtool archive.
1985d63fdb69Smrg	func_lalib_unsafe_p "$file" \
1986d63fdb69Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
1987d63fdb69Smrg
1988d63fdb69Smrg	library_names=
1989d63fdb69Smrg	old_library=
1990d63fdb69Smrg	relink_command=
1991d63fdb69Smrg	func_source "$file"
1992d63fdb69Smrg
1993d63fdb69Smrg	# Add the libdir to current_libdirs if it is the destination.
1994d63fdb69Smrg	if test "X$destdir" = "X$libdir"; then
1995d63fdb69Smrg	  case "$current_libdirs " in
1996d63fdb69Smrg	  *" $libdir "*) ;;
1997d63fdb69Smrg	  *) current_libdirs="$current_libdirs $libdir" ;;
19983da084b3Smrg	  esac
1999d63fdb69Smrg	else
2000d63fdb69Smrg	  # Note the libdir as a future libdir.
2001d63fdb69Smrg	  case "$future_libdirs " in
2002d63fdb69Smrg	  *" $libdir "*) ;;
2003d63fdb69Smrg	  *) future_libdirs="$future_libdirs $libdir" ;;
2004d63fdb69Smrg	  esac
2005d63fdb69Smrg	fi
20063da084b3Smrg
2007d63fdb69Smrg	func_dirname "$file" "/" ""
2008d63fdb69Smrg	dir="$func_dirname_result"
2009d63fdb69Smrg	dir="$dir$objdir"
2010d63fdb69Smrg
2011d63fdb69Smrg	if test -n "$relink_command"; then
2012d63fdb69Smrg	  # Determine the prefix the user has applied to our future dir.
2013d63fdb69Smrg	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
2014d63fdb69Smrg
2015d63fdb69Smrg	  # Don't allow the user to place us outside of our expected
2016d63fdb69Smrg	  # location b/c this prevents finding dependent libraries that
2017d63fdb69Smrg	  # are installed to the same prefix.
2018d63fdb69Smrg	  # At present, this check doesn't affect windows .dll's that
2019d63fdb69Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2020d63fdb69Smrg	  # but it's something to keep an eye on.
2021d63fdb69Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2022d63fdb69Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2023d63fdb69Smrg
2024d63fdb69Smrg	  if test -n "$inst_prefix_dir"; then
2025d63fdb69Smrg	    # Stick the inst_prefix_dir data into the link command.
2026d63fdb69Smrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2027d63fdb69Smrg	  else
2028d63fdb69Smrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
2029d63fdb69Smrg	  fi
2030d63fdb69Smrg
2031d63fdb69Smrg	  func_warning "relinking \`$file'"
2032d63fdb69Smrg	  func_show_eval "$relink_command" \
2033d63fdb69Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2034d63fdb69Smrg	fi
2035d63fdb69Smrg
2036d63fdb69Smrg	# See the names of the shared library.
2037d63fdb69Smrg	set dummy $library_names; shift
2038d63fdb69Smrg	if test -n "$1"; then
2039d63fdb69Smrg	  realname="$1"
2040d63fdb69Smrg	  shift
2041d63fdb69Smrg
2042d63fdb69Smrg	  srcname="$realname"
2043d63fdb69Smrg	  test -n "$relink_command" && srcname="$realname"T
2044d63fdb69Smrg
2045d63fdb69Smrg	  # Install the shared library and build the symlinks.
2046d63fdb69Smrg	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
2047d63fdb69Smrg	      'exit $?'
2048d63fdb69Smrg	  tstripme="$stripme"
2049d63fdb69Smrg	  case $host_os in
2050d63fdb69Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2051d63fdb69Smrg	    case $realname in
2052d63fdb69Smrg	    *.dll.a)
2053d63fdb69Smrg	      tstripme=""
2054d63fdb69Smrg	      ;;
2055d63fdb69Smrg	    esac
20563da084b3Smrg	    ;;
20573da084b3Smrg	  esac
2058d63fdb69Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
2059d63fdb69Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
20603da084b3Smrg	  fi
2061d63fdb69Smrg
2062d63fdb69Smrg	  if test "$#" -gt 0; then
2063d63fdb69Smrg	    # Delete the old symlinks, and create new ones.
2064d63fdb69Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
2065d63fdb69Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
2066d63fdb69Smrg	    # so we also need to try rm && ln -s.
2067d63fdb69Smrg	    for linkname
2068d63fdb69Smrg	    do
2069d63fdb69Smrg	      test "$linkname" != "$realname" \
2070d63fdb69Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
20713da084b3Smrg	    done
20723da084b3Smrg	  fi
20733da084b3Smrg
2074d63fdb69Smrg	  # Do each command in the postinstall commands.
2075d63fdb69Smrg	  lib="$destdir/$realname"
2076d63fdb69Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
20773da084b3Smrg	fi
20783da084b3Smrg
2079d63fdb69Smrg	# Install the pseudo-library for information purposes.
2080d63fdb69Smrg	func_basename "$file"
2081d63fdb69Smrg	name="$func_basename_result"
2082d63fdb69Smrg	instname="$dir/$name"i
2083d63fdb69Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
20843da084b3Smrg
2085d63fdb69Smrg	# Maybe install the static library, too.
2086d63fdb69Smrg	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
2087d63fdb69Smrg	;;
20883da084b3Smrg
2089d63fdb69Smrg      *.lo)
2090d63fdb69Smrg	# Install (i.e. copy) a libtool object.
20913da084b3Smrg
2092d63fdb69Smrg	# Figure out destination file name, if it wasn't already specified.
2093d63fdb69Smrg	if test -n "$destname"; then
2094d63fdb69Smrg	  destfile="$destdir/$destname"
2095d63fdb69Smrg	else
2096d63fdb69Smrg	  func_basename "$file"
2097d63fdb69Smrg	  destfile="$func_basename_result"
2098d63fdb69Smrg	  destfile="$destdir/$destfile"
2099d63fdb69Smrg	fi
2100d63fdb69Smrg
2101d63fdb69Smrg	# Deduce the name of the destination old-style object file.
2102d63fdb69Smrg	case $destfile in
2103d63fdb69Smrg	*.lo)
2104d63fdb69Smrg	  func_lo2o "$destfile"
2105d63fdb69Smrg	  staticdest=$func_lo2o_result
2106d63fdb69Smrg	  ;;
2107d63fdb69Smrg	*.$objext)
2108d63fdb69Smrg	  staticdest="$destfile"
2109d63fdb69Smrg	  destfile=
2110d63fdb69Smrg	  ;;
2111d63fdb69Smrg	*)
2112d63fdb69Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
2113d63fdb69Smrg	  ;;
21143da084b3Smrg	esac
21153da084b3Smrg
2116d63fdb69Smrg	# Install the libtool object if requested.
2117d63fdb69Smrg	test -n "$destfile" && \
2118d63fdb69Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
2119d63fdb69Smrg
2120d63fdb69Smrg	# Install the old object if enabled.
2121d63fdb69Smrg	if test "$build_old_libs" = yes; then
2122d63fdb69Smrg	  # Deduce the name of the old-style object file.
2123d63fdb69Smrg	  func_lo2o "$file"
2124d63fdb69Smrg	  staticobj=$func_lo2o_result
2125d63fdb69Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
21263da084b3Smrg	fi
2127d63fdb69Smrg	exit $EXIT_SUCCESS
2128d63fdb69Smrg	;;
21293da084b3Smrg
2130d63fdb69Smrg      *)
2131d63fdb69Smrg	# Figure out destination file name, if it wasn't already specified.
2132d63fdb69Smrg	if test -n "$destname"; then
2133d63fdb69Smrg	  destfile="$destdir/$destname"
2134d63fdb69Smrg	else
2135d63fdb69Smrg	  func_basename "$file"
2136d63fdb69Smrg	  destfile="$func_basename_result"
2137d63fdb69Smrg	  destfile="$destdir/$destfile"
2138d63fdb69Smrg	fi
2139d63fdb69Smrg
2140d63fdb69Smrg	# If the file is missing, and there is a .exe on the end, strip it
2141d63fdb69Smrg	# because it is most likely a libtool script we actually want to
2142d63fdb69Smrg	# install
2143d63fdb69Smrg	stripped_ext=""
2144d63fdb69Smrg	case $file in
2145d63fdb69Smrg	  *.exe)
2146d63fdb69Smrg	    if test ! -f "$file"; then
2147d63fdb69Smrg	      func_stripname '' '.exe' "$file"
2148d63fdb69Smrg	      file=$func_stripname_result
2149d63fdb69Smrg	      stripped_ext=".exe"
21503da084b3Smrg	    fi
2151d63fdb69Smrg	    ;;
2152d63fdb69Smrg	esac
21533da084b3Smrg
2154d63fdb69Smrg	# Do a test to see if this is really a libtool program.
2155d63fdb69Smrg	case $host in
2156d63fdb69Smrg	*cygwin* | *mingw*)
2157d63fdb69Smrg	    if func_ltwrapper_executable_p "$file"; then
2158d63fdb69Smrg	      func_ltwrapper_scriptname "$file"
2159d63fdb69Smrg	      wrapper=$func_ltwrapper_scriptname_result
2160d63fdb69Smrg	    else
2161d63fdb69Smrg	      func_stripname '' '.exe' "$file"
2162d63fdb69Smrg	      wrapper=$func_stripname_result
2163d63fdb69Smrg	    fi
2164d63fdb69Smrg	    ;;
2165d63fdb69Smrg	*)
2166d63fdb69Smrg	    wrapper=$file
2167d63fdb69Smrg	    ;;
2168d63fdb69Smrg	esac
2169d63fdb69Smrg	if func_ltwrapper_script_p "$wrapper"; then
2170d63fdb69Smrg	  notinst_deplibs=
2171d63fdb69Smrg	  relink_command=
21723da084b3Smrg
2173d63fdb69Smrg	  func_source "$wrapper"
21743da084b3Smrg
2175d63fdb69Smrg	  # Check the variables that should have been set.
2176d63fdb69Smrg	  test -z "$generated_by_libtool_version" && \
2177d63fdb69Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
2178d63fdb69Smrg
2179d63fdb69Smrg	  finalize=yes
2180d63fdb69Smrg	  for lib in $notinst_deplibs; do
2181d63fdb69Smrg	    # Check to see that each library is installed.
2182d63fdb69Smrg	    libdir=
2183d63fdb69Smrg	    if test -f "$lib"; then
2184d63fdb69Smrg	      func_source "$lib"
2185d63fdb69Smrg	    fi
2186d63fdb69Smrg	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
2187d63fdb69Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
2188d63fdb69Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
2189d63fdb69Smrg	      finalize=no
2190d63fdb69Smrg	    fi
2191d63fdb69Smrg	  done
2192d63fdb69Smrg
2193d63fdb69Smrg	  relink_command=
2194d63fdb69Smrg	  func_source "$wrapper"
2195d63fdb69Smrg
2196d63fdb69Smrg	  outputname=
2197d63fdb69Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
2198d63fdb69Smrg	    $opt_dry_run || {
2199d63fdb69Smrg	      if test "$finalize" = yes; then
2200d63fdb69Smrg	        tmpdir=`func_mktempdir`
2201d63fdb69Smrg		func_basename "$file$stripped_ext"
2202d63fdb69Smrg		file="$func_basename_result"
2203d63fdb69Smrg	        outputname="$tmpdir/$file"
2204d63fdb69Smrg	        # Replace the output file specification.
2205d63fdb69Smrg	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
2206d63fdb69Smrg
2207d63fdb69Smrg	        $opt_silent || {
2208d63fdb69Smrg	          func_quote_for_expand "$relink_command"
2209d63fdb69Smrg		  eval "func_echo $func_quote_for_expand_result"
2210d63fdb69Smrg	        }
2211d63fdb69Smrg	        if eval "$relink_command"; then :
2212d63fdb69Smrg	          else
2213d63fdb69Smrg		  func_error "error: relink \`$file' with the above command before installing it"
2214d63fdb69Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
2215d63fdb69Smrg		  continue
2216d63fdb69Smrg	        fi
2217d63fdb69Smrg	        file="$outputname"
2218d63fdb69Smrg	      else
2219d63fdb69Smrg	        func_warning "cannot relink \`$file'"
2220d63fdb69Smrg	      fi
2221d63fdb69Smrg	    }
22223da084b3Smrg	  else
2223d63fdb69Smrg	    # Install the binary that we compiled earlier.
2224d63fdb69Smrg	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
22253da084b3Smrg	  fi
2226d63fdb69Smrg	fi
22273da084b3Smrg
2228d63fdb69Smrg	# remove .exe since cygwin /usr/bin/install will append another
2229d63fdb69Smrg	# one anyway
2230d63fdb69Smrg	case $install_prog,$host in
2231d63fdb69Smrg	*/usr/bin/install*,*cygwin*)
2232d63fdb69Smrg	  case $file:$destfile in
2233d63fdb69Smrg	  *.exe:*.exe)
2234d63fdb69Smrg	    # this is ok
2235d63fdb69Smrg	    ;;
2236d63fdb69Smrg	  *.exe:*)
2237d63fdb69Smrg	    destfile=$destfile.exe
2238d63fdb69Smrg	    ;;
2239d63fdb69Smrg	  *:*.exe)
2240d63fdb69Smrg	    func_stripname '' '.exe' "$destfile"
2241d63fdb69Smrg	    destfile=$func_stripname_result
2242d63fdb69Smrg	    ;;
2243d63fdb69Smrg	  esac
22443da084b3Smrg	  ;;
22453da084b3Smrg	esac
2246d63fdb69Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
2247d63fdb69Smrg	$opt_dry_run || if test -n "$outputname"; then
2248d63fdb69Smrg	  ${RM}r "$tmpdir"
2249d63fdb69Smrg	fi
2250d63fdb69Smrg	;;
2251d63fdb69Smrg      esac
2252d63fdb69Smrg    done
22533da084b3Smrg
2254d63fdb69Smrg    for file in $staticlibs; do
2255d63fdb69Smrg      func_basename "$file"
2256d63fdb69Smrg      name="$func_basename_result"
22573da084b3Smrg
2258d63fdb69Smrg      # Set up the ranlib parameters.
2259d63fdb69Smrg      oldlib="$destdir/$name"
22603da084b3Smrg
2261d63fdb69Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
22623da084b3Smrg
2263d63fdb69Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
2264d63fdb69Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
2265d63fdb69Smrg      fi
22663da084b3Smrg
2267d63fdb69Smrg      # Do each command in the postinstall commands.
2268d63fdb69Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
2269d63fdb69Smrg    done
22703da084b3Smrg
2271d63fdb69Smrg    test -n "$future_libdirs" && \
2272d63fdb69Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
22733da084b3Smrg
2274d63fdb69Smrg    if test -n "$current_libdirs"; then
2275d63fdb69Smrg      # Maybe just do a dry run.
2276d63fdb69Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
2277d63fdb69Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
2278d63fdb69Smrg    else
2279d63fdb69Smrg      exit $EXIT_SUCCESS
2280d63fdb69Smrg    fi
2281d63fdb69Smrg}
22823da084b3Smrg
2283d63fdb69Smrgtest "$mode" = install && func_mode_install ${1+"$@"}
22843da084b3Smrg
22853da084b3Smrg
2286d63fdb69Smrg# func_generate_dlsyms outputname originator pic_p
2287d63fdb69Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
2288d63fdb69Smrg# a dlpreopen symbol table.
2289d63fdb69Smrgfunc_generate_dlsyms ()
2290d63fdb69Smrg{
2291d63fdb69Smrg    $opt_debug
2292d63fdb69Smrg    my_outputname="$1"
2293d63fdb69Smrg    my_originator="$2"
2294d63fdb69Smrg    my_pic_p="${3-no}"
2295d63fdb69Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
2296d63fdb69Smrg    my_dlsyms=
2297d63fdb69Smrg
2298d63fdb69Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
2299d63fdb69Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
2300d63fdb69Smrg	my_dlsyms="${my_outputname}S.c"
2301d63fdb69Smrg      else
2302d63fdb69Smrg	func_error "not configured to extract global symbols from dlpreopened files"
2303d63fdb69Smrg      fi
2304d63fdb69Smrg    fi
23053da084b3Smrg
2306d63fdb69Smrg    if test -n "$my_dlsyms"; then
2307d63fdb69Smrg      case $my_dlsyms in
2308d63fdb69Smrg      "") ;;
2309d63fdb69Smrg      *.c)
2310d63fdb69Smrg	# Discover the nlist of each of the dlfiles.
2311d63fdb69Smrg	nlist="$output_objdir/${my_outputname}.nm"
2312d63fdb69Smrg
2313d63fdb69Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
2314d63fdb69Smrg
2315d63fdb69Smrg	# Parse the name list into a source file.
2316d63fdb69Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
2317d63fdb69Smrg
2318d63fdb69Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
2319d63fdb69Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
2320d63fdb69Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
2321d63fdb69Smrg
2322d63fdb69Smrg#ifdef __cplusplus
2323d63fdb69Smrgextern \"C\" {
2324d63fdb69Smrg#endif
2325d63fdb69Smrg
2326d63fdb69Smrg/* External symbol declarations for the compiler. */\
2327d63fdb69Smrg"
2328d63fdb69Smrg
2329d63fdb69Smrg	if test "$dlself" = yes; then
2330d63fdb69Smrg	  func_verbose "generating symbol list for \`$output'"
2331d63fdb69Smrg
2332d63fdb69Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
2333d63fdb69Smrg
2334d63fdb69Smrg	  # Add our own program objects to the symbol list.
2335d63fdb69Smrg	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
2336d63fdb69Smrg	  for progfile in $progfiles; do
2337d63fdb69Smrg	    func_verbose "extracting global C symbols from \`$progfile'"
2338d63fdb69Smrg	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
2339d63fdb69Smrg	  done
2340d63fdb69Smrg
2341d63fdb69Smrg	  if test -n "$exclude_expsyms"; then
2342d63fdb69Smrg	    $opt_dry_run || {
2343d63fdb69Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
2344d63fdb69Smrg	      eval '$MV "$nlist"T "$nlist"'
2345d63fdb69Smrg	    }
23463da084b3Smrg	  fi
23473da084b3Smrg
2348d63fdb69Smrg	  if test -n "$export_symbols_regex"; then
2349d63fdb69Smrg	    $opt_dry_run || {
2350d63fdb69Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
2351d63fdb69Smrg	      eval '$MV "$nlist"T "$nlist"'
2352d63fdb69Smrg	    }
23533da084b3Smrg	  fi
2354d63fdb69Smrg
2355d63fdb69Smrg	  # Prepare the list of exported symbols
2356d63fdb69Smrg	  if test -z "$export_symbols"; then
2357d63fdb69Smrg	    export_symbols="$output_objdir/$outputname.exp"
2358d63fdb69Smrg	    $opt_dry_run || {
2359d63fdb69Smrg	      $RM $export_symbols
2360d63fdb69Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
2361d63fdb69Smrg	      case $host in
2362d63fdb69Smrg	      *cygwin* | *mingw* | *cegcc* )
2363d63fdb69Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
2364d63fdb69Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
2365d63fdb69Smrg	        ;;
23663da084b3Smrg	      esac
2367d63fdb69Smrg	    }
2368d63fdb69Smrg	  else
2369d63fdb69Smrg	    $opt_dry_run || {
2370d63fdb69Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
2371d63fdb69Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
2372d63fdb69Smrg	      eval '$MV "$nlist"T "$nlist"'
2373d63fdb69Smrg	      case $host in
2374d63fdb69Smrg	        *cygwin | *mingw* | *cegcc* )
2375d63fdb69Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
2376d63fdb69Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
2377d63fdb69Smrg	          ;;
23783da084b3Smrg	      esac
2379d63fdb69Smrg	    }
23803da084b3Smrg	  fi
2381d63fdb69Smrg	fi
23823da084b3Smrg
2383d63fdb69Smrg	for dlprefile in $dlprefiles; do
2384d63fdb69Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
2385d63fdb69Smrg	  func_basename "$dlprefile"
2386d63fdb69Smrg	  name="$func_basename_result"
2387d63fdb69Smrg	  $opt_dry_run || {
2388d63fdb69Smrg	    eval '$ECHO ": $name " >> "$nlist"'
2389d63fdb69Smrg	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
2390d63fdb69Smrg	  }
2391d63fdb69Smrg	done
23923da084b3Smrg
2393d63fdb69Smrg	$opt_dry_run || {
2394d63fdb69Smrg	  # Make sure we have at least an empty file.
2395d63fdb69Smrg	  test -f "$nlist" || : > "$nlist"
23963da084b3Smrg
2397d63fdb69Smrg	  if test -n "$exclude_expsyms"; then
2398d63fdb69Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
2399d63fdb69Smrg	    $MV "$nlist"T "$nlist"
24003da084b3Smrg	  fi
24013da084b3Smrg
2402d63fdb69Smrg	  # Try sorting and uniquifying the output.
2403d63fdb69Smrg	  if $GREP -v "^: " < "$nlist" |
2404d63fdb69Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
2405d63fdb69Smrg		sort -k 3
24063da084b3Smrg	      else
2407d63fdb69Smrg		sort +2
2408d63fdb69Smrg	      fi |
2409d63fdb69Smrg	      uniq > "$nlist"S; then
2410d63fdb69Smrg	    :
24113da084b3Smrg	  else
2412d63fdb69Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
24133da084b3Smrg	  fi
24143da084b3Smrg
2415d63fdb69Smrg	  if test -f "$nlist"S; then
2416d63fdb69Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
24173da084b3Smrg	  else
2418d63fdb69Smrg	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
24193da084b3Smrg	  fi
24203da084b3Smrg
2421d63fdb69Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
24223da084b3Smrg
2423d63fdb69Smrg/* The mapping between symbol names and symbols.  */
2424d63fdb69Smrgtypedef struct {
2425d63fdb69Smrg  const char *name;
2426d63fdb69Smrg  void *address;
2427d63fdb69Smrg} lt_dlsymlist;
2428d63fdb69Smrg"
2429d63fdb69Smrg	  case $host in
2430d63fdb69Smrg	  *cygwin* | *mingw* | *cegcc* )
2431d63fdb69Smrg	    $ECHO >> "$output_objdir/$my_dlsyms" "\
2432d63fdb69Smrg/* DATA imports from DLLs on WIN32 con't be const, because
2433d63fdb69Smrg   runtime relocations are performed -- see ld's documentation
2434d63fdb69Smrg   on pseudo-relocs.  */"
2435d63fdb69Smrg	    lt_dlsym_const= ;;
2436d63fdb69Smrg	  *osf5*)
2437d63fdb69Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
2438d63fdb69Smrg/* This system does not cope well with relocations in const data */"
2439d63fdb69Smrg	    lt_dlsym_const= ;;
2440d63fdb69Smrg	  *)
2441d63fdb69Smrg	    lt_dlsym_const=const ;;
2442d63fdb69Smrg	  esac
2443d63fdb69Smrg
2444d63fdb69Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
2445d63fdb69Smrgextern $lt_dlsym_const lt_dlsymlist
2446d63fdb69Smrglt_${my_prefix}_LTX_preloaded_symbols[];
2447d63fdb69Smrg$lt_dlsym_const lt_dlsymlist
2448d63fdb69Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
2449d63fdb69Smrg{\
2450d63fdb69Smrg  { \"$my_originator\", (void *) 0 },"
2451d63fdb69Smrg
2452d63fdb69Smrg	  case $need_lib_prefix in
2453d63fdb69Smrg	  no)
2454d63fdb69Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
2455d63fdb69Smrg	    ;;
2456d63fdb69Smrg	  *)
2457d63fdb69Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
2458d63fdb69Smrg	    ;;
2459d63fdb69Smrg	  esac
2460d63fdb69Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
2461d63fdb69Smrg  {0, (void *) 0}
2462d63fdb69Smrg};
2463d63fdb69Smrg
2464d63fdb69Smrg/* This works around a problem in FreeBSD linker */
2465d63fdb69Smrg#ifdef FREEBSD_WORKAROUND
2466d63fdb69Smrgstatic const void *lt_preloaded_setup() {
2467d63fdb69Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
2468d63fdb69Smrg}
2469d63fdb69Smrg#endif
2470d63fdb69Smrg
2471d63fdb69Smrg#ifdef __cplusplus
2472d63fdb69Smrg}
2473d63fdb69Smrg#endif\
2474d63fdb69Smrg"
2475d63fdb69Smrg	} # !$opt_dry_run
2476d63fdb69Smrg
2477d63fdb69Smrg	pic_flag_for_symtable=
2478d63fdb69Smrg	case "$compile_command " in
2479d63fdb69Smrg	*" -static "*) ;;
2480d63fdb69Smrg	*)
2481d63fdb69Smrg	  case $host in
2482d63fdb69Smrg	  # compiling the symbol table file with pic_flag works around
2483d63fdb69Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
2484d63fdb69Smrg	  # linked before any other PIC object.  But we must not use
2485d63fdb69Smrg	  # pic_flag when linking with -static.  The problem exists in
2486d63fdb69Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
2487d63fdb69Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
2488d63fdb69Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
2489d63fdb69Smrg	  *-*-hpux*)
2490d63fdb69Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
2491d63fdb69Smrg	  *)
2492d63fdb69Smrg	    if test "X$my_pic_p" != Xno; then
2493d63fdb69Smrg	      pic_flag_for_symtable=" $pic_flag"
24943da084b3Smrg	    fi
2495d63fdb69Smrg	    ;;
2496d63fdb69Smrg	  esac
2497d63fdb69Smrg	  ;;
2498d63fdb69Smrg	esac
2499d63fdb69Smrg	symtab_cflags=
2500d63fdb69Smrg	for arg in $LTCFLAGS; do
2501d63fdb69Smrg	  case $arg in
2502d63fdb69Smrg	  -pie | -fpie | -fPIE) ;;
2503d63fdb69Smrg	  *) symtab_cflags="$symtab_cflags $arg" ;;
2504d63fdb69Smrg	  esac
2505d63fdb69Smrg	done
25063da084b3Smrg
2507d63fdb69Smrg	# Now compile the dynamic symbol file.
2508d63fdb69Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
25093da084b3Smrg
2510d63fdb69Smrg	# Clean up the generated files.
2511d63fdb69Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
2512d63fdb69Smrg
2513d63fdb69Smrg	# Transform the symbol file into the correct name.
2514d63fdb69Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
2515d63fdb69Smrg	case $host in
2516d63fdb69Smrg	*cygwin* | *mingw* | *cegcc* )
2517d63fdb69Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
2518d63fdb69Smrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
2519d63fdb69Smrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
2520d63fdb69Smrg	  else
2521d63fdb69Smrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2522d63fdb69Smrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2523d63fdb69Smrg	  fi
2524d63fdb69Smrg	  ;;
2525d63fdb69Smrg	*)
2526d63fdb69Smrg	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2527d63fdb69Smrg	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
25283da084b3Smrg	  ;;
25293da084b3Smrg	esac
2530d63fdb69Smrg	;;
2531d63fdb69Smrg      *)
2532d63fdb69Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
2533d63fdb69Smrg	;;
2534d63fdb69Smrg      esac
2535d63fdb69Smrg    else
2536d63fdb69Smrg      # We keep going just in case the user didn't refer to
2537d63fdb69Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
2538d63fdb69Smrg      # really was required.
2539d63fdb69Smrg
2540d63fdb69Smrg      # Nullify the symbol file.
2541d63fdb69Smrg      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
2542d63fdb69Smrg      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
25433da084b3Smrg    fi
2544d63fdb69Smrg}
25453da084b3Smrg
2546d63fdb69Smrg# func_win32_libid arg
2547d63fdb69Smrg# return the library type of file 'arg'
2548d63fdb69Smrg#
2549d63fdb69Smrg# Need a lot of goo to handle *both* DLLs and import libs
2550d63fdb69Smrg# Has to be a shell function in order to 'eat' the argument
2551d63fdb69Smrg# that is supplied when $file_magic_command is called.
2552d63fdb69Smrgfunc_win32_libid ()
2553d63fdb69Smrg{
2554d63fdb69Smrg  $opt_debug
2555d63fdb69Smrg  win32_libid_type="unknown"
2556d63fdb69Smrg  win32_fileres=`file -L $1 2>/dev/null`
2557d63fdb69Smrg  case $win32_fileres in
2558d63fdb69Smrg  *ar\ archive\ import\ library*) # definitely import
2559d63fdb69Smrg    win32_libid_type="x86 archive import"
2560d63fdb69Smrg    ;;
2561d63fdb69Smrg  *ar\ archive*) # could be an import, or static
2562d63fdb69Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
2563d63fdb69Smrg       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
2564d63fdb69Smrg      win32_nmres=`eval $NM -f posix -A $1 |
2565d63fdb69Smrg	$SED -n -e '
2566d63fdb69Smrg	    1,100{
2567d63fdb69Smrg		/ I /{
2568d63fdb69Smrg		    s,.*,import,
2569d63fdb69Smrg		    p
2570d63fdb69Smrg		    q
2571d63fdb69Smrg		}
2572d63fdb69Smrg	    }'`
2573d63fdb69Smrg      case $win32_nmres in
2574d63fdb69Smrg      import*)  win32_libid_type="x86 archive import";;
2575d63fdb69Smrg      *)        win32_libid_type="x86 archive static";;
2576d63fdb69Smrg      esac
2577d63fdb69Smrg    fi
2578d63fdb69Smrg    ;;
2579d63fdb69Smrg  *DLL*)
2580d63fdb69Smrg    win32_libid_type="x86 DLL"
2581d63fdb69Smrg    ;;
2582d63fdb69Smrg  *executable*) # but shell scripts are "executable" too...
2583d63fdb69Smrg    case $win32_fileres in
2584d63fdb69Smrg    *MS\ Windows\ PE\ Intel*)
2585d63fdb69Smrg      win32_libid_type="x86 DLL"
2586d63fdb69Smrg      ;;
2587d63fdb69Smrg    esac
2588d63fdb69Smrg    ;;
2589d63fdb69Smrg  esac
2590d63fdb69Smrg  $ECHO "$win32_libid_type"
2591d63fdb69Smrg}
25923da084b3Smrg
25933da084b3Smrg
25943da084b3Smrg
2595d63fdb69Smrg# func_extract_an_archive dir oldlib
2596d63fdb69Smrgfunc_extract_an_archive ()
2597d63fdb69Smrg{
2598d63fdb69Smrg    $opt_debug
2599d63fdb69Smrg    f_ex_an_ar_dir="$1"; shift
2600d63fdb69Smrg    f_ex_an_ar_oldlib="$1"
2601d63fdb69Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
2602d63fdb69Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
2603d63fdb69Smrg     :
2604d63fdb69Smrg    else
2605d63fdb69Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
2606d63fdb69Smrg    fi
2607d63fdb69Smrg}
26083da084b3Smrg
26093da084b3Smrg
2610d63fdb69Smrg# func_extract_archives gentop oldlib ...
2611d63fdb69Smrgfunc_extract_archives ()
2612d63fdb69Smrg{
2613d63fdb69Smrg    $opt_debug
2614d63fdb69Smrg    my_gentop="$1"; shift
2615d63fdb69Smrg    my_oldlibs=${1+"$@"}
2616d63fdb69Smrg    my_oldobjs=""
2617d63fdb69Smrg    my_xlib=""
2618d63fdb69Smrg    my_xabs=""
2619d63fdb69Smrg    my_xdir=""
26203da084b3Smrg
2621d63fdb69Smrg    for my_xlib in $my_oldlibs; do
2622d63fdb69Smrg      # Extract the objects.
2623d63fdb69Smrg      case $my_xlib in
2624d63fdb69Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
2625d63fdb69Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
2626d63fdb69Smrg      esac
2627d63fdb69Smrg      func_basename "$my_xlib"
2628d63fdb69Smrg      my_xlib="$func_basename_result"
2629d63fdb69Smrg      my_xlib_u=$my_xlib
2630d63fdb69Smrg      while :; do
2631d63fdb69Smrg        case " $extracted_archives " in
2632d63fdb69Smrg	*" $my_xlib_u "*)
2633d63fdb69Smrg	  func_arith $extracted_serial + 1
2634d63fdb69Smrg	  extracted_serial=$func_arith_result
2635d63fdb69Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
2636d63fdb69Smrg	*) break ;;
2637d63fdb69Smrg	esac
2638d63fdb69Smrg      done
2639d63fdb69Smrg      extracted_archives="$extracted_archives $my_xlib_u"
2640d63fdb69Smrg      my_xdir="$my_gentop/$my_xlib_u"
26413da084b3Smrg
2642d63fdb69Smrg      func_mkdir_p "$my_xdir"
26433da084b3Smrg
2644d63fdb69Smrg      case $host in
2645d63fdb69Smrg      *-darwin*)
2646d63fdb69Smrg	func_verbose "Extracting $my_xabs"
2647d63fdb69Smrg	# Do not bother doing anything if just a dry run
2648d63fdb69Smrg	$opt_dry_run || {
2649d63fdb69Smrg	  darwin_orig_dir=`pwd`
2650d63fdb69Smrg	  cd $my_xdir || exit $?
2651d63fdb69Smrg	  darwin_archive=$my_xabs
2652d63fdb69Smrg	  darwin_curdir=`pwd`
2653d63fdb69Smrg	  darwin_base_archive=`basename "$darwin_archive"`
2654d63fdb69Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
2655d63fdb69Smrg	  if test -n "$darwin_arches"; then
2656d63fdb69Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
2657d63fdb69Smrg	    darwin_arch=
2658d63fdb69Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
2659d63fdb69Smrg	    for darwin_arch in  $darwin_arches ; do
2660d63fdb69Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
2661d63fdb69Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
2662d63fdb69Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
2663d63fdb69Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
2664d63fdb69Smrg	      cd "$darwin_curdir"
2665d63fdb69Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
2666d63fdb69Smrg	    done # $darwin_arches
2667d63fdb69Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
2668d63fdb69Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
2669d63fdb69Smrg	    darwin_file=
2670d63fdb69Smrg	    darwin_files=
2671d63fdb69Smrg	    for darwin_file in $darwin_filelist; do
2672d63fdb69Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
2673d63fdb69Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
2674d63fdb69Smrg	    done # $darwin_filelist
2675d63fdb69Smrg	    $RM -rf unfat-$$
2676d63fdb69Smrg	    cd "$darwin_orig_dir"
2677d63fdb69Smrg	  else
2678d63fdb69Smrg	    cd $darwin_orig_dir
2679d63fdb69Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
2680d63fdb69Smrg	  fi # $darwin_arches
2681d63fdb69Smrg	} # !$opt_dry_run
2682d63fdb69Smrg	;;
2683d63fdb69Smrg      *)
2684d63fdb69Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
2685d63fdb69Smrg	;;
26863da084b3Smrg      esac
2687d63fdb69Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
2688d63fdb69Smrg    done
26893da084b3Smrg
2690d63fdb69Smrg    func_extract_archives_result="$my_oldobjs"
2691d63fdb69Smrg}
26923da084b3Smrg
26933da084b3Smrg
26943da084b3Smrg
2695d63fdb69Smrg# func_emit_wrapper_part1 [arg=no]
2696d63fdb69Smrg#
2697d63fdb69Smrg# Emit the first part of a libtool wrapper script on stdout.
2698d63fdb69Smrg# For more information, see the description associated with
2699d63fdb69Smrg# func_emit_wrapper(), below.
2700d63fdb69Smrgfunc_emit_wrapper_part1 ()
2701d63fdb69Smrg{
2702d63fdb69Smrg	func_emit_wrapper_part1_arg1=no
2703d63fdb69Smrg	if test -n "$1" ; then
2704d63fdb69Smrg	  func_emit_wrapper_part1_arg1=$1
27053da084b3Smrg	fi
27063da084b3Smrg
2707d63fdb69Smrg	$ECHO "\
2708d63fdb69Smrg#! $SHELL
27093da084b3Smrg
2710d63fdb69Smrg# $output - temporary wrapper script for $objdir/$outputname
2711d63fdb69Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
2712d63fdb69Smrg#
2713d63fdb69Smrg# The $output program cannot be directly executed until all the libtool
2714d63fdb69Smrg# libraries that it depends on are installed.
2715d63fdb69Smrg#
2716d63fdb69Smrg# This wrapper script should never be moved out of the build directory.
2717d63fdb69Smrg# If it is, it will not operate correctly.
27183da084b3Smrg
2719d63fdb69Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
2720d63fdb69Smrg# metacharacters that are still active within double-quoted strings.
2721d63fdb69SmrgXsed='${SED} -e 1s/^X//'
2722d63fdb69Smrgsed_quote_subst='$sed_quote_subst'
27233da084b3Smrg
2724d63fdb69Smrg# Be Bourne compatible
2725d63fdb69Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
2726d63fdb69Smrg  emulate sh
2727d63fdb69Smrg  NULLCMD=:
2728d63fdb69Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
2729d63fdb69Smrg  # is contrary to our usage.  Disable this feature.
2730d63fdb69Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
2731d63fdb69Smrg  setopt NO_GLOB_SUBST
2732d63fdb69Smrgelse
2733d63fdb69Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
2734d63fdb69Smrgfi
2735d63fdb69SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
2736d63fdb69SmrgDUALCASE=1; export DUALCASE # for MKS sh
27373da084b3Smrg
2738d63fdb69Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
2739d63fdb69Smrg# if CDPATH is set.
2740d63fdb69Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
27413da084b3Smrg
2742d63fdb69Smrgrelink_command=\"$relink_command\"
27433da084b3Smrg
2744d63fdb69Smrg# This environment variable determines our operation mode.
2745d63fdb69Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
2746d63fdb69Smrg  # install mode needs the following variables:
2747d63fdb69Smrg  generated_by_libtool_version='$macro_version'
2748d63fdb69Smrg  notinst_deplibs='$notinst_deplibs'
2749d63fdb69Smrgelse
2750d63fdb69Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
2751d63fdb69Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
2752d63fdb69Smrg    ECHO=\"$qecho\"
2753d63fdb69Smrg    file=\"\$0\"
2754d63fdb69Smrg    # Make sure echo works.
2755d63fdb69Smrg    if test \"X\$1\" = X--no-reexec; then
2756d63fdb69Smrg      # Discard the --no-reexec flag, and continue.
2757d63fdb69Smrg      shift
2758d63fdb69Smrg    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
2759d63fdb69Smrg      # Yippee, \$ECHO works!
2760d63fdb69Smrg      :
2761d63fdb69Smrg    else
2762d63fdb69Smrg      # Restart under the correct shell, and then maybe \$ECHO will work.
2763d63fdb69Smrg      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
2764d63fdb69Smrg    fi
2765d63fdb69Smrg  fi\
2766d63fdb69Smrg"
2767d63fdb69Smrg	$ECHO "\
27683da084b3Smrg
2769d63fdb69Smrg  # Find the directory that this script lives in.
2770d63fdb69Smrg  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
2771d63fdb69Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
27723da084b3Smrg
2773d63fdb69Smrg  # Follow symbolic links until we get to the real thisdir.
2774d63fdb69Smrg  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
2775d63fdb69Smrg  while test -n \"\$file\"; do
2776d63fdb69Smrg    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
27773da084b3Smrg
2778d63fdb69Smrg    # If there was a directory component, then change thisdir.
2779d63fdb69Smrg    if test \"x\$destdir\" != \"x\$file\"; then
2780d63fdb69Smrg      case \"\$destdir\" in
2781d63fdb69Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
2782d63fdb69Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
2783d63fdb69Smrg      esac
2784d63fdb69Smrg    fi
27853da084b3Smrg
2786d63fdb69Smrg    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
2787d63fdb69Smrg    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
2788d63fdb69Smrg  done
2789d63fdb69Smrg"
2790d63fdb69Smrg}
2791d63fdb69Smrg# end: func_emit_wrapper_part1
27923da084b3Smrg
2793d63fdb69Smrg# func_emit_wrapper_part2 [arg=no]
2794d63fdb69Smrg#
2795d63fdb69Smrg# Emit the second part of a libtool wrapper script on stdout.
2796d63fdb69Smrg# For more information, see the description associated with
2797d63fdb69Smrg# func_emit_wrapper(), below.
2798d63fdb69Smrgfunc_emit_wrapper_part2 ()
2799d63fdb69Smrg{
2800d63fdb69Smrg	func_emit_wrapper_part2_arg1=no
2801d63fdb69Smrg	if test -n "$1" ; then
2802d63fdb69Smrg	  func_emit_wrapper_part2_arg1=$1
2803d63fdb69Smrg	fi
28043da084b3Smrg
2805d63fdb69Smrg	$ECHO "\
28063da084b3Smrg
2807d63fdb69Smrg  # Usually 'no', except on cygwin/mingw when embedded into
2808d63fdb69Smrg  # the cwrapper.
2809d63fdb69Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
2810d63fdb69Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
2811d63fdb69Smrg    # special case for '.'
2812d63fdb69Smrg    if test \"\$thisdir\" = \".\"; then
2813d63fdb69Smrg      thisdir=\`pwd\`
2814d63fdb69Smrg    fi
2815d63fdb69Smrg    # remove .libs from thisdir
2816d63fdb69Smrg    case \"\$thisdir\" in
2817d63fdb69Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
2818d63fdb69Smrg    $objdir )   thisdir=. ;;
2819d63fdb69Smrg    esac
2820d63fdb69Smrg  fi
28213da084b3Smrg
2822d63fdb69Smrg  # Try to get the absolute directory name.
2823d63fdb69Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
2824d63fdb69Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
2825d63fdb69Smrg"
28263da084b3Smrg
2827d63fdb69Smrg	if test "$fast_install" = yes; then
2828d63fdb69Smrg	  $ECHO "\
2829d63fdb69Smrg  program=lt-'$outputname'$exeext
2830d63fdb69Smrg  progdir=\"\$thisdir/$objdir\"
28313da084b3Smrg
2832d63fdb69Smrg  if test ! -f \"\$progdir/\$program\" ||
2833d63fdb69Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
2834d63fdb69Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
28353da084b3Smrg
2836d63fdb69Smrg    file=\"\$\$-\$program\"
28373da084b3Smrg
2838d63fdb69Smrg    if test ! -d \"\$progdir\"; then
2839d63fdb69Smrg      $MKDIR \"\$progdir\"
2840d63fdb69Smrg    else
2841d63fdb69Smrg      $RM \"\$progdir/\$file\"
2842d63fdb69Smrg    fi"
28433da084b3Smrg
2844d63fdb69Smrg	  $ECHO "\
28453da084b3Smrg
2846d63fdb69Smrg    # relink executable if necessary
2847d63fdb69Smrg    if test -n \"\$relink_command\"; then
2848d63fdb69Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
2849d63fdb69Smrg      else
2850d63fdb69Smrg	$ECHO \"\$relink_command_output\" >&2
2851d63fdb69Smrg	$RM \"\$progdir/\$file\"
2852d63fdb69Smrg	exit 1
2853d63fdb69Smrg      fi
2854d63fdb69Smrg    fi
28553da084b3Smrg
2856d63fdb69Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
2857d63fdb69Smrg    { $RM \"\$progdir/\$program\";
2858d63fdb69Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
2859d63fdb69Smrg    $RM \"\$progdir/\$file\"
2860d63fdb69Smrg  fi"
2861d63fdb69Smrg	else
2862d63fdb69Smrg	  $ECHO "\
2863d63fdb69Smrg  program='$outputname'
2864d63fdb69Smrg  progdir=\"\$thisdir/$objdir\"
2865d63fdb69Smrg"
2866d63fdb69Smrg	fi
28673da084b3Smrg
2868d63fdb69Smrg	$ECHO "\
28693da084b3Smrg
2870d63fdb69Smrg  if test -f \"\$progdir/\$program\"; then"
28713da084b3Smrg
2872d63fdb69Smrg	# Export our shlibpath_var if we have one.
2873d63fdb69Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
2874d63fdb69Smrg	  $ECHO "\
2875d63fdb69Smrg    # Add our own library path to $shlibpath_var
2876d63fdb69Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
28773da084b3Smrg
2878d63fdb69Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
2879d63fdb69Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
2880d63fdb69Smrg    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
28813da084b3Smrg
2882d63fdb69Smrg    export $shlibpath_var
2883d63fdb69Smrg"
28843da084b3Smrg	fi
28853da084b3Smrg
2886d63fdb69Smrg	# fixup the dll searchpath if we need to.
2887d63fdb69Smrg	if test -n "$dllsearchpath"; then
2888d63fdb69Smrg	  $ECHO "\
2889d63fdb69Smrg    # Add the dll search path components to the executable PATH
2890d63fdb69Smrg    PATH=$dllsearchpath:\$PATH
2891d63fdb69Smrg"
28923da084b3Smrg	fi
28933da084b3Smrg
2894d63fdb69Smrg	$ECHO "\
2895d63fdb69Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
2896d63fdb69Smrg      # Run the actual program with our arguments.
2897d63fdb69Smrg"
2898d63fdb69Smrg	case $host in
2899d63fdb69Smrg	# Backslashes separate directories on plain windows
2900d63fdb69Smrg	*-*-mingw | *-*-os2* | *-cegcc*)
2901d63fdb69Smrg	  $ECHO "\
2902d63fdb69Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
2903d63fdb69Smrg"
2904d63fdb69Smrg	  ;;
2905d63fdb69Smrg
2906d63fdb69Smrg	*)
2907d63fdb69Smrg	  $ECHO "\
2908d63fdb69Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
2909d63fdb69Smrg"
2910d63fdb69Smrg	  ;;
2911d63fdb69Smrg	esac
2912d63fdb69Smrg	$ECHO "\
2913d63fdb69Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
2914d63fdb69Smrg      exit 1
2915d63fdb69Smrg    fi
2916d63fdb69Smrg  else
2917d63fdb69Smrg    # The program doesn't exist.
2918d63fdb69Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
2919d63fdb69Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
2920d63fdb69Smrg    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
2921d63fdb69Smrg    exit 1
2922d63fdb69Smrg  fi
2923d63fdb69Smrgfi\
2924d63fdb69Smrg"
2925d63fdb69Smrg}
2926d63fdb69Smrg# end: func_emit_wrapper_part2
2927d63fdb69Smrg
2928d63fdb69Smrg
2929d63fdb69Smrg# func_emit_wrapper [arg=no]
2930d63fdb69Smrg#
2931d63fdb69Smrg# Emit a libtool wrapper script on stdout.
2932d63fdb69Smrg# Don't directly open a file because we may want to
2933d63fdb69Smrg# incorporate the script contents within a cygwin/mingw
2934d63fdb69Smrg# wrapper executable.  Must ONLY be called from within
2935d63fdb69Smrg# func_mode_link because it depends on a number of variables
2936d63fdb69Smrg# set therein.
2937d63fdb69Smrg#
2938d63fdb69Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
2939d63fdb69Smrg# variable will take.  If 'yes', then the emitted script
2940d63fdb69Smrg# will assume that the directory in which it is stored is
2941d63fdb69Smrg# the $objdir directory.  This is a cygwin/mingw-specific
2942d63fdb69Smrg# behavior.
2943d63fdb69Smrgfunc_emit_wrapper ()
2944d63fdb69Smrg{
2945d63fdb69Smrg	func_emit_wrapper_arg1=no
2946d63fdb69Smrg	if test -n "$1" ; then
2947d63fdb69Smrg	  func_emit_wrapper_arg1=$1
29483da084b3Smrg	fi
29493da084b3Smrg
2950d63fdb69Smrg	# split this up so that func_emit_cwrapperexe_src
2951d63fdb69Smrg	# can call each part independently.
2952d63fdb69Smrg	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
2953d63fdb69Smrg	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
2954d63fdb69Smrg}
29553da084b3Smrg
29563da084b3Smrg
2957d63fdb69Smrg# func_to_host_path arg
2958d63fdb69Smrg#
2959d63fdb69Smrg# Convert paths to host format when used with build tools.
2960d63fdb69Smrg# Intended for use with "native" mingw (where libtool itself
2961d63fdb69Smrg# is running under the msys shell), or in the following cross-
2962d63fdb69Smrg# build environments:
2963d63fdb69Smrg#    $build          $host
2964d63fdb69Smrg#    mingw (msys)    mingw  [e.g. native]
2965d63fdb69Smrg#    cygwin          mingw
2966d63fdb69Smrg#    *nix + wine     mingw
2967d63fdb69Smrg# where wine is equipped with the `winepath' executable.
2968d63fdb69Smrg# In the native mingw case, the (msys) shell automatically
2969d63fdb69Smrg# converts paths for any non-msys applications it launches,
2970d63fdb69Smrg# but that facility isn't available from inside the cwrapper.
2971d63fdb69Smrg# Similar accommodations are necessary for $host mingw and
2972d63fdb69Smrg# $build cygwin.  Calling this function does no harm for other
2973d63fdb69Smrg# $host/$build combinations not listed above.
2974d63fdb69Smrg#
2975d63fdb69Smrg# ARG is the path (on $build) that should be converted to
2976d63fdb69Smrg# the proper representation for $host. The result is stored
2977d63fdb69Smrg# in $func_to_host_path_result.
2978d63fdb69Smrgfunc_to_host_path ()
2979d63fdb69Smrg{
2980d63fdb69Smrg  func_to_host_path_result="$1"
2981d63fdb69Smrg  if test -n "$1" ; then
2982d63fdb69Smrg    case $host in
2983d63fdb69Smrg      *mingw* )
2984d63fdb69Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
2985d63fdb69Smrg        case $build in
2986d63fdb69Smrg          *mingw* ) # actually, msys
2987d63fdb69Smrg            # awkward: cmd appends spaces to result
2988d63fdb69Smrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
2989d63fdb69Smrg            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
2990d63fdb69Smrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
2991d63fdb69Smrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
2992d63fdb69Smrg              $SED -e "$lt_sed_naive_backslashify"`
2993d63fdb69Smrg            ;;
2994d63fdb69Smrg          *cygwin* )
2995d63fdb69Smrg            func_to_host_path_tmp1=`cygpath -w "$1"`
2996d63fdb69Smrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
2997d63fdb69Smrg              $SED -e "$lt_sed_naive_backslashify"`
2998d63fdb69Smrg            ;;
2999d63fdb69Smrg          * )
3000d63fdb69Smrg            # Unfortunately, winepath does not exit with a non-zero
3001d63fdb69Smrg            # error code, so we are forced to check the contents of
3002d63fdb69Smrg            # stdout. On the other hand, if the command is not
3003d63fdb69Smrg            # found, the shell will set an exit code of 127 and print
3004d63fdb69Smrg            # *an error message* to stdout. So we must check for both
3005d63fdb69Smrg            # error code of zero AND non-empty stdout, which explains
3006d63fdb69Smrg            # the odd construction:
3007d63fdb69Smrg            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
3008d63fdb69Smrg            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
3009d63fdb69Smrg              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
3010d63fdb69Smrg                $SED -e "$lt_sed_naive_backslashify"`
3011d63fdb69Smrg            else
3012d63fdb69Smrg              # Allow warning below.
3013d63fdb69Smrg              func_to_host_path_result=""
3014d63fdb69Smrg            fi
3015d63fdb69Smrg            ;;
3016d63fdb69Smrg        esac
3017d63fdb69Smrg        if test -z "$func_to_host_path_result" ; then
3018d63fdb69Smrg          func_error "Could not determine host path corresponding to"
3019d63fdb69Smrg          func_error "  '$1'"
3020d63fdb69Smrg          func_error "Continuing, but uninstalled executables may not work."
3021d63fdb69Smrg          # Fallback:
3022d63fdb69Smrg          func_to_host_path_result="$1"
3023d63fdb69Smrg        fi
3024d63fdb69Smrg        ;;
3025d63fdb69Smrg    esac
3026d63fdb69Smrg  fi
3027d63fdb69Smrg}
3028d63fdb69Smrg# end: func_to_host_path
30293da084b3Smrg
3030d63fdb69Smrg# func_to_host_pathlist arg
3031d63fdb69Smrg#
3032d63fdb69Smrg# Convert pathlists to host format when used with build tools.
3033d63fdb69Smrg# See func_to_host_path(), above. This function supports the
3034d63fdb69Smrg# following $build/$host combinations (but does no harm for
3035d63fdb69Smrg# combinations not listed here):
3036d63fdb69Smrg#    $build          $host
3037d63fdb69Smrg#    mingw (msys)    mingw  [e.g. native]
3038d63fdb69Smrg#    cygwin          mingw
3039d63fdb69Smrg#    *nix + wine     mingw
3040d63fdb69Smrg#
3041d63fdb69Smrg# Path separators are also converted from $build format to
3042d63fdb69Smrg# $host format. If ARG begins or ends with a path separator
3043d63fdb69Smrg# character, it is preserved (but converted to $host format)
3044d63fdb69Smrg# on output.
3045d63fdb69Smrg#
3046d63fdb69Smrg# ARG is a pathlist (on $build) that should be converted to
3047d63fdb69Smrg# the proper representation on $host. The result is stored
3048d63fdb69Smrg# in $func_to_host_pathlist_result.
3049d63fdb69Smrgfunc_to_host_pathlist ()
3050d63fdb69Smrg{
3051d63fdb69Smrg  func_to_host_pathlist_result="$1"
3052d63fdb69Smrg  if test -n "$1" ; then
3053d63fdb69Smrg    case $host in
3054d63fdb69Smrg      *mingw* )
3055d63fdb69Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3056d63fdb69Smrg        # Remove leading and trailing path separator characters from
3057d63fdb69Smrg        # ARG. msys behavior is inconsistent here, cygpath turns them
3058d63fdb69Smrg        # into '.;' and ';.', and winepath ignores them completely.
3059d63fdb69Smrg        func_to_host_pathlist_tmp2="$1"
3060d63fdb69Smrg        # Once set for this call, this variable should not be
3061d63fdb69Smrg        # reassigned. It is used in tha fallback case.
3062d63fdb69Smrg        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
3063d63fdb69Smrg          $SED -e 's|^:*||' -e 's|:*$||'`
3064d63fdb69Smrg        case $build in
3065d63fdb69Smrg          *mingw* ) # Actually, msys.
3066d63fdb69Smrg            # Awkward: cmd appends spaces to result.
3067d63fdb69Smrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
3068d63fdb69Smrg            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
3069d63fdb69Smrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
3070d63fdb69Smrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
3071d63fdb69Smrg              $SED -e "$lt_sed_naive_backslashify"`
3072d63fdb69Smrg            ;;
3073d63fdb69Smrg          *cygwin* )
3074d63fdb69Smrg            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
3075d63fdb69Smrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
3076d63fdb69Smrg              $SED -e "$lt_sed_naive_backslashify"`
3077d63fdb69Smrg            ;;
3078d63fdb69Smrg          * )
3079d63fdb69Smrg            # unfortunately, winepath doesn't convert pathlists
3080d63fdb69Smrg            func_to_host_pathlist_result=""
3081d63fdb69Smrg            func_to_host_pathlist_oldIFS=$IFS
3082d63fdb69Smrg            IFS=:
3083d63fdb69Smrg            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
3084d63fdb69Smrg              IFS=$func_to_host_pathlist_oldIFS
3085d63fdb69Smrg              if test -n "$func_to_host_pathlist_f" ; then
3086d63fdb69Smrg                func_to_host_path "$func_to_host_pathlist_f"
3087d63fdb69Smrg                if test -n "$func_to_host_path_result" ; then
3088d63fdb69Smrg                  if test -z "$func_to_host_pathlist_result" ; then
3089d63fdb69Smrg                    func_to_host_pathlist_result="$func_to_host_path_result"
3090d63fdb69Smrg                  else
3091d63fdb69Smrg                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
3092d63fdb69Smrg                  fi
3093d63fdb69Smrg                fi
3094d63fdb69Smrg              fi
3095d63fdb69Smrg              IFS=:
3096d63fdb69Smrg            done
3097d63fdb69Smrg            IFS=$func_to_host_pathlist_oldIFS
3098d63fdb69Smrg            ;;
3099d63fdb69Smrg        esac
3100d63fdb69Smrg        if test -z "$func_to_host_pathlist_result" ; then
3101d63fdb69Smrg          func_error "Could not determine the host path(s) corresponding to"
3102d63fdb69Smrg          func_error "  '$1'"
3103d63fdb69Smrg          func_error "Continuing, but uninstalled executables may not work."
3104d63fdb69Smrg          # Fallback. This may break if $1 contains DOS-style drive
3105d63fdb69Smrg          # specifications. The fix is not to complicate the expression
3106d63fdb69Smrg          # below, but for the user to provide a working wine installation
3107d63fdb69Smrg          # with winepath so that path translation in the cross-to-mingw
3108d63fdb69Smrg          # case works properly.
3109d63fdb69Smrg          lt_replace_pathsep_nix_to_dos="s|:|;|g"
3110d63fdb69Smrg          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
3111d63fdb69Smrg            $SED -e "$lt_replace_pathsep_nix_to_dos"`
3112d63fdb69Smrg        fi
3113d63fdb69Smrg        # Now, add the leading and trailing path separators back
3114d63fdb69Smrg        case "$1" in
3115d63fdb69Smrg          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
3116d63fdb69Smrg            ;;
3117d63fdb69Smrg        esac
3118d63fdb69Smrg        case "$1" in
3119d63fdb69Smrg          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
3120d63fdb69Smrg            ;;
3121d63fdb69Smrg        esac
3122d63fdb69Smrg        ;;
3123d63fdb69Smrg    esac
3124d63fdb69Smrg  fi
3125d63fdb69Smrg}
3126d63fdb69Smrg# end: func_to_host_pathlist
31273da084b3Smrg
3128d63fdb69Smrg# func_emit_cwrapperexe_src
3129d63fdb69Smrg# emit the source code for a wrapper executable on stdout
3130d63fdb69Smrg# Must ONLY be called from within func_mode_link because
3131d63fdb69Smrg# it depends on a number of variable set therein.
3132d63fdb69Smrgfunc_emit_cwrapperexe_src ()
3133d63fdb69Smrg{
3134d63fdb69Smrg	cat <<EOF
31353da084b3Smrg
3136d63fdb69Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
3137d63fdb69Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
31383da084b3Smrg
3139d63fdb69Smrg   The $output program cannot be directly executed until all the libtool
3140d63fdb69Smrg   libraries that it depends on are installed.
31413da084b3Smrg
3142d63fdb69Smrg   This wrapper executable should never be moved out of the build directory.
3143d63fdb69Smrg   If it is, it will not operate correctly.
3144d63fdb69Smrg
3145d63fdb69Smrg   Currently, it simply execs the wrapper *script* "$SHELL $output",
3146d63fdb69Smrg   but could eventually absorb all of the scripts functionality and
3147d63fdb69Smrg   exec $objdir/$outputname directly.
3148d63fdb69Smrg*/
3149d63fdb69SmrgEOF
3150d63fdb69Smrg	    cat <<"EOF"
3151d63fdb69Smrg#include <stdio.h>
3152d63fdb69Smrg#include <stdlib.h>
3153d63fdb69Smrg#ifdef _MSC_VER
3154d63fdb69Smrg# include <direct.h>
3155d63fdb69Smrg# include <process.h>
3156d63fdb69Smrg# include <io.h>
3157d63fdb69Smrg# define setmode _setmode
3158d63fdb69Smrg#else
3159d63fdb69Smrg# include <unistd.h>
3160d63fdb69Smrg# include <stdint.h>
3161d63fdb69Smrg# ifdef __CYGWIN__
3162d63fdb69Smrg#  include <io.h>
3163d63fdb69Smrg#  define HAVE_SETENV
3164d63fdb69Smrg#  ifdef __STRICT_ANSI__
3165d63fdb69Smrgchar *realpath (const char *, char *);
3166d63fdb69Smrgint putenv (char *);
3167d63fdb69Smrgint setenv (const char *, const char *, int);
3168d63fdb69Smrg#  endif
3169d63fdb69Smrg# endif
3170d63fdb69Smrg#endif
3171d63fdb69Smrg#include <malloc.h>
3172d63fdb69Smrg#include <stdarg.h>
3173d63fdb69Smrg#include <assert.h>
3174d63fdb69Smrg#include <string.h>
3175d63fdb69Smrg#include <ctype.h>
3176d63fdb69Smrg#include <errno.h>
3177d63fdb69Smrg#include <fcntl.h>
3178d63fdb69Smrg#include <sys/stat.h>
3179d63fdb69Smrg
3180d63fdb69Smrg#if defined(PATH_MAX)
3181d63fdb69Smrg# define LT_PATHMAX PATH_MAX
3182d63fdb69Smrg#elif defined(MAXPATHLEN)
3183d63fdb69Smrg# define LT_PATHMAX MAXPATHLEN
3184d63fdb69Smrg#else
3185d63fdb69Smrg# define LT_PATHMAX 1024
3186d63fdb69Smrg#endif
3187d63fdb69Smrg
3188d63fdb69Smrg#ifndef S_IXOTH
3189d63fdb69Smrg# define S_IXOTH 0
3190d63fdb69Smrg#endif
3191d63fdb69Smrg#ifndef S_IXGRP
3192d63fdb69Smrg# define S_IXGRP 0
3193d63fdb69Smrg#endif
3194d63fdb69Smrg
3195d63fdb69Smrg#ifdef _MSC_VER
3196d63fdb69Smrg# define S_IXUSR _S_IEXEC
3197d63fdb69Smrg# define stat _stat
3198d63fdb69Smrg# ifndef _INTPTR_T_DEFINED
3199d63fdb69Smrg#  define intptr_t int
3200d63fdb69Smrg# endif
3201d63fdb69Smrg#endif
3202d63fdb69Smrg
3203d63fdb69Smrg#ifndef DIR_SEPARATOR
3204d63fdb69Smrg# define DIR_SEPARATOR '/'
3205d63fdb69Smrg# define PATH_SEPARATOR ':'
3206d63fdb69Smrg#endif
3207d63fdb69Smrg
3208d63fdb69Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
3209d63fdb69Smrg  defined (__OS2__)
3210d63fdb69Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
3211d63fdb69Smrg# define FOPEN_WB "wb"
3212d63fdb69Smrg# ifndef DIR_SEPARATOR_2
3213d63fdb69Smrg#  define DIR_SEPARATOR_2 '\\'
3214d63fdb69Smrg# endif
3215d63fdb69Smrg# ifndef PATH_SEPARATOR_2
3216d63fdb69Smrg#  define PATH_SEPARATOR_2 ';'
3217d63fdb69Smrg# endif
3218d63fdb69Smrg#endif
3219d63fdb69Smrg
3220d63fdb69Smrg#ifndef DIR_SEPARATOR_2
3221d63fdb69Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
3222d63fdb69Smrg#else /* DIR_SEPARATOR_2 */
3223d63fdb69Smrg# define IS_DIR_SEPARATOR(ch) \
3224d63fdb69Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
3225d63fdb69Smrg#endif /* DIR_SEPARATOR_2 */
3226d63fdb69Smrg
3227d63fdb69Smrg#ifndef PATH_SEPARATOR_2
3228d63fdb69Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
3229d63fdb69Smrg#else /* PATH_SEPARATOR_2 */
3230d63fdb69Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
3231d63fdb69Smrg#endif /* PATH_SEPARATOR_2 */
3232d63fdb69Smrg
3233d63fdb69Smrg#ifdef __CYGWIN__
3234d63fdb69Smrg# define FOPEN_WB "wb"
3235d63fdb69Smrg#endif
3236d63fdb69Smrg
3237d63fdb69Smrg#ifndef FOPEN_WB
3238d63fdb69Smrg# define FOPEN_WB "w"
3239d63fdb69Smrg#endif
3240d63fdb69Smrg#ifndef _O_BINARY
3241d63fdb69Smrg# define _O_BINARY 0
3242d63fdb69Smrg#endif
3243d63fdb69Smrg
3244d63fdb69Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
3245d63fdb69Smrg#define XFREE(stale) do { \
3246d63fdb69Smrg  if (stale) { free ((void *) stale); stale = 0; } \
3247d63fdb69Smrg} while (0)
3248d63fdb69Smrg
3249d63fdb69Smrg#undef LTWRAPPER_DEBUGPRINTF
3250d63fdb69Smrg#if defined DEBUGWRAPPER
3251d63fdb69Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
3252d63fdb69Smrgstatic void
3253d63fdb69Smrgltwrapper_debugprintf (const char *fmt, ...)
3254d63fdb69Smrg{
3255d63fdb69Smrg    va_list args;
3256d63fdb69Smrg    va_start (args, fmt);
3257d63fdb69Smrg    (void) vfprintf (stderr, fmt, args);
3258d63fdb69Smrg    va_end (args);
3259d63fdb69Smrg}
3260d63fdb69Smrg#else
3261d63fdb69Smrg# define LTWRAPPER_DEBUGPRINTF(args)
3262d63fdb69Smrg#endif
3263d63fdb69Smrg
3264d63fdb69Smrgconst char *program_name = NULL;
3265d63fdb69Smrg
3266d63fdb69Smrgvoid *xmalloc (size_t num);
3267d63fdb69Smrgchar *xstrdup (const char *string);
3268d63fdb69Smrgconst char *base_name (const char *name);
3269d63fdb69Smrgchar *find_executable (const char *wrapper);
3270d63fdb69Smrgchar *chase_symlinks (const char *pathspec);
3271d63fdb69Smrgint make_executable (const char *path);
3272d63fdb69Smrgint check_executable (const char *path);
3273d63fdb69Smrgchar *strendzap (char *str, const char *pat);
3274d63fdb69Smrgvoid lt_fatal (const char *message, ...);
3275d63fdb69Smrgvoid lt_setenv (const char *name, const char *value);
3276d63fdb69Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
3277d63fdb69Smrgvoid lt_opt_process_env_set (const char *arg);
3278d63fdb69Smrgvoid lt_opt_process_env_prepend (const char *arg);
3279d63fdb69Smrgvoid lt_opt_process_env_append (const char *arg);
3280d63fdb69Smrgint lt_split_name_value (const char *arg, char** name, char** value);
3281d63fdb69Smrgvoid lt_update_exe_path (const char *name, const char *value);
3282d63fdb69Smrgvoid lt_update_lib_path (const char *name, const char *value);
3283d63fdb69Smrg
3284d63fdb69Smrgstatic const char *script_text_part1 =
3285d63fdb69SmrgEOF
3286d63fdb69Smrg
3287d63fdb69Smrg	    func_emit_wrapper_part1 yes |
3288d63fdb69Smrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
3289d63fdb69Smrg	             -e 's/^/  "/' -e 's/$/\\n"/'
3290d63fdb69Smrg	    echo ";"
3291d63fdb69Smrg	    cat <<EOF
3292d63fdb69Smrg
3293d63fdb69Smrgstatic const char *script_text_part2 =
3294d63fdb69SmrgEOF
3295d63fdb69Smrg	    func_emit_wrapper_part2 yes |
3296d63fdb69Smrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
3297d63fdb69Smrg	             -e 's/^/  "/' -e 's/$/\\n"/'
3298d63fdb69Smrg	    echo ";"
3299d63fdb69Smrg
3300d63fdb69Smrg	    cat <<EOF
3301d63fdb69Smrgconst char * MAGIC_EXE = "$magic_exe";
3302d63fdb69Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
3303d63fdb69SmrgEOF
3304d63fdb69Smrg
3305d63fdb69Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
3306d63fdb69Smrg              func_to_host_pathlist "$temp_rpath"
3307d63fdb69Smrg	      cat <<EOF
3308d63fdb69Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
33093da084b3SmrgEOF
33103da084b3Smrg	    else
3311d63fdb69Smrg	      cat <<"EOF"
3312d63fdb69Smrgconst char * LIB_PATH_VALUE   = "";
3313d63fdb69SmrgEOF
33143da084b3Smrg	    fi
3315d63fdb69Smrg
3316d63fdb69Smrg	    if test -n "$dllsearchpath"; then
3317d63fdb69Smrg              func_to_host_pathlist "$dllsearchpath:"
3318d63fdb69Smrg	      cat <<EOF
3319d63fdb69Smrgconst char * EXE_PATH_VARNAME = "PATH";
3320d63fdb69Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
3321d63fdb69SmrgEOF
33223da084b3Smrg	    else
3323d63fdb69Smrg	      cat <<"EOF"
3324d63fdb69Smrgconst char * EXE_PATH_VARNAME = "";
3325d63fdb69Smrgconst char * EXE_PATH_VALUE   = "";
3326d63fdb69SmrgEOF
33273da084b3Smrg	    fi
3328d63fdb69Smrg
3329d63fdb69Smrg	    if test "$fast_install" = yes; then
3330d63fdb69Smrg	      cat <<EOF
3331d63fdb69Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
3332d63fdb69SmrgEOF
33333da084b3Smrg	    else
3334d63fdb69Smrg	      cat <<EOF
3335d63fdb69Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
3336d63fdb69SmrgEOF
33373da084b3Smrg	    fi
33383da084b3Smrg
33393da084b3Smrg
3340d63fdb69Smrg	    cat <<"EOF"
33413da084b3Smrg
3342d63fdb69Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
3343d63fdb69Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
33443da084b3Smrg
3345d63fdb69Smrgstatic const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
3346d63fdb69Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
33473da084b3Smrg
3348d63fdb69Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
33493da084b3Smrg
3350d63fdb69Smrgstatic const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
3351d63fdb69Smrgstatic const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
3352d63fdb69Smrg  /* argument is putenv-style "foo=bar", value of foo is set to bar */
33533da084b3Smrg
3354d63fdb69Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
3355d63fdb69Smrgstatic const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
3356d63fdb69Smrg  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
33573da084b3Smrg
3358d63fdb69Smrgstatic const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
3359d63fdb69Smrgstatic const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
3360d63fdb69Smrg  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
33613da084b3Smrg
3362d63fdb69Smrgint
3363d63fdb69Smrgmain (int argc, char *argv[])
3364d63fdb69Smrg{
3365d63fdb69Smrg  char **newargz;
3366d63fdb69Smrg  int  newargc;
3367d63fdb69Smrg  char *tmp_pathspec;
3368d63fdb69Smrg  char *actual_cwrapper_path;
3369d63fdb69Smrg  char *actual_cwrapper_name;
3370d63fdb69Smrg  char *target_name;
3371d63fdb69Smrg  char *lt_argv_zero;
3372d63fdb69Smrg  intptr_t rval = 127;
33733da084b3Smrg
3374d63fdb69Smrg  int i;
33753da084b3Smrg
3376d63fdb69Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
3377d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
3378d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
33793da084b3Smrg
3380d63fdb69Smrg  /* very simple arg parsing; don't want to rely on getopt */
3381d63fdb69Smrg  for (i = 1; i < argc; i++)
3382d63fdb69Smrg    {
3383d63fdb69Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
3384d63fdb69Smrg	{
3385d63fdb69SmrgEOF
3386d63fdb69Smrg	    case "$host" in
3387d63fdb69Smrg	      *mingw* | *cygwin* )
3388d63fdb69Smrg		# make stdout use "unix" line endings
3389d63fdb69Smrg		echo "          setmode(1,_O_BINARY);"
3390d63fdb69Smrg		;;
3391d63fdb69Smrg	      esac
33923da084b3Smrg
3393d63fdb69Smrg	    cat <<"EOF"
3394d63fdb69Smrg	  printf ("%s", script_text_part1);
3395d63fdb69Smrg	  printf ("%s", script_text_part2);
3396d63fdb69Smrg	  return 0;
3397d63fdb69Smrg	}
3398d63fdb69Smrg    }
33993da084b3Smrg
3400d63fdb69Smrg  newargz = XMALLOC (char *, argc + 1);
3401d63fdb69Smrg  tmp_pathspec = find_executable (argv[0]);
3402d63fdb69Smrg  if (tmp_pathspec == NULL)
3403d63fdb69Smrg    lt_fatal ("Couldn't find %s", argv[0]);
3404d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
3405d63fdb69Smrg			  tmp_pathspec));
3406d63fdb69Smrg
3407d63fdb69Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
3408d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
3409d63fdb69Smrg			  actual_cwrapper_path));
3410d63fdb69Smrg  XFREE (tmp_pathspec);
3411d63fdb69Smrg
3412d63fdb69Smrg  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
3413d63fdb69Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
3414d63fdb69Smrg
3415d63fdb69Smrg  /* wrapper name transforms */
3416d63fdb69Smrg  strendzap (actual_cwrapper_name, ".exe");
3417d63fdb69Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
3418d63fdb69Smrg  XFREE (actual_cwrapper_name);
3419d63fdb69Smrg  actual_cwrapper_name = tmp_pathspec;
3420d63fdb69Smrg  tmp_pathspec = 0;
3421d63fdb69Smrg
3422d63fdb69Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
3423d63fdb69Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
3424d63fdb69Smrg  strendzap (target_name, ".exe");
3425d63fdb69Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
3426d63fdb69Smrg  XFREE (target_name);
3427d63fdb69Smrg  target_name = tmp_pathspec;
3428d63fdb69Smrg  tmp_pathspec = 0;
3429d63fdb69Smrg
3430d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
3431d63fdb69Smrg			  target_name));
3432d63fdb69SmrgEOF
34333da084b3Smrg
3434d63fdb69Smrg	    cat <<EOF
3435d63fdb69Smrg  newargz[0] =
3436d63fdb69Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
3437d63fdb69Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
3438d63fdb69Smrg  strcpy (newargz[0], actual_cwrapper_path);
3439d63fdb69Smrg  strcat (newargz[0], "$objdir");
3440d63fdb69Smrg  strcat (newargz[0], "/");
3441d63fdb69SmrgEOF
34423da084b3Smrg
3443d63fdb69Smrg	    cat <<"EOF"
3444d63fdb69Smrg  /* stop here, and copy so we don't have to do this twice */
3445d63fdb69Smrg  tmp_pathspec = xstrdup (newargz[0]);
34463da084b3Smrg
3447d63fdb69Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
3448d63fdb69Smrg  strcat (newargz[0], actual_cwrapper_name);
34493da084b3Smrg
3450d63fdb69Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
3451d63fdb69Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
3452d63fdb69Smrg  XFREE (tmp_pathspec);
3453d63fdb69Smrg  tmp_pathspec = NULL;
3454d63fdb69SmrgEOF
34553da084b3Smrg
3456d63fdb69Smrg	    case $host_os in
3457d63fdb69Smrg	      mingw*)
3458d63fdb69Smrg	    cat <<"EOF"
3459d63fdb69Smrg  {
3460d63fdb69Smrg    char* p;
3461d63fdb69Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
3462d63fdb69Smrg      {
3463d63fdb69Smrg	*p = '/';
3464d63fdb69Smrg      }
3465d63fdb69Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
3466d63fdb69Smrg      {
3467d63fdb69Smrg	*p = '/';
3468d63fdb69Smrg      }
3469d63fdb69Smrg  }
3470d63fdb69SmrgEOF
3471d63fdb69Smrg	    ;;
3472d63fdb69Smrg	    esac
34733da084b3Smrg
3474d63fdb69Smrg	    cat <<"EOF"
3475d63fdb69Smrg  XFREE (target_name);
3476d63fdb69Smrg  XFREE (actual_cwrapper_path);
3477d63fdb69Smrg  XFREE (actual_cwrapper_name);
34783da084b3Smrg
3479d63fdb69Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
3480d63fdb69Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
3481d63fdb69Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
3482d63fdb69Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
34833da084b3Smrg
3484d63fdb69Smrg  newargc=0;
3485d63fdb69Smrg  for (i = 1; i < argc; i++)
3486d63fdb69Smrg    {
3487d63fdb69Smrg      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
3488d63fdb69Smrg        {
3489d63fdb69Smrg          if (argv[i][env_set_opt_len] == '=')
3490d63fdb69Smrg            {
3491d63fdb69Smrg              const char *p = argv[i] + env_set_opt_len + 1;
3492d63fdb69Smrg              lt_opt_process_env_set (p);
3493d63fdb69Smrg            }
3494d63fdb69Smrg          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
3495d63fdb69Smrg            {
3496d63fdb69Smrg              lt_opt_process_env_set (argv[++i]); /* don't copy */
3497d63fdb69Smrg            }
3498d63fdb69Smrg          else
3499d63fdb69Smrg            lt_fatal ("%s missing required argument", env_set_opt);
3500d63fdb69Smrg          continue;
3501d63fdb69Smrg        }
3502d63fdb69Smrg      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
3503d63fdb69Smrg        {
3504d63fdb69Smrg          if (argv[i][env_prepend_opt_len] == '=')
3505d63fdb69Smrg            {
3506d63fdb69Smrg              const char *p = argv[i] + env_prepend_opt_len + 1;
3507d63fdb69Smrg              lt_opt_process_env_prepend (p);
3508d63fdb69Smrg            }
3509d63fdb69Smrg          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
3510d63fdb69Smrg            {
3511d63fdb69Smrg              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
3512d63fdb69Smrg            }
3513d63fdb69Smrg          else
3514d63fdb69Smrg            lt_fatal ("%s missing required argument", env_prepend_opt);
3515d63fdb69Smrg          continue;
3516d63fdb69Smrg        }
3517d63fdb69Smrg      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
3518d63fdb69Smrg        {
3519d63fdb69Smrg          if (argv[i][env_append_opt_len] == '=')
3520d63fdb69Smrg            {
3521d63fdb69Smrg              const char *p = argv[i] + env_append_opt_len + 1;
3522d63fdb69Smrg              lt_opt_process_env_append (p);
3523d63fdb69Smrg            }
3524d63fdb69Smrg          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
3525d63fdb69Smrg            {
3526d63fdb69Smrg              lt_opt_process_env_append (argv[++i]); /* don't copy */
3527d63fdb69Smrg            }
3528d63fdb69Smrg          else
3529d63fdb69Smrg            lt_fatal ("%s missing required argument", env_append_opt);
3530d63fdb69Smrg          continue;
3531d63fdb69Smrg        }
3532d63fdb69Smrg      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
3533d63fdb69Smrg        {
3534d63fdb69Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
3535d63fdb69Smrg             namespace, but it is not one of the ones we know about and
3536d63fdb69Smrg             have already dealt with, above (inluding dump-script), then
3537d63fdb69Smrg             report an error. Otherwise, targets might begin to believe
3538d63fdb69Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
3539d63fdb69Smrg             namespace. The first time any user complains about this, we'll
3540d63fdb69Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
3541d63fdb69Smrg             or a configure.ac-settable value.
3542d63fdb69Smrg           */
3543d63fdb69Smrg          lt_fatal ("Unrecognized option in %s namespace: '%s'",
3544d63fdb69Smrg                    ltwrapper_option_prefix, argv[i]);
3545d63fdb69Smrg        }
3546d63fdb69Smrg      /* otherwise ... */
3547d63fdb69Smrg      newargz[++newargc] = xstrdup (argv[i]);
3548d63fdb69Smrg    }
3549d63fdb69Smrg  newargz[++newargc] = NULL;
35503da084b3Smrg
3551d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
3552d63fdb69Smrg  for (i = 0; i < newargc; i++)
3553d63fdb69Smrg    {
3554d63fdb69Smrg      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
3555d63fdb69Smrg    }
35563da084b3Smrg
3557d63fdb69SmrgEOF
35583da084b3Smrg
3559d63fdb69Smrg	    case $host_os in
3560d63fdb69Smrg	      mingw*)
3561d63fdb69Smrg		cat <<"EOF"
3562d63fdb69Smrg  /* execv doesn't actually work on mingw as expected on unix */
3563d63fdb69Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
3564d63fdb69Smrg  if (rval == -1)
3565d63fdb69Smrg    {
3566d63fdb69Smrg      /* failed to start process */
3567d63fdb69Smrg      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
3568d63fdb69Smrg      return 127;
3569d63fdb69Smrg    }
3570d63fdb69Smrg  return rval;
3571d63fdb69SmrgEOF
3572d63fdb69Smrg		;;
3573d63fdb69Smrg	      *)
3574d63fdb69Smrg		cat <<"EOF"
3575d63fdb69Smrg  execv (lt_argv_zero, newargz);
3576d63fdb69Smrg  return rval; /* =127, but avoids unused variable warning */
3577d63fdb69SmrgEOF
3578d63fdb69Smrg		;;
3579d63fdb69Smrg	    esac
35803da084b3Smrg
3581d63fdb69Smrg	    cat <<"EOF"
3582d63fdb69Smrg}
35833da084b3Smrg
3584d63fdb69Smrgvoid *
3585d63fdb69Smrgxmalloc (size_t num)
3586d63fdb69Smrg{
3587d63fdb69Smrg  void *p = (void *) malloc (num);
3588d63fdb69Smrg  if (!p)
3589d63fdb69Smrg    lt_fatal ("Memory exhausted");
35903da084b3Smrg
3591d63fdb69Smrg  return p;
3592d63fdb69Smrg}
35933da084b3Smrg
3594d63fdb69Smrgchar *
3595d63fdb69Smrgxstrdup (const char *string)
3596d63fdb69Smrg{
3597d63fdb69Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
3598d63fdb69Smrg			  string) : NULL;
3599d63fdb69Smrg}
36003da084b3Smrg
3601d63fdb69Smrgconst char *
3602d63fdb69Smrgbase_name (const char *name)
3603d63fdb69Smrg{
3604d63fdb69Smrg  const char *base;
36053da084b3Smrg
3606d63fdb69Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3607d63fdb69Smrg  /* Skip over the disk name in MSDOS pathnames. */
3608d63fdb69Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
3609d63fdb69Smrg    name += 2;
3610d63fdb69Smrg#endif
36113da084b3Smrg
3612d63fdb69Smrg  for (base = name; *name; name++)
3613d63fdb69Smrg    if (IS_DIR_SEPARATOR (*name))
3614d63fdb69Smrg      base = name + 1;
3615d63fdb69Smrg  return base;
3616d63fdb69Smrg}
36173da084b3Smrg
3618d63fdb69Smrgint
3619d63fdb69Smrgcheck_executable (const char *path)
3620d63fdb69Smrg{
3621d63fdb69Smrg  struct stat st;
36223da084b3Smrg
3623d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
3624d63fdb69Smrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
3625d63fdb69Smrg  if ((!path) || (!*path))
3626d63fdb69Smrg    return 0;
36273da084b3Smrg
3628d63fdb69Smrg  if ((stat (path, &st) >= 0)
3629d63fdb69Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
3630d63fdb69Smrg    return 1;
3631d63fdb69Smrg  else
3632d63fdb69Smrg    return 0;
3633d63fdb69Smrg}
36343da084b3Smrg
3635d63fdb69Smrgint
3636d63fdb69Smrgmake_executable (const char *path)
3637d63fdb69Smrg{
3638d63fdb69Smrg  int rval = 0;
3639d63fdb69Smrg  struct stat st;
36403da084b3Smrg
3641d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
3642d63fdb69Smrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
3643d63fdb69Smrg  if ((!path) || (!*path))
3644d63fdb69Smrg    return 0;
36453da084b3Smrg
3646d63fdb69Smrg  if (stat (path, &st) >= 0)
3647d63fdb69Smrg    {
3648d63fdb69Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
3649d63fdb69Smrg    }
3650d63fdb69Smrg  return rval;
3651d63fdb69Smrg}
36523da084b3Smrg
3653d63fdb69Smrg/* Searches for the full path of the wrapper.  Returns
3654d63fdb69Smrg   newly allocated full path name if found, NULL otherwise
3655d63fdb69Smrg   Does not chase symlinks, even on platforms that support them.
3656d63fdb69Smrg*/
3657d63fdb69Smrgchar *
3658d63fdb69Smrgfind_executable (const char *wrapper)
3659d63fdb69Smrg{
3660d63fdb69Smrg  int has_slash = 0;
3661d63fdb69Smrg  const char *p;
3662d63fdb69Smrg  const char *p_next;
3663d63fdb69Smrg  /* static buffer for getcwd */
3664d63fdb69Smrg  char tmp[LT_PATHMAX + 1];
3665d63fdb69Smrg  int tmp_len;
3666d63fdb69Smrg  char *concat_name;
36673da084b3Smrg
3668d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
3669d63fdb69Smrg			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
36703da084b3Smrg
3671d63fdb69Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
3672d63fdb69Smrg    return NULL;
36733da084b3Smrg
3674d63fdb69Smrg  /* Absolute path? */
3675d63fdb69Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3676d63fdb69Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
3677d63fdb69Smrg    {
3678d63fdb69Smrg      concat_name = xstrdup (wrapper);
3679d63fdb69Smrg      if (check_executable (concat_name))
3680d63fdb69Smrg	return concat_name;
3681d63fdb69Smrg      XFREE (concat_name);
3682d63fdb69Smrg    }
3683d63fdb69Smrg  else
3684d63fdb69Smrg    {
3685d63fdb69Smrg#endif
3686d63fdb69Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
3687d63fdb69Smrg	{
3688d63fdb69Smrg	  concat_name = xstrdup (wrapper);
3689d63fdb69Smrg	  if (check_executable (concat_name))
3690d63fdb69Smrg	    return concat_name;
3691d63fdb69Smrg	  XFREE (concat_name);
3692d63fdb69Smrg	}
3693d63fdb69Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3694d63fdb69Smrg    }
3695d63fdb69Smrg#endif
36963da084b3Smrg
3697d63fdb69Smrg  for (p = wrapper; *p; p++)
3698d63fdb69Smrg    if (*p == '/')
3699d63fdb69Smrg      {
3700d63fdb69Smrg	has_slash = 1;
3701d63fdb69Smrg	break;
3702d63fdb69Smrg      }
3703d63fdb69Smrg  if (!has_slash)
3704d63fdb69Smrg    {
3705d63fdb69Smrg      /* no slashes; search PATH */
3706d63fdb69Smrg      const char *path = getenv ("PATH");
3707d63fdb69Smrg      if (path != NULL)
3708d63fdb69Smrg	{
3709d63fdb69Smrg	  for (p = path; *p; p = p_next)
3710d63fdb69Smrg	    {
3711d63fdb69Smrg	      const char *q;
3712d63fdb69Smrg	      size_t p_len;
3713d63fdb69Smrg	      for (q = p; *q; q++)
3714d63fdb69Smrg		if (IS_PATH_SEPARATOR (*q))
3715d63fdb69Smrg		  break;
3716d63fdb69Smrg	      p_len = q - p;
3717d63fdb69Smrg	      p_next = (*q == '\0' ? q : q + 1);
3718d63fdb69Smrg	      if (p_len == 0)
3719d63fdb69Smrg		{
3720d63fdb69Smrg		  /* empty path: current directory */
3721d63fdb69Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
3722d63fdb69Smrg		    lt_fatal ("getcwd failed");
3723d63fdb69Smrg		  tmp_len = strlen (tmp);
3724d63fdb69Smrg		  concat_name =
3725d63fdb69Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
3726d63fdb69Smrg		  memcpy (concat_name, tmp, tmp_len);
3727d63fdb69Smrg		  concat_name[tmp_len] = '/';
3728d63fdb69Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
3729d63fdb69Smrg		}
3730d63fdb69Smrg	      else
3731d63fdb69Smrg		{
3732d63fdb69Smrg		  concat_name =
3733d63fdb69Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
3734d63fdb69Smrg		  memcpy (concat_name, p, p_len);
3735d63fdb69Smrg		  concat_name[p_len] = '/';
3736d63fdb69Smrg		  strcpy (concat_name + p_len + 1, wrapper);
3737d63fdb69Smrg		}
3738d63fdb69Smrg	      if (check_executable (concat_name))
3739d63fdb69Smrg		return concat_name;
3740d63fdb69Smrg	      XFREE (concat_name);
3741d63fdb69Smrg	    }
3742d63fdb69Smrg	}
3743d63fdb69Smrg      /* not found in PATH; assume curdir */
3744d63fdb69Smrg    }
3745d63fdb69Smrg  /* Relative path | not found in path: prepend cwd */
3746d63fdb69Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
3747d63fdb69Smrg    lt_fatal ("getcwd failed");
3748d63fdb69Smrg  tmp_len = strlen (tmp);
3749d63fdb69Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
3750d63fdb69Smrg  memcpy (concat_name, tmp, tmp_len);
3751d63fdb69Smrg  concat_name[tmp_len] = '/';
3752d63fdb69Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
37533da084b3Smrg
3754d63fdb69Smrg  if (check_executable (concat_name))
3755d63fdb69Smrg    return concat_name;
3756d63fdb69Smrg  XFREE (concat_name);
3757d63fdb69Smrg  return NULL;
3758d63fdb69Smrg}
37593da084b3Smrg
3760d63fdb69Smrgchar *
3761d63fdb69Smrgchase_symlinks (const char *pathspec)
3762d63fdb69Smrg{
3763d63fdb69Smrg#ifndef S_ISLNK
3764d63fdb69Smrg  return xstrdup (pathspec);
3765d63fdb69Smrg#else
3766d63fdb69Smrg  char buf[LT_PATHMAX];
3767d63fdb69Smrg  struct stat s;
3768d63fdb69Smrg  char *tmp_pathspec = xstrdup (pathspec);
3769d63fdb69Smrg  char *p;
3770d63fdb69Smrg  int has_symlinks = 0;
3771d63fdb69Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
3772d63fdb69Smrg    {
3773d63fdb69Smrg      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
3774d63fdb69Smrg			      tmp_pathspec));
3775d63fdb69Smrg      if (lstat (tmp_pathspec, &s) == 0)
3776d63fdb69Smrg	{
3777d63fdb69Smrg	  if (S_ISLNK (s.st_mode) != 0)
3778d63fdb69Smrg	    {
3779d63fdb69Smrg	      has_symlinks = 1;
3780d63fdb69Smrg	      break;
3781d63fdb69Smrg	    }
37823da084b3Smrg
3783d63fdb69Smrg	  /* search backwards for last DIR_SEPARATOR */
3784d63fdb69Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
3785d63fdb69Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
3786d63fdb69Smrg	    p--;
3787d63fdb69Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
3788d63fdb69Smrg	    {
3789d63fdb69Smrg	      /* no more DIR_SEPARATORS left */
3790d63fdb69Smrg	      break;
3791d63fdb69Smrg	    }
3792d63fdb69Smrg	  *p = '\0';
3793d63fdb69Smrg	}
3794d63fdb69Smrg      else
3795d63fdb69Smrg	{
3796d63fdb69Smrg	  char *errstr = strerror (errno);
3797d63fdb69Smrg	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
3798d63fdb69Smrg	}
3799d63fdb69Smrg    }
3800d63fdb69Smrg  XFREE (tmp_pathspec);
38013da084b3Smrg
3802d63fdb69Smrg  if (!has_symlinks)
3803d63fdb69Smrg    {
3804d63fdb69Smrg      return xstrdup (pathspec);
3805d63fdb69Smrg    }
38063da084b3Smrg
3807d63fdb69Smrg  tmp_pathspec = realpath (pathspec, buf);
3808d63fdb69Smrg  if (tmp_pathspec == 0)
3809d63fdb69Smrg    {
3810d63fdb69Smrg      lt_fatal ("Could not follow symlinks for %s", pathspec);
3811d63fdb69Smrg    }
3812d63fdb69Smrg  return xstrdup (tmp_pathspec);
3813d63fdb69Smrg#endif
3814d63fdb69Smrg}
38153da084b3Smrg
3816d63fdb69Smrgchar *
3817d63fdb69Smrgstrendzap (char *str, const char *pat)
3818d63fdb69Smrg{
3819d63fdb69Smrg  size_t len, patlen;
38203da084b3Smrg
3821d63fdb69Smrg  assert (str != NULL);
3822d63fdb69Smrg  assert (pat != NULL);
38233da084b3Smrg
3824d63fdb69Smrg  len = strlen (str);
3825d63fdb69Smrg  patlen = strlen (pat);
38263da084b3Smrg
3827d63fdb69Smrg  if (patlen <= len)
3828d63fdb69Smrg    {
3829d63fdb69Smrg      str += len - patlen;
3830d63fdb69Smrg      if (strcmp (str, pat) == 0)
3831d63fdb69Smrg	*str = '\0';
3832d63fdb69Smrg    }
3833d63fdb69Smrg  return str;
3834d63fdb69Smrg}
38353da084b3Smrg
3836d63fdb69Smrgstatic void
3837d63fdb69Smrglt_error_core (int exit_status, const char *mode,
3838d63fdb69Smrg	       const char *message, va_list ap)
3839d63fdb69Smrg{
3840d63fdb69Smrg  fprintf (stderr, "%s: %s: ", program_name, mode);
3841d63fdb69Smrg  vfprintf (stderr, message, ap);
3842d63fdb69Smrg  fprintf (stderr, ".\n");
38433da084b3Smrg
3844d63fdb69Smrg  if (exit_status >= 0)
3845d63fdb69Smrg    exit (exit_status);
3846d63fdb69Smrg}
38473da084b3Smrg
3848d63fdb69Smrgvoid
3849d63fdb69Smrglt_fatal (const char *message, ...)
3850d63fdb69Smrg{
3851d63fdb69Smrg  va_list ap;
3852d63fdb69Smrg  va_start (ap, message);
3853d63fdb69Smrg  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
3854d63fdb69Smrg  va_end (ap);
3855d63fdb69Smrg}
38563da084b3Smrg
3857d63fdb69Smrgvoid
3858d63fdb69Smrglt_setenv (const char *name, const char *value)
3859d63fdb69Smrg{
3860d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
3861d63fdb69Smrg                          (name ? name : "<NULL>"),
3862d63fdb69Smrg                          (value ? value : "<NULL>")));
3863d63fdb69Smrg  {
3864d63fdb69Smrg#ifdef HAVE_SETENV
3865d63fdb69Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
3866d63fdb69Smrg    char *str = xstrdup (value);
3867d63fdb69Smrg    setenv (name, str, 1);
3868d63fdb69Smrg#else
3869d63fdb69Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
3870d63fdb69Smrg    char *str = XMALLOC (char, len);
3871d63fdb69Smrg    sprintf (str, "%s=%s", name, value);
3872d63fdb69Smrg    if (putenv (str) != EXIT_SUCCESS)
3873d63fdb69Smrg      {
3874d63fdb69Smrg        XFREE (str);
3875d63fdb69Smrg      }
3876d63fdb69Smrg#endif
3877d63fdb69Smrg  }
3878d63fdb69Smrg}
38793da084b3Smrg
3880d63fdb69Smrgchar *
3881d63fdb69Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
3882d63fdb69Smrg{
3883d63fdb69Smrg  char *new_value;
3884d63fdb69Smrg  if (orig_value && *orig_value)
3885d63fdb69Smrg    {
3886d63fdb69Smrg      int orig_value_len = strlen (orig_value);
3887d63fdb69Smrg      int add_len = strlen (add);
3888d63fdb69Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
3889d63fdb69Smrg      if (to_end)
3890d63fdb69Smrg        {
3891d63fdb69Smrg          strcpy (new_value, orig_value);
3892d63fdb69Smrg          strcpy (new_value + orig_value_len, add);
3893d63fdb69Smrg        }
3894d63fdb69Smrg      else
3895d63fdb69Smrg        {
3896d63fdb69Smrg          strcpy (new_value, add);
3897d63fdb69Smrg          strcpy (new_value + add_len, orig_value);
3898d63fdb69Smrg        }
3899d63fdb69Smrg    }
3900d63fdb69Smrg  else
3901d63fdb69Smrg    {
3902d63fdb69Smrg      new_value = xstrdup (add);
3903d63fdb69Smrg    }
3904d63fdb69Smrg  return new_value;
3905d63fdb69Smrg}
39063da084b3Smrg
3907d63fdb69Smrgint
3908d63fdb69Smrglt_split_name_value (const char *arg, char** name, char** value)
3909d63fdb69Smrg{
3910d63fdb69Smrg  const char *p;
3911d63fdb69Smrg  int len;
3912d63fdb69Smrg  if (!arg || !*arg)
3913d63fdb69Smrg    return 1;
39143da084b3Smrg
3915d63fdb69Smrg  p = strchr (arg, (int)'=');
39163da084b3Smrg
3917d63fdb69Smrg  if (!p)
3918d63fdb69Smrg    return 1;
39193da084b3Smrg
3920d63fdb69Smrg  *value = xstrdup (++p);
39213da084b3Smrg
3922d63fdb69Smrg  len = strlen (arg) - strlen (*value);
3923d63fdb69Smrg  *name = XMALLOC (char, len);
3924d63fdb69Smrg  strncpy (*name, arg, len-1);
3925d63fdb69Smrg  (*name)[len - 1] = '\0';
39263da084b3Smrg
3927d63fdb69Smrg  return 0;
3928d63fdb69Smrg}
39293da084b3Smrg
3930d63fdb69Smrgvoid
3931d63fdb69Smrglt_opt_process_env_set (const char *arg)
3932d63fdb69Smrg{
3933d63fdb69Smrg  char *name = NULL;
3934d63fdb69Smrg  char *value = NULL;
39353da084b3Smrg
3936d63fdb69Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
3937d63fdb69Smrg    {
3938d63fdb69Smrg      XFREE (name);
3939d63fdb69Smrg      XFREE (value);
3940d63fdb69Smrg      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
3941d63fdb69Smrg    }
39423da084b3Smrg
3943d63fdb69Smrg  lt_setenv (name, value);
3944d63fdb69Smrg  XFREE (name);
3945d63fdb69Smrg  XFREE (value);
3946d63fdb69Smrg}
39473da084b3Smrg
3948d63fdb69Smrgvoid
3949d63fdb69Smrglt_opt_process_env_prepend (const char *arg)
3950d63fdb69Smrg{
3951d63fdb69Smrg  char *name = NULL;
3952d63fdb69Smrg  char *value = NULL;
3953d63fdb69Smrg  char *new_value = NULL;
39543da084b3Smrg
3955d63fdb69Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
3956d63fdb69Smrg    {
3957d63fdb69Smrg      XFREE (name);
3958d63fdb69Smrg      XFREE (value);
3959d63fdb69Smrg      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
3960d63fdb69Smrg    }
39613da084b3Smrg
3962d63fdb69Smrg  new_value = lt_extend_str (getenv (name), value, 0);
3963d63fdb69Smrg  lt_setenv (name, new_value);
3964d63fdb69Smrg  XFREE (new_value);
3965d63fdb69Smrg  XFREE (name);
3966d63fdb69Smrg  XFREE (value);
3967d63fdb69Smrg}
39683da084b3Smrg
3969d63fdb69Smrgvoid
3970d63fdb69Smrglt_opt_process_env_append (const char *arg)
3971d63fdb69Smrg{
3972d63fdb69Smrg  char *name = NULL;
3973d63fdb69Smrg  char *value = NULL;
3974d63fdb69Smrg  char *new_value = NULL;
39753da084b3Smrg
3976d63fdb69Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
3977d63fdb69Smrg    {
3978d63fdb69Smrg      XFREE (name);
3979d63fdb69Smrg      XFREE (value);
3980d63fdb69Smrg      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
3981d63fdb69Smrg    }
39823da084b3Smrg
3983d63fdb69Smrg  new_value = lt_extend_str (getenv (name), value, 1);
3984d63fdb69Smrg  lt_setenv (name, new_value);
3985d63fdb69Smrg  XFREE (new_value);
3986d63fdb69Smrg  XFREE (name);
3987d63fdb69Smrg  XFREE (value);
3988d63fdb69Smrg}
39893da084b3Smrg
3990d63fdb69Smrgvoid
3991d63fdb69Smrglt_update_exe_path (const char *name, const char *value)
3992d63fdb69Smrg{
3993d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
3994d63fdb69Smrg                          (name ? name : "<NULL>"),
3995d63fdb69Smrg                          (value ? value : "<NULL>")));
39963da084b3Smrg
3997d63fdb69Smrg  if (name && *name && value && *value)
3998d63fdb69Smrg    {
3999d63fdb69Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4000d63fdb69Smrg      /* some systems can't cope with a ':'-terminated path #' */
4001d63fdb69Smrg      int len = strlen (new_value);
4002d63fdb69Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4003d63fdb69Smrg        {
4004d63fdb69Smrg          new_value[len-1] = '\0';
4005d63fdb69Smrg        }
4006d63fdb69Smrg      lt_setenv (name, new_value);
4007d63fdb69Smrg      XFREE (new_value);
4008d63fdb69Smrg    }
4009d63fdb69Smrg}
40103da084b3Smrg
4011d63fdb69Smrgvoid
4012d63fdb69Smrglt_update_lib_path (const char *name, const char *value)
4013d63fdb69Smrg{
4014d63fdb69Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4015d63fdb69Smrg                          (name ? name : "<NULL>"),
4016d63fdb69Smrg                          (value ? value : "<NULL>")));
40173da084b3Smrg
4018d63fdb69Smrg  if (name && *name && value && *value)
4019d63fdb69Smrg    {
4020d63fdb69Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4021d63fdb69Smrg      lt_setenv (name, new_value);
4022d63fdb69Smrg      XFREE (new_value);
4023d63fdb69Smrg    }
4024d63fdb69Smrg}
40253da084b3Smrg
40263da084b3Smrg
4027d63fdb69SmrgEOF
4028d63fdb69Smrg}
4029d63fdb69Smrg# end: func_emit_cwrapperexe_src
40303da084b3Smrg
4031d63fdb69Smrg# func_mode_link arg...
4032d63fdb69Smrgfunc_mode_link ()
4033d63fdb69Smrg{
4034d63fdb69Smrg    $opt_debug
4035d63fdb69Smrg    case $host in
4036d63fdb69Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
4037d63fdb69Smrg      # It is impossible to link a dll without this setting, and
4038d63fdb69Smrg      # we shouldn't force the makefile maintainer to figure out
4039d63fdb69Smrg      # which system we are compiling for in order to pass an extra
4040d63fdb69Smrg      # flag for every libtool invocation.
4041d63fdb69Smrg      # allow_undefined=no
40423da084b3Smrg
4043d63fdb69Smrg      # FIXME: Unfortunately, there are problems with the above when trying
4044d63fdb69Smrg      # to make a dll which has undefined symbols, in which case not
4045d63fdb69Smrg      # even a static library is built.  For now, we need to specify
4046d63fdb69Smrg      # -no-undefined on the libtool link line when we can be certain
4047d63fdb69Smrg      # that all symbols are satisfied, otherwise we get a static library.
4048d63fdb69Smrg      allow_undefined=yes
4049d63fdb69Smrg      ;;
4050d63fdb69Smrg    *)
4051d63fdb69Smrg      allow_undefined=yes
4052d63fdb69Smrg      ;;
4053d63fdb69Smrg    esac
4054d63fdb69Smrg    libtool_args=$nonopt
4055d63fdb69Smrg    base_compile="$nonopt $@"
4056d63fdb69Smrg    compile_command=$nonopt
4057d63fdb69Smrg    finalize_command=$nonopt
40583da084b3Smrg
4059d63fdb69Smrg    compile_rpath=
4060d63fdb69Smrg    finalize_rpath=
4061d63fdb69Smrg    compile_shlibpath=
4062d63fdb69Smrg    finalize_shlibpath=
4063d63fdb69Smrg    convenience=
4064d63fdb69Smrg    old_convenience=
4065d63fdb69Smrg    deplibs=
4066d63fdb69Smrg    old_deplibs=
4067d63fdb69Smrg    compiler_flags=
4068d63fdb69Smrg    linker_flags=
4069d63fdb69Smrg    dllsearchpath=
4070d63fdb69Smrg    lib_search_path=`pwd`
4071d63fdb69Smrg    inst_prefix_dir=
4072d63fdb69Smrg    new_inherited_linker_flags=
40733da084b3Smrg
4074d63fdb69Smrg    avoid_version=no
4075d63fdb69Smrg    dlfiles=
4076d63fdb69Smrg    dlprefiles=
4077d63fdb69Smrg    dlself=no
4078d63fdb69Smrg    export_dynamic=no
4079d63fdb69Smrg    export_symbols=
4080d63fdb69Smrg    export_symbols_regex=
4081d63fdb69Smrg    generated=
4082d63fdb69Smrg    libobjs=
4083d63fdb69Smrg    ltlibs=
4084d63fdb69Smrg    module=no
4085d63fdb69Smrg    no_install=no
4086d63fdb69Smrg    objs=
4087d63fdb69Smrg    non_pic_objects=
4088d63fdb69Smrg    precious_files_regex=
4089d63fdb69Smrg    prefer_static_libs=no
4090d63fdb69Smrg    preload=no
4091d63fdb69Smrg    prev=
4092d63fdb69Smrg    prevarg=
4093d63fdb69Smrg    release=
4094d63fdb69Smrg    rpath=
4095d63fdb69Smrg    xrpath=
4096d63fdb69Smrg    perm_rpath=
4097d63fdb69Smrg    temp_rpath=
4098d63fdb69Smrg    thread_safe=no
4099d63fdb69Smrg    vinfo=
4100d63fdb69Smrg    vinfo_number=no
4101d63fdb69Smrg    weak_libs=
4102d63fdb69Smrg    single_module="${wl}-single_module"
4103d63fdb69Smrg    func_infer_tag $base_compile
41043da084b3Smrg
4105d63fdb69Smrg    # We need to know -static, to get the right output filenames.
4106d63fdb69Smrg    for arg
4107d63fdb69Smrg    do
4108d63fdb69Smrg      case $arg in
4109d63fdb69Smrg      -shared)
4110d63fdb69Smrg	test "$build_libtool_libs" != yes && \
4111d63fdb69Smrg	  func_fatal_configuration "can not build a shared library"
4112d63fdb69Smrg	build_old_libs=no
4113d63fdb69Smrg	break
4114d63fdb69Smrg	;;
4115d63fdb69Smrg      -all-static | -static | -static-libtool-libs)
4116d63fdb69Smrg	case $arg in
4117d63fdb69Smrg	-all-static)
4118d63fdb69Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
4119d63fdb69Smrg	    func_warning "complete static linking is impossible in this configuration"
41203da084b3Smrg	  fi
4121d63fdb69Smrg	  if test -n "$link_static_flag"; then
4122d63fdb69Smrg	    dlopen_self=$dlopen_self_static
41233da084b3Smrg	  fi
4124d63fdb69Smrg	  prefer_static_libs=yes
41253da084b3Smrg	  ;;
4126d63fdb69Smrg	-static)
4127d63fdb69Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
4128d63fdb69Smrg	    dlopen_self=$dlopen_self_static
4129d63fdb69Smrg	  fi
4130d63fdb69Smrg	  prefer_static_libs=built
4131d63fdb69Smrg	  ;;
4132d63fdb69Smrg	-static-libtool-libs)
4133d63fdb69Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
4134d63fdb69Smrg	    dlopen_self=$dlopen_self_static
4135d63fdb69Smrg	  fi
4136d63fdb69Smrg	  prefer_static_libs=yes
41373da084b3Smrg	  ;;
41383da084b3Smrg	esac
4139d63fdb69Smrg	build_libtool_libs=no
4140d63fdb69Smrg	build_old_libs=yes
4141d63fdb69Smrg	break
4142d63fdb69Smrg	;;
4143d63fdb69Smrg      esac
4144d63fdb69Smrg    done
41453da084b3Smrg
4146d63fdb69Smrg    # See if our shared archives depend on static archives.
4147d63fdb69Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
41483da084b3Smrg
4149d63fdb69Smrg    # Go through the arguments, transforming them on the way.
4150d63fdb69Smrg    while test "$#" -gt 0; do
4151d63fdb69Smrg      arg="$1"
4152d63fdb69Smrg      shift
4153d63fdb69Smrg      func_quote_for_eval "$arg"
4154d63fdb69Smrg      qarg=$func_quote_for_eval_unquoted_result
4155d63fdb69Smrg      func_append libtool_args " $func_quote_for_eval_result"
41563da084b3Smrg
4157d63fdb69Smrg      # If the previous option needs an argument, assign it.
4158d63fdb69Smrg      if test -n "$prev"; then
4159d63fdb69Smrg	case $prev in
4160d63fdb69Smrg	output)
4161d63fdb69Smrg	  func_append compile_command " @OUTPUT@"
4162d63fdb69Smrg	  func_append finalize_command " @OUTPUT@"
4163d63fdb69Smrg	  ;;
4164d63fdb69Smrg	esac
41653da084b3Smrg
4166d63fdb69Smrg	case $prev in
4167d63fdb69Smrg	dlfiles|dlprefiles)
4168d63fdb69Smrg	  if test "$preload" = no; then
4169d63fdb69Smrg	    # Add the symbol object into the linking commands.
4170d63fdb69Smrg	    func_append compile_command " @SYMFILE@"
4171d63fdb69Smrg	    func_append finalize_command " @SYMFILE@"
4172d63fdb69Smrg	    preload=yes
4173d63fdb69Smrg	  fi
4174d63fdb69Smrg	  case $arg in
4175d63fdb69Smrg	  *.la | *.lo) ;;  # We handle these cases below.
4176d63fdb69Smrg	  force)
4177d63fdb69Smrg	    if test "$dlself" = no; then
4178d63fdb69Smrg	      dlself=needless
4179d63fdb69Smrg	      export_dynamic=yes
4180d63fdb69Smrg	    fi
4181d63fdb69Smrg	    prev=
4182d63fdb69Smrg	    continue
4183d63fdb69Smrg	    ;;
4184d63fdb69Smrg	  self)
4185d63fdb69Smrg	    if test "$prev" = dlprefiles; then
4186d63fdb69Smrg	      dlself=yes
4187d63fdb69Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
4188d63fdb69Smrg	      dlself=yes
4189d63fdb69Smrg	    else
4190d63fdb69Smrg	      dlself=needless
4191d63fdb69Smrg	      export_dynamic=yes
4192d63fdb69Smrg	    fi
4193d63fdb69Smrg	    prev=
4194d63fdb69Smrg	    continue
41953da084b3Smrg	    ;;
41963da084b3Smrg	  *)
4197d63fdb69Smrg	    if test "$prev" = dlfiles; then
4198d63fdb69Smrg	      dlfiles="$dlfiles $arg"
4199d63fdb69Smrg	    else
4200d63fdb69Smrg	      dlprefiles="$dlprefiles $arg"
4201d63fdb69Smrg	    fi
4202d63fdb69Smrg	    prev=
4203d63fdb69Smrg	    continue
42043da084b3Smrg	    ;;
42053da084b3Smrg	  esac
4206d63fdb69Smrg	  ;;
4207d63fdb69Smrg	expsyms)
4208d63fdb69Smrg	  export_symbols="$arg"
4209d63fdb69Smrg	  test -f "$arg" \
4210d63fdb69Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
4211d63fdb69Smrg	  prev=
4212d63fdb69Smrg	  continue
4213d63fdb69Smrg	  ;;
4214d63fdb69Smrg	expsyms_regex)
4215d63fdb69Smrg	  export_symbols_regex="$arg"
4216d63fdb69Smrg	  prev=
4217d63fdb69Smrg	  continue
4218d63fdb69Smrg	  ;;
4219d63fdb69Smrg	framework)
4220d63fdb69Smrg	  case $host in
4221d63fdb69Smrg	    *-*-darwin*)
4222d63fdb69Smrg	      case "$deplibs " in
4223d63fdb69Smrg		*" $qarg.ltframework "*) ;;
4224d63fdb69Smrg		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
4225d63fdb69Smrg		   ;;
4226d63fdb69Smrg	      esac
4227d63fdb69Smrg	      ;;
4228d63fdb69Smrg	  esac
4229d63fdb69Smrg	  prev=
4230d63fdb69Smrg	  continue
4231d63fdb69Smrg	  ;;
4232d63fdb69Smrg	inst_prefix)
4233d63fdb69Smrg	  inst_prefix_dir="$arg"
4234d63fdb69Smrg	  prev=
4235d63fdb69Smrg	  continue
4236d63fdb69Smrg	  ;;
4237d63fdb69Smrg	objectlist)
4238d63fdb69Smrg	  if test -f "$arg"; then
4239d63fdb69Smrg	    save_arg=$arg
4240d63fdb69Smrg	    moreargs=
4241d63fdb69Smrg	    for fil in `cat "$save_arg"`
4242d63fdb69Smrg	    do
4243d63fdb69Smrg#	      moreargs="$moreargs $fil"
4244d63fdb69Smrg	      arg=$fil
4245d63fdb69Smrg	      # A libtool-controlled object.
42463da084b3Smrg
4247d63fdb69Smrg	      # Check to see that this really is a libtool object.
4248d63fdb69Smrg	      if func_lalib_unsafe_p "$arg"; then
4249d63fdb69Smrg		pic_object=
4250d63fdb69Smrg		non_pic_object=
42513da084b3Smrg
4252d63fdb69Smrg		# Read the .lo file
4253d63fdb69Smrg		func_source "$arg"
42543da084b3Smrg
4255d63fdb69Smrg		if test -z "$pic_object" ||
4256d63fdb69Smrg		   test -z "$non_pic_object" ||
4257d63fdb69Smrg		   test "$pic_object" = none &&
4258d63fdb69Smrg		   test "$non_pic_object" = none; then
4259d63fdb69Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
4260d63fdb69Smrg		fi
42613da084b3Smrg
4262d63fdb69Smrg		# Extract subdirectory from the argument.
4263d63fdb69Smrg		func_dirname "$arg" "/" ""
4264d63fdb69Smrg		xdir="$func_dirname_result"
42653da084b3Smrg
4266d63fdb69Smrg		if test "$pic_object" != none; then
4267d63fdb69Smrg		  # Prepend the subdirectory the object is found in.
4268d63fdb69Smrg		  pic_object="$xdir$pic_object"
42693da084b3Smrg
4270d63fdb69Smrg		  if test "$prev" = dlfiles; then
4271d63fdb69Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
4272d63fdb69Smrg		      dlfiles="$dlfiles $pic_object"
4273d63fdb69Smrg		      prev=
4274d63fdb69Smrg		      continue
4275d63fdb69Smrg		    else
4276d63fdb69Smrg		      # If libtool objects are unsupported, then we need to preload.
4277d63fdb69Smrg		      prev=dlprefiles
4278d63fdb69Smrg		    fi
4279d63fdb69Smrg		  fi
42803da084b3Smrg
4281d63fdb69Smrg		  # CHECK ME:  I think I busted this.  -Ossama
4282d63fdb69Smrg		  if test "$prev" = dlprefiles; then
4283d63fdb69Smrg		    # Preload the old-style object.
4284d63fdb69Smrg		    dlprefiles="$dlprefiles $pic_object"
4285d63fdb69Smrg		    prev=
4286d63fdb69Smrg		  fi
42873da084b3Smrg
4288d63fdb69Smrg		  # A PIC object.
4289d63fdb69Smrg		  func_append libobjs " $pic_object"
4290d63fdb69Smrg		  arg="$pic_object"
4291d63fdb69Smrg		fi
42923da084b3Smrg
4293d63fdb69Smrg		# Non-PIC object.
4294d63fdb69Smrg		if test "$non_pic_object" != none; then
4295d63fdb69Smrg		  # Prepend the subdirectory the object is found in.
4296d63fdb69Smrg		  non_pic_object="$xdir$non_pic_object"
42973da084b3Smrg
4298d63fdb69Smrg		  # A standard non-PIC object
4299d63fdb69Smrg		  func_append non_pic_objects " $non_pic_object"
4300d63fdb69Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
4301d63fdb69Smrg		    arg="$non_pic_object"
4302d63fdb69Smrg		  fi
4303d63fdb69Smrg		else
4304d63fdb69Smrg		  # If the PIC object exists, use it instead.
4305d63fdb69Smrg		  # $xdir was prepended to $pic_object above.
4306d63fdb69Smrg		  non_pic_object="$pic_object"
4307d63fdb69Smrg		  func_append non_pic_objects " $non_pic_object"
4308d63fdb69Smrg		fi
4309d63fdb69Smrg	      else
4310d63fdb69Smrg		# Only an error if not doing a dry-run.
4311d63fdb69Smrg		if $opt_dry_run; then
4312d63fdb69Smrg		  # Extract subdirectory from the argument.
4313d63fdb69Smrg		  func_dirname "$arg" "/" ""
4314d63fdb69Smrg		  xdir="$func_dirname_result"
4315d63fdb69Smrg
4316d63fdb69Smrg		  func_lo2o "$arg"
4317d63fdb69Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
4318d63fdb69Smrg		  non_pic_object=$xdir$func_lo2o_result
4319d63fdb69Smrg		  func_append libobjs " $pic_object"
4320d63fdb69Smrg		  func_append non_pic_objects " $non_pic_object"
4321d63fdb69Smrg	        else
4322d63fdb69Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
4323d63fdb69Smrg		fi
4324d63fdb69Smrg	      fi
4325d63fdb69Smrg	    done
4326d63fdb69Smrg	  else
4327d63fdb69Smrg	    func_fatal_error "link input file \`$arg' does not exist"
4328d63fdb69Smrg	  fi
4329d63fdb69Smrg	  arg=$save_arg
4330d63fdb69Smrg	  prev=
4331d63fdb69Smrg	  continue
4332d63fdb69Smrg	  ;;
4333d63fdb69Smrg	precious_regex)
4334d63fdb69Smrg	  precious_files_regex="$arg"
4335d63fdb69Smrg	  prev=
4336d63fdb69Smrg	  continue
4337d63fdb69Smrg	  ;;
4338d63fdb69Smrg	release)
4339d63fdb69Smrg	  release="-$arg"
4340d63fdb69Smrg	  prev=
4341d63fdb69Smrg	  continue
4342d63fdb69Smrg	  ;;
4343d63fdb69Smrg	rpath | xrpath)
4344d63fdb69Smrg	  # We need an absolute path.
4345d63fdb69Smrg	  case $arg in
4346d63fdb69Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
4347d63fdb69Smrg	  *)
4348d63fdb69Smrg	    func_fatal_error "only absolute run-paths are allowed"
4349d63fdb69Smrg	    ;;
4350d63fdb69Smrg	  esac
4351d63fdb69Smrg	  if test "$prev" = rpath; then
4352d63fdb69Smrg	    case "$rpath " in
4353d63fdb69Smrg	    *" $arg "*) ;;
4354d63fdb69Smrg	    *) rpath="$rpath $arg" ;;
4355d63fdb69Smrg	    esac
4356d63fdb69Smrg	  else
4357d63fdb69Smrg	    case "$xrpath " in
4358d63fdb69Smrg	    *" $arg "*) ;;
4359d63fdb69Smrg	    *) xrpath="$xrpath $arg" ;;
4360d63fdb69Smrg	    esac
4361d63fdb69Smrg	  fi
4362d63fdb69Smrg	  prev=
4363d63fdb69Smrg	  continue
4364d63fdb69Smrg	  ;;
4365d63fdb69Smrg	shrext)
4366d63fdb69Smrg	  shrext_cmds="$arg"
4367d63fdb69Smrg	  prev=
4368d63fdb69Smrg	  continue
4369d63fdb69Smrg	  ;;
4370d63fdb69Smrg	weak)
4371d63fdb69Smrg	  weak_libs="$weak_libs $arg"
4372d63fdb69Smrg	  prev=
4373d63fdb69Smrg	  continue
4374d63fdb69Smrg	  ;;
4375d63fdb69Smrg	xcclinker)
4376d63fdb69Smrg	  linker_flags="$linker_flags $qarg"
4377d63fdb69Smrg	  compiler_flags="$compiler_flags $qarg"
4378d63fdb69Smrg	  prev=
4379d63fdb69Smrg	  func_append compile_command " $qarg"
4380d63fdb69Smrg	  func_append finalize_command " $qarg"
4381d63fdb69Smrg	  continue
4382d63fdb69Smrg	  ;;
4383d63fdb69Smrg	xcompiler)
4384d63fdb69Smrg	  compiler_flags="$compiler_flags $qarg"
4385d63fdb69Smrg	  prev=
4386d63fdb69Smrg	  func_append compile_command " $qarg"
4387d63fdb69Smrg	  func_append finalize_command " $qarg"
4388d63fdb69Smrg	  continue
4389d63fdb69Smrg	  ;;
4390d63fdb69Smrg	xlinker)
4391d63fdb69Smrg	  linker_flags="$linker_flags $qarg"
4392d63fdb69Smrg	  compiler_flags="$compiler_flags $wl$qarg"
4393d63fdb69Smrg	  prev=
4394d63fdb69Smrg	  func_append compile_command " $wl$qarg"
4395d63fdb69Smrg	  func_append finalize_command " $wl$qarg"
4396d63fdb69Smrg	  continue
4397d63fdb69Smrg	  ;;
4398d63fdb69Smrg	*)
4399d63fdb69Smrg	  eval "$prev=\"\$arg\""
4400d63fdb69Smrg	  prev=
4401d63fdb69Smrg	  continue
4402d63fdb69Smrg	  ;;
44033da084b3Smrg	esac
4404d63fdb69Smrg      fi # test -n "$prev"
44053da084b3Smrg
4406d63fdb69Smrg      prevarg="$arg"
44073da084b3Smrg
4408d63fdb69Smrg      case $arg in
4409d63fdb69Smrg      -all-static)
4410d63fdb69Smrg	if test -n "$link_static_flag"; then
4411d63fdb69Smrg	  # See comment for -static flag below, for more details.
4412d63fdb69Smrg	  func_append compile_command " $link_static_flag"
4413d63fdb69Smrg	  func_append finalize_command " $link_static_flag"
4414d63fdb69Smrg	fi
4415d63fdb69Smrg	continue
4416d63fdb69Smrg	;;
44173da084b3Smrg
4418d63fdb69Smrg      -allow-undefined)
4419d63fdb69Smrg	# FIXME: remove this flag sometime in the future.
4420d63fdb69Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
4421d63fdb69Smrg	;;
44223da084b3Smrg
4423d63fdb69Smrg      -avoid-version)
4424d63fdb69Smrg	avoid_version=yes
4425d63fdb69Smrg	continue
4426d63fdb69Smrg	;;
44273da084b3Smrg
4428d63fdb69Smrg      -dlopen)
4429d63fdb69Smrg	prev=dlfiles
4430d63fdb69Smrg	continue
4431d63fdb69Smrg	;;
44323da084b3Smrg
4433d63fdb69Smrg      -dlpreopen)
4434d63fdb69Smrg	prev=dlprefiles
4435d63fdb69Smrg	continue
4436d63fdb69Smrg	;;
44373da084b3Smrg
4438d63fdb69Smrg      -export-dynamic)
4439d63fdb69Smrg	export_dynamic=yes
4440d63fdb69Smrg	continue
4441d63fdb69Smrg	;;
44423da084b3Smrg
4443d63fdb69Smrg      -export-symbols | -export-symbols-regex)
4444d63fdb69Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
4445d63fdb69Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
4446d63fdb69Smrg	fi
4447d63fdb69Smrg	if test "X$arg" = "X-export-symbols"; then
4448d63fdb69Smrg	  prev=expsyms
4449d63fdb69Smrg	else
4450d63fdb69Smrg	  prev=expsyms_regex
4451d63fdb69Smrg	fi
4452d63fdb69Smrg	continue
4453d63fdb69Smrg	;;
44543da084b3Smrg
4455d63fdb69Smrg      -framework)
4456d63fdb69Smrg	prev=framework
4457d63fdb69Smrg	continue
4458d63fdb69Smrg	;;
44593da084b3Smrg
4460d63fdb69Smrg      -inst-prefix-dir)
4461d63fdb69Smrg	prev=inst_prefix
4462d63fdb69Smrg	continue
4463d63fdb69Smrg	;;
44643da084b3Smrg
4465d63fdb69Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
4466d63fdb69Smrg      # so, if we see these flags be careful not to treat them like -L
4467d63fdb69Smrg      -L[A-Z][A-Z]*:*)
4468d63fdb69Smrg	case $with_gcc/$host in
4469d63fdb69Smrg	no/*-*-irix* | /*-*-irix*)
4470d63fdb69Smrg	  func_append compile_command " $arg"
4471d63fdb69Smrg	  func_append finalize_command " $arg"
4472d63fdb69Smrg	  ;;
4473d63fdb69Smrg	esac
4474d63fdb69Smrg	continue
4475d63fdb69Smrg	;;
44763da084b3Smrg
4477d63fdb69Smrg      -L*)
4478d63fdb69Smrg	func_stripname '-L' '' "$arg"
4479d63fdb69Smrg	dir=$func_stripname_result
4480d63fdb69Smrg	if test -z "$dir"; then
4481d63fdb69Smrg	  if test "$#" -gt 0; then
4482d63fdb69Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
4483d63fdb69Smrg	  else
4484d63fdb69Smrg	    func_fatal_error "need path for \`-L' option"
4485d63fdb69Smrg	  fi
4486d63fdb69Smrg	fi
4487d63fdb69Smrg	# We need an absolute path.
4488d63fdb69Smrg	case $dir in
4489d63fdb69Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
4490d63fdb69Smrg	*)
4491d63fdb69Smrg	  absdir=`cd "$dir" && pwd`
4492d63fdb69Smrg	  test -z "$absdir" && \
4493d63fdb69Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
4494d63fdb69Smrg	  dir="$absdir"
4495d63fdb69Smrg	  ;;
4496d63fdb69Smrg	esac
4497d63fdb69Smrg	case "$deplibs " in
4498d63fdb69Smrg	*" -L$dir "*) ;;
4499d63fdb69Smrg	*)
4500d63fdb69Smrg	  deplibs="$deplibs -L$dir"
4501d63fdb69Smrg	  lib_search_path="$lib_search_path $dir"
4502d63fdb69Smrg	  ;;
4503d63fdb69Smrg	esac
4504d63fdb69Smrg	case $host in
4505d63fdb69Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
4506d63fdb69Smrg	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
4507d63fdb69Smrg	  case :$dllsearchpath: in
4508d63fdb69Smrg	  *":$dir:"*) ;;
4509d63fdb69Smrg	  ::) dllsearchpath=$dir;;
4510d63fdb69Smrg	  *) dllsearchpath="$dllsearchpath:$dir";;
4511d63fdb69Smrg	  esac
4512d63fdb69Smrg	  case :$dllsearchpath: in
4513d63fdb69Smrg	  *":$testbindir:"*) ;;
4514d63fdb69Smrg	  ::) dllsearchpath=$testbindir;;
4515d63fdb69Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
4516d63fdb69Smrg	  esac
4517d63fdb69Smrg	  ;;
4518d63fdb69Smrg	esac
4519d63fdb69Smrg	continue
4520d63fdb69Smrg	;;
45213da084b3Smrg
4522d63fdb69Smrg      -l*)
4523d63fdb69Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
4524d63fdb69Smrg	  case $host in
4525d63fdb69Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
4526d63fdb69Smrg	    # These systems don't actually have a C or math library (as such)
4527d63fdb69Smrg	    continue
4528d63fdb69Smrg	    ;;
4529d63fdb69Smrg	  *-*-os2*)
4530d63fdb69Smrg	    # These systems don't actually have a C library (as such)
4531d63fdb69Smrg	    test "X$arg" = "X-lc" && continue
4532d63fdb69Smrg	    ;;
4533d63fdb69Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
4534d63fdb69Smrg	    # Do not include libc due to us having libc/libc_r.
4535d63fdb69Smrg	    test "X$arg" = "X-lc" && continue
4536d63fdb69Smrg	    ;;
4537d63fdb69Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
4538d63fdb69Smrg	    # Rhapsody C and math libraries are in the System framework
4539d63fdb69Smrg	    deplibs="$deplibs System.ltframework"
4540d63fdb69Smrg	    continue
4541d63fdb69Smrg	    ;;
4542d63fdb69Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
4543d63fdb69Smrg	    # Causes problems with __ctype
4544d63fdb69Smrg	    test "X$arg" = "X-lc" && continue
4545d63fdb69Smrg	    ;;
4546d63fdb69Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
4547d63fdb69Smrg	    # Compiler inserts libc in the correct place for threads to work
4548d63fdb69Smrg	    test "X$arg" = "X-lc" && continue
4549d63fdb69Smrg	    ;;
4550d63fdb69Smrg	  esac
4551d63fdb69Smrg	elif test "X$arg" = "X-lc_r"; then
4552d63fdb69Smrg	 case $host in
4553d63fdb69Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
4554d63fdb69Smrg	   # Do not include libc_r directly, use -pthread flag.
4555d63fdb69Smrg	   continue
4556d63fdb69Smrg	   ;;
4557d63fdb69Smrg	 esac
4558d63fdb69Smrg	fi
4559d63fdb69Smrg	deplibs="$deplibs $arg"
4560d63fdb69Smrg	continue
4561d63fdb69Smrg	;;
45623da084b3Smrg
4563d63fdb69Smrg      -module)
4564d63fdb69Smrg	module=yes
4565d63fdb69Smrg	continue
4566d63fdb69Smrg	;;
45673da084b3Smrg
4568d63fdb69Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
4569d63fdb69Smrg      # classes, name mangling, and exception handling.
4570d63fdb69Smrg      # Darwin uses the -arch flag to determine output architecture.
4571d63fdb69Smrg      -model|-arch|-isysroot)
4572d63fdb69Smrg	compiler_flags="$compiler_flags $arg"
4573d63fdb69Smrg	func_append compile_command " $arg"
4574d63fdb69Smrg	func_append finalize_command " $arg"
4575d63fdb69Smrg	prev=xcompiler
4576d63fdb69Smrg	continue
4577d63fdb69Smrg	;;
45783da084b3Smrg
4579d63fdb69Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
4580d63fdb69Smrg	compiler_flags="$compiler_flags $arg"
4581d63fdb69Smrg	func_append compile_command " $arg"
4582d63fdb69Smrg	func_append finalize_command " $arg"
4583d63fdb69Smrg	case "$new_inherited_linker_flags " in
4584d63fdb69Smrg	    *" $arg "*) ;;
4585d63fdb69Smrg	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
4586d63fdb69Smrg	esac
4587d63fdb69Smrg	continue
4588d63fdb69Smrg	;;
45893da084b3Smrg
4590d63fdb69Smrg      -multi_module)
4591d63fdb69Smrg	single_module="${wl}-multi_module"
4592d63fdb69Smrg	continue
4593d63fdb69Smrg	;;
45943da084b3Smrg
4595d63fdb69Smrg      -no-fast-install)
4596d63fdb69Smrg	fast_install=no
4597d63fdb69Smrg	continue
4598d63fdb69Smrg	;;
45993da084b3Smrg
4600d63fdb69Smrg      -no-install)
4601d63fdb69Smrg	case $host in
4602d63fdb69Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
4603d63fdb69Smrg	  # The PATH hackery in wrapper scripts is required on Windows
4604d63fdb69Smrg	  # and Darwin in order for the loader to find any dlls it needs.
4605d63fdb69Smrg	  func_warning "\`-no-install' is ignored for $host"
4606d63fdb69Smrg	  func_warning "assuming \`-no-fast-install' instead"
4607d63fdb69Smrg	  fast_install=no
4608d63fdb69Smrg	  ;;
4609d63fdb69Smrg	*) no_install=yes ;;
4610d63fdb69Smrg	esac
4611d63fdb69Smrg	continue
4612d63fdb69Smrg	;;
46133da084b3Smrg
4614d63fdb69Smrg      -no-undefined)
4615d63fdb69Smrg	allow_undefined=no
4616d63fdb69Smrg	continue
4617d63fdb69Smrg	;;
46183da084b3Smrg
4619d63fdb69Smrg      -objectlist)
4620d63fdb69Smrg	prev=objectlist
4621d63fdb69Smrg	continue
4622d63fdb69Smrg	;;
46233da084b3Smrg
4624d63fdb69Smrg      -o) prev=output ;;
46253da084b3Smrg
4626d63fdb69Smrg      -precious-files-regex)
4627d63fdb69Smrg	prev=precious_regex
4628d63fdb69Smrg	continue
4629d63fdb69Smrg	;;
46303da084b3Smrg
4631d63fdb69Smrg      -release)
4632d63fdb69Smrg	prev=release
4633d63fdb69Smrg	continue
4634d63fdb69Smrg	;;
46353da084b3Smrg
4636d63fdb69Smrg      -rpath)
4637d63fdb69Smrg	prev=rpath
4638d63fdb69Smrg	continue
4639d63fdb69Smrg	;;
46403da084b3Smrg
4641d63fdb69Smrg      -R)
4642d63fdb69Smrg	prev=xrpath
4643d63fdb69Smrg	continue
4644d63fdb69Smrg	;;
46453da084b3Smrg
4646d63fdb69Smrg      -R*)
4647d63fdb69Smrg	func_stripname '-R' '' "$arg"
4648d63fdb69Smrg	dir=$func_stripname_result
4649d63fdb69Smrg	# We need an absolute path.
4650d63fdb69Smrg	case $dir in
4651d63fdb69Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
4652d63fdb69Smrg	*)
4653d63fdb69Smrg	  func_fatal_error "only absolute run-paths are allowed"
4654d63fdb69Smrg	  ;;
4655d63fdb69Smrg	esac
4656d63fdb69Smrg	case "$xrpath " in
4657d63fdb69Smrg	*" $dir "*) ;;
4658d63fdb69Smrg	*) xrpath="$xrpath $dir" ;;
4659d63fdb69Smrg	esac
4660d63fdb69Smrg	continue
4661d63fdb69Smrg	;;
46623da084b3Smrg
4663d63fdb69Smrg      -shared)
4664d63fdb69Smrg	# The effects of -shared are defined in a previous loop.
4665d63fdb69Smrg	continue
4666d63fdb69Smrg	;;
46673da084b3Smrg
4668d63fdb69Smrg      -shrext)
4669d63fdb69Smrg	prev=shrext
4670d63fdb69Smrg	continue
4671d63fdb69Smrg	;;
46723da084b3Smrg
4673d63fdb69Smrg      -static | -static-libtool-libs)
4674d63fdb69Smrg	# The effects of -static are defined in a previous loop.
4675d63fdb69Smrg	# We used to do the same as -all-static on platforms that
4676d63fdb69Smrg	# didn't have a PIC flag, but the assumption that the effects
4677d63fdb69Smrg	# would be equivalent was wrong.  It would break on at least
4678d63fdb69Smrg	# Digital Unix and AIX.
4679d63fdb69Smrg	continue
4680d63fdb69Smrg	;;
46813da084b3Smrg
4682d63fdb69Smrg      -thread-safe)
4683d63fdb69Smrg	thread_safe=yes
4684d63fdb69Smrg	continue
4685d63fdb69Smrg	;;
46863da084b3Smrg
4687d63fdb69Smrg      -version-info)
4688d63fdb69Smrg	prev=vinfo
4689d63fdb69Smrg	continue
4690d63fdb69Smrg	;;
46913da084b3Smrg
4692d63fdb69Smrg      -version-number)
4693d63fdb69Smrg	prev=vinfo
4694d63fdb69Smrg	vinfo_number=yes
4695d63fdb69Smrg	continue
4696d63fdb69Smrg	;;
46973da084b3Smrg
4698d63fdb69Smrg      -weak)
4699d63fdb69Smrg        prev=weak
4700d63fdb69Smrg	continue
4701d63fdb69Smrg	;;
47023da084b3Smrg
4703d63fdb69Smrg      -Wc,*)
4704d63fdb69Smrg	func_stripname '-Wc,' '' "$arg"
4705d63fdb69Smrg	args=$func_stripname_result
4706d63fdb69Smrg	arg=
4707d63fdb69Smrg	save_ifs="$IFS"; IFS=','
4708d63fdb69Smrg	for flag in $args; do
4709d63fdb69Smrg	  IFS="$save_ifs"
4710d63fdb69Smrg          func_quote_for_eval "$flag"
4711d63fdb69Smrg	  arg="$arg $wl$func_quote_for_eval_result"
4712d63fdb69Smrg	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
4713d63fdb69Smrg	done
4714d63fdb69Smrg	IFS="$save_ifs"
4715d63fdb69Smrg	func_stripname ' ' '' "$arg"
4716d63fdb69Smrg	arg=$func_stripname_result
4717d63fdb69Smrg	;;
47183da084b3Smrg
4719d63fdb69Smrg      -Wl,*)
4720d63fdb69Smrg	func_stripname '-Wl,' '' "$arg"
4721d63fdb69Smrg	args=$func_stripname_result
4722d63fdb69Smrg	arg=
4723d63fdb69Smrg	save_ifs="$IFS"; IFS=','
4724d63fdb69Smrg	for flag in $args; do
4725d63fdb69Smrg	  IFS="$save_ifs"
4726d63fdb69Smrg          func_quote_for_eval "$flag"
4727d63fdb69Smrg	  arg="$arg $wl$func_quote_for_eval_result"
4728d63fdb69Smrg	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
4729d63fdb69Smrg	  linker_flags="$linker_flags $func_quote_for_eval_result"
4730d63fdb69Smrg	done
4731d63fdb69Smrg	IFS="$save_ifs"
4732d63fdb69Smrg	func_stripname ' ' '' "$arg"
4733d63fdb69Smrg	arg=$func_stripname_result
4734d63fdb69Smrg	;;
47353da084b3Smrg
4736d63fdb69Smrg      -Xcompiler)
4737d63fdb69Smrg	prev=xcompiler
4738d63fdb69Smrg	continue
4739d63fdb69Smrg	;;
47403da084b3Smrg
4741d63fdb69Smrg      -Xlinker)
4742d63fdb69Smrg	prev=xlinker
4743d63fdb69Smrg	continue
4744d63fdb69Smrg	;;
47453da084b3Smrg
4746d63fdb69Smrg      -XCClinker)
4747d63fdb69Smrg	prev=xcclinker
4748d63fdb69Smrg	continue
4749d63fdb69Smrg	;;
47503da084b3Smrg
4751d63fdb69Smrg      # -msg_* for osf cc
4752d63fdb69Smrg      -msg_*)
4753d63fdb69Smrg	func_quote_for_eval "$arg"
4754d63fdb69Smrg	arg="$func_quote_for_eval_result"
4755d63fdb69Smrg	;;
47563da084b3Smrg
4757d63fdb69Smrg      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
4758d63fdb69Smrg      # -r[0-9][0-9]* specifies the processor on the SGI compiler
4759d63fdb69Smrg      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
4760d63fdb69Smrg      # +DA*, +DD* enable 64-bit mode on the HP compiler
4761d63fdb69Smrg      # -q* pass through compiler args for the IBM compiler
4762d63fdb69Smrg      # -m*, -t[45]*, -txscale* pass through architecture-specific
4763d63fdb69Smrg      # compiler args for GCC
4764d63fdb69Smrg      # -F/path gives path to uninstalled frameworks, gcc on darwin
4765d63fdb69Smrg      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
4766d63fdb69Smrg      # @file GCC response files
4767d63fdb69Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
4768d63fdb69Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
4769d63fdb69Smrg        func_quote_for_eval "$arg"
4770d63fdb69Smrg	arg="$func_quote_for_eval_result"
4771d63fdb69Smrg        func_append compile_command " $arg"
4772d63fdb69Smrg        func_append finalize_command " $arg"
4773d63fdb69Smrg        compiler_flags="$compiler_flags $arg"
4774d63fdb69Smrg        continue
4775d63fdb69Smrg        ;;
47763da084b3Smrg
4777d63fdb69Smrg      # Some other compiler flag.
4778d63fdb69Smrg      -* | +*)
4779d63fdb69Smrg        func_quote_for_eval "$arg"
4780d63fdb69Smrg	arg="$func_quote_for_eval_result"
4781d63fdb69Smrg	;;
47823da084b3Smrg
4783d63fdb69Smrg      *.$objext)
4784d63fdb69Smrg	# A standard object.
4785d63fdb69Smrg	objs="$objs $arg"
4786d63fdb69Smrg	;;
47873da084b3Smrg
4788d63fdb69Smrg      *.lo)
4789d63fdb69Smrg	# A libtool-controlled object.
47903da084b3Smrg
4791d63fdb69Smrg	# Check to see that this really is a libtool object.
4792d63fdb69Smrg	if func_lalib_unsafe_p "$arg"; then
4793d63fdb69Smrg	  pic_object=
4794d63fdb69Smrg	  non_pic_object=
4795d63fdb69Smrg
4796d63fdb69Smrg	  # Read the .lo file
4797d63fdb69Smrg	  func_source "$arg"
4798d63fdb69Smrg
4799d63fdb69Smrg	  if test -z "$pic_object" ||
4800d63fdb69Smrg	     test -z "$non_pic_object" ||
4801d63fdb69Smrg	     test "$pic_object" = none &&
4802d63fdb69Smrg	     test "$non_pic_object" = none; then
4803d63fdb69Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
4804d63fdb69Smrg	  fi
4805d63fdb69Smrg
4806d63fdb69Smrg	  # Extract subdirectory from the argument.
4807d63fdb69Smrg	  func_dirname "$arg" "/" ""
4808d63fdb69Smrg	  xdir="$func_dirname_result"
4809d63fdb69Smrg
4810d63fdb69Smrg	  if test "$pic_object" != none; then
4811d63fdb69Smrg	    # Prepend the subdirectory the object is found in.
4812d63fdb69Smrg	    pic_object="$xdir$pic_object"
4813d63fdb69Smrg
4814d63fdb69Smrg	    if test "$prev" = dlfiles; then
4815d63fdb69Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
4816d63fdb69Smrg		dlfiles="$dlfiles $pic_object"
4817d63fdb69Smrg		prev=
4818d63fdb69Smrg		continue
4819d63fdb69Smrg	      else
4820d63fdb69Smrg		# If libtool objects are unsupported, then we need to preload.
4821d63fdb69Smrg		prev=dlprefiles
4822d63fdb69Smrg	      fi
4823d63fdb69Smrg	    fi
4824d63fdb69Smrg
4825d63fdb69Smrg	    # CHECK ME:  I think I busted this.  -Ossama
4826d63fdb69Smrg	    if test "$prev" = dlprefiles; then
4827d63fdb69Smrg	      # Preload the old-style object.
4828d63fdb69Smrg	      dlprefiles="$dlprefiles $pic_object"
4829d63fdb69Smrg	      prev=
4830d63fdb69Smrg	    fi
4831d63fdb69Smrg
4832d63fdb69Smrg	    # A PIC object.
4833d63fdb69Smrg	    func_append libobjs " $pic_object"
4834d63fdb69Smrg	    arg="$pic_object"
4835d63fdb69Smrg	  fi
4836d63fdb69Smrg
4837d63fdb69Smrg	  # Non-PIC object.
4838d63fdb69Smrg	  if test "$non_pic_object" != none; then
4839d63fdb69Smrg	    # Prepend the subdirectory the object is found in.
4840d63fdb69Smrg	    non_pic_object="$xdir$non_pic_object"
4841d63fdb69Smrg
4842d63fdb69Smrg	    # A standard non-PIC object
4843d63fdb69Smrg	    func_append non_pic_objects " $non_pic_object"
4844d63fdb69Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
4845d63fdb69Smrg	      arg="$non_pic_object"
4846d63fdb69Smrg	    fi
4847d63fdb69Smrg	  else
4848d63fdb69Smrg	    # If the PIC object exists, use it instead.
4849d63fdb69Smrg	    # $xdir was prepended to $pic_object above.
4850d63fdb69Smrg	    non_pic_object="$pic_object"
4851d63fdb69Smrg	    func_append non_pic_objects " $non_pic_object"
4852d63fdb69Smrg	  fi
4853d63fdb69Smrg	else
4854d63fdb69Smrg	  # Only an error if not doing a dry-run.
4855d63fdb69Smrg	  if $opt_dry_run; then
4856d63fdb69Smrg	    # Extract subdirectory from the argument.
4857d63fdb69Smrg	    func_dirname "$arg" "/" ""
4858d63fdb69Smrg	    xdir="$func_dirname_result"
4859d63fdb69Smrg
4860d63fdb69Smrg	    func_lo2o "$arg"
4861d63fdb69Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
4862d63fdb69Smrg	    non_pic_object=$xdir$func_lo2o_result
4863d63fdb69Smrg	    func_append libobjs " $pic_object"
4864d63fdb69Smrg	    func_append non_pic_objects " $non_pic_object"
4865d63fdb69Smrg	  else
4866d63fdb69Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
4867d63fdb69Smrg	  fi
4868d63fdb69Smrg	fi
4869d63fdb69Smrg	;;
4870d63fdb69Smrg
4871d63fdb69Smrg      *.$libext)
4872d63fdb69Smrg	# An archive.
4873d63fdb69Smrg	deplibs="$deplibs $arg"
4874d63fdb69Smrg	old_deplibs="$old_deplibs $arg"
4875d63fdb69Smrg	continue
4876d63fdb69Smrg	;;
4877d63fdb69Smrg
4878d63fdb69Smrg      *.la)
4879d63fdb69Smrg	# A libtool-controlled library.
4880d63fdb69Smrg
4881d63fdb69Smrg	if test "$prev" = dlfiles; then
4882d63fdb69Smrg	  # This library was specified with -dlopen.
4883d63fdb69Smrg	  dlfiles="$dlfiles $arg"
4884d63fdb69Smrg	  prev=
4885d63fdb69Smrg	elif test "$prev" = dlprefiles; then
4886d63fdb69Smrg	  # The library was specified with -dlpreopen.
4887d63fdb69Smrg	  dlprefiles="$dlprefiles $arg"
4888d63fdb69Smrg	  prev=
4889d63fdb69Smrg	else
4890d63fdb69Smrg	  deplibs="$deplibs $arg"
4891d63fdb69Smrg	fi
4892d63fdb69Smrg	continue
4893d63fdb69Smrg	;;
4894d63fdb69Smrg
4895d63fdb69Smrg      # Some other compiler argument.
4896d63fdb69Smrg      *)
4897d63fdb69Smrg	# Unknown arguments in both finalize_command and compile_command need
4898d63fdb69Smrg	# to be aesthetically quoted because they are evaled later.
4899d63fdb69Smrg	func_quote_for_eval "$arg"
4900d63fdb69Smrg	arg="$func_quote_for_eval_result"
4901d63fdb69Smrg	;;
4902d63fdb69Smrg      esac # arg
4903d63fdb69Smrg
4904d63fdb69Smrg      # Now actually substitute the argument into the commands.
4905d63fdb69Smrg      if test -n "$arg"; then
4906d63fdb69Smrg	func_append compile_command " $arg"
4907d63fdb69Smrg	func_append finalize_command " $arg"
4908d63fdb69Smrg      fi
4909d63fdb69Smrg    done # argument parsing loop
4910d63fdb69Smrg
4911d63fdb69Smrg    test -n "$prev" && \
4912d63fdb69Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
4913d63fdb69Smrg
4914d63fdb69Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
4915d63fdb69Smrg      eval arg=\"$export_dynamic_flag_spec\"
4916d63fdb69Smrg      func_append compile_command " $arg"
4917d63fdb69Smrg      func_append finalize_command " $arg"
4918d63fdb69Smrg    fi
4919d63fdb69Smrg
4920d63fdb69Smrg    oldlibs=
4921d63fdb69Smrg    # calculate the name of the file, without its directory
4922d63fdb69Smrg    func_basename "$output"
4923d63fdb69Smrg    outputname="$func_basename_result"
4924d63fdb69Smrg    libobjs_save="$libobjs"
4925d63fdb69Smrg
4926d63fdb69Smrg    if test -n "$shlibpath_var"; then
4927d63fdb69Smrg      # get the directories listed in $shlibpath_var
4928d63fdb69Smrg      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
49293da084b3Smrg    else
4930d63fdb69Smrg      shlib_search_path=
49313da084b3Smrg    fi
4932d63fdb69Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
4933d63fdb69Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
49343da084b3Smrg
4935d63fdb69Smrg    func_dirname "$output" "/" ""
4936d63fdb69Smrg    output_objdir="$func_dirname_result$objdir"
4937d63fdb69Smrg    # Create the object directory.
4938d63fdb69Smrg    func_mkdir_p "$output_objdir"
49393da084b3Smrg
4940d63fdb69Smrg    # Determine the type of output
4941d63fdb69Smrg    case $output in
4942d63fdb69Smrg    "")
4943d63fdb69Smrg      func_fatal_help "you must specify an output file"
4944d63fdb69Smrg      ;;
4945d63fdb69Smrg    *.$libext) linkmode=oldlib ;;
4946d63fdb69Smrg    *.lo | *.$objext) linkmode=obj ;;
4947d63fdb69Smrg    *.la) linkmode=lib ;;
4948d63fdb69Smrg    *) linkmode=prog ;; # Anything else should be a program.
4949d63fdb69Smrg    esac
4950d63fdb69Smrg
4951d63fdb69Smrg    specialdeplibs=
4952d63fdb69Smrg
4953d63fdb69Smrg    libs=
4954d63fdb69Smrg    # Find all interdependent deplibs by searching for libraries
4955d63fdb69Smrg    # that are linked more than once (e.g. -la -lb -la)
4956d63fdb69Smrg    for deplib in $deplibs; do
4957d63fdb69Smrg      if $opt_duplicate_deps ; then
4958d63fdb69Smrg	case "$libs " in
4959d63fdb69Smrg	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
4960d63fdb69Smrg	esac
4961d63fdb69Smrg      fi
4962d63fdb69Smrg      libs="$libs $deplib"
4963d63fdb69Smrg    done
4964d63fdb69Smrg
4965d63fdb69Smrg    if test "$linkmode" = lib; then
4966d63fdb69Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
4967d63fdb69Smrg
4968d63fdb69Smrg      # Compute libraries that are listed more than once in $predeps
4969d63fdb69Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
4970d63fdb69Smrg      # not to be eliminated).
4971d63fdb69Smrg      pre_post_deps=
4972d63fdb69Smrg      if $opt_duplicate_compiler_generated_deps; then
4973d63fdb69Smrg	for pre_post_dep in $predeps $postdeps; do
4974d63fdb69Smrg	  case "$pre_post_deps " in
4975d63fdb69Smrg	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
4976d63fdb69Smrg	  esac
4977d63fdb69Smrg	  pre_post_deps="$pre_post_deps $pre_post_dep"
4978d63fdb69Smrg	done
4979d63fdb69Smrg      fi
4980d63fdb69Smrg      pre_post_deps=
4981d63fdb69Smrg    fi
4982d63fdb69Smrg
4983d63fdb69Smrg    deplibs=
4984d63fdb69Smrg    newdependency_libs=
4985d63fdb69Smrg    newlib_search_path=
4986d63fdb69Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
4987d63fdb69Smrg    notinst_deplibs= # not-installed libtool libraries
4988d63fdb69Smrg    notinst_path= # paths that contain not-installed libtool libraries
4989d63fdb69Smrg
4990d63fdb69Smrg    case $linkmode in
4991d63fdb69Smrg    lib)
4992d63fdb69Smrg	passes="conv dlpreopen link"
4993d63fdb69Smrg	for file in $dlfiles $dlprefiles; do
4994d63fdb69Smrg	  case $file in
4995d63fdb69Smrg	  *.la) ;;
4996d63fdb69Smrg	  *)
4997d63fdb69Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
4998d63fdb69Smrg	    ;;
4999d63fdb69Smrg	  esac
5000d63fdb69Smrg	done
5001d63fdb69Smrg	;;
5002d63fdb69Smrg    prog)
5003d63fdb69Smrg	compile_deplibs=
5004d63fdb69Smrg	finalize_deplibs=
5005d63fdb69Smrg	alldeplibs=no
5006d63fdb69Smrg	newdlfiles=
5007d63fdb69Smrg	newdlprefiles=
5008d63fdb69Smrg	passes="conv scan dlopen dlpreopen link"
5009d63fdb69Smrg	;;
5010d63fdb69Smrg    *)  passes="conv"
5011d63fdb69Smrg	;;
5012d63fdb69Smrg    esac
5013d63fdb69Smrg
5014d63fdb69Smrg    for pass in $passes; do
5015d63fdb69Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
5016d63fdb69Smrg      # so that -L comes before libs that need it for instance...
5017d63fdb69Smrg      if test "$linkmode,$pass" = "lib,link"; then
5018d63fdb69Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
5019d63fdb69Smrg	##        order, and fix it there properly
5020d63fdb69Smrg        tmp_deplibs=
5021d63fdb69Smrg	for deplib in $deplibs; do
5022d63fdb69Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
5023d63fdb69Smrg	done
5024d63fdb69Smrg	deplibs="$tmp_deplibs"
5025d63fdb69Smrg      fi
5026d63fdb69Smrg
5027d63fdb69Smrg      if test "$linkmode,$pass" = "lib,link" ||
5028d63fdb69Smrg	 test "$linkmode,$pass" = "prog,scan"; then
5029d63fdb69Smrg	libs="$deplibs"
5030d63fdb69Smrg	deplibs=
5031d63fdb69Smrg      fi
5032d63fdb69Smrg      if test "$linkmode" = prog; then
5033d63fdb69Smrg	case $pass in
5034d63fdb69Smrg	dlopen) libs="$dlfiles" ;;
5035d63fdb69Smrg	dlpreopen) libs="$dlprefiles" ;;
5036d63fdb69Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
5037d63fdb69Smrg	esac
5038d63fdb69Smrg      fi
5039d63fdb69Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
5040d63fdb69Smrg	# Collect and forward deplibs of preopened libtool libs
5041d63fdb69Smrg	for lib in $dlprefiles; do
5042d63fdb69Smrg	  # Ignore non-libtool-libs
5043d63fdb69Smrg	  dependency_libs=
5044d63fdb69Smrg	  case $lib in
5045d63fdb69Smrg	  *.la)	func_source "$lib" ;;
5046d63fdb69Smrg	  esac
5047d63fdb69Smrg
5048d63fdb69Smrg	  # Collect preopened libtool deplibs, except any this library
5049d63fdb69Smrg	  # has declared as weak libs
5050d63fdb69Smrg	  for deplib in $dependency_libs; do
5051d63fdb69Smrg            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
5052d63fdb69Smrg	    case " $weak_libs " in
5053d63fdb69Smrg	    *" $deplib_base "*) ;;
5054d63fdb69Smrg	    *) deplibs="$deplibs $deplib" ;;
5055d63fdb69Smrg	    esac
5056d63fdb69Smrg	  done
5057d63fdb69Smrg	done
5058d63fdb69Smrg	libs="$dlprefiles"
5059d63fdb69Smrg      fi
5060d63fdb69Smrg      if test "$pass" = dlopen; then
5061d63fdb69Smrg	# Collect dlpreopened libraries
5062d63fdb69Smrg	save_deplibs="$deplibs"
5063d63fdb69Smrg	deplibs=
5064d63fdb69Smrg      fi
5065d63fdb69Smrg
5066d63fdb69Smrg      for deplib in $libs; do
5067d63fdb69Smrg	lib=
5068d63fdb69Smrg	found=no
5069d63fdb69Smrg	case $deplib in
5070d63fdb69Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
5071d63fdb69Smrg	  if test "$linkmode,$pass" = "prog,link"; then
5072d63fdb69Smrg	    compile_deplibs="$deplib $compile_deplibs"
5073d63fdb69Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
5074d63fdb69Smrg	  else
5075d63fdb69Smrg	    compiler_flags="$compiler_flags $deplib"
5076d63fdb69Smrg	    if test "$linkmode" = lib ; then
5077d63fdb69Smrg		case "$new_inherited_linker_flags " in
5078d63fdb69Smrg		    *" $deplib "*) ;;
5079d63fdb69Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
5080d63fdb69Smrg		esac
5081d63fdb69Smrg	    fi
5082d63fdb69Smrg	  fi
5083d63fdb69Smrg	  continue
5084d63fdb69Smrg	  ;;
5085d63fdb69Smrg	-l*)
5086d63fdb69Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
5087d63fdb69Smrg	    func_warning "\`-l' is ignored for archives/objects"
5088d63fdb69Smrg	    continue
5089d63fdb69Smrg	  fi
5090d63fdb69Smrg	  func_stripname '-l' '' "$deplib"
5091d63fdb69Smrg	  name=$func_stripname_result
5092d63fdb69Smrg	  if test "$linkmode" = lib; then
5093d63fdb69Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
5094d63fdb69Smrg	  else
5095d63fdb69Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
5096d63fdb69Smrg	  fi
5097d63fdb69Smrg	  for searchdir in $searchdirs; do
5098d63fdb69Smrg	    for search_ext in .la $std_shrext .so .a; do
5099d63fdb69Smrg	      # Search the libtool library
5100d63fdb69Smrg	      lib="$searchdir/lib${name}${search_ext}"
5101d63fdb69Smrg	      if test -f "$lib"; then
5102d63fdb69Smrg		if test "$search_ext" = ".la"; then
5103d63fdb69Smrg		  found=yes
5104d63fdb69Smrg		else
5105d63fdb69Smrg		  found=no
5106d63fdb69Smrg		fi
5107d63fdb69Smrg		break 2
5108d63fdb69Smrg	      fi
5109d63fdb69Smrg	    done
5110d63fdb69Smrg	  done
5111d63fdb69Smrg	  if test "$found" != yes; then
5112d63fdb69Smrg	    # deplib doesn't seem to be a libtool library
5113d63fdb69Smrg	    if test "$linkmode,$pass" = "prog,link"; then
5114d63fdb69Smrg	      compile_deplibs="$deplib $compile_deplibs"
5115d63fdb69Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5116d63fdb69Smrg	    else
5117d63fdb69Smrg	      deplibs="$deplib $deplibs"
5118d63fdb69Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
5119d63fdb69Smrg	    fi
5120d63fdb69Smrg	    continue
5121d63fdb69Smrg	  else # deplib is a libtool library
5122d63fdb69Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
5123d63fdb69Smrg	    # We need to do some special things here, and not later.
5124d63fdb69Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
5125d63fdb69Smrg	      case " $predeps $postdeps " in
5126d63fdb69Smrg	      *" $deplib "*)
5127d63fdb69Smrg		if func_lalib_p "$lib"; then
5128d63fdb69Smrg		  library_names=
5129d63fdb69Smrg		  old_library=
5130d63fdb69Smrg		  func_source "$lib"
5131d63fdb69Smrg		  for l in $old_library $library_names; do
5132d63fdb69Smrg		    ll="$l"
5133d63fdb69Smrg		  done
5134d63fdb69Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
5135d63fdb69Smrg		    found=no
5136d63fdb69Smrg		    func_dirname "$lib" "" "."
5137d63fdb69Smrg		    ladir="$func_dirname_result"
5138d63fdb69Smrg		    lib=$ladir/$old_library
5139d63fdb69Smrg		    if test "$linkmode,$pass" = "prog,link"; then
5140d63fdb69Smrg		      compile_deplibs="$deplib $compile_deplibs"
5141d63fdb69Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
5142d63fdb69Smrg		    else
5143d63fdb69Smrg		      deplibs="$deplib $deplibs"
5144d63fdb69Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
5145d63fdb69Smrg		    fi
5146d63fdb69Smrg		    continue
5147d63fdb69Smrg		  fi
5148d63fdb69Smrg		fi
5149d63fdb69Smrg		;;
5150d63fdb69Smrg	      *) ;;
5151d63fdb69Smrg	      esac
5152d63fdb69Smrg	    fi
5153d63fdb69Smrg	  fi
5154d63fdb69Smrg	  ;; # -l
5155d63fdb69Smrg	*.ltframework)
5156d63fdb69Smrg	  if test "$linkmode,$pass" = "prog,link"; then
5157d63fdb69Smrg	    compile_deplibs="$deplib $compile_deplibs"
5158d63fdb69Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
5159d63fdb69Smrg	  else
5160d63fdb69Smrg	    deplibs="$deplib $deplibs"
5161d63fdb69Smrg	    if test "$linkmode" = lib ; then
5162d63fdb69Smrg		case "$new_inherited_linker_flags " in
5163d63fdb69Smrg		    *" $deplib "*) ;;
5164d63fdb69Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
5165d63fdb69Smrg		esac
5166d63fdb69Smrg	    fi
5167d63fdb69Smrg	  fi
5168d63fdb69Smrg	  continue
5169d63fdb69Smrg	  ;;
5170d63fdb69Smrg	-L*)
5171d63fdb69Smrg	  case $linkmode in
5172d63fdb69Smrg	  lib)
5173d63fdb69Smrg	    deplibs="$deplib $deplibs"
5174d63fdb69Smrg	    test "$pass" = conv && continue
5175d63fdb69Smrg	    newdependency_libs="$deplib $newdependency_libs"
5176d63fdb69Smrg	    func_stripname '-L' '' "$deplib"
5177d63fdb69Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
5178d63fdb69Smrg	    ;;
5179d63fdb69Smrg	  prog)
5180d63fdb69Smrg	    if test "$pass" = conv; then
5181d63fdb69Smrg	      deplibs="$deplib $deplibs"
5182d63fdb69Smrg	      continue
5183d63fdb69Smrg	    fi
5184d63fdb69Smrg	    if test "$pass" = scan; then
5185d63fdb69Smrg	      deplibs="$deplib $deplibs"
5186d63fdb69Smrg	    else
5187d63fdb69Smrg	      compile_deplibs="$deplib $compile_deplibs"
5188d63fdb69Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5189d63fdb69Smrg	    fi
5190d63fdb69Smrg	    func_stripname '-L' '' "$deplib"
5191d63fdb69Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
5192d63fdb69Smrg	    ;;
5193d63fdb69Smrg	  *)
5194d63fdb69Smrg	    func_warning "\`-L' is ignored for archives/objects"
5195d63fdb69Smrg	    ;;
5196d63fdb69Smrg	  esac # linkmode
5197d63fdb69Smrg	  continue
5198d63fdb69Smrg	  ;; # -L
5199d63fdb69Smrg	-R*)
5200d63fdb69Smrg	  if test "$pass" = link; then
5201d63fdb69Smrg	    func_stripname '-R' '' "$deplib"
5202d63fdb69Smrg	    dir=$func_stripname_result
5203d63fdb69Smrg	    # Make sure the xrpath contains only unique directories.
5204d63fdb69Smrg	    case "$xrpath " in
5205d63fdb69Smrg	    *" $dir "*) ;;
5206d63fdb69Smrg	    *) xrpath="$xrpath $dir" ;;
5207d63fdb69Smrg	    esac
5208d63fdb69Smrg	  fi
5209d63fdb69Smrg	  deplibs="$deplib $deplibs"
5210d63fdb69Smrg	  continue
5211d63fdb69Smrg	  ;;
5212d63fdb69Smrg	*.la) lib="$deplib" ;;
5213d63fdb69Smrg	*.$libext)
5214d63fdb69Smrg	  if test "$pass" = conv; then
5215d63fdb69Smrg	    deplibs="$deplib $deplibs"
5216d63fdb69Smrg	    continue
5217d63fdb69Smrg	  fi
5218d63fdb69Smrg	  case $linkmode in
5219d63fdb69Smrg	  lib)
5220d63fdb69Smrg	    # Linking convenience modules into shared libraries is allowed,
5221d63fdb69Smrg	    # but linking other static libraries is non-portable.
5222d63fdb69Smrg	    case " $dlpreconveniencelibs " in
5223d63fdb69Smrg	    *" $deplib "*) ;;
5224d63fdb69Smrg	    *)
5225d63fdb69Smrg	      valid_a_lib=no
5226d63fdb69Smrg	      case $deplibs_check_method in
5227d63fdb69Smrg		match_pattern*)
5228d63fdb69Smrg		  set dummy $deplibs_check_method; shift
5229d63fdb69Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
5230d63fdb69Smrg		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
5231d63fdb69Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
5232d63fdb69Smrg		    valid_a_lib=yes
5233d63fdb69Smrg		  fi
5234d63fdb69Smrg		;;
5235d63fdb69Smrg		pass_all)
5236d63fdb69Smrg		  valid_a_lib=yes
5237d63fdb69Smrg		;;
5238d63fdb69Smrg	      esac
5239d63fdb69Smrg	      if test "$valid_a_lib" != yes; then
5240d63fdb69Smrg		$ECHO
5241d63fdb69Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
5242d63fdb69Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
5243d63fdb69Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
5244d63fdb69Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
5245d63fdb69Smrg		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
5246d63fdb69Smrg		$ECHO "*** that it is just a static archive that I should not use here."
5247d63fdb69Smrg	      else
5248d63fdb69Smrg		$ECHO
5249d63fdb69Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
5250d63fdb69Smrg		$ECHO "*** static library $deplib is not portable!"
5251d63fdb69Smrg		deplibs="$deplib $deplibs"
5252d63fdb69Smrg	      fi
5253d63fdb69Smrg	      ;;
5254d63fdb69Smrg	    esac
5255d63fdb69Smrg	    continue
5256d63fdb69Smrg	    ;;
5257d63fdb69Smrg	  prog)
5258d63fdb69Smrg	    if test "$pass" != link; then
5259d63fdb69Smrg	      deplibs="$deplib $deplibs"
5260d63fdb69Smrg	    else
5261d63fdb69Smrg	      compile_deplibs="$deplib $compile_deplibs"
5262d63fdb69Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5263d63fdb69Smrg	    fi
5264d63fdb69Smrg	    continue
5265d63fdb69Smrg	    ;;
5266d63fdb69Smrg	  esac # linkmode
5267d63fdb69Smrg	  ;; # *.$libext
5268d63fdb69Smrg	*.lo | *.$objext)
5269d63fdb69Smrg	  if test "$pass" = conv; then
5270d63fdb69Smrg	    deplibs="$deplib $deplibs"
5271d63fdb69Smrg	  elif test "$linkmode" = prog; then
5272d63fdb69Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
5273d63fdb69Smrg	      # If there is no dlopen support or we're linking statically,
5274d63fdb69Smrg	      # we need to preload.
5275d63fdb69Smrg	      newdlprefiles="$newdlprefiles $deplib"
5276d63fdb69Smrg	      compile_deplibs="$deplib $compile_deplibs"
5277d63fdb69Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5278d63fdb69Smrg	    else
5279d63fdb69Smrg	      newdlfiles="$newdlfiles $deplib"
5280d63fdb69Smrg	    fi
5281d63fdb69Smrg	  fi
5282d63fdb69Smrg	  continue
5283d63fdb69Smrg	  ;;
5284d63fdb69Smrg	%DEPLIBS%)
5285d63fdb69Smrg	  alldeplibs=yes
5286d63fdb69Smrg	  continue
5287d63fdb69Smrg	  ;;
5288d63fdb69Smrg	esac # case $deplib
5289d63fdb69Smrg
5290d63fdb69Smrg	if test "$found" = yes || test -f "$lib"; then :
5291d63fdb69Smrg	else
5292d63fdb69Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
5293d63fdb69Smrg	fi
5294d63fdb69Smrg
5295d63fdb69Smrg	# Check to see that this really is a libtool archive.
5296d63fdb69Smrg	func_lalib_unsafe_p "$lib" \
5297d63fdb69Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
5298d63fdb69Smrg
5299d63fdb69Smrg	func_dirname "$lib" "" "."
5300d63fdb69Smrg	ladir="$func_dirname_result"
5301d63fdb69Smrg
5302d63fdb69Smrg	dlname=
5303d63fdb69Smrg	dlopen=
5304d63fdb69Smrg	dlpreopen=
5305d63fdb69Smrg	libdir=
5306d63fdb69Smrg	library_names=
5307d63fdb69Smrg	old_library=
5308d63fdb69Smrg	inherited_linker_flags=
5309d63fdb69Smrg	# If the library was installed with an old release of libtool,
5310d63fdb69Smrg	# it will not redefine variables installed, or shouldnotlink
5311d63fdb69Smrg	installed=yes
5312d63fdb69Smrg	shouldnotlink=no
5313d63fdb69Smrg	avoidtemprpath=
5314d63fdb69Smrg
5315d63fdb69Smrg
5316d63fdb69Smrg	# Read the .la file
5317d63fdb69Smrg	func_source "$lib"
5318d63fdb69Smrg
5319d63fdb69Smrg	# Convert "-framework foo" to "foo.ltframework"
5320d63fdb69Smrg	if test -n "$inherited_linker_flags"; then
5321d63fdb69Smrg	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
5322d63fdb69Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
5323d63fdb69Smrg	    case " $new_inherited_linker_flags " in
5324d63fdb69Smrg	      *" $tmp_inherited_linker_flag "*) ;;
5325d63fdb69Smrg	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
5326d63fdb69Smrg	    esac
5327d63fdb69Smrg	  done
5328d63fdb69Smrg	fi
5329d63fdb69Smrg	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
5330d63fdb69Smrg	if test "$linkmode,$pass" = "lib,link" ||
5331d63fdb69Smrg	   test "$linkmode,$pass" = "prog,scan" ||
5332d63fdb69Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
5333d63fdb69Smrg	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
5334d63fdb69Smrg	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
5335d63fdb69Smrg	fi
5336d63fdb69Smrg
5337d63fdb69Smrg	if test "$pass" = conv; then
5338d63fdb69Smrg	  # Only check for convenience libraries
5339d63fdb69Smrg	  deplibs="$lib $deplibs"
5340d63fdb69Smrg	  if test -z "$libdir"; then
5341d63fdb69Smrg	    if test -z "$old_library"; then
5342d63fdb69Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
5343d63fdb69Smrg	    fi
5344d63fdb69Smrg	    # It is a libtool convenience library, so add in its objects.
5345d63fdb69Smrg	    convenience="$convenience $ladir/$objdir/$old_library"
5346d63fdb69Smrg	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
5347d63fdb69Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
5348d63fdb69Smrg	    func_fatal_error "\`$lib' is not a convenience library"
5349d63fdb69Smrg	  fi
5350d63fdb69Smrg	  tmp_libs=
5351d63fdb69Smrg	  for deplib in $dependency_libs; do
5352d63fdb69Smrg	    deplibs="$deplib $deplibs"
5353d63fdb69Smrg	    if $opt_duplicate_deps ; then
5354d63fdb69Smrg	      case "$tmp_libs " in
5355d63fdb69Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5356d63fdb69Smrg	      esac
5357d63fdb69Smrg	    fi
5358d63fdb69Smrg	    tmp_libs="$tmp_libs $deplib"
5359d63fdb69Smrg	  done
5360d63fdb69Smrg	  continue
5361d63fdb69Smrg	fi # $pass = conv
5362d63fdb69Smrg
5363d63fdb69Smrg
5364d63fdb69Smrg	# Get the name of the library we link against.
5365d63fdb69Smrg	linklib=
5366d63fdb69Smrg	for l in $old_library $library_names; do
5367d63fdb69Smrg	  linklib="$l"
5368d63fdb69Smrg	done
5369d63fdb69Smrg	if test -z "$linklib"; then
5370d63fdb69Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
5371d63fdb69Smrg	fi
5372d63fdb69Smrg
5373d63fdb69Smrg	# This library was specified with -dlopen.
5374d63fdb69Smrg	if test "$pass" = dlopen; then
5375d63fdb69Smrg	  if test -z "$libdir"; then
5376d63fdb69Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
5377d63fdb69Smrg	  fi
5378d63fdb69Smrg	  if test -z "$dlname" ||
5379d63fdb69Smrg	     test "$dlopen_support" != yes ||
5380d63fdb69Smrg	     test "$build_libtool_libs" = no; then
5381d63fdb69Smrg	    # If there is no dlname, no dlopen support or we're linking
5382d63fdb69Smrg	    # statically, we need to preload.  We also need to preload any
5383d63fdb69Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
5384d63fdb69Smrg	    # bomb out in the load deplibs phase.
5385d63fdb69Smrg	    dlprefiles="$dlprefiles $lib $dependency_libs"
5386d63fdb69Smrg	  else
5387d63fdb69Smrg	    newdlfiles="$newdlfiles $lib"
5388d63fdb69Smrg	  fi
5389d63fdb69Smrg	  continue
5390d63fdb69Smrg	fi # $pass = dlopen
5391d63fdb69Smrg
5392d63fdb69Smrg	# We need an absolute path.
5393d63fdb69Smrg	case $ladir in
5394d63fdb69Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
5395d63fdb69Smrg	*)
5396d63fdb69Smrg	  abs_ladir=`cd "$ladir" && pwd`
5397d63fdb69Smrg	  if test -z "$abs_ladir"; then
5398d63fdb69Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
5399d63fdb69Smrg	    func_warning "passing it literally to the linker, although it might fail"
5400d63fdb69Smrg	    abs_ladir="$ladir"
5401d63fdb69Smrg	  fi
5402d63fdb69Smrg	  ;;
5403d63fdb69Smrg	esac
5404d63fdb69Smrg	func_basename "$lib"
5405d63fdb69Smrg	laname="$func_basename_result"
5406d63fdb69Smrg
5407d63fdb69Smrg	# Find the relevant object directory and library name.
5408d63fdb69Smrg	if test "X$installed" = Xyes; then
5409d63fdb69Smrg	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
5410d63fdb69Smrg	    func_warning "library \`$lib' was moved."
5411d63fdb69Smrg	    dir="$ladir"
5412d63fdb69Smrg	    absdir="$abs_ladir"
5413d63fdb69Smrg	    libdir="$abs_ladir"
5414d63fdb69Smrg	  else
5415d63fdb69Smrg	    dir="$libdir"
5416d63fdb69Smrg	    absdir="$libdir"
5417d63fdb69Smrg	  fi
5418d63fdb69Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
5419d63fdb69Smrg	else
5420d63fdb69Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
5421d63fdb69Smrg	    dir="$ladir"
5422d63fdb69Smrg	    absdir="$abs_ladir"
5423d63fdb69Smrg	    # Remove this search path later
5424d63fdb69Smrg	    notinst_path="$notinst_path $abs_ladir"
5425d63fdb69Smrg	  else
5426d63fdb69Smrg	    dir="$ladir/$objdir"
5427d63fdb69Smrg	    absdir="$abs_ladir/$objdir"
5428d63fdb69Smrg	    # Remove this search path later
5429d63fdb69Smrg	    notinst_path="$notinst_path $abs_ladir"
5430d63fdb69Smrg	  fi
5431d63fdb69Smrg	fi # $installed = yes
5432d63fdb69Smrg	func_stripname 'lib' '.la' "$laname"
5433d63fdb69Smrg	name=$func_stripname_result
5434d63fdb69Smrg
5435d63fdb69Smrg	# This library was specified with -dlpreopen.
5436d63fdb69Smrg	if test "$pass" = dlpreopen; then
5437d63fdb69Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
5438d63fdb69Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
5439d63fdb69Smrg	  fi
5440d63fdb69Smrg	  # Prefer using a static library (so that no silly _DYNAMIC symbols
5441d63fdb69Smrg	  # are required to link).
5442d63fdb69Smrg	  if test -n "$old_library"; then
5443d63fdb69Smrg	    newdlprefiles="$newdlprefiles $dir/$old_library"
5444d63fdb69Smrg	    # Keep a list of preopened convenience libraries to check
5445d63fdb69Smrg	    # that they are being used correctly in the link pass.
5446d63fdb69Smrg	    test -z "$libdir" && \
5447d63fdb69Smrg		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
5448d63fdb69Smrg	  # Otherwise, use the dlname, so that lt_dlopen finds it.
5449d63fdb69Smrg	  elif test -n "$dlname"; then
5450d63fdb69Smrg	    newdlprefiles="$newdlprefiles $dir/$dlname"
5451d63fdb69Smrg	  else
5452d63fdb69Smrg	    newdlprefiles="$newdlprefiles $dir/$linklib"
5453d63fdb69Smrg	  fi
5454d63fdb69Smrg	fi # $pass = dlpreopen
5455d63fdb69Smrg
5456d63fdb69Smrg	if test -z "$libdir"; then
5457d63fdb69Smrg	  # Link the convenience library
5458d63fdb69Smrg	  if test "$linkmode" = lib; then
5459d63fdb69Smrg	    deplibs="$dir/$old_library $deplibs"
5460d63fdb69Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
5461d63fdb69Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
5462d63fdb69Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
5463d63fdb69Smrg	  else
5464d63fdb69Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
5465d63fdb69Smrg	  fi
5466d63fdb69Smrg	  continue
5467d63fdb69Smrg	fi
5468d63fdb69Smrg
5469d63fdb69Smrg
5470d63fdb69Smrg	if test "$linkmode" = prog && test "$pass" != link; then
5471d63fdb69Smrg	  newlib_search_path="$newlib_search_path $ladir"
5472d63fdb69Smrg	  deplibs="$lib $deplibs"
5473d63fdb69Smrg
5474d63fdb69Smrg	  linkalldeplibs=no
5475d63fdb69Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
5476d63fdb69Smrg	     test "$build_libtool_libs" = no; then
5477d63fdb69Smrg	    linkalldeplibs=yes
5478d63fdb69Smrg	  fi
5479d63fdb69Smrg
5480d63fdb69Smrg	  tmp_libs=
5481d63fdb69Smrg	  for deplib in $dependency_libs; do
5482d63fdb69Smrg	    case $deplib in
5483d63fdb69Smrg	    -L*) func_stripname '-L' '' "$deplib"
5484d63fdb69Smrg	         newlib_search_path="$newlib_search_path $func_stripname_result"
5485d63fdb69Smrg		 ;;
5486d63fdb69Smrg	    esac
5487d63fdb69Smrg	    # Need to link against all dependency_libs?
5488d63fdb69Smrg	    if test "$linkalldeplibs" = yes; then
5489d63fdb69Smrg	      deplibs="$deplib $deplibs"
5490d63fdb69Smrg	    else
5491d63fdb69Smrg	      # Need to hardcode shared library paths
5492d63fdb69Smrg	      # or/and link against static libraries
5493d63fdb69Smrg	      newdependency_libs="$deplib $newdependency_libs"
5494d63fdb69Smrg	    fi
5495d63fdb69Smrg	    if $opt_duplicate_deps ; then
5496d63fdb69Smrg	      case "$tmp_libs " in
5497d63fdb69Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5498d63fdb69Smrg	      esac
5499d63fdb69Smrg	    fi
5500d63fdb69Smrg	    tmp_libs="$tmp_libs $deplib"
5501d63fdb69Smrg	  done # for deplib
5502d63fdb69Smrg	  continue
5503d63fdb69Smrg	fi # $linkmode = prog...
5504d63fdb69Smrg
5505d63fdb69Smrg	if test "$linkmode,$pass" = "prog,link"; then
5506d63fdb69Smrg	  if test -n "$library_names" &&
5507d63fdb69Smrg	     { { test "$prefer_static_libs" = no ||
5508d63fdb69Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
5509d63fdb69Smrg	       test -z "$old_library"; }; then
5510d63fdb69Smrg	    # We need to hardcode the library path
5511d63fdb69Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
5512d63fdb69Smrg	      # Make sure the rpath contains only unique directories.
5513d63fdb69Smrg	      case "$temp_rpath:" in
5514d63fdb69Smrg	      *"$absdir:"*) ;;
5515d63fdb69Smrg	      *) temp_rpath="$temp_rpath$absdir:" ;;
5516d63fdb69Smrg	      esac
5517d63fdb69Smrg	    fi
5518d63fdb69Smrg
5519d63fdb69Smrg	    # Hardcode the library path.
5520d63fdb69Smrg	    # Skip directories that are in the system default run-time
5521d63fdb69Smrg	    # search path.
5522d63fdb69Smrg	    case " $sys_lib_dlsearch_path " in
5523d63fdb69Smrg	    *" $absdir "*) ;;
5524d63fdb69Smrg	    *)
5525d63fdb69Smrg	      case "$compile_rpath " in
5526d63fdb69Smrg	      *" $absdir "*) ;;
5527d63fdb69Smrg	      *) compile_rpath="$compile_rpath $absdir"
5528d63fdb69Smrg	      esac
5529d63fdb69Smrg	      ;;
5530d63fdb69Smrg	    esac
5531d63fdb69Smrg	    case " $sys_lib_dlsearch_path " in
5532d63fdb69Smrg	    *" $libdir "*) ;;
5533d63fdb69Smrg	    *)
5534d63fdb69Smrg	      case "$finalize_rpath " in
5535d63fdb69Smrg	      *" $libdir "*) ;;
5536d63fdb69Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
5537d63fdb69Smrg	      esac
5538d63fdb69Smrg	      ;;
5539d63fdb69Smrg	    esac
5540d63fdb69Smrg	  fi # $linkmode,$pass = prog,link...
5541d63fdb69Smrg
5542d63fdb69Smrg	  if test "$alldeplibs" = yes &&
5543d63fdb69Smrg	     { test "$deplibs_check_method" = pass_all ||
5544d63fdb69Smrg	       { test "$build_libtool_libs" = yes &&
5545d63fdb69Smrg		 test -n "$library_names"; }; }; then
5546d63fdb69Smrg	    # We only need to search for static libraries
5547d63fdb69Smrg	    continue
5548d63fdb69Smrg	  fi
5549d63fdb69Smrg	fi
5550d63fdb69Smrg
5551d63fdb69Smrg	link_static=no # Whether the deplib will be linked statically
5552d63fdb69Smrg	use_static_libs=$prefer_static_libs
5553d63fdb69Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
5554d63fdb69Smrg	  use_static_libs=no
5555d63fdb69Smrg	fi
5556d63fdb69Smrg	if test -n "$library_names" &&
5557d63fdb69Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
5558d63fdb69Smrg	  case $host in
5559d63fdb69Smrg	  *cygwin* | *mingw* | *cegcc*)
5560d63fdb69Smrg	      # No point in relinking DLLs because paths are not encoded
5561d63fdb69Smrg	      notinst_deplibs="$notinst_deplibs $lib"
5562d63fdb69Smrg	      need_relink=no
5563d63fdb69Smrg	    ;;
5564d63fdb69Smrg	  *)
5565d63fdb69Smrg	    if test "$installed" = no; then
5566d63fdb69Smrg	      notinst_deplibs="$notinst_deplibs $lib"
5567d63fdb69Smrg	      need_relink=yes
5568d63fdb69Smrg	    fi
5569d63fdb69Smrg	    ;;
5570d63fdb69Smrg	  esac
5571d63fdb69Smrg	  # This is a shared library
5572d63fdb69Smrg
5573d63fdb69Smrg	  # Warn about portability, can't link against -module's on some
5574d63fdb69Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
5575d63fdb69Smrg	  dlopenmodule=""
5576d63fdb69Smrg	  for dlpremoduletest in $dlprefiles; do
5577d63fdb69Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
5578d63fdb69Smrg	      dlopenmodule="$dlpremoduletest"
5579d63fdb69Smrg	      break
5580d63fdb69Smrg	    fi
5581d63fdb69Smrg	  done
5582d63fdb69Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
5583d63fdb69Smrg	    $ECHO
5584d63fdb69Smrg	    if test "$linkmode" = prog; then
5585d63fdb69Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
5586d63fdb69Smrg	    else
5587d63fdb69Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
5588d63fdb69Smrg	    fi
5589d63fdb69Smrg	    $ECHO "*** $linklib is not portable!"
5590d63fdb69Smrg	  fi
5591d63fdb69Smrg	  if test "$linkmode" = lib &&
5592d63fdb69Smrg	     test "$hardcode_into_libs" = yes; then
5593d63fdb69Smrg	    # Hardcode the library path.
5594d63fdb69Smrg	    # Skip directories that are in the system default run-time
5595d63fdb69Smrg	    # search path.
5596d63fdb69Smrg	    case " $sys_lib_dlsearch_path " in
5597d63fdb69Smrg	    *" $absdir "*) ;;
5598d63fdb69Smrg	    *)
5599d63fdb69Smrg	      case "$compile_rpath " in
5600d63fdb69Smrg	      *" $absdir "*) ;;
5601d63fdb69Smrg	      *) compile_rpath="$compile_rpath $absdir"
5602d63fdb69Smrg	      esac
5603d63fdb69Smrg	      ;;
5604d63fdb69Smrg	    esac
5605d63fdb69Smrg	    case " $sys_lib_dlsearch_path " in
5606d63fdb69Smrg	    *" $libdir "*) ;;
5607d63fdb69Smrg	    *)
5608d63fdb69Smrg	      case "$finalize_rpath " in
5609d63fdb69Smrg	      *" $libdir "*) ;;
5610d63fdb69Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
5611d63fdb69Smrg	      esac
5612d63fdb69Smrg	      ;;
5613d63fdb69Smrg	    esac
5614d63fdb69Smrg	  fi
5615d63fdb69Smrg
5616d63fdb69Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
5617d63fdb69Smrg	    # figure out the soname
5618d63fdb69Smrg	    set dummy $library_names
5619d63fdb69Smrg	    shift
5620d63fdb69Smrg	    realname="$1"
5621d63fdb69Smrg	    shift
5622d63fdb69Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
5623d63fdb69Smrg	    # use dlname if we got it. it's perfectly good, no?
5624d63fdb69Smrg	    if test -n "$dlname"; then
5625d63fdb69Smrg	      soname="$dlname"
5626d63fdb69Smrg	    elif test -n "$soname_spec"; then
5627d63fdb69Smrg	      # bleh windows
5628d63fdb69Smrg	      case $host in
5629d63fdb69Smrg	      *cygwin* | mingw* | *cegcc*)
5630d63fdb69Smrg	        func_arith $current - $age
5631d63fdb69Smrg		major=$func_arith_result
5632d63fdb69Smrg		versuffix="-$major"
5633d63fdb69Smrg		;;
5634d63fdb69Smrg	      esac
5635d63fdb69Smrg	      eval soname=\"$soname_spec\"
5636d63fdb69Smrg	    else
5637d63fdb69Smrg	      soname="$realname"
5638d63fdb69Smrg	    fi
5639d63fdb69Smrg
5640d63fdb69Smrg	    # Make a new name for the extract_expsyms_cmds to use
5641d63fdb69Smrg	    soroot="$soname"
5642d63fdb69Smrg	    func_basename "$soroot"
5643d63fdb69Smrg	    soname="$func_basename_result"
5644d63fdb69Smrg	    func_stripname 'lib' '.dll' "$soname"
5645d63fdb69Smrg	    newlib=libimp-$func_stripname_result.a
5646d63fdb69Smrg
5647d63fdb69Smrg	    # If the library has no export list, then create one now
5648d63fdb69Smrg	    if test -f "$output_objdir/$soname-def"; then :
5649d63fdb69Smrg	    else
5650d63fdb69Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
5651d63fdb69Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
5652d63fdb69Smrg	    fi
5653d63fdb69Smrg
5654d63fdb69Smrg	    # Create $newlib
5655d63fdb69Smrg	    if test -f "$output_objdir/$newlib"; then :; else
5656d63fdb69Smrg	      func_verbose "generating import library for \`$soname'"
5657d63fdb69Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
5658d63fdb69Smrg	    fi
5659d63fdb69Smrg	    # make sure the library variables are pointing to the new library
5660d63fdb69Smrg	    dir=$output_objdir
5661d63fdb69Smrg	    linklib=$newlib
5662d63fdb69Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
5663d63fdb69Smrg
5664d63fdb69Smrg	  if test "$linkmode" = prog || test "$mode" != relink; then
5665d63fdb69Smrg	    add_shlibpath=
5666d63fdb69Smrg	    add_dir=
5667d63fdb69Smrg	    add=
5668d63fdb69Smrg	    lib_linked=yes
5669d63fdb69Smrg	    case $hardcode_action in
5670d63fdb69Smrg	    immediate | unsupported)
5671d63fdb69Smrg	      if test "$hardcode_direct" = no; then
5672d63fdb69Smrg		add="$dir/$linklib"
5673d63fdb69Smrg		case $host in
5674d63fdb69Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
5675d63fdb69Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
5676d63fdb69Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
5677d63fdb69Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
5678d63fdb69Smrg		  *-*-darwin* )
5679d63fdb69Smrg		    # if the lib is a (non-dlopened) module then we can not
5680d63fdb69Smrg		    # link against it, someone is ignoring the earlier warnings
5681d63fdb69Smrg		    if /usr/bin/file -L $add 2> /dev/null |
5682d63fdb69Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
5683d63fdb69Smrg		      if test "X$dlopenmodule" != "X$lib"; then
5684d63fdb69Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
5685d63fdb69Smrg			if test -z "$old_library" ; then
5686d63fdb69Smrg			  $ECHO
5687d63fdb69Smrg			  $ECHO "*** And there doesn't seem to be a static archive available"
5688d63fdb69Smrg			  $ECHO "*** The link will probably fail, sorry"
5689d63fdb69Smrg			else
5690d63fdb69Smrg			  add="$dir/$old_library"
5691d63fdb69Smrg			fi
5692d63fdb69Smrg		      elif test -n "$old_library"; then
5693d63fdb69Smrg			add="$dir/$old_library"
5694d63fdb69Smrg		      fi
5695d63fdb69Smrg		    fi
5696d63fdb69Smrg		esac
5697d63fdb69Smrg	      elif test "$hardcode_minus_L" = no; then
5698d63fdb69Smrg		case $host in
5699d63fdb69Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
5700d63fdb69Smrg		esac
5701d63fdb69Smrg		add_dir="-L$dir"
5702d63fdb69Smrg		add="-l$name"
5703d63fdb69Smrg	      elif test "$hardcode_shlibpath_var" = no; then
5704d63fdb69Smrg		add_shlibpath="$dir"
5705d63fdb69Smrg		add="-l$name"
5706d63fdb69Smrg	      else
5707d63fdb69Smrg		lib_linked=no
5708d63fdb69Smrg	      fi
5709d63fdb69Smrg	      ;;
5710d63fdb69Smrg	    relink)
5711d63fdb69Smrg	      if test "$hardcode_direct" = yes &&
5712d63fdb69Smrg	         test "$hardcode_direct_absolute" = no; then
5713d63fdb69Smrg		add="$dir/$linklib"
5714d63fdb69Smrg	      elif test "$hardcode_minus_L" = yes; then
5715d63fdb69Smrg		add_dir="-L$dir"
5716d63fdb69Smrg		# Try looking first in the location we're being installed to.
5717d63fdb69Smrg		if test -n "$inst_prefix_dir"; then
5718d63fdb69Smrg		  case $libdir in
5719d63fdb69Smrg		    [\\/]*)
5720d63fdb69Smrg		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
5721d63fdb69Smrg		      ;;
5722d63fdb69Smrg		  esac
5723d63fdb69Smrg		fi
5724d63fdb69Smrg		add="-l$name"
5725d63fdb69Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
5726d63fdb69Smrg		add_shlibpath="$dir"
5727d63fdb69Smrg		add="-l$name"
5728d63fdb69Smrg	      else
5729d63fdb69Smrg		lib_linked=no
5730d63fdb69Smrg	      fi
5731d63fdb69Smrg	      ;;
5732d63fdb69Smrg	    *) lib_linked=no ;;
5733d63fdb69Smrg	    esac
5734d63fdb69Smrg
5735d63fdb69Smrg	    if test "$lib_linked" != yes; then
5736d63fdb69Smrg	      func_fatal_configuration "unsupported hardcode properties"
5737d63fdb69Smrg	    fi
5738d63fdb69Smrg
5739d63fdb69Smrg	    if test -n "$add_shlibpath"; then
5740d63fdb69Smrg	      case :$compile_shlibpath: in
5741d63fdb69Smrg	      *":$add_shlibpath:"*) ;;
5742d63fdb69Smrg	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
5743d63fdb69Smrg	      esac
5744d63fdb69Smrg	    fi
5745d63fdb69Smrg	    if test "$linkmode" = prog; then
5746d63fdb69Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
5747d63fdb69Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
5748d63fdb69Smrg	    else
5749d63fdb69Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
5750d63fdb69Smrg	      test -n "$add" && deplibs="$add $deplibs"
5751d63fdb69Smrg	      if test "$hardcode_direct" != yes &&
5752d63fdb69Smrg		 test "$hardcode_minus_L" != yes &&
5753d63fdb69Smrg		 test "$hardcode_shlibpath_var" = yes; then
5754d63fdb69Smrg		case :$finalize_shlibpath: in
5755d63fdb69Smrg		*":$libdir:"*) ;;
5756d63fdb69Smrg		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
5757d63fdb69Smrg		esac
5758d63fdb69Smrg	      fi
5759d63fdb69Smrg	    fi
5760d63fdb69Smrg	  fi
5761d63fdb69Smrg
5762d63fdb69Smrg	  if test "$linkmode" = prog || test "$mode" = relink; then
5763d63fdb69Smrg	    add_shlibpath=
5764d63fdb69Smrg	    add_dir=
5765d63fdb69Smrg	    add=
5766d63fdb69Smrg	    # Finalize command for both is simple: just hardcode it.
5767d63fdb69Smrg	    if test "$hardcode_direct" = yes &&
5768d63fdb69Smrg	       test "$hardcode_direct_absolute" = no; then
5769d63fdb69Smrg	      add="$libdir/$linklib"
5770d63fdb69Smrg	    elif test "$hardcode_minus_L" = yes; then
5771d63fdb69Smrg	      add_dir="-L$libdir"
5772d63fdb69Smrg	      add="-l$name"
5773d63fdb69Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
5774d63fdb69Smrg	      case :$finalize_shlibpath: in
5775d63fdb69Smrg	      *":$libdir:"*) ;;
5776d63fdb69Smrg	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
5777d63fdb69Smrg	      esac
5778d63fdb69Smrg	      add="-l$name"
5779d63fdb69Smrg	    elif test "$hardcode_automatic" = yes; then
5780d63fdb69Smrg	      if test -n "$inst_prefix_dir" &&
5781d63fdb69Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
5782d63fdb69Smrg		add="$inst_prefix_dir$libdir/$linklib"
5783d63fdb69Smrg	      else
5784d63fdb69Smrg		add="$libdir/$linklib"
5785d63fdb69Smrg	      fi
5786d63fdb69Smrg	    else
5787d63fdb69Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
5788d63fdb69Smrg	      add_dir="-L$libdir"
5789d63fdb69Smrg	      # Try looking first in the location we're being installed to.
5790d63fdb69Smrg	      if test -n "$inst_prefix_dir"; then
5791d63fdb69Smrg		case $libdir in
5792d63fdb69Smrg		  [\\/]*)
5793d63fdb69Smrg		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
5794d63fdb69Smrg		    ;;
5795d63fdb69Smrg		esac
5796d63fdb69Smrg	      fi
5797d63fdb69Smrg	      add="-l$name"
5798d63fdb69Smrg	    fi
5799d63fdb69Smrg
5800d63fdb69Smrg	    if test "$linkmode" = prog; then
5801d63fdb69Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
5802d63fdb69Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
5803d63fdb69Smrg	    else
5804d63fdb69Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
5805d63fdb69Smrg	      test -n "$add" && deplibs="$add $deplibs"
5806d63fdb69Smrg	    fi
5807d63fdb69Smrg	  fi
5808d63fdb69Smrg	elif test "$linkmode" = prog; then
5809d63fdb69Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
5810d63fdb69Smrg	  # is not unsupported.  This is valid on all known static and
5811d63fdb69Smrg	  # shared platforms.
5812d63fdb69Smrg	  if test "$hardcode_direct" != unsupported; then
5813d63fdb69Smrg	    test -n "$old_library" && linklib="$old_library"
5814d63fdb69Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
5815d63fdb69Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
5816d63fdb69Smrg	  else
5817d63fdb69Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
5818d63fdb69Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
5819d63fdb69Smrg	  fi
5820d63fdb69Smrg	elif test "$build_libtool_libs" = yes; then
5821d63fdb69Smrg	  # Not a shared library
5822d63fdb69Smrg	  if test "$deplibs_check_method" != pass_all; then
5823d63fdb69Smrg	    # We're trying link a shared library against a static one
5824d63fdb69Smrg	    # but the system doesn't support it.
5825d63fdb69Smrg
5826d63fdb69Smrg	    # Just print a warning and add the library to dependency_libs so
5827d63fdb69Smrg	    # that the program can be linked against the static library.
5828d63fdb69Smrg	    $ECHO
5829d63fdb69Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
5830d63fdb69Smrg	    $ECHO "*** I have the capability to make that library automatically link in when"
5831d63fdb69Smrg	    $ECHO "*** you link to this library.  But I can only do this if you have a"
5832d63fdb69Smrg	    $ECHO "*** shared version of the library, which you do not appear to have."
5833d63fdb69Smrg	    if test "$module" = yes; then
5834d63fdb69Smrg	      $ECHO "*** But as you try to build a module library, libtool will still create "
5835d63fdb69Smrg	      $ECHO "*** a static module, that should work as long as the dlopening application"
5836d63fdb69Smrg	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
5837d63fdb69Smrg	      if test -z "$global_symbol_pipe"; then
5838d63fdb69Smrg		$ECHO
5839d63fdb69Smrg		$ECHO "*** However, this would only work if libtool was able to extract symbol"
5840d63fdb69Smrg		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
5841d63fdb69Smrg		$ECHO "*** not find such a program.  So, this module is probably useless."
5842d63fdb69Smrg		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
5843d63fdb69Smrg	      fi
5844d63fdb69Smrg	      if test "$build_old_libs" = no; then
5845d63fdb69Smrg		build_libtool_libs=module
5846d63fdb69Smrg		build_old_libs=yes
5847d63fdb69Smrg	      else
5848d63fdb69Smrg		build_libtool_libs=no
5849d63fdb69Smrg	      fi
5850d63fdb69Smrg	    fi
5851d63fdb69Smrg	  else
5852d63fdb69Smrg	    deplibs="$dir/$old_library $deplibs"
5853d63fdb69Smrg	    link_static=yes
5854d63fdb69Smrg	  fi
5855d63fdb69Smrg	fi # link shared/static library?
5856d63fdb69Smrg
5857d63fdb69Smrg	if test "$linkmode" = lib; then
5858d63fdb69Smrg	  if test -n "$dependency_libs" &&
5859d63fdb69Smrg	     { test "$hardcode_into_libs" != yes ||
5860d63fdb69Smrg	       test "$build_old_libs" = yes ||
5861d63fdb69Smrg	       test "$link_static" = yes; }; then
5862d63fdb69Smrg	    # Extract -R from dependency_libs
5863d63fdb69Smrg	    temp_deplibs=
5864d63fdb69Smrg	    for libdir in $dependency_libs; do
5865d63fdb69Smrg	      case $libdir in
5866d63fdb69Smrg	      -R*) func_stripname '-R' '' "$libdir"
5867d63fdb69Smrg	           temp_xrpath=$func_stripname_result
5868d63fdb69Smrg		   case " $xrpath " in
5869d63fdb69Smrg		   *" $temp_xrpath "*) ;;
5870d63fdb69Smrg		   *) xrpath="$xrpath $temp_xrpath";;
5871d63fdb69Smrg		   esac;;
5872d63fdb69Smrg	      *) temp_deplibs="$temp_deplibs $libdir";;
5873d63fdb69Smrg	      esac
5874d63fdb69Smrg	    done
5875d63fdb69Smrg	    dependency_libs="$temp_deplibs"
5876d63fdb69Smrg	  fi
5877d63fdb69Smrg
5878d63fdb69Smrg	  newlib_search_path="$newlib_search_path $absdir"
5879d63fdb69Smrg	  # Link against this library
5880d63fdb69Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
5881d63fdb69Smrg	  # ... and its dependency_libs
5882d63fdb69Smrg	  tmp_libs=
5883d63fdb69Smrg	  for deplib in $dependency_libs; do
5884d63fdb69Smrg	    newdependency_libs="$deplib $newdependency_libs"
5885d63fdb69Smrg	    if $opt_duplicate_deps ; then
5886d63fdb69Smrg	      case "$tmp_libs " in
5887d63fdb69Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5888d63fdb69Smrg	      esac
5889d63fdb69Smrg	    fi
5890d63fdb69Smrg	    tmp_libs="$tmp_libs $deplib"
5891d63fdb69Smrg	  done
5892d63fdb69Smrg
5893d63fdb69Smrg	  if test "$link_all_deplibs" != no; then
5894d63fdb69Smrg	    # Add the search paths of all dependency libraries
5895d63fdb69Smrg	    for deplib in $dependency_libs; do
5896d63fdb69Smrg	      case $deplib in
5897d63fdb69Smrg	      -L*) path="$deplib" ;;
5898d63fdb69Smrg	      *.la)
5899d63fdb69Smrg	        func_dirname "$deplib" "" "."
5900d63fdb69Smrg		dir="$func_dirname_result"
5901d63fdb69Smrg		# We need an absolute path.
5902d63fdb69Smrg		case $dir in
5903d63fdb69Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
5904d63fdb69Smrg		*)
5905d63fdb69Smrg		  absdir=`cd "$dir" && pwd`
5906d63fdb69Smrg		  if test -z "$absdir"; then
5907d63fdb69Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
5908d63fdb69Smrg		    absdir="$dir"
5909d63fdb69Smrg		  fi
5910d63fdb69Smrg		  ;;
5911d63fdb69Smrg		esac
5912d63fdb69Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
5913d63fdb69Smrg		case $host in
5914d63fdb69Smrg		*-*-darwin*)
5915d63fdb69Smrg		  depdepl=
5916d63fdb69Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
5917d63fdb69Smrg		  if test -n "$deplibrary_names" ; then
5918d63fdb69Smrg		    for tmp in $deplibrary_names ; do
5919d63fdb69Smrg		      depdepl=$tmp
5920d63fdb69Smrg		    done
5921d63fdb69Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
5922d63fdb69Smrg		      depdepl="$absdir/$objdir/$depdepl"
5923d63fdb69Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
5924d63fdb69Smrg                      if test -z "$darwin_install_name"; then
5925d63fdb69Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
5926d63fdb69Smrg                      fi
5927d63fdb69Smrg		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
5928d63fdb69Smrg		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
5929d63fdb69Smrg		      path=
5930d63fdb69Smrg		    fi
5931d63fdb69Smrg		  fi
5932d63fdb69Smrg		  ;;
5933d63fdb69Smrg		*)
5934d63fdb69Smrg		  path="-L$absdir/$objdir"
5935d63fdb69Smrg		  ;;
5936d63fdb69Smrg		esac
5937d63fdb69Smrg		else
5938d63fdb69Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
5939d63fdb69Smrg		  test -z "$libdir" && \
5940d63fdb69Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
5941d63fdb69Smrg		  test "$absdir" != "$libdir" && \
5942d63fdb69Smrg		    func_warning "\`$deplib' seems to be moved"
5943d63fdb69Smrg
5944d63fdb69Smrg		  path="-L$absdir"
5945d63fdb69Smrg		fi
5946d63fdb69Smrg		;;
5947d63fdb69Smrg	      esac
5948d63fdb69Smrg	      case " $deplibs " in
5949d63fdb69Smrg	      *" $path "*) ;;
5950d63fdb69Smrg	      *) deplibs="$path $deplibs" ;;
5951d63fdb69Smrg	      esac
5952d63fdb69Smrg	    done
5953d63fdb69Smrg	  fi # link_all_deplibs != no
5954d63fdb69Smrg	fi # linkmode = lib
5955d63fdb69Smrg      done # for deplib in $libs
5956d63fdb69Smrg      if test "$pass" = link; then
5957d63fdb69Smrg	if test "$linkmode" = "prog"; then
5958d63fdb69Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
5959d63fdb69Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
5960d63fdb69Smrg	else
5961d63fdb69Smrg	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
5962d63fdb69Smrg	fi
5963d63fdb69Smrg      fi
5964d63fdb69Smrg      dependency_libs="$newdependency_libs"
5965d63fdb69Smrg      if test "$pass" = dlpreopen; then
5966d63fdb69Smrg	# Link the dlpreopened libraries before other libraries
5967d63fdb69Smrg	for deplib in $save_deplibs; do
5968d63fdb69Smrg	  deplibs="$deplib $deplibs"
5969d63fdb69Smrg	done
5970d63fdb69Smrg      fi
5971d63fdb69Smrg      if test "$pass" != dlopen; then
5972d63fdb69Smrg	if test "$pass" != conv; then
5973d63fdb69Smrg	  # Make sure lib_search_path contains only unique directories.
5974d63fdb69Smrg	  lib_search_path=
5975d63fdb69Smrg	  for dir in $newlib_search_path; do
5976d63fdb69Smrg	    case "$lib_search_path " in
5977d63fdb69Smrg	    *" $dir "*) ;;
5978d63fdb69Smrg	    *) lib_search_path="$lib_search_path $dir" ;;
5979d63fdb69Smrg	    esac
5980d63fdb69Smrg	  done
5981d63fdb69Smrg	  newlib_search_path=
5982d63fdb69Smrg	fi
5983d63fdb69Smrg
5984d63fdb69Smrg	if test "$linkmode,$pass" != "prog,link"; then
5985d63fdb69Smrg	  vars="deplibs"
5986d63fdb69Smrg	else
5987d63fdb69Smrg	  vars="compile_deplibs finalize_deplibs"
5988d63fdb69Smrg	fi
5989d63fdb69Smrg	for var in $vars dependency_libs; do
5990d63fdb69Smrg	  # Add libraries to $var in reverse order
5991d63fdb69Smrg	  eval tmp_libs=\"\$$var\"
5992d63fdb69Smrg	  new_libs=
5993d63fdb69Smrg	  for deplib in $tmp_libs; do
5994d63fdb69Smrg	    # FIXME: Pedantically, this is the right thing to do, so
5995d63fdb69Smrg	    #        that some nasty dependency loop isn't accidentally
5996d63fdb69Smrg	    #        broken:
5997d63fdb69Smrg	    #new_libs="$deplib $new_libs"
5998d63fdb69Smrg	    # Pragmatically, this seems to cause very few problems in
5999d63fdb69Smrg	    # practice:
6000d63fdb69Smrg	    case $deplib in
6001d63fdb69Smrg	    -L*) new_libs="$deplib $new_libs" ;;
6002d63fdb69Smrg	    -R*) ;;
6003d63fdb69Smrg	    *)
6004d63fdb69Smrg	      # And here is the reason: when a library appears more
6005d63fdb69Smrg	      # than once as an explicit dependence of a library, or
6006d63fdb69Smrg	      # is implicitly linked in more than once by the
6007d63fdb69Smrg	      # compiler, it is considered special, and multiple
6008d63fdb69Smrg	      # occurrences thereof are not removed.  Compare this
6009d63fdb69Smrg	      # with having the same library being listed as a
6010d63fdb69Smrg	      # dependency of multiple other libraries: in this case,
6011d63fdb69Smrg	      # we know (pedantically, we assume) the library does not
6012d63fdb69Smrg	      # need to be listed more than once, so we keep only the
6013d63fdb69Smrg	      # last copy.  This is not always right, but it is rare
6014d63fdb69Smrg	      # enough that we require users that really mean to play
6015d63fdb69Smrg	      # such unportable linking tricks to link the library
6016d63fdb69Smrg	      # using -Wl,-lname, so that libtool does not consider it
6017d63fdb69Smrg	      # for duplicate removal.
6018d63fdb69Smrg	      case " $specialdeplibs " in
6019d63fdb69Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
6020d63fdb69Smrg	      *)
6021d63fdb69Smrg		case " $new_libs " in
6022d63fdb69Smrg		*" $deplib "*) ;;
6023d63fdb69Smrg		*) new_libs="$deplib $new_libs" ;;
6024d63fdb69Smrg		esac
6025d63fdb69Smrg		;;
6026d63fdb69Smrg	      esac
6027d63fdb69Smrg	      ;;
6028d63fdb69Smrg	    esac
6029d63fdb69Smrg	  done
6030d63fdb69Smrg	  tmp_libs=
6031d63fdb69Smrg	  for deplib in $new_libs; do
6032d63fdb69Smrg	    case $deplib in
6033d63fdb69Smrg	    -L*)
6034d63fdb69Smrg	      case " $tmp_libs " in
6035d63fdb69Smrg	      *" $deplib "*) ;;
6036d63fdb69Smrg	      *) tmp_libs="$tmp_libs $deplib" ;;
6037d63fdb69Smrg	      esac
6038d63fdb69Smrg	      ;;
6039d63fdb69Smrg	    *) tmp_libs="$tmp_libs $deplib" ;;
6040d63fdb69Smrg	    esac
6041d63fdb69Smrg	  done
6042d63fdb69Smrg	  eval $var=\"$tmp_libs\"
6043d63fdb69Smrg	done # for var
6044d63fdb69Smrg      fi
6045d63fdb69Smrg      # Last step: remove runtime libs from dependency_libs
6046d63fdb69Smrg      # (they stay in deplibs)
6047d63fdb69Smrg      tmp_libs=
6048d63fdb69Smrg      for i in $dependency_libs ; do
6049d63fdb69Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
6050d63fdb69Smrg	*" $i "*)
6051d63fdb69Smrg	  i=""
6052d63fdb69Smrg	  ;;
6053d63fdb69Smrg	esac
6054d63fdb69Smrg	if test -n "$i" ; then
6055d63fdb69Smrg	  tmp_libs="$tmp_libs $i"
6056d63fdb69Smrg	fi
6057d63fdb69Smrg      done
6058d63fdb69Smrg      dependency_libs=$tmp_libs
6059d63fdb69Smrg    done # for pass
6060d63fdb69Smrg    if test "$linkmode" = prog; then
6061d63fdb69Smrg      dlfiles="$newdlfiles"
6062d63fdb69Smrg    fi
6063d63fdb69Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
6064d63fdb69Smrg      dlprefiles="$newdlprefiles"
6065d63fdb69Smrg    fi
6066d63fdb69Smrg
6067d63fdb69Smrg    case $linkmode in
6068d63fdb69Smrg    oldlib)
6069d63fdb69Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
6070d63fdb69Smrg	func_warning "\`-dlopen' is ignored for archives"
6071d63fdb69Smrg      fi
6072d63fdb69Smrg
6073d63fdb69Smrg      case " $deplibs" in
6074d63fdb69Smrg      *\ -l* | *\ -L*)
6075d63fdb69Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
6076d63fdb69Smrg      esac
6077d63fdb69Smrg
6078d63fdb69Smrg      test -n "$rpath" && \
6079d63fdb69Smrg	func_warning "\`-rpath' is ignored for archives"
6080d63fdb69Smrg
6081d63fdb69Smrg      test -n "$xrpath" && \
6082d63fdb69Smrg	func_warning "\`-R' is ignored for archives"
6083d63fdb69Smrg
6084d63fdb69Smrg      test -n "$vinfo" && \
6085d63fdb69Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
6086d63fdb69Smrg
6087d63fdb69Smrg      test -n "$release" && \
6088d63fdb69Smrg	func_warning "\`-release' is ignored for archives"
6089d63fdb69Smrg
6090d63fdb69Smrg      test -n "$export_symbols$export_symbols_regex" && \
6091d63fdb69Smrg	func_warning "\`-export-symbols' is ignored for archives"
6092d63fdb69Smrg
6093d63fdb69Smrg      # Now set the variables for building old libraries.
6094d63fdb69Smrg      build_libtool_libs=no
6095d63fdb69Smrg      oldlibs="$output"
6096d63fdb69Smrg      objs="$objs$old_deplibs"
6097d63fdb69Smrg      ;;
6098d63fdb69Smrg
6099d63fdb69Smrg    lib)
6100d63fdb69Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
6101d63fdb69Smrg      case $outputname in
6102d63fdb69Smrg      lib*)
6103d63fdb69Smrg	func_stripname 'lib' '.la' "$outputname"
6104d63fdb69Smrg	name=$func_stripname_result
6105d63fdb69Smrg	eval shared_ext=\"$shrext_cmds\"
6106d63fdb69Smrg	eval libname=\"$libname_spec\"
6107d63fdb69Smrg	;;
6108d63fdb69Smrg      *)
6109d63fdb69Smrg	test "$module" = no && \
6110d63fdb69Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
6111d63fdb69Smrg
6112d63fdb69Smrg	if test "$need_lib_prefix" != no; then
6113d63fdb69Smrg	  # Add the "lib" prefix for modules if required
6114d63fdb69Smrg	  func_stripname '' '.la' "$outputname"
6115d63fdb69Smrg	  name=$func_stripname_result
6116d63fdb69Smrg	  eval shared_ext=\"$shrext_cmds\"
6117d63fdb69Smrg	  eval libname=\"$libname_spec\"
6118d63fdb69Smrg	else
6119d63fdb69Smrg	  func_stripname '' '.la' "$outputname"
6120d63fdb69Smrg	  libname=$func_stripname_result
6121d63fdb69Smrg	fi
6122d63fdb69Smrg	;;
6123d63fdb69Smrg      esac
6124d63fdb69Smrg
6125d63fdb69Smrg      if test -n "$objs"; then
6126d63fdb69Smrg	if test "$deplibs_check_method" != pass_all; then
6127d63fdb69Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
6128d63fdb69Smrg	else
6129d63fdb69Smrg	  $ECHO
6130d63fdb69Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
6131d63fdb69Smrg	  $ECHO "*** objects $objs is not portable!"
6132d63fdb69Smrg	  libobjs="$libobjs $objs"
6133d63fdb69Smrg	fi
6134d63fdb69Smrg      fi
6135d63fdb69Smrg
6136d63fdb69Smrg      test "$dlself" != no && \
6137d63fdb69Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
6138d63fdb69Smrg
6139d63fdb69Smrg      set dummy $rpath
6140d63fdb69Smrg      shift
6141d63fdb69Smrg      test "$#" -gt 1 && \
6142d63fdb69Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
6143d63fdb69Smrg
6144d63fdb69Smrg      install_libdir="$1"
6145d63fdb69Smrg
6146d63fdb69Smrg      oldlibs=
6147d63fdb69Smrg      if test -z "$rpath"; then
6148d63fdb69Smrg	if test "$build_libtool_libs" = yes; then
6149d63fdb69Smrg	  # Building a libtool convenience library.
6150d63fdb69Smrg	  # Some compilers have problems with a `.al' extension so
6151d63fdb69Smrg	  # convenience libraries should have the same extension an
6152d63fdb69Smrg	  # archive normally would.
6153d63fdb69Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
6154d63fdb69Smrg	  build_libtool_libs=convenience
6155d63fdb69Smrg	  build_old_libs=yes
6156d63fdb69Smrg	fi
6157d63fdb69Smrg
6158d63fdb69Smrg	test -n "$vinfo" && \
6159d63fdb69Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
6160d63fdb69Smrg
6161d63fdb69Smrg	test -n "$release" && \
6162d63fdb69Smrg	  func_warning "\`-release' is ignored for convenience libraries"
6163d63fdb69Smrg      else
6164d63fdb69Smrg
6165d63fdb69Smrg	# Parse the version information argument.
6166d63fdb69Smrg	save_ifs="$IFS"; IFS=':'
6167d63fdb69Smrg	set dummy $vinfo 0 0 0
6168d63fdb69Smrg	shift
6169d63fdb69Smrg	IFS="$save_ifs"
6170d63fdb69Smrg
6171d63fdb69Smrg	test -n "$7" && \
6172d63fdb69Smrg	  func_fatal_help "too many parameters to \`-version-info'"
6173d63fdb69Smrg
6174d63fdb69Smrg	# convert absolute version numbers to libtool ages
6175d63fdb69Smrg	# this retains compatibility with .la files and attempts
6176d63fdb69Smrg	# to make the code below a bit more comprehensible
6177d63fdb69Smrg
6178d63fdb69Smrg	case $vinfo_number in
6179d63fdb69Smrg	yes)
6180d63fdb69Smrg	  number_major="$1"
6181d63fdb69Smrg	  number_minor="$2"
6182d63fdb69Smrg	  number_revision="$3"
6183d63fdb69Smrg	  #
6184d63fdb69Smrg	  # There are really only two kinds -- those that
6185d63fdb69Smrg	  # use the current revision as the major version
6186d63fdb69Smrg	  # and those that subtract age and use age as
6187d63fdb69Smrg	  # a minor version.  But, then there is irix
6188d63fdb69Smrg	  # which has an extra 1 added just for fun
6189d63fdb69Smrg	  #
6190d63fdb69Smrg	  case $version_type in
6191d63fdb69Smrg	  darwin|linux|osf|windows|none)
6192d63fdb69Smrg	    func_arith $number_major + $number_minor
6193d63fdb69Smrg	    current=$func_arith_result
6194d63fdb69Smrg	    age="$number_minor"
6195d63fdb69Smrg	    revision="$number_revision"
6196d63fdb69Smrg	    ;;
6197d63fdb69Smrg	  freebsd-aout|freebsd-elf|sunos)
6198d63fdb69Smrg	    current="$number_major"
6199d63fdb69Smrg	    revision="$number_minor"
6200d63fdb69Smrg	    age="0"
6201d63fdb69Smrg	    ;;
6202d63fdb69Smrg	  irix|nonstopux)
6203d63fdb69Smrg	    func_arith $number_major + $number_minor
6204d63fdb69Smrg	    current=$func_arith_result
6205d63fdb69Smrg	    age="$number_minor"
6206d63fdb69Smrg	    revision="$number_minor"
6207d63fdb69Smrg	    lt_irix_increment=no
6208d63fdb69Smrg	    ;;
6209d63fdb69Smrg	  esac
6210d63fdb69Smrg	  ;;
6211d63fdb69Smrg	no)
6212d63fdb69Smrg	  current="$1"
6213d63fdb69Smrg	  revision="$2"
6214d63fdb69Smrg	  age="$3"
6215d63fdb69Smrg	  ;;
6216d63fdb69Smrg	esac
6217d63fdb69Smrg
6218d63fdb69Smrg	# Check that each of the things are valid numbers.
6219d63fdb69Smrg	case $current in
6220d63fdb69Smrg	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]) ;;
6221d63fdb69Smrg	*)
6222d63fdb69Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
6223d63fdb69Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6224d63fdb69Smrg	  ;;
6225d63fdb69Smrg	esac
6226d63fdb69Smrg
6227d63fdb69Smrg	case $revision in
6228d63fdb69Smrg	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]) ;;
6229d63fdb69Smrg	*)
6230d63fdb69Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
6231d63fdb69Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6232d63fdb69Smrg	  ;;
6233d63fdb69Smrg	esac
6234d63fdb69Smrg
6235d63fdb69Smrg	case $age in
6236d63fdb69Smrg	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]) ;;
6237d63fdb69Smrg	*)
6238d63fdb69Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
6239d63fdb69Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6240d63fdb69Smrg	  ;;
6241d63fdb69Smrg	esac
6242d63fdb69Smrg
6243d63fdb69Smrg	if test "$age" -gt "$current"; then
6244d63fdb69Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
6245d63fdb69Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6246d63fdb69Smrg	fi
6247d63fdb69Smrg
6248d63fdb69Smrg	# Calculate the version variables.
6249d63fdb69Smrg	major=
6250d63fdb69Smrg	versuffix=
6251d63fdb69Smrg	verstring=
6252d63fdb69Smrg	case $version_type in
6253d63fdb69Smrg	none) ;;
6254d63fdb69Smrg
6255d63fdb69Smrg	darwin)
6256d63fdb69Smrg	  # Like Linux, but with the current version available in
6257d63fdb69Smrg	  # verstring for coding it into the library header
6258d63fdb69Smrg	  func_arith $current - $age
6259d63fdb69Smrg	  major=.$func_arith_result
6260d63fdb69Smrg	  versuffix="$major.$age.$revision"
6261d63fdb69Smrg	  # Darwin ld doesn't like 0 for these options...
6262d63fdb69Smrg	  func_arith $current + 1
6263d63fdb69Smrg	  minor_current=$func_arith_result
6264d63fdb69Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
6265d63fdb69Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
6266d63fdb69Smrg	  ;;
6267d63fdb69Smrg
6268d63fdb69Smrg	freebsd-aout)
6269d63fdb69Smrg	  major=".$current"
6270d63fdb69Smrg	  versuffix=".$current.$revision";
6271d63fdb69Smrg	  ;;
6272d63fdb69Smrg
6273d63fdb69Smrg	freebsd-elf)
6274d63fdb69Smrg	  major=".$current"
6275d63fdb69Smrg	  versuffix=".$current"
6276d63fdb69Smrg	  ;;
6277d63fdb69Smrg
6278d63fdb69Smrg	irix | nonstopux)
6279d63fdb69Smrg	  if test "X$lt_irix_increment" = "Xno"; then
6280d63fdb69Smrg	    func_arith $current - $age
6281d63fdb69Smrg	  else
6282d63fdb69Smrg	    func_arith $current - $age + 1
6283d63fdb69Smrg	  fi
6284d63fdb69Smrg	  major=$func_arith_result
6285d63fdb69Smrg
6286d63fdb69Smrg	  case $version_type in
6287d63fdb69Smrg	    nonstopux) verstring_prefix=nonstopux ;;
6288d63fdb69Smrg	    *)         verstring_prefix=sgi ;;
6289d63fdb69Smrg	  esac
6290d63fdb69Smrg	  verstring="$verstring_prefix$major.$revision"
6291d63fdb69Smrg
6292d63fdb69Smrg	  # Add in all the interfaces that we are compatible with.
6293d63fdb69Smrg	  loop=$revision
6294d63fdb69Smrg	  while test "$loop" -ne 0; do
6295d63fdb69Smrg	    func_arith $revision - $loop
6296d63fdb69Smrg	    iface=$func_arith_result
6297d63fdb69Smrg	    func_arith $loop - 1
6298d63fdb69Smrg	    loop=$func_arith_result
6299d63fdb69Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
6300d63fdb69Smrg	  done
6301d63fdb69Smrg
6302d63fdb69Smrg	  # Before this point, $major must not contain `.'.
6303d63fdb69Smrg	  major=.$major
6304d63fdb69Smrg	  versuffix="$major.$revision"
6305d63fdb69Smrg	  ;;
6306d63fdb69Smrg
6307d63fdb69Smrg	linux)
6308d63fdb69Smrg	  func_arith $current - $age
6309d63fdb69Smrg	  major=.$func_arith_result
6310d63fdb69Smrg	  versuffix="$major.$age.$revision"
6311d63fdb69Smrg	  ;;
6312d63fdb69Smrg
6313d63fdb69Smrg	osf)
6314d63fdb69Smrg	  func_arith $current - $age
6315d63fdb69Smrg	  major=.$func_arith_result
6316d63fdb69Smrg	  versuffix=".$current.$age.$revision"
6317d63fdb69Smrg	  verstring="$current.$age.$revision"
6318d63fdb69Smrg
6319d63fdb69Smrg	  # Add in all the interfaces that we are compatible with.
6320d63fdb69Smrg	  loop=$age
6321d63fdb69Smrg	  while test "$loop" -ne 0; do
6322d63fdb69Smrg	    func_arith $current - $loop
6323d63fdb69Smrg	    iface=$func_arith_result
6324d63fdb69Smrg	    func_arith $loop - 1
6325d63fdb69Smrg	    loop=$func_arith_result
6326d63fdb69Smrg	    verstring="$verstring:${iface}.0"
6327d63fdb69Smrg	  done
6328d63fdb69Smrg
6329d63fdb69Smrg	  # Make executables depend on our current version.
6330d63fdb69Smrg	  verstring="$verstring:${current}.0"
6331d63fdb69Smrg	  ;;
6332d63fdb69Smrg
6333d63fdb69Smrg	qnx)
6334d63fdb69Smrg	  major=".$current"
6335d63fdb69Smrg	  versuffix=".$current"
6336d63fdb69Smrg	  ;;
6337d63fdb69Smrg
6338d63fdb69Smrg	sunos)
6339d63fdb69Smrg	  major=".$current"
6340d63fdb69Smrg	  versuffix=".$current.$revision"
6341d63fdb69Smrg	  ;;
6342d63fdb69Smrg
6343d63fdb69Smrg	windows)
6344d63fdb69Smrg	  # Use '-' rather than '.', since we only want one
6345d63fdb69Smrg	  # extension on DOS 8.3 filesystems.
6346d63fdb69Smrg	  func_arith $current - $age
6347d63fdb69Smrg	  major=$func_arith_result
6348d63fdb69Smrg	  versuffix="-$major"
6349d63fdb69Smrg	  ;;
6350d63fdb69Smrg
6351d63fdb69Smrg	*)
6352d63fdb69Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
6353d63fdb69Smrg	  ;;
6354d63fdb69Smrg	esac
6355d63fdb69Smrg
6356d63fdb69Smrg	# Clear the version info if we defaulted, and they specified a release.
6357d63fdb69Smrg	if test -z "$vinfo" && test -n "$release"; then
6358d63fdb69Smrg	  major=
6359d63fdb69Smrg	  case $version_type in
6360d63fdb69Smrg	  darwin)
6361d63fdb69Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
6362d63fdb69Smrg	    # problems, so we reset it completely
6363d63fdb69Smrg	    verstring=
6364d63fdb69Smrg	    ;;
6365d63fdb69Smrg	  *)
6366d63fdb69Smrg	    verstring="0.0"
6367d63fdb69Smrg	    ;;
6368d63fdb69Smrg	  esac
6369d63fdb69Smrg	  if test "$need_version" = no; then
6370d63fdb69Smrg	    versuffix=
6371d63fdb69Smrg	  else
6372d63fdb69Smrg	    versuffix=".0.0"
6373d63fdb69Smrg	  fi
6374d63fdb69Smrg	fi
6375d63fdb69Smrg
6376d63fdb69Smrg	# Remove version info from name if versioning should be avoided
6377d63fdb69Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
6378d63fdb69Smrg	  major=
6379d63fdb69Smrg	  versuffix=
6380d63fdb69Smrg	  verstring=""
6381d63fdb69Smrg	fi
6382d63fdb69Smrg
6383d63fdb69Smrg	# Check to see if the archive will have undefined symbols.
6384d63fdb69Smrg	if test "$allow_undefined" = yes; then
6385d63fdb69Smrg	  if test "$allow_undefined_flag" = unsupported; then
6386d63fdb69Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
6387d63fdb69Smrg	    build_libtool_libs=no
6388d63fdb69Smrg	    build_old_libs=yes
6389d63fdb69Smrg	  fi
6390d63fdb69Smrg	else
6391d63fdb69Smrg	  # Don't allow undefined symbols.
6392d63fdb69Smrg	  allow_undefined_flag="$no_undefined_flag"
6393d63fdb69Smrg	fi
6394d63fdb69Smrg
6395d63fdb69Smrg      fi
6396d63fdb69Smrg
6397d63fdb69Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
6398d63fdb69Smrg      libobjs="$libobjs $symfileobj"
6399d63fdb69Smrg      test "X$libobjs" = "X " && libobjs=
6400d63fdb69Smrg
6401d63fdb69Smrg      if test "$mode" != relink; then
6402d63fdb69Smrg	# Remove our outputs, but don't remove object files since they
6403d63fdb69Smrg	# may have been created when compiling PIC objects.
6404d63fdb69Smrg	removelist=
6405d63fdb69Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
6406d63fdb69Smrg	for p in $tempremovelist; do
6407d63fdb69Smrg	  case $p in
6408d63fdb69Smrg	    *.$objext | *.gcno)
6409d63fdb69Smrg	       ;;
6410d63fdb69Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
6411d63fdb69Smrg	       if test "X$precious_files_regex" != "X"; then
6412d63fdb69Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
6413d63fdb69Smrg		 then
6414d63fdb69Smrg		   continue
6415d63fdb69Smrg		 fi
6416d63fdb69Smrg	       fi
6417d63fdb69Smrg	       removelist="$removelist $p"
6418d63fdb69Smrg	       ;;
6419d63fdb69Smrg	    *) ;;
6420d63fdb69Smrg	  esac
6421d63fdb69Smrg	done
6422d63fdb69Smrg	test -n "$removelist" && \
6423d63fdb69Smrg	  func_show_eval "${RM}r \$removelist"
6424d63fdb69Smrg      fi
6425d63fdb69Smrg
6426d63fdb69Smrg      # Now set the variables for building old libraries.
6427d63fdb69Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
6428d63fdb69Smrg	oldlibs="$oldlibs $output_objdir/$libname.$libext"
6429d63fdb69Smrg
6430d63fdb69Smrg	# Transform .lo files to .o files.
6431d63fdb69Smrg	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
6432d63fdb69Smrg      fi
6433d63fdb69Smrg
6434d63fdb69Smrg      # Eliminate all temporary directories.
6435d63fdb69Smrg      #for path in $notinst_path; do
6436d63fdb69Smrg      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
6437d63fdb69Smrg      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
6438d63fdb69Smrg      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
6439d63fdb69Smrg      #done
6440d63fdb69Smrg
6441d63fdb69Smrg      if test -n "$xrpath"; then
6442d63fdb69Smrg	# If the user specified any rpath flags, then add them.
6443d63fdb69Smrg	temp_xrpath=
6444d63fdb69Smrg	for libdir in $xrpath; do
6445d63fdb69Smrg	  temp_xrpath="$temp_xrpath -R$libdir"
6446d63fdb69Smrg	  case "$finalize_rpath " in
6447d63fdb69Smrg	  *" $libdir "*) ;;
6448d63fdb69Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
6449d63fdb69Smrg	  esac
6450d63fdb69Smrg	done
6451d63fdb69Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
6452d63fdb69Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
6453d63fdb69Smrg	fi
6454d63fdb69Smrg      fi
6455d63fdb69Smrg
6456d63fdb69Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
6457d63fdb69Smrg      old_dlfiles="$dlfiles"
6458d63fdb69Smrg      dlfiles=
6459d63fdb69Smrg      for lib in $old_dlfiles; do
6460d63fdb69Smrg	case " $dlprefiles $dlfiles " in
6461d63fdb69Smrg	*" $lib "*) ;;
6462d63fdb69Smrg	*) dlfiles="$dlfiles $lib" ;;
6463d63fdb69Smrg	esac
6464d63fdb69Smrg      done
6465d63fdb69Smrg
6466d63fdb69Smrg      # Make sure dlprefiles contains only unique files
6467d63fdb69Smrg      old_dlprefiles="$dlprefiles"
6468d63fdb69Smrg      dlprefiles=
6469d63fdb69Smrg      for lib in $old_dlprefiles; do
6470d63fdb69Smrg	case "$dlprefiles " in
6471d63fdb69Smrg	*" $lib "*) ;;
6472d63fdb69Smrg	*) dlprefiles="$dlprefiles $lib" ;;
6473d63fdb69Smrg	esac
6474d63fdb69Smrg      done
6475d63fdb69Smrg
6476d63fdb69Smrg      if test "$build_libtool_libs" = yes; then
6477d63fdb69Smrg	if test -n "$rpath"; then
6478d63fdb69Smrg	  case $host in
6479d63fdb69Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
6480d63fdb69Smrg	    # these systems don't actually have a c library (as such)!
6481d63fdb69Smrg	    ;;
6482d63fdb69Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
6483d63fdb69Smrg	    # Rhapsody C library is in the System framework
6484d63fdb69Smrg	    deplibs="$deplibs System.ltframework"
6485d63fdb69Smrg	    ;;
6486d63fdb69Smrg	  *-*-netbsd*)
6487d63fdb69Smrg	    # Don't link with libc until the a.out ld.so is fixed.
6488d63fdb69Smrg	    ;;
6489d63fdb69Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
6490d63fdb69Smrg	    # Do not include libc due to us having libc/libc_r.
6491d63fdb69Smrg	    ;;
6492d63fdb69Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
6493d63fdb69Smrg	    # Causes problems with __ctype
6494d63fdb69Smrg	    ;;
6495d63fdb69Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
6496d63fdb69Smrg	    # Compiler inserts libc in the correct place for threads to work
6497d63fdb69Smrg	    ;;
6498d63fdb69Smrg	  *)
6499d63fdb69Smrg	    # Add libc to deplibs on all other systems if necessary.
6500d63fdb69Smrg	    if test "$build_libtool_need_lc" = "yes"; then
6501d63fdb69Smrg	      deplibs="$deplibs -lc"
6502d63fdb69Smrg	    fi
6503d63fdb69Smrg	    ;;
6504d63fdb69Smrg	  esac
6505d63fdb69Smrg	fi
6506d63fdb69Smrg
6507d63fdb69Smrg	# Transform deplibs into only deplibs that can be linked in shared.
6508d63fdb69Smrg	name_save=$name
6509d63fdb69Smrg	libname_save=$libname
6510d63fdb69Smrg	release_save=$release
6511d63fdb69Smrg	versuffix_save=$versuffix
6512d63fdb69Smrg	major_save=$major
6513d63fdb69Smrg	# I'm not sure if I'm treating the release correctly.  I think
6514d63fdb69Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
6515d63fdb69Smrg	# add it in twice.  Is that correct?
6516d63fdb69Smrg	release=""
6517d63fdb69Smrg	versuffix=""
6518d63fdb69Smrg	major=""
6519d63fdb69Smrg	newdeplibs=
6520d63fdb69Smrg	droppeddeps=no
6521d63fdb69Smrg	case $deplibs_check_method in
6522d63fdb69Smrg	pass_all)
6523d63fdb69Smrg	  # Don't check for shared/static.  Everything works.
6524d63fdb69Smrg	  # This might be a little naive.  We might want to check
6525d63fdb69Smrg	  # whether the library exists or not.  But this is on
6526d63fdb69Smrg	  # osf3 & osf4 and I'm not really sure... Just
6527d63fdb69Smrg	  # implementing what was already the behavior.
6528d63fdb69Smrg	  newdeplibs=$deplibs
6529d63fdb69Smrg	  ;;
6530d63fdb69Smrg	test_compile)
6531d63fdb69Smrg	  # This code stresses the "libraries are programs" paradigm to its
6532d63fdb69Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
6533d63fdb69Smrg	  # against the deplibs as a proxy for the library.  Then we can check
6534d63fdb69Smrg	  # whether they linked in statically or dynamically with ldd.
6535d63fdb69Smrg	  $opt_dry_run || $RM conftest.c
6536d63fdb69Smrg	  cat > conftest.c <<EOF
6537d63fdb69Smrg	  int main() { return 0; }
6538d63fdb69SmrgEOF
6539d63fdb69Smrg	  $opt_dry_run || $RM conftest
6540d63fdb69Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
6541d63fdb69Smrg	    ldd_output=`ldd conftest`
6542d63fdb69Smrg	    for i in $deplibs; do
6543d63fdb69Smrg	      case $i in
6544d63fdb69Smrg	      -l*)
6545d63fdb69Smrg		func_stripname -l '' "$i"
6546d63fdb69Smrg		name=$func_stripname_result
6547d63fdb69Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6548d63fdb69Smrg		  case " $predeps $postdeps " in
6549d63fdb69Smrg		  *" $i "*)
6550d63fdb69Smrg		    newdeplibs="$newdeplibs $i"
6551d63fdb69Smrg		    i=""
6552d63fdb69Smrg		    ;;
6553d63fdb69Smrg		  esac
6554d63fdb69Smrg		fi
6555d63fdb69Smrg		if test -n "$i" ; then
6556d63fdb69Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
6557d63fdb69Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
6558d63fdb69Smrg		  set dummy $deplib_matches; shift
6559d63fdb69Smrg		  deplib_match=$1
6560d63fdb69Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
6561d63fdb69Smrg		    newdeplibs="$newdeplibs $i"
6562d63fdb69Smrg		  else
6563d63fdb69Smrg		    droppeddeps=yes
6564d63fdb69Smrg		    $ECHO
6565d63fdb69Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
6566d63fdb69Smrg		    $ECHO "*** I have the capability to make that library automatically link in when"
6567d63fdb69Smrg		    $ECHO "*** you link to this library.  But I can only do this if you have a"
6568d63fdb69Smrg		    $ECHO "*** shared version of the library, which I believe you do not have"
6569d63fdb69Smrg		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
6570d63fdb69Smrg		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
6571d63fdb69Smrg		  fi
6572d63fdb69Smrg		fi
6573d63fdb69Smrg		;;
6574d63fdb69Smrg	      *)
6575d63fdb69Smrg		newdeplibs="$newdeplibs $i"
6576d63fdb69Smrg		;;
6577d63fdb69Smrg	      esac
6578d63fdb69Smrg	    done
6579d63fdb69Smrg	  else
6580d63fdb69Smrg	    # Error occurred in the first compile.  Let's try to salvage
6581d63fdb69Smrg	    # the situation: Compile a separate program for each library.
6582d63fdb69Smrg	    for i in $deplibs; do
6583d63fdb69Smrg	      case $i in
6584d63fdb69Smrg	      -l*)
6585d63fdb69Smrg		func_stripname -l '' "$i"
6586d63fdb69Smrg		name=$func_stripname_result
6587d63fdb69Smrg		$opt_dry_run || $RM conftest
6588d63fdb69Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
6589d63fdb69Smrg		  ldd_output=`ldd conftest`
6590d63fdb69Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6591d63fdb69Smrg		    case " $predeps $postdeps " in
6592d63fdb69Smrg		    *" $i "*)
6593d63fdb69Smrg		      newdeplibs="$newdeplibs $i"
6594d63fdb69Smrg		      i=""
6595d63fdb69Smrg		      ;;
6596d63fdb69Smrg		    esac
6597d63fdb69Smrg		  fi
6598d63fdb69Smrg		  if test -n "$i" ; then
6599d63fdb69Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
6600d63fdb69Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
6601d63fdb69Smrg		    set dummy $deplib_matches; shift
6602d63fdb69Smrg		    deplib_match=$1
6603d63fdb69Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
6604d63fdb69Smrg		      newdeplibs="$newdeplibs $i"
6605d63fdb69Smrg		    else
6606d63fdb69Smrg		      droppeddeps=yes
6607d63fdb69Smrg		      $ECHO
6608d63fdb69Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
6609d63fdb69Smrg		      $ECHO "*** I have the capability to make that library automatically link in when"
6610d63fdb69Smrg		      $ECHO "*** you link to this library.  But I can only do this if you have a"
6611d63fdb69Smrg		      $ECHO "*** shared version of the library, which you do not appear to have"
6612d63fdb69Smrg		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
6613d63fdb69Smrg		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
6614d63fdb69Smrg		    fi
6615d63fdb69Smrg		  fi
6616d63fdb69Smrg		else
6617d63fdb69Smrg		  droppeddeps=yes
6618d63fdb69Smrg		  $ECHO
6619d63fdb69Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
6620d63fdb69Smrg		  $ECHO "*** make it link in!  You will probably need to install it or some"
6621d63fdb69Smrg		  $ECHO "*** library that it depends on before this library will be fully"
6622d63fdb69Smrg		  $ECHO "*** functional.  Installing it before continuing would be even better."
6623d63fdb69Smrg		fi
6624d63fdb69Smrg		;;
6625d63fdb69Smrg	      *)
6626d63fdb69Smrg		newdeplibs="$newdeplibs $i"
6627d63fdb69Smrg		;;
6628d63fdb69Smrg	      esac
6629d63fdb69Smrg	    done
6630d63fdb69Smrg	  fi
6631d63fdb69Smrg	  ;;
6632d63fdb69Smrg	file_magic*)
6633d63fdb69Smrg	  set dummy $deplibs_check_method; shift
6634d63fdb69Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6635d63fdb69Smrg	  for a_deplib in $deplibs; do
6636d63fdb69Smrg	    case $a_deplib in
6637d63fdb69Smrg	    -l*)
6638d63fdb69Smrg	      func_stripname -l '' "$a_deplib"
6639d63fdb69Smrg	      name=$func_stripname_result
6640d63fdb69Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6641d63fdb69Smrg		case " $predeps $postdeps " in
6642d63fdb69Smrg		*" $a_deplib "*)
6643d63fdb69Smrg		  newdeplibs="$newdeplibs $a_deplib"
6644d63fdb69Smrg		  a_deplib=""
6645d63fdb69Smrg		  ;;
6646d63fdb69Smrg		esac
6647d63fdb69Smrg	      fi
6648d63fdb69Smrg	      if test -n "$a_deplib" ; then
6649d63fdb69Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
6650d63fdb69Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
6651d63fdb69Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
6652d63fdb69Smrg		  for potent_lib in $potential_libs; do
6653d63fdb69Smrg		      # Follow soft links.
6654d63fdb69Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
6655d63fdb69Smrg			 $GREP " -> " >/dev/null; then
6656d63fdb69Smrg			continue
6657d63fdb69Smrg		      fi
6658d63fdb69Smrg		      # The statement above tries to avoid entering an
6659d63fdb69Smrg		      # endless loop below, in case of cyclic links.
6660d63fdb69Smrg		      # We might still enter an endless loop, since a link
6661d63fdb69Smrg		      # loop can be closed while we follow links,
6662d63fdb69Smrg		      # but so what?
6663d63fdb69Smrg		      potlib="$potent_lib"
6664d63fdb69Smrg		      while test -h "$potlib" 2>/dev/null; do
6665d63fdb69Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
6666d63fdb69Smrg			case $potliblink in
6667d63fdb69Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
6668d63fdb69Smrg			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
6669d63fdb69Smrg			esac
6670d63fdb69Smrg		      done
6671d63fdb69Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
6672d63fdb69Smrg			 $SED -e 10q |
6673d63fdb69Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
6674d63fdb69Smrg			newdeplibs="$newdeplibs $a_deplib"
6675d63fdb69Smrg			a_deplib=""
6676d63fdb69Smrg			break 2
6677d63fdb69Smrg		      fi
6678d63fdb69Smrg		  done
6679d63fdb69Smrg		done
6680d63fdb69Smrg	      fi
6681d63fdb69Smrg	      if test -n "$a_deplib" ; then
6682d63fdb69Smrg		droppeddeps=yes
6683d63fdb69Smrg		$ECHO
6684d63fdb69Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
6685d63fdb69Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
6686d63fdb69Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
6687d63fdb69Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
6688d63fdb69Smrg		$ECHO "*** because I did check the linker path looking for a file starting"
6689d63fdb69Smrg		if test -z "$potlib" ; then
6690d63fdb69Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
6691d63fdb69Smrg		else
6692d63fdb69Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
6693d63fdb69Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
6694d63fdb69Smrg		fi
6695d63fdb69Smrg	      fi
6696d63fdb69Smrg	      ;;
6697d63fdb69Smrg	    *)
6698d63fdb69Smrg	      # Add a -L argument.
6699d63fdb69Smrg	      newdeplibs="$newdeplibs $a_deplib"
6700d63fdb69Smrg	      ;;
6701d63fdb69Smrg	    esac
6702d63fdb69Smrg	  done # Gone through all deplibs.
6703d63fdb69Smrg	  ;;
6704d63fdb69Smrg	match_pattern*)
6705d63fdb69Smrg	  set dummy $deplibs_check_method; shift
6706d63fdb69Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6707d63fdb69Smrg	  for a_deplib in $deplibs; do
6708d63fdb69Smrg	    case $a_deplib in
6709d63fdb69Smrg	    -l*)
6710d63fdb69Smrg	      func_stripname -l '' "$a_deplib"
6711d63fdb69Smrg	      name=$func_stripname_result
6712d63fdb69Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6713d63fdb69Smrg		case " $predeps $postdeps " in
6714d63fdb69Smrg		*" $a_deplib "*)
6715d63fdb69Smrg		  newdeplibs="$newdeplibs $a_deplib"
6716d63fdb69Smrg		  a_deplib=""
6717d63fdb69Smrg		  ;;
6718d63fdb69Smrg		esac
6719d63fdb69Smrg	      fi
6720d63fdb69Smrg	      if test -n "$a_deplib" ; then
6721d63fdb69Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
6722d63fdb69Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
6723d63fdb69Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
6724d63fdb69Smrg		  for potent_lib in $potential_libs; do
6725d63fdb69Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
6726d63fdb69Smrg		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
6727d63fdb69Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
6728d63fdb69Smrg		      newdeplibs="$newdeplibs $a_deplib"
6729d63fdb69Smrg		      a_deplib=""
6730d63fdb69Smrg		      break 2
6731d63fdb69Smrg		    fi
6732d63fdb69Smrg		  done
6733d63fdb69Smrg		done
6734d63fdb69Smrg	      fi
6735d63fdb69Smrg	      if test -n "$a_deplib" ; then
6736d63fdb69Smrg		droppeddeps=yes
6737d63fdb69Smrg		$ECHO
6738d63fdb69Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
6739d63fdb69Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
6740d63fdb69Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
6741d63fdb69Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
6742d63fdb69Smrg		$ECHO "*** because I did check the linker path looking for a file starting"
6743d63fdb69Smrg		if test -z "$potlib" ; then
6744d63fdb69Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
6745d63fdb69Smrg		else
6746d63fdb69Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
6747d63fdb69Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
6748d63fdb69Smrg		fi
6749d63fdb69Smrg	      fi
6750d63fdb69Smrg	      ;;
6751d63fdb69Smrg	    *)
6752d63fdb69Smrg	      # Add a -L argument.
6753d63fdb69Smrg	      newdeplibs="$newdeplibs $a_deplib"
6754d63fdb69Smrg	      ;;
6755d63fdb69Smrg	    esac
6756d63fdb69Smrg	  done # Gone through all deplibs.
6757d63fdb69Smrg	  ;;
6758d63fdb69Smrg	none | unknown | *)
6759d63fdb69Smrg	  newdeplibs=""
6760d63fdb69Smrg	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
6761d63fdb69Smrg	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
6762d63fdb69Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6763d63fdb69Smrg	    for i in $predeps $postdeps ; do
6764d63fdb69Smrg	      # can't use Xsed below, because $i might contain '/'
6765d63fdb69Smrg	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
6766d63fdb69Smrg	    done
6767d63fdb69Smrg	  fi
6768d63fdb69Smrg	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
6769d63fdb69Smrg	     $GREP . >/dev/null; then
6770d63fdb69Smrg	    $ECHO
6771d63fdb69Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
6772d63fdb69Smrg	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
6773d63fdb69Smrg	    else
6774d63fdb69Smrg	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
6775d63fdb69Smrg	    fi
6776d63fdb69Smrg	    $ECHO "*** All declared inter-library dependencies are being dropped."
6777d63fdb69Smrg	    droppeddeps=yes
6778d63fdb69Smrg	  fi
6779d63fdb69Smrg	  ;;
6780d63fdb69Smrg	esac
6781d63fdb69Smrg	versuffix=$versuffix_save
6782d63fdb69Smrg	major=$major_save
6783d63fdb69Smrg	release=$release_save
6784d63fdb69Smrg	libname=$libname_save
6785d63fdb69Smrg	name=$name_save
6786d63fdb69Smrg
6787d63fdb69Smrg	case $host in
6788d63fdb69Smrg	*-*-rhapsody* | *-*-darwin1.[012])
6789d63fdb69Smrg	  # On Rhapsody replace the C library with the System framework
6790d63fdb69Smrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
6791d63fdb69Smrg	  ;;
6792d63fdb69Smrg	esac
6793d63fdb69Smrg
6794d63fdb69Smrg	if test "$droppeddeps" = yes; then
6795d63fdb69Smrg	  if test "$module" = yes; then
6796d63fdb69Smrg	    $ECHO
6797d63fdb69Smrg	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
6798d63fdb69Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
6799d63fdb69Smrg	    $ECHO "*** a static module, that should work as long as the dlopening"
6800d63fdb69Smrg	    $ECHO "*** application is linked with the -dlopen flag."
6801d63fdb69Smrg	    if test -z "$global_symbol_pipe"; then
6802d63fdb69Smrg	      $ECHO
6803d63fdb69Smrg	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
6804d63fdb69Smrg	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
6805d63fdb69Smrg	      $ECHO "*** not find such a program.  So, this module is probably useless."
6806d63fdb69Smrg	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
6807d63fdb69Smrg	    fi
6808d63fdb69Smrg	    if test "$build_old_libs" = no; then
6809d63fdb69Smrg	      oldlibs="$output_objdir/$libname.$libext"
6810d63fdb69Smrg	      build_libtool_libs=module
6811d63fdb69Smrg	      build_old_libs=yes
6812d63fdb69Smrg	    else
6813d63fdb69Smrg	      build_libtool_libs=no
6814d63fdb69Smrg	    fi
6815d63fdb69Smrg	  else
6816d63fdb69Smrg	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
6817d63fdb69Smrg	    $ECHO "*** automatically added whenever a program is linked with this library"
6818d63fdb69Smrg	    $ECHO "*** or is declared to -dlopen it."
6819d63fdb69Smrg
6820d63fdb69Smrg	    if test "$allow_undefined" = no; then
6821d63fdb69Smrg	      $ECHO
6822d63fdb69Smrg	      $ECHO "*** Since this library must not contain undefined symbols,"
6823d63fdb69Smrg	      $ECHO "*** because either the platform does not support them or"
6824d63fdb69Smrg	      $ECHO "*** it was explicitly requested with -no-undefined,"
6825d63fdb69Smrg	      $ECHO "*** libtool will only create a static version of it."
6826d63fdb69Smrg	      if test "$build_old_libs" = no; then
6827d63fdb69Smrg		oldlibs="$output_objdir/$libname.$libext"
6828d63fdb69Smrg		build_libtool_libs=module
6829d63fdb69Smrg		build_old_libs=yes
6830d63fdb69Smrg	      else
6831d63fdb69Smrg		build_libtool_libs=no
6832d63fdb69Smrg	      fi
6833d63fdb69Smrg	    fi
6834d63fdb69Smrg	  fi
6835d63fdb69Smrg	fi
6836d63fdb69Smrg	# Done checking deplibs!
6837d63fdb69Smrg	deplibs=$newdeplibs
6838d63fdb69Smrg      fi
6839d63fdb69Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
6840d63fdb69Smrg      case $host in
6841d63fdb69Smrg	*-*-darwin*)
6842d63fdb69Smrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
6843d63fdb69Smrg	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
6844d63fdb69Smrg	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
6845d63fdb69Smrg	  ;;
6846d63fdb69Smrg      esac
6847d63fdb69Smrg
6848d63fdb69Smrg      # move library search paths that coincide with paths to not yet
6849d63fdb69Smrg      # installed libraries to the beginning of the library search list
6850d63fdb69Smrg      new_libs=
6851d63fdb69Smrg      for path in $notinst_path; do
6852d63fdb69Smrg	case " $new_libs " in
6853d63fdb69Smrg	*" -L$path/$objdir "*) ;;
6854d63fdb69Smrg	*)
6855d63fdb69Smrg	  case " $deplibs " in
6856d63fdb69Smrg	  *" -L$path/$objdir "*)
6857d63fdb69Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
6858d63fdb69Smrg	  esac
6859d63fdb69Smrg	  ;;
6860d63fdb69Smrg	esac
6861d63fdb69Smrg      done
6862d63fdb69Smrg      for deplib in $deplibs; do
6863d63fdb69Smrg	case $deplib in
6864d63fdb69Smrg	-L*)
6865d63fdb69Smrg	  case " $new_libs " in
6866d63fdb69Smrg	  *" $deplib "*) ;;
6867d63fdb69Smrg	  *) new_libs="$new_libs $deplib" ;;
6868d63fdb69Smrg	  esac
6869d63fdb69Smrg	  ;;
6870d63fdb69Smrg	*) new_libs="$new_libs $deplib" ;;
6871d63fdb69Smrg	esac
6872d63fdb69Smrg      done
6873d63fdb69Smrg      deplibs="$new_libs"
6874d63fdb69Smrg
6875d63fdb69Smrg      # All the library-specific variables (install_libdir is set above).
6876d63fdb69Smrg      library_names=
6877d63fdb69Smrg      old_library=
6878d63fdb69Smrg      dlname=
6879d63fdb69Smrg
6880d63fdb69Smrg      # Test again, we may have decided not to build it any more
6881d63fdb69Smrg      if test "$build_libtool_libs" = yes; then
6882d63fdb69Smrg	if test "$hardcode_into_libs" = yes; then
6883d63fdb69Smrg	  # Hardcode the library paths
6884d63fdb69Smrg	  hardcode_libdirs=
6885d63fdb69Smrg	  dep_rpath=
6886d63fdb69Smrg	  rpath="$finalize_rpath"
6887d63fdb69Smrg	  test "$mode" != relink && rpath="$compile_rpath$rpath"
6888d63fdb69Smrg	  for libdir in $rpath; do
6889d63fdb69Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
6890d63fdb69Smrg	      if test -n "$hardcode_libdir_separator"; then
6891d63fdb69Smrg		if test -z "$hardcode_libdirs"; then
6892d63fdb69Smrg		  hardcode_libdirs="$libdir"
6893d63fdb69Smrg		else
6894d63fdb69Smrg		  # Just accumulate the unique libdirs.
6895d63fdb69Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
6896d63fdb69Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
6897d63fdb69Smrg		    ;;
6898d63fdb69Smrg		  *)
6899d63fdb69Smrg		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
6900d63fdb69Smrg		    ;;
6901d63fdb69Smrg		  esac
6902d63fdb69Smrg		fi
6903d63fdb69Smrg	      else
6904d63fdb69Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
6905d63fdb69Smrg		dep_rpath="$dep_rpath $flag"
6906d63fdb69Smrg	      fi
6907d63fdb69Smrg	    elif test -n "$runpath_var"; then
6908d63fdb69Smrg	      case "$perm_rpath " in
6909d63fdb69Smrg	      *" $libdir "*) ;;
6910d63fdb69Smrg	      *) perm_rpath="$perm_rpath $libdir" ;;
6911d63fdb69Smrg	      esac
6912d63fdb69Smrg	    fi
6913d63fdb69Smrg	  done
6914d63fdb69Smrg	  # Substitute the hardcoded libdirs into the rpath.
6915d63fdb69Smrg	  if test -n "$hardcode_libdir_separator" &&
6916d63fdb69Smrg	     test -n "$hardcode_libdirs"; then
6917d63fdb69Smrg	    libdir="$hardcode_libdirs"
6918d63fdb69Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
6919d63fdb69Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
6920d63fdb69Smrg	    else
6921d63fdb69Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
6922d63fdb69Smrg	    fi
6923d63fdb69Smrg	  fi
6924d63fdb69Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
6925d63fdb69Smrg	    # We should set the runpath_var.
6926d63fdb69Smrg	    rpath=
6927d63fdb69Smrg	    for dir in $perm_rpath; do
6928d63fdb69Smrg	      rpath="$rpath$dir:"
6929d63fdb69Smrg	    done
6930d63fdb69Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
6931d63fdb69Smrg	  fi
6932d63fdb69Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
6933d63fdb69Smrg	fi
69343da084b3Smrg
6935d63fdb69Smrg	shlibpath="$finalize_shlibpath"
6936d63fdb69Smrg	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
6937d63fdb69Smrg	if test -n "$shlibpath"; then
6938d63fdb69Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
6939d63fdb69Smrg	fi
69403da084b3Smrg
6941d63fdb69Smrg	# Get the real and link names of the library.
6942d63fdb69Smrg	eval shared_ext=\"$shrext_cmds\"
6943d63fdb69Smrg	eval library_names=\"$library_names_spec\"
6944d63fdb69Smrg	set dummy $library_names
6945d63fdb69Smrg	shift
6946d63fdb69Smrg	realname="$1"
6947d63fdb69Smrg	shift
69483da084b3Smrg
6949d63fdb69Smrg	if test -n "$soname_spec"; then
6950d63fdb69Smrg	  eval soname=\"$soname_spec\"
6951d63fdb69Smrg	else
6952d63fdb69Smrg	  soname="$realname"
6953d63fdb69Smrg	fi
6954d63fdb69Smrg	if test -z "$dlname"; then
6955d63fdb69Smrg	  dlname=$soname
6956d63fdb69Smrg	fi
69573da084b3Smrg
6958d63fdb69Smrg	lib="$output_objdir/$realname"
6959d63fdb69Smrg	linknames=
6960d63fdb69Smrg	for link
6961d63fdb69Smrg	do
6962d63fdb69Smrg	  linknames="$linknames $link"
6963d63fdb69Smrg	done
69643da084b3Smrg
6965d63fdb69Smrg	# Use standard objects if they are pic
6966d63fdb69Smrg	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
6967d63fdb69Smrg	test "X$libobjs" = "X " && libobjs=
69683da084b3Smrg
6969d63fdb69Smrg	delfiles=
6970d63fdb69Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
6971d63fdb69Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
6972d63fdb69Smrg	  export_symbols="$output_objdir/$libname.uexp"
6973d63fdb69Smrg	  delfiles="$delfiles $export_symbols"
6974d63fdb69Smrg	fi
69753da084b3Smrg
6976d63fdb69Smrg	orig_export_symbols=
6977d63fdb69Smrg	case $host_os in
6978d63fdb69Smrg	cygwin* | mingw* | cegcc*)
6979d63fdb69Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
6980d63fdb69Smrg	    # exporting using user supplied symfile
6981d63fdb69Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
6982d63fdb69Smrg	      # and it's NOT already a .def file. Must figure out
6983d63fdb69Smrg	      # which of the given symbols are data symbols and tag
6984d63fdb69Smrg	      # them as such. So, trigger use of export_symbols_cmds.
6985d63fdb69Smrg	      # export_symbols gets reassigned inside the "prepare
6986d63fdb69Smrg	      # the list of exported symbols" if statement, so the
6987d63fdb69Smrg	      # include_expsyms logic still works.
6988d63fdb69Smrg	      orig_export_symbols="$export_symbols"
6989d63fdb69Smrg	      export_symbols=
6990d63fdb69Smrg	      always_export_symbols=yes
6991d63fdb69Smrg	    fi
6992d63fdb69Smrg	  fi
6993d63fdb69Smrg	  ;;
6994d63fdb69Smrg	esac
69953da084b3Smrg
6996d63fdb69Smrg	# Prepare the list of exported symbols
6997d63fdb69Smrg	if test -z "$export_symbols"; then
6998d63fdb69Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
6999d63fdb69Smrg	    func_verbose "generating symbol list for \`$libname.la'"
7000d63fdb69Smrg	    export_symbols="$output_objdir/$libname.exp"
7001d63fdb69Smrg	    $opt_dry_run || $RM $export_symbols
7002d63fdb69Smrg	    cmds=$export_symbols_cmds
7003d63fdb69Smrg	    save_ifs="$IFS"; IFS='~'
7004d63fdb69Smrg	    for cmd in $cmds; do
7005d63fdb69Smrg	      IFS="$save_ifs"
7006d63fdb69Smrg	      eval cmd=\"$cmd\"
7007d63fdb69Smrg	      func_len " $cmd"
7008d63fdb69Smrg	      len=$func_len_result
7009d63fdb69Smrg	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7010d63fdb69Smrg		func_show_eval "$cmd" 'exit $?'
7011d63fdb69Smrg		skipped_export=false
7012d63fdb69Smrg	      else
7013d63fdb69Smrg		# The command line is too long to execute in one step.
7014d63fdb69Smrg		func_verbose "using reloadable object file for export list..."
7015d63fdb69Smrg		skipped_export=:
7016d63fdb69Smrg		# Break out early, otherwise skipped_export may be
7017d63fdb69Smrg		# set to false by a later but shorter cmd.
7018d63fdb69Smrg		break
7019d63fdb69Smrg	      fi
7020d63fdb69Smrg	    done
7021d63fdb69Smrg	    IFS="$save_ifs"
7022d63fdb69Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
7023d63fdb69Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
7024d63fdb69Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7025d63fdb69Smrg	    fi
7026d63fdb69Smrg	  fi
7027d63fdb69Smrg	fi
70283da084b3Smrg
7029d63fdb69Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
7030d63fdb69Smrg	  tmp_export_symbols="$export_symbols"
7031d63fdb69Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
7032d63fdb69Smrg	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
7033d63fdb69Smrg	fi
70343da084b3Smrg
7035d63fdb69Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
7036d63fdb69Smrg	  # The given exports_symbols file has to be filtered, so filter it.
7037d63fdb69Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
7038d63fdb69Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
7039d63fdb69Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
7040d63fdb69Smrg	  # though. Also, the filter scales superlinearly with the number of
7041d63fdb69Smrg	  # global variables. join(1) would be nice here, but unfortunately
7042d63fdb69Smrg	  # isn't a blessed tool.
7043d63fdb69Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
7044d63fdb69Smrg	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
7045d63fdb69Smrg	  export_symbols=$output_objdir/$libname.def
7046d63fdb69Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
70473da084b3Smrg	fi
70483da084b3Smrg
7049d63fdb69Smrg	tmp_deplibs=
7050d63fdb69Smrg	for test_deplib in $deplibs; do
7051d63fdb69Smrg	  case " $convenience " in
7052d63fdb69Smrg	  *" $test_deplib "*) ;;
7053d63fdb69Smrg	  *)
7054d63fdb69Smrg	    tmp_deplibs="$tmp_deplibs $test_deplib"
7055d63fdb69Smrg	    ;;
7056d63fdb69Smrg	  esac
7057d63fdb69Smrg	done
7058d63fdb69Smrg	deplibs="$tmp_deplibs"
70593da084b3Smrg
7060d63fdb69Smrg	if test -n "$convenience"; then
7061d63fdb69Smrg	  if test -n "$whole_archive_flag_spec" &&
7062d63fdb69Smrg	    test "$compiler_needs_object" = yes &&
7063d63fdb69Smrg	    test -z "$libobjs"; then
7064d63fdb69Smrg	    # extract the archives, so we have objects to list.
7065d63fdb69Smrg	    # TODO: could optimize this to just extract one archive.
7066d63fdb69Smrg	    whole_archive_flag_spec=
7067d63fdb69Smrg	  fi
7068d63fdb69Smrg	  if test -n "$whole_archive_flag_spec"; then
7069d63fdb69Smrg	    save_libobjs=$libobjs
7070d63fdb69Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
7071d63fdb69Smrg	    test "X$libobjs" = "X " && libobjs=
7072d63fdb69Smrg	  else
7073d63fdb69Smrg	    gentop="$output_objdir/${outputname}x"
7074d63fdb69Smrg	    generated="$generated $gentop"
70753da084b3Smrg
7076d63fdb69Smrg	    func_extract_archives $gentop $convenience
7077d63fdb69Smrg	    libobjs="$libobjs $func_extract_archives_result"
7078d63fdb69Smrg	    test "X$libobjs" = "X " && libobjs=
7079d63fdb69Smrg	  fi
7080d63fdb69Smrg	fi
70813da084b3Smrg
7082d63fdb69Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
7083d63fdb69Smrg	  eval flag=\"$thread_safe_flag_spec\"
7084d63fdb69Smrg	  linker_flags="$linker_flags $flag"
7085d63fdb69Smrg	fi
70863da084b3Smrg
7087d63fdb69Smrg	# Make a backup of the uninstalled library when relinking
7088d63fdb69Smrg	if test "$mode" = relink; then
7089d63fdb69Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
70903da084b3Smrg	fi
70913da084b3Smrg
7092d63fdb69Smrg	# Do each of the archive commands.
7093d63fdb69Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
7094d63fdb69Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
7095d63fdb69Smrg	    eval test_cmds=\"$module_expsym_cmds\"
7096d63fdb69Smrg	    cmds=$module_expsym_cmds
7097d63fdb69Smrg	  else
7098d63fdb69Smrg	    eval test_cmds=\"$module_cmds\"
7099d63fdb69Smrg	    cmds=$module_cmds
7100d63fdb69Smrg	  fi
7101d63fdb69Smrg	else
7102d63fdb69Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
7103d63fdb69Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
7104d63fdb69Smrg	    cmds=$archive_expsym_cmds
7105d63fdb69Smrg	  else
7106d63fdb69Smrg	    eval test_cmds=\"$archive_cmds\"
7107d63fdb69Smrg	    cmds=$archive_cmds
7108d63fdb69Smrg	  fi
71093da084b3Smrg	fi
71103da084b3Smrg
7111d63fdb69Smrg	if test "X$skipped_export" != "X:" &&
7112d63fdb69Smrg	   func_len " $test_cmds" &&
7113d63fdb69Smrg	   len=$func_len_result &&
7114d63fdb69Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7115d63fdb69Smrg	  :
7116d63fdb69Smrg	else
7117d63fdb69Smrg	  # The command line is too long to link in one step, link piecewise
7118d63fdb69Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
7119d63fdb69Smrg	  # script.
71203da084b3Smrg
7121d63fdb69Smrg	  # Save the value of $output and $libobjs because we want to
7122d63fdb69Smrg	  # use them later.  If we have whole_archive_flag_spec, we
7123d63fdb69Smrg	  # want to use save_libobjs as it was before
7124d63fdb69Smrg	  # whole_archive_flag_spec was expanded, because we can't
7125d63fdb69Smrg	  # assume the linker understands whole_archive_flag_spec.
7126d63fdb69Smrg	  # This may have to be revisited, in case too many
7127d63fdb69Smrg	  # convenience libraries get linked in and end up exceeding
7128d63fdb69Smrg	  # the spec.
7129d63fdb69Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
7130d63fdb69Smrg	    save_libobjs=$libobjs
7131d63fdb69Smrg	  fi
7132d63fdb69Smrg	  save_output=$output
7133d63fdb69Smrg	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
71343da084b3Smrg
7135d63fdb69Smrg	  # Clear the reloadable object creation command queue and
7136d63fdb69Smrg	  # initialize k to one.
7137d63fdb69Smrg	  test_cmds=
7138d63fdb69Smrg	  concat_cmds=
7139d63fdb69Smrg	  objlist=
7140d63fdb69Smrg	  last_robj=
7141d63fdb69Smrg	  k=1
71423da084b3Smrg
7143d63fdb69Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
7144d63fdb69Smrg	    output=${output_objdir}/${output_la}.lnkscript
7145d63fdb69Smrg	    func_verbose "creating GNU ld script: $output"
7146d63fdb69Smrg	    $ECHO 'INPUT (' > $output
7147d63fdb69Smrg	    for obj in $save_libobjs
7148d63fdb69Smrg	    do
7149d63fdb69Smrg	      $ECHO "$obj" >> $output
7150d63fdb69Smrg	    done
7151d63fdb69Smrg	    $ECHO ')' >> $output
7152d63fdb69Smrg	    delfiles="$delfiles $output"
7153d63fdb69Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
7154d63fdb69Smrg	    output=${output_objdir}/${output_la}.lnk
7155d63fdb69Smrg	    func_verbose "creating linker input file list: $output"
7156d63fdb69Smrg	    : > $output
7157d63fdb69Smrg	    set x $save_libobjs
7158d63fdb69Smrg	    shift
7159d63fdb69Smrg	    firstobj=
7160d63fdb69Smrg	    if test "$compiler_needs_object" = yes; then
7161d63fdb69Smrg	      firstobj="$1 "
7162d63fdb69Smrg	      shift
7163d63fdb69Smrg	    fi
7164d63fdb69Smrg	    for obj
7165d63fdb69Smrg	    do
7166d63fdb69Smrg	      $ECHO "$obj" >> $output
7167d63fdb69Smrg	    done
7168d63fdb69Smrg	    delfiles="$delfiles $output"
7169d63fdb69Smrg	    output=$firstobj\"$file_list_spec$output\"
7170d63fdb69Smrg	  else
7171d63fdb69Smrg	    if test -n "$save_libobjs"; then
7172d63fdb69Smrg	      func_verbose "creating reloadable object files..."
7173d63fdb69Smrg	      output=$output_objdir/$output_la-${k}.$objext
7174d63fdb69Smrg	      eval test_cmds=\"$reload_cmds\"
7175d63fdb69Smrg	      func_len " $test_cmds"
7176d63fdb69Smrg	      len0=$func_len_result
7177d63fdb69Smrg	      len=$len0
7178d63fdb69Smrg
7179d63fdb69Smrg	      # Loop over the list of objects to be linked.
7180d63fdb69Smrg	      for obj in $save_libobjs
7181d63fdb69Smrg	      do
7182d63fdb69Smrg		func_len " $obj"
7183d63fdb69Smrg		func_arith $len + $func_len_result
7184d63fdb69Smrg		len=$func_arith_result
7185d63fdb69Smrg		if test "X$objlist" = X ||
7186d63fdb69Smrg		   test "$len" -lt "$max_cmd_len"; then
7187d63fdb69Smrg		  func_append objlist " $obj"
7188d63fdb69Smrg		else
7189d63fdb69Smrg		  # The command $test_cmds is almost too long, add a
7190d63fdb69Smrg		  # command to the queue.
7191d63fdb69Smrg		  if test "$k" -eq 1 ; then
7192d63fdb69Smrg		    # The first file doesn't have a previous command to add.
7193d63fdb69Smrg		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
7194d63fdb69Smrg		  else
7195d63fdb69Smrg		    # All subsequent reloadable object files will link in
7196d63fdb69Smrg		    # the last one created.
7197d63fdb69Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
7198d63fdb69Smrg		  fi
7199d63fdb69Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
7200d63fdb69Smrg		  func_arith $k + 1
7201d63fdb69Smrg		  k=$func_arith_result
7202d63fdb69Smrg		  output=$output_objdir/$output_la-${k}.$objext
7203d63fdb69Smrg		  objlist=$obj
7204d63fdb69Smrg		  func_len " $last_robj"
7205d63fdb69Smrg		  func_arith $len0 + $func_len_result
7206d63fdb69Smrg		  len=$func_arith_result
7207d63fdb69Smrg		fi
7208d63fdb69Smrg	      done
7209d63fdb69Smrg	      # Handle the remaining objects by creating one last
7210d63fdb69Smrg	      # reloadable object file.  All subsequent reloadable object
7211d63fdb69Smrg	      # files will link in the last one created.
7212d63fdb69Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7213d63fdb69Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
7214d63fdb69Smrg	      if test -n "$last_robj"; then
7215d63fdb69Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
7216d63fdb69Smrg	      fi
7217d63fdb69Smrg	      delfiles="$delfiles $output"
72183da084b3Smrg
7219d63fdb69Smrg	    else
7220d63fdb69Smrg	      output=
7221d63fdb69Smrg	    fi
72223da084b3Smrg
7223d63fdb69Smrg	    if ${skipped_export-false}; then
7224d63fdb69Smrg	      func_verbose "generating symbol list for \`$libname.la'"
7225d63fdb69Smrg	      export_symbols="$output_objdir/$libname.exp"
7226d63fdb69Smrg	      $opt_dry_run || $RM $export_symbols
7227d63fdb69Smrg	      libobjs=$output
7228d63fdb69Smrg	      # Append the command to create the export file.
7229d63fdb69Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7230d63fdb69Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
7231d63fdb69Smrg	      if test -n "$last_robj"; then
7232d63fdb69Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
7233d63fdb69Smrg	      fi
7234d63fdb69Smrg	    fi
72353da084b3Smrg
7236d63fdb69Smrg	    test -n "$save_libobjs" &&
7237d63fdb69Smrg	      func_verbose "creating a temporary reloadable object file: $output"
72383da084b3Smrg
7239d63fdb69Smrg	    # Loop through the commands generated above and execute them.
7240d63fdb69Smrg	    save_ifs="$IFS"; IFS='~'
7241d63fdb69Smrg	    for cmd in $concat_cmds; do
7242d63fdb69Smrg	      IFS="$save_ifs"
7243d63fdb69Smrg	      $opt_silent || {
7244d63fdb69Smrg		  func_quote_for_expand "$cmd"
7245d63fdb69Smrg		  eval "func_echo $func_quote_for_expand_result"
7246d63fdb69Smrg	      }
7247d63fdb69Smrg	      $opt_dry_run || eval "$cmd" || {
7248d63fdb69Smrg		lt_exit=$?
7249d63fdb69Smrg
7250d63fdb69Smrg		# Restore the uninstalled library and exit
7251d63fdb69Smrg		if test "$mode" = relink; then
7252d63fdb69Smrg		  ( cd "$output_objdir" && \
7253d63fdb69Smrg		    $RM "${realname}T" && \
7254d63fdb69Smrg		    $MV "${realname}U" "$realname" )
7255d63fdb69Smrg		fi
72563da084b3Smrg
7257d63fdb69Smrg		exit $lt_exit
7258d63fdb69Smrg	      }
7259d63fdb69Smrg	    done
7260d63fdb69Smrg	    IFS="$save_ifs"
7261d63fdb69Smrg
7262d63fdb69Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
7263d63fdb69Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
7264d63fdb69Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
72653da084b3Smrg	    fi
72663da084b3Smrg	  fi
72673da084b3Smrg
7268d63fdb69Smrg          if ${skipped_export-false}; then
7269d63fdb69Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
7270d63fdb69Smrg	      tmp_export_symbols="$export_symbols"
7271d63fdb69Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
7272d63fdb69Smrg	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
7273d63fdb69Smrg	    fi
72743da084b3Smrg
7275d63fdb69Smrg	    if test -n "$orig_export_symbols"; then
7276d63fdb69Smrg	      # The given exports_symbols file has to be filtered, so filter it.
7277d63fdb69Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
7278d63fdb69Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
7279d63fdb69Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
7280d63fdb69Smrg	      # though. Also, the filter scales superlinearly with the number of
7281d63fdb69Smrg	      # global variables. join(1) would be nice here, but unfortunately
7282d63fdb69Smrg	      # isn't a blessed tool.
7283d63fdb69Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
7284d63fdb69Smrg	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
7285d63fdb69Smrg	      export_symbols=$output_objdir/$libname.def
7286d63fdb69Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
7287d63fdb69Smrg	    fi
7288d63fdb69Smrg	  fi
72893da084b3Smrg
7290d63fdb69Smrg	  libobjs=$output
7291d63fdb69Smrg	  # Restore the value of output.
7292d63fdb69Smrg	  output=$save_output
72933da084b3Smrg
7294d63fdb69Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
7295d63fdb69Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
7296d63fdb69Smrg	    test "X$libobjs" = "X " && libobjs=
7297d63fdb69Smrg	  fi
7298d63fdb69Smrg	  # Expand the library linking commands again to reset the
7299d63fdb69Smrg	  # value of $libobjs for piecewise linking.
7300d63fdb69Smrg
7301d63fdb69Smrg	  # Do each of the archive commands.
7302d63fdb69Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
7303d63fdb69Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
7304d63fdb69Smrg	      cmds=$module_expsym_cmds
73053da084b3Smrg	    else
7306d63fdb69Smrg	      cmds=$module_cmds
73073da084b3Smrg	    fi
73083da084b3Smrg	  else
7309d63fdb69Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
7310d63fdb69Smrg	      cmds=$archive_expsym_cmds
7311d63fdb69Smrg	    else
7312d63fdb69Smrg	      cmds=$archive_cmds
7313d63fdb69Smrg	    fi
73143da084b3Smrg	  fi
73153da084b3Smrg	fi
73163da084b3Smrg
7317d63fdb69Smrg	if test -n "$delfiles"; then
7318d63fdb69Smrg	  # Append the command to remove temporary files to $cmds.
7319d63fdb69Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
7320d63fdb69Smrg	fi
73213da084b3Smrg
7322d63fdb69Smrg	# Add any objects from preloaded convenience libraries
7323d63fdb69Smrg	if test -n "$dlprefiles"; then
7324d63fdb69Smrg	  gentop="$output_objdir/${outputname}x"
7325d63fdb69Smrg	  generated="$generated $gentop"
73263da084b3Smrg
7327d63fdb69Smrg	  func_extract_archives $gentop $dlprefiles
7328d63fdb69Smrg	  libobjs="$libobjs $func_extract_archives_result"
7329d63fdb69Smrg	  test "X$libobjs" = "X " && libobjs=
73303da084b3Smrg	fi
73313da084b3Smrg
7332d63fdb69Smrg	save_ifs="$IFS"; IFS='~'
7333d63fdb69Smrg	for cmd in $cmds; do
7334d63fdb69Smrg	  IFS="$save_ifs"
7335d63fdb69Smrg	  eval cmd=\"$cmd\"
7336d63fdb69Smrg	  $opt_silent || {
7337d63fdb69Smrg	    func_quote_for_expand "$cmd"
7338d63fdb69Smrg	    eval "func_echo $func_quote_for_expand_result"
7339d63fdb69Smrg	  }
7340d63fdb69Smrg	  $opt_dry_run || eval "$cmd" || {
7341d63fdb69Smrg	    lt_exit=$?
73423da084b3Smrg
7343d63fdb69Smrg	    # Restore the uninstalled library and exit
7344d63fdb69Smrg	    if test "$mode" = relink; then
7345d63fdb69Smrg	      ( cd "$output_objdir" && \
7346d63fdb69Smrg	        $RM "${realname}T" && \
7347d63fdb69Smrg		$MV "${realname}U" "$realname" )
7348d63fdb69Smrg	    fi
7349d63fdb69Smrg
7350d63fdb69Smrg	    exit $lt_exit
7351d63fdb69Smrg	  }
7352d63fdb69Smrg	done
7353d63fdb69Smrg	IFS="$save_ifs"
7354d63fdb69Smrg
7355d63fdb69Smrg	# Restore the uninstalled library and exit
7356d63fdb69Smrg	if test "$mode" = relink; then
7357d63fdb69Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
7358d63fdb69Smrg
7359d63fdb69Smrg	  if test -n "$convenience"; then
7360d63fdb69Smrg	    if test -z "$whole_archive_flag_spec"; then
7361d63fdb69Smrg	      func_show_eval '${RM}r "$gentop"'
73623da084b3Smrg	    fi
73633da084b3Smrg	  fi
73643da084b3Smrg
7365d63fdb69Smrg	  exit $EXIT_SUCCESS
7366d63fdb69Smrg	fi
73673da084b3Smrg
7368d63fdb69Smrg	# Create links to the real library.
7369d63fdb69Smrg	for linkname in $linknames; do
7370d63fdb69Smrg	  if test "$realname" != "$linkname"; then
7371d63fdb69Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
7372d63fdb69Smrg	  fi
7373d63fdb69Smrg	done
7374d63fdb69Smrg
7375d63fdb69Smrg	# If -module or -export-dynamic was specified, set the dlname.
7376d63fdb69Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
7377d63fdb69Smrg	  # On all known operating systems, these are identical.
7378d63fdb69Smrg	  dlname="$soname"
7379d63fdb69Smrg	fi
7380d63fdb69Smrg      fi
7381d63fdb69Smrg      ;;
7382d63fdb69Smrg
7383d63fdb69Smrg    obj)
7384d63fdb69Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7385d63fdb69Smrg	func_warning "\`-dlopen' is ignored for objects"
7386d63fdb69Smrg      fi
7387d63fdb69Smrg
7388d63fdb69Smrg      case " $deplibs" in
7389d63fdb69Smrg      *\ -l* | *\ -L*)
7390d63fdb69Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
7391d63fdb69Smrg      esac
7392d63fdb69Smrg
7393d63fdb69Smrg      test -n "$rpath" && \
7394d63fdb69Smrg	func_warning "\`-rpath' is ignored for objects"
7395d63fdb69Smrg
7396d63fdb69Smrg      test -n "$xrpath" && \
7397d63fdb69Smrg	func_warning "\`-R' is ignored for objects"
7398d63fdb69Smrg
7399d63fdb69Smrg      test -n "$vinfo" && \
7400d63fdb69Smrg	func_warning "\`-version-info' is ignored for objects"
7401d63fdb69Smrg
7402d63fdb69Smrg      test -n "$release" && \
7403d63fdb69Smrg	func_warning "\`-release' is ignored for objects"
7404d63fdb69Smrg
7405d63fdb69Smrg      case $output in
7406d63fdb69Smrg      *.lo)
7407d63fdb69Smrg	test -n "$objs$old_deplibs" && \
7408d63fdb69Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
7409d63fdb69Smrg
7410d63fdb69Smrg	libobj=$output
7411d63fdb69Smrg	func_lo2o "$libobj"
7412d63fdb69Smrg	obj=$func_lo2o_result
7413d63fdb69Smrg	;;
7414d63fdb69Smrg      *)
7415d63fdb69Smrg	libobj=
7416d63fdb69Smrg	obj="$output"
7417d63fdb69Smrg	;;
7418d63fdb69Smrg      esac
7419d63fdb69Smrg
7420d63fdb69Smrg      # Delete the old objects.
7421d63fdb69Smrg      $opt_dry_run || $RM $obj $libobj
7422d63fdb69Smrg
7423d63fdb69Smrg      # Objects from convenience libraries.  This assumes
7424d63fdb69Smrg      # single-version convenience libraries.  Whenever we create
7425d63fdb69Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
7426d63fdb69Smrg      # the extraction.
7427d63fdb69Smrg      reload_conv_objs=
7428d63fdb69Smrg      gentop=
7429d63fdb69Smrg      # reload_cmds runs $LD directly, so let us get rid of
7430d63fdb69Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
7431d63fdb69Smrg      # turning comma into space..
7432d63fdb69Smrg      wl=
7433d63fdb69Smrg
7434d63fdb69Smrg      if test -n "$convenience"; then
7435d63fdb69Smrg	if test -n "$whole_archive_flag_spec"; then
7436d63fdb69Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
7437d63fdb69Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
7438d63fdb69Smrg	else
7439d63fdb69Smrg	  gentop="$output_objdir/${obj}x"
7440d63fdb69Smrg	  generated="$generated $gentop"
7441d63fdb69Smrg
7442d63fdb69Smrg	  func_extract_archives $gentop $convenience
7443d63fdb69Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
7444d63fdb69Smrg	fi
7445d63fdb69Smrg      fi
74463da084b3Smrg
7447d63fdb69Smrg      # Create the old-style object.
7448d63fdb69Smrg      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
74493da084b3Smrg
7450d63fdb69Smrg      output="$obj"
7451d63fdb69Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
74523da084b3Smrg
7453d63fdb69Smrg      # Exit if we aren't doing a library object file.
7454d63fdb69Smrg      if test -z "$libobj"; then
7455d63fdb69Smrg	if test -n "$gentop"; then
7456d63fdb69Smrg	  func_show_eval '${RM}r "$gentop"'
7457d63fdb69Smrg	fi
74583da084b3Smrg
7459d63fdb69Smrg	exit $EXIT_SUCCESS
7460d63fdb69Smrg      fi
74613da084b3Smrg
7462d63fdb69Smrg      if test "$build_libtool_libs" != yes; then
7463d63fdb69Smrg	if test -n "$gentop"; then
7464d63fdb69Smrg	  func_show_eval '${RM}r "$gentop"'
7465d63fdb69Smrg	fi
74663da084b3Smrg
7467d63fdb69Smrg	# Create an invalid libtool object if no PIC, so that we don't
7468d63fdb69Smrg	# accidentally link it into a program.
7469d63fdb69Smrg	# $show "echo timestamp > $libobj"
7470d63fdb69Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
7471d63fdb69Smrg	exit $EXIT_SUCCESS
7472d63fdb69Smrg      fi
74733da084b3Smrg
7474d63fdb69Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
7475d63fdb69Smrg	# Only do commands if we really have different PIC objects.
7476d63fdb69Smrg	reload_objs="$libobjs $reload_conv_objs"
7477d63fdb69Smrg	output="$libobj"
7478d63fdb69Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
74793da084b3Smrg      fi
74803da084b3Smrg
7481d63fdb69Smrg      if test -n "$gentop"; then
7482d63fdb69Smrg	func_show_eval '${RM}r "$gentop"'
7483d63fdb69Smrg      fi
74843da084b3Smrg
7485d63fdb69Smrg      exit $EXIT_SUCCESS
7486d63fdb69Smrg      ;;
74873da084b3Smrg
7488d63fdb69Smrg    prog)
7489d63fdb69Smrg      case $host in
7490d63fdb69Smrg	*cygwin*) func_stripname '' '.exe' "$output"
7491d63fdb69Smrg	          output=$func_stripname_result.exe;;
74923da084b3Smrg      esac
7493d63fdb69Smrg      test -n "$vinfo" && \
7494d63fdb69Smrg	func_warning "\`-version-info' is ignored for programs"
74953da084b3Smrg
7496d63fdb69Smrg      test -n "$release" && \
7497d63fdb69Smrg	func_warning "\`-release' is ignored for programs"
74983da084b3Smrg
7499d63fdb69Smrg      test "$preload" = yes \
7500d63fdb69Smrg        && test "$dlopen_support" = unknown \
7501d63fdb69Smrg	&& test "$dlopen_self" = unknown \
7502d63fdb69Smrg	&& test "$dlopen_self_static" = unknown && \
7503d63fdb69Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
75043da084b3Smrg
7505d63fdb69Smrg      case $host in
7506d63fdb69Smrg      *-*-rhapsody* | *-*-darwin1.[012])
7507d63fdb69Smrg	# On Rhapsody replace the C library is the System framework
7508d63fdb69Smrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
7509d63fdb69Smrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
75103da084b3Smrg	;;
75113da084b3Smrg      esac
75123da084b3Smrg
7513d63fdb69Smrg      case $host in
7514d63fdb69Smrg      *-*-darwin*)
7515d63fdb69Smrg	# Don't allow lazy linking, it breaks C++ global constructors
7516d63fdb69Smrg	# But is supposedly fixed on 10.4 or later (yay!).
7517d63fdb69Smrg	if test "$tagname" = CXX ; then
7518d63fdb69Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
7519d63fdb69Smrg	    10.[0123])
7520d63fdb69Smrg	      compile_command="$compile_command ${wl}-bind_at_load"
7521d63fdb69Smrg	      finalize_command="$finalize_command ${wl}-bind_at_load"
7522d63fdb69Smrg	    ;;
7523d63fdb69Smrg	  esac
7524d63fdb69Smrg	fi
7525d63fdb69Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
7526d63fdb69Smrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
7527d63fdb69Smrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
75283da084b3Smrg	;;
75293da084b3Smrg      esac
75303da084b3Smrg
75313da084b3Smrg
7532d63fdb69Smrg      # move library search paths that coincide with paths to not yet
7533d63fdb69Smrg      # installed libraries to the beginning of the library search list
7534d63fdb69Smrg      new_libs=
7535d63fdb69Smrg      for path in $notinst_path; do
7536d63fdb69Smrg	case " $new_libs " in
7537d63fdb69Smrg	*" -L$path/$objdir "*) ;;
75383da084b3Smrg	*)
7539d63fdb69Smrg	  case " $compile_deplibs " in
7540d63fdb69Smrg	  *" -L$path/$objdir "*)
7541d63fdb69Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
7542d63fdb69Smrg	  esac
75433da084b3Smrg	  ;;
75443da084b3Smrg	esac
75453da084b3Smrg      done
7546d63fdb69Smrg      for deplib in $compile_deplibs; do
7547d63fdb69Smrg	case $deplib in
7548d63fdb69Smrg	-L*)
7549d63fdb69Smrg	  case " $new_libs " in
7550d63fdb69Smrg	  *" $deplib "*) ;;
7551d63fdb69Smrg	  *) new_libs="$new_libs $deplib" ;;
7552d63fdb69Smrg	  esac
7553d63fdb69Smrg	  ;;
7554d63fdb69Smrg	*) new_libs="$new_libs $deplib" ;;
7555d63fdb69Smrg	esac
7556d63fdb69Smrg      done
7557d63fdb69Smrg      compile_deplibs="$new_libs"
75583da084b3Smrg
75593da084b3Smrg
7560d63fdb69Smrg      compile_command="$compile_command $compile_deplibs"
7561d63fdb69Smrg      finalize_command="$finalize_command $finalize_deplibs"
75623da084b3Smrg
7563d63fdb69Smrg      if test -n "$rpath$xrpath"; then
7564d63fdb69Smrg	# If the user specified any rpath flags, then add them.
7565d63fdb69Smrg	for libdir in $rpath $xrpath; do
7566d63fdb69Smrg	  # This is the magic to use -rpath.
7567d63fdb69Smrg	  case "$finalize_rpath " in
7568d63fdb69Smrg	  *" $libdir "*) ;;
7569d63fdb69Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
7570d63fdb69Smrg	  esac
7571d63fdb69Smrg	done
7572d63fdb69Smrg      fi
75733da084b3Smrg
7574d63fdb69Smrg      # Now hardcode the library paths
7575d63fdb69Smrg      rpath=
7576d63fdb69Smrg      hardcode_libdirs=
7577d63fdb69Smrg      for libdir in $compile_rpath $finalize_rpath; do
7578d63fdb69Smrg	if test -n "$hardcode_libdir_flag_spec"; then
7579d63fdb69Smrg	  if test -n "$hardcode_libdir_separator"; then
7580d63fdb69Smrg	    if test -z "$hardcode_libdirs"; then
7581d63fdb69Smrg	      hardcode_libdirs="$libdir"
7582d63fdb69Smrg	    else
7583d63fdb69Smrg	      # Just accumulate the unique libdirs.
7584d63fdb69Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7585d63fdb69Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7586d63fdb69Smrg		;;
7587d63fdb69Smrg	      *)
7588d63fdb69Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7589d63fdb69Smrg		;;
7590d63fdb69Smrg	      esac
7591d63fdb69Smrg	    fi
7592d63fdb69Smrg	  else
7593d63fdb69Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
7594d63fdb69Smrg	    rpath="$rpath $flag"
7595d63fdb69Smrg	  fi
7596d63fdb69Smrg	elif test -n "$runpath_var"; then
7597d63fdb69Smrg	  case "$perm_rpath " in
75983da084b3Smrg	  *" $libdir "*) ;;
7599d63fdb69Smrg	  *) perm_rpath="$perm_rpath $libdir" ;;
76003da084b3Smrg	  esac
7601d63fdb69Smrg	fi
7602d63fdb69Smrg	case $host in
7603d63fdb69Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
7604d63fdb69Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
7605d63fdb69Smrg	  case :$dllsearchpath: in
7606d63fdb69Smrg	  *":$libdir:"*) ;;
7607d63fdb69Smrg	  ::) dllsearchpath=$libdir;;
7608d63fdb69Smrg	  *) dllsearchpath="$dllsearchpath:$libdir";;
7609d63fdb69Smrg	  esac
7610d63fdb69Smrg	  case :$dllsearchpath: in
7611d63fdb69Smrg	  *":$testbindir:"*) ;;
7612d63fdb69Smrg	  ::) dllsearchpath=$testbindir;;
7613d63fdb69Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
7614d63fdb69Smrg	  esac
7615d63fdb69Smrg	  ;;
7616d63fdb69Smrg	esac
7617d63fdb69Smrg      done
7618d63fdb69Smrg      # Substitute the hardcoded libdirs into the rpath.
7619d63fdb69Smrg      if test -n "$hardcode_libdir_separator" &&
7620d63fdb69Smrg	 test -n "$hardcode_libdirs"; then
7621d63fdb69Smrg	libdir="$hardcode_libdirs"
7622d63fdb69Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
7623d63fdb69Smrg      fi
7624d63fdb69Smrg      compile_rpath="$rpath"
7625d63fdb69Smrg
7626d63fdb69Smrg      rpath=
7627d63fdb69Smrg      hardcode_libdirs=
7628d63fdb69Smrg      for libdir in $finalize_rpath; do
7629d63fdb69Smrg	if test -n "$hardcode_libdir_flag_spec"; then
7630d63fdb69Smrg	  if test -n "$hardcode_libdir_separator"; then
7631d63fdb69Smrg	    if test -z "$hardcode_libdirs"; then
7632d63fdb69Smrg	      hardcode_libdirs="$libdir"
7633d63fdb69Smrg	    else
7634d63fdb69Smrg	      # Just accumulate the unique libdirs.
7635d63fdb69Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7636d63fdb69Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7637d63fdb69Smrg		;;
7638d63fdb69Smrg	      *)
7639d63fdb69Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7640d63fdb69Smrg		;;
7641d63fdb69Smrg	      esac
7642d63fdb69Smrg	    fi
7643d63fdb69Smrg	  else
7644d63fdb69Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
7645d63fdb69Smrg	    rpath="$rpath $flag"
7646d63fdb69Smrg	  fi
7647d63fdb69Smrg	elif test -n "$runpath_var"; then
7648d63fdb69Smrg	  case "$finalize_perm_rpath " in
76493da084b3Smrg	  *" $libdir "*) ;;
7650d63fdb69Smrg	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
76513da084b3Smrg	  esac
76523da084b3Smrg	fi
7653d63fdb69Smrg      done
7654d63fdb69Smrg      # Substitute the hardcoded libdirs into the rpath.
7655d63fdb69Smrg      if test -n "$hardcode_libdir_separator" &&
7656d63fdb69Smrg	 test -n "$hardcode_libdirs"; then
7657d63fdb69Smrg	libdir="$hardcode_libdirs"
7658d63fdb69Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
7659d63fdb69Smrg      fi
7660d63fdb69Smrg      finalize_rpath="$rpath"
76613da084b3Smrg
7662d63fdb69Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
7663d63fdb69Smrg	# Transform all the library objects into standard objects.
7664d63fdb69Smrg	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
7665d63fdb69Smrg	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
7666d63fdb69Smrg      fi
76673da084b3Smrg
7668d63fdb69Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
76693da084b3Smrg
7670d63fdb69Smrg      # template prelinking step
7671d63fdb69Smrg      if test -n "$prelink_cmds"; then
7672d63fdb69Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
7673d63fdb69Smrg      fi
76743da084b3Smrg
7675d63fdb69Smrg      wrappers_required=yes
7676d63fdb69Smrg      case $host in
7677d63fdb69Smrg      *cygwin* | *mingw* )
7678d63fdb69Smrg        if test "$build_libtool_libs" != yes; then
7679d63fdb69Smrg          wrappers_required=no
7680d63fdb69Smrg        fi
7681d63fdb69Smrg        ;;
7682d63fdb69Smrg      *cegcc)
7683d63fdb69Smrg        # Disable wrappers for cegcc, we are cross compiling anyway.
7684d63fdb69Smrg        wrappers_required=no
7685d63fdb69Smrg        ;;
7686d63fdb69Smrg      *)
7687d63fdb69Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
7688d63fdb69Smrg          wrappers_required=no
7689d63fdb69Smrg        fi
7690d63fdb69Smrg        ;;
7691d63fdb69Smrg      esac
7692d63fdb69Smrg      if test "$wrappers_required" = no; then
7693d63fdb69Smrg	# Replace the output file specification.
7694d63fdb69Smrg	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
7695d63fdb69Smrg	link_command="$compile_command$compile_rpath"
76963da084b3Smrg
7697d63fdb69Smrg	# We have no uninstalled library dependencies, so finalize right now.
7698d63fdb69Smrg	exit_status=0
7699d63fdb69Smrg	func_show_eval "$link_command" 'exit_status=$?'
77003da084b3Smrg
7701d63fdb69Smrg	# Delete the generated files.
7702d63fdb69Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
7703d63fdb69Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
7704d63fdb69Smrg	fi
77053da084b3Smrg
7706d63fdb69Smrg	exit $exit_status
7707d63fdb69Smrg      fi
77083da084b3Smrg
7709d63fdb69Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
7710d63fdb69Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
7711d63fdb69Smrg      fi
7712d63fdb69Smrg      if test -n "$finalize_shlibpath"; then
7713d63fdb69Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
7714d63fdb69Smrg      fi
77153da084b3Smrg
7716d63fdb69Smrg      compile_var=
7717d63fdb69Smrg      finalize_var=
7718d63fdb69Smrg      if test -n "$runpath_var"; then
7719d63fdb69Smrg	if test -n "$perm_rpath"; then
7720d63fdb69Smrg	  # We should set the runpath_var.
7721d63fdb69Smrg	  rpath=
7722d63fdb69Smrg	  for dir in $perm_rpath; do
7723d63fdb69Smrg	    rpath="$rpath$dir:"
77243da084b3Smrg	  done
7725d63fdb69Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
77263da084b3Smrg	fi
7727d63fdb69Smrg	if test -n "$finalize_perm_rpath"; then
7728d63fdb69Smrg	  # We should set the runpath_var.
7729d63fdb69Smrg	  rpath=
7730d63fdb69Smrg	  for dir in $finalize_perm_rpath; do
7731d63fdb69Smrg	    rpath="$rpath$dir:"
7732d63fdb69Smrg	  done
7733d63fdb69Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
7734d63fdb69Smrg	fi
7735d63fdb69Smrg      fi
77363da084b3Smrg
7737d63fdb69Smrg      if test "$no_install" = yes; then
7738d63fdb69Smrg	# We don't need to create a wrapper script.
7739d63fdb69Smrg	link_command="$compile_var$compile_command$compile_rpath"
7740d63fdb69Smrg	# Replace the output file specification.
7741d63fdb69Smrg	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
7742d63fdb69Smrg	# Delete the old output file.
7743d63fdb69Smrg	$opt_dry_run || $RM $output
7744d63fdb69Smrg	# Link the executable and exit
7745d63fdb69Smrg	func_show_eval "$link_command" 'exit $?'
7746d63fdb69Smrg	exit $EXIT_SUCCESS
7747d63fdb69Smrg      fi
77483da084b3Smrg
7749d63fdb69Smrg      if test "$hardcode_action" = relink; then
7750d63fdb69Smrg	# Fast installation is not supported
7751d63fdb69Smrg	link_command="$compile_var$compile_command$compile_rpath"
7752d63fdb69Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
77533da084b3Smrg
7754d63fdb69Smrg	func_warning "this platform does not like uninstalled shared libraries"
7755d63fdb69Smrg	func_warning "\`$output' will be relinked during installation"
7756d63fdb69Smrg      else
7757d63fdb69Smrg	if test "$fast_install" != no; then
7758d63fdb69Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
7759d63fdb69Smrg	  if test "$fast_install" = yes; then
7760d63fdb69Smrg	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
7761d63fdb69Smrg	  else
7762d63fdb69Smrg	    # fast_install is set to needless
7763d63fdb69Smrg	    relink_command=
7764d63fdb69Smrg	  fi
77653da084b3Smrg	else
7766d63fdb69Smrg	  link_command="$compile_var$compile_command$compile_rpath"
7767d63fdb69Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
77683da084b3Smrg	fi
7769d63fdb69Smrg      fi
77703da084b3Smrg
7771d63fdb69Smrg      # Replace the output file specification.
7772d63fdb69Smrg      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
77733da084b3Smrg
7774d63fdb69Smrg      # Delete the old output files.
7775d63fdb69Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
77763da084b3Smrg
7777d63fdb69Smrg      func_show_eval "$link_command" 'exit $?'
77783da084b3Smrg
7779d63fdb69Smrg      # Now create the wrapper script.
7780d63fdb69Smrg      func_verbose "creating $output"
77813da084b3Smrg
7782d63fdb69Smrg      # Quote the relink command for shipping.
7783d63fdb69Smrg      if test -n "$relink_command"; then
7784d63fdb69Smrg	# Preserve any variables that may affect compiler behavior
7785d63fdb69Smrg	for var in $variables_saved_for_relink; do
7786d63fdb69Smrg	  if eval test -z \"\${$var+set}\"; then
7787d63fdb69Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
7788d63fdb69Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
7789d63fdb69Smrg	    relink_command="$var=; export $var; $relink_command"
7790d63fdb69Smrg	  else
7791d63fdb69Smrg	    func_quote_for_eval "$var_value"
7792d63fdb69Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
7793d63fdb69Smrg	  fi
7794d63fdb69Smrg	done
7795d63fdb69Smrg	relink_command="(cd `pwd`; $relink_command)"
7796d63fdb69Smrg	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
7797d63fdb69Smrg      fi
77983da084b3Smrg
7799d63fdb69Smrg      # Quote $ECHO for shipping.
7800d63fdb69Smrg      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
7801d63fdb69Smrg	case $progpath in
7802d63fdb69Smrg	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
7803d63fdb69Smrg	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
78043da084b3Smrg	esac
7805d63fdb69Smrg	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
7806d63fdb69Smrg      else
7807d63fdb69Smrg	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
7808d63fdb69Smrg      fi
78093da084b3Smrg
7810d63fdb69Smrg      # Only actually do things if not in dry run mode.
7811d63fdb69Smrg      $opt_dry_run || {
7812d63fdb69Smrg	# win32 will think the script is a binary if it has
7813d63fdb69Smrg	# a .exe suffix, so we strip it off here.
7814d63fdb69Smrg	case $output in
7815d63fdb69Smrg	  *.exe) func_stripname '' '.exe' "$output"
7816d63fdb69Smrg	         output=$func_stripname_result ;;
7817d63fdb69Smrg	esac
7818d63fdb69Smrg	# test for cygwin because mv fails w/o .exe extensions
78193da084b3Smrg	case $host in
7820d63fdb69Smrg	  *cygwin*)
7821d63fdb69Smrg	    exeext=.exe
7822d63fdb69Smrg	    func_stripname '' '.exe' "$outputname"
7823d63fdb69Smrg	    outputname=$func_stripname_result ;;
7824d63fdb69Smrg	  *) exeext= ;;
78253da084b3Smrg	esac
7826d63fdb69Smrg	case $host in
7827d63fdb69Smrg	  *cygwin* | *mingw* )
7828d63fdb69Smrg	    func_dirname_and_basename "$output" "" "."
7829d63fdb69Smrg	    output_name=$func_basename_result
7830d63fdb69Smrg	    output_path=$func_dirname_result
7831d63fdb69Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
7832d63fdb69Smrg	    cwrapper="$output_path/$output_name.exe"
7833d63fdb69Smrg	    $RM $cwrappersource $cwrapper
7834d63fdb69Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
7835d63fdb69Smrg
7836d63fdb69Smrg	    func_emit_cwrapperexe_src > $cwrappersource
7837d63fdb69Smrg
7838d63fdb69Smrg	    # The wrapper executable is built using the $host compiler,
7839d63fdb69Smrg	    # because it contains $host paths and files. If cross-
7840d63fdb69Smrg	    # compiling, it, like the target executable, must be
7841d63fdb69Smrg	    # executed on the $host or under an emulation environment.
7842d63fdb69Smrg	    $opt_dry_run || {
7843d63fdb69Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
7844d63fdb69Smrg	      $STRIP $cwrapper
7845d63fdb69Smrg	    }
78463da084b3Smrg
7847d63fdb69Smrg	    # Now, create the wrapper script for func_source use:
7848d63fdb69Smrg	    func_ltwrapper_scriptname $cwrapper
7849d63fdb69Smrg	    $RM $func_ltwrapper_scriptname_result
7850d63fdb69Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
7851d63fdb69Smrg	    $opt_dry_run || {
7852d63fdb69Smrg	      # note: this script will not be executed, so do not chmod.
7853d63fdb69Smrg	      if test "x$build" = "x$host" ; then
7854d63fdb69Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
78553da084b3Smrg	      else
7856d63fdb69Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
78573da084b3Smrg	      fi
7858d63fdb69Smrg	    }
7859d63fdb69Smrg	  ;;
7860d63fdb69Smrg	  * )
7861d63fdb69Smrg	    $RM $output
7862d63fdb69Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
78633da084b3Smrg
7864d63fdb69Smrg	    func_emit_wrapper no > $output
7865d63fdb69Smrg	    chmod +x $output
78663da084b3Smrg	  ;;
78673da084b3Smrg	esac
7868d63fdb69Smrg      }
7869d63fdb69Smrg      exit $EXIT_SUCCESS
7870d63fdb69Smrg      ;;
7871d63fdb69Smrg    esac
78723da084b3Smrg
7873d63fdb69Smrg    # See if we need to build an old-fashioned archive.
7874d63fdb69Smrg    for oldlib in $oldlibs; do
78753da084b3Smrg
7876d63fdb69Smrg      if test "$build_libtool_libs" = convenience; then
7877d63fdb69Smrg	oldobjs="$libobjs_save $symfileobj"
7878d63fdb69Smrg	addlibs="$convenience"
7879d63fdb69Smrg	build_libtool_libs=no
7880d63fdb69Smrg      else
7881d63fdb69Smrg	if test "$build_libtool_libs" = module; then
7882d63fdb69Smrg	  oldobjs="$libobjs_save"
7883d63fdb69Smrg	  build_libtool_libs=no
7884d63fdb69Smrg	else
7885d63fdb69Smrg	  oldobjs="$old_deplibs $non_pic_objects"
7886d63fdb69Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
7887d63fdb69Smrg	    oldobjs="$oldobjs $symfileobj"
7888d63fdb69Smrg	  fi
7889d63fdb69Smrg	fi
7890d63fdb69Smrg	addlibs="$old_convenience"
78913da084b3Smrg      fi
78923da084b3Smrg
7893d63fdb69Smrg      if test -n "$addlibs"; then
7894d63fdb69Smrg	gentop="$output_objdir/${outputname}x"
7895d63fdb69Smrg	generated="$generated $gentop"
78963da084b3Smrg
7897d63fdb69Smrg	func_extract_archives $gentop $addlibs
7898d63fdb69Smrg	oldobjs="$oldobjs $func_extract_archives_result"
7899d63fdb69Smrg      fi
79003da084b3Smrg
7901d63fdb69Smrg      # Do each command in the archive commands.
7902d63fdb69Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
7903d63fdb69Smrg	cmds=$old_archive_from_new_cmds
7904d63fdb69Smrg      else
79053da084b3Smrg
7906d63fdb69Smrg	# Add any objects from preloaded convenience libraries
7907d63fdb69Smrg	if test -n "$dlprefiles"; then
7908d63fdb69Smrg	  gentop="$output_objdir/${outputname}x"
7909d63fdb69Smrg	  generated="$generated $gentop"
79103da084b3Smrg
7911d63fdb69Smrg	  func_extract_archives $gentop $dlprefiles
7912d63fdb69Smrg	  oldobjs="$oldobjs $func_extract_archives_result"
7913d63fdb69Smrg	fi
79143da084b3Smrg
7915d63fdb69Smrg	# POSIX demands no paths to be encoded in archives.  We have
7916d63fdb69Smrg	# to avoid creating archives with duplicate basenames if we
7917d63fdb69Smrg	# might have to extract them afterwards, e.g., when creating a
7918d63fdb69Smrg	# static archive out of a convenience library, or when linking
7919d63fdb69Smrg	# the entirety of a libtool archive into another (currently
7920d63fdb69Smrg	# not supported by libtool).
7921d63fdb69Smrg	if (for obj in $oldobjs
7922d63fdb69Smrg	    do
7923d63fdb69Smrg	      func_basename "$obj"
7924d63fdb69Smrg	      $ECHO "$func_basename_result"
7925d63fdb69Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
7926d63fdb69Smrg	  :
7927d63fdb69Smrg	else
7928d63fdb69Smrg	  $ECHO "copying selected object files to avoid basename conflicts..."
7929d63fdb69Smrg	  gentop="$output_objdir/${outputname}x"
7930d63fdb69Smrg	  generated="$generated $gentop"
7931d63fdb69Smrg	  func_mkdir_p "$gentop"
7932d63fdb69Smrg	  save_oldobjs=$oldobjs
7933d63fdb69Smrg	  oldobjs=
7934d63fdb69Smrg	  counter=1
7935d63fdb69Smrg	  for obj in $save_oldobjs
7936d63fdb69Smrg	  do
7937d63fdb69Smrg	    func_basename "$obj"
7938d63fdb69Smrg	    objbase="$func_basename_result"
7939d63fdb69Smrg	    case " $oldobjs " in
7940d63fdb69Smrg	    " ") oldobjs=$obj ;;
7941d63fdb69Smrg	    *[\ /]"$objbase "*)
7942d63fdb69Smrg	      while :; do
7943d63fdb69Smrg		# Make sure we don't pick an alternate name that also
7944d63fdb69Smrg		# overlaps.
7945d63fdb69Smrg		newobj=lt$counter-$objbase
7946d63fdb69Smrg		func_arith $counter + 1
7947d63fdb69Smrg		counter=$func_arith_result
7948d63fdb69Smrg		case " $oldobjs " in
7949d63fdb69Smrg		*[\ /]"$newobj "*) ;;
7950d63fdb69Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
7951d63fdb69Smrg		esac
7952d63fdb69Smrg	      done
7953d63fdb69Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
7954d63fdb69Smrg	      oldobjs="$oldobjs $gentop/$newobj"
7955d63fdb69Smrg	      ;;
7956d63fdb69Smrg	    *) oldobjs="$oldobjs $obj" ;;
7957d63fdb69Smrg	    esac
79583da084b3Smrg	  done
79593da084b3Smrg	fi
7960d63fdb69Smrg	eval cmds=\"$old_archive_cmds\"
79613da084b3Smrg
7962d63fdb69Smrg	func_len " $cmds"
7963d63fdb69Smrg	len=$func_len_result
7964d63fdb69Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7965d63fdb69Smrg	  cmds=$old_archive_cmds
7966d63fdb69Smrg	else
7967d63fdb69Smrg	  # the command line is too long to link in one step, link in parts
7968d63fdb69Smrg	  func_verbose "using piecewise archive linking..."
7969d63fdb69Smrg	  save_RANLIB=$RANLIB
7970d63fdb69Smrg	  RANLIB=:
7971d63fdb69Smrg	  objlist=
7972d63fdb69Smrg	  concat_cmds=
7973d63fdb69Smrg	  save_oldobjs=$oldobjs
7974d63fdb69Smrg	  oldobjs=
7975d63fdb69Smrg	  # Is there a better way of finding the last object in the list?
7976d63fdb69Smrg	  for obj in $save_oldobjs
7977d63fdb69Smrg	  do
7978d63fdb69Smrg	    last_oldobj=$obj
7979d63fdb69Smrg	  done
7980d63fdb69Smrg	  eval test_cmds=\"$old_archive_cmds\"
7981d63fdb69Smrg	  func_len " $test_cmds"
7982d63fdb69Smrg	  len0=$func_len_result
7983d63fdb69Smrg	  len=$len0
7984d63fdb69Smrg	  for obj in $save_oldobjs
7985d63fdb69Smrg	  do
7986d63fdb69Smrg	    func_len " $obj"
7987d63fdb69Smrg	    func_arith $len + $func_len_result
7988d63fdb69Smrg	    len=$func_arith_result
7989d63fdb69Smrg	    func_append objlist " $obj"
7990d63fdb69Smrg	    if test "$len" -lt "$max_cmd_len"; then
7991d63fdb69Smrg	      :
7992d63fdb69Smrg	    else
7993d63fdb69Smrg	      # the above command should be used before it gets too long
7994d63fdb69Smrg	      oldobjs=$objlist
7995d63fdb69Smrg	      if test "$obj" = "$last_oldobj" ; then
7996d63fdb69Smrg		RANLIB=$save_RANLIB
7997d63fdb69Smrg	      fi
7998d63fdb69Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7999d63fdb69Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
8000d63fdb69Smrg	      objlist=
8001d63fdb69Smrg	      len=$len0
8002d63fdb69Smrg	    fi
8003d63fdb69Smrg	  done
8004d63fdb69Smrg	  RANLIB=$save_RANLIB
8005d63fdb69Smrg	  oldobjs=$objlist
8006d63fdb69Smrg	  if test "X$oldobjs" = "X" ; then
8007d63fdb69Smrg	    eval cmds=\"\$concat_cmds\"
8008d63fdb69Smrg	  else
8009d63fdb69Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
8010d63fdb69Smrg	  fi
8011d63fdb69Smrg	fi
8012d63fdb69Smrg      fi
8013d63fdb69Smrg      func_execute_cmds "$cmds" 'exit $?'
80143da084b3Smrg    done
80153da084b3Smrg
8016d63fdb69Smrg    test -n "$generated" && \
8017d63fdb69Smrg      func_show_eval "${RM}r$generated"
80183da084b3Smrg
8019d63fdb69Smrg    # Now create the libtool archive.
8020d63fdb69Smrg    case $output in
8021d63fdb69Smrg    *.la)
8022d63fdb69Smrg      old_library=
8023d63fdb69Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
8024d63fdb69Smrg      func_verbose "creating $output"
80253da084b3Smrg
8026d63fdb69Smrg      # Preserve any variables that may affect compiler behavior
8027d63fdb69Smrg      for var in $variables_saved_for_relink; do
8028d63fdb69Smrg	if eval test -z \"\${$var+set}\"; then
8029d63fdb69Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
8030d63fdb69Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
8031d63fdb69Smrg	  relink_command="$var=; export $var; $relink_command"
80323da084b3Smrg	else
8033d63fdb69Smrg	  func_quote_for_eval "$var_value"
8034d63fdb69Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
80353da084b3Smrg	fi
8036d63fdb69Smrg      done
8037d63fdb69Smrg      # Quote the link command for shipping.
8038d63fdb69Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
8039d63fdb69Smrg      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
8040d63fdb69Smrg      if test "$hardcode_automatic" = yes ; then
8041d63fdb69Smrg	relink_command=
8042d63fdb69Smrg      fi
80433da084b3Smrg
8044d63fdb69Smrg      # Only create the output if not a dry run.
8045d63fdb69Smrg      $opt_dry_run || {
8046d63fdb69Smrg	for installed in no yes; do
8047d63fdb69Smrg	  if test "$installed" = yes; then
8048d63fdb69Smrg	    if test -z "$install_libdir"; then
8049d63fdb69Smrg	      break
8050d63fdb69Smrg	    fi
8051d63fdb69Smrg	    output="$output_objdir/$outputname"i
8052d63fdb69Smrg	    # Replace all uninstalled libtool libraries with the installed ones
8053d63fdb69Smrg	    newdependency_libs=
8054d63fdb69Smrg	    for deplib in $dependency_libs; do
8055d63fdb69Smrg	      case $deplib in
8056d63fdb69Smrg	      *.la)
8057d63fdb69Smrg		func_basename "$deplib"
8058d63fdb69Smrg		name="$func_basename_result"
8059d63fdb69Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8060d63fdb69Smrg		test -z "$libdir" && \
8061d63fdb69Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
8062d63fdb69Smrg		newdependency_libs="$newdependency_libs $libdir/$name"
8063d63fdb69Smrg		;;
8064d63fdb69Smrg	      *) newdependency_libs="$newdependency_libs $deplib" ;;
8065d63fdb69Smrg	      esac
8066d63fdb69Smrg	    done
8067d63fdb69Smrg	    dependency_libs="$newdependency_libs"
8068d63fdb69Smrg	    newdlfiles=
8069d63fdb69Smrg
8070d63fdb69Smrg	    for lib in $dlfiles; do
8071d63fdb69Smrg	      case $lib in
8072d63fdb69Smrg	      *.la)
8073d63fdb69Smrg	        func_basename "$lib"
8074d63fdb69Smrg		name="$func_basename_result"
8075d63fdb69Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
8076d63fdb69Smrg		test -z "$libdir" && \
8077d63fdb69Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
8078d63fdb69Smrg		newdlfiles="$newdlfiles $libdir/$name"
8079d63fdb69Smrg		;;
8080d63fdb69Smrg	      *) newdlfiles="$newdlfiles $lib" ;;
8081d63fdb69Smrg	      esac
8082d63fdb69Smrg	    done
8083d63fdb69Smrg	    dlfiles="$newdlfiles"
8084d63fdb69Smrg	    newdlprefiles=
8085d63fdb69Smrg	    for lib in $dlprefiles; do
8086d63fdb69Smrg	      case $lib in
8087d63fdb69Smrg	      *.la)
8088d63fdb69Smrg		# Only pass preopened files to the pseudo-archive (for
8089d63fdb69Smrg		# eventual linking with the app. that links it) if we
8090d63fdb69Smrg		# didn't already link the preopened objects directly into
8091d63fdb69Smrg		# the library:
8092d63fdb69Smrg		func_basename "$lib"
8093d63fdb69Smrg		name="$func_basename_result"
8094d63fdb69Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
8095d63fdb69Smrg		test -z "$libdir" && \
8096d63fdb69Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
8097d63fdb69Smrg		newdlprefiles="$newdlprefiles $libdir/$name"
8098d63fdb69Smrg		;;
8099d63fdb69Smrg	      esac
8100d63fdb69Smrg	    done
8101d63fdb69Smrg	    dlprefiles="$newdlprefiles"
8102d63fdb69Smrg	  else
8103d63fdb69Smrg	    newdlfiles=
8104d63fdb69Smrg	    for lib in $dlfiles; do
8105d63fdb69Smrg	      case $lib in
8106d63fdb69Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
8107d63fdb69Smrg		*) abs=`pwd`"/$lib" ;;
8108d63fdb69Smrg	      esac
8109d63fdb69Smrg	      newdlfiles="$newdlfiles $abs"
8110d63fdb69Smrg	    done
8111d63fdb69Smrg	    dlfiles="$newdlfiles"
8112d63fdb69Smrg	    newdlprefiles=
8113d63fdb69Smrg	    for lib in $dlprefiles; do
8114d63fdb69Smrg	      case $lib in
8115d63fdb69Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
8116d63fdb69Smrg		*) abs=`pwd`"/$lib" ;;
8117d63fdb69Smrg	      esac
8118d63fdb69Smrg	      newdlprefiles="$newdlprefiles $abs"
8119d63fdb69Smrg	    done
8120d63fdb69Smrg	    dlprefiles="$newdlprefiles"
8121d63fdb69Smrg	  fi
8122d63fdb69Smrg	  $RM $output
8123d63fdb69Smrg	  # place dlname in correct position for cygwin
8124d63fdb69Smrg	  tdlname=$dlname
8125d63fdb69Smrg	  case $host,$output,$installed,$module,$dlname in
8126d63fdb69Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
8127d63fdb69Smrg	  esac
8128d63fdb69Smrg	  $ECHO > $output "\
8129d63fdb69Smrg# $outputname - a libtool library file
8130d63fdb69Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
8131d63fdb69Smrg#
8132d63fdb69Smrg# Please DO NOT delete this file!
8133d63fdb69Smrg# It is necessary for linking the library.
81343da084b3Smrg
8135d63fdb69Smrg# The name that we can dlopen(3).
8136d63fdb69Smrgdlname='$tdlname'
81373da084b3Smrg
8138d63fdb69Smrg# Names of this library.
8139d63fdb69Smrglibrary_names='$library_names'
81403da084b3Smrg
8141d63fdb69Smrg# The name of the static archive.
8142d63fdb69Smrgold_library='$old_library'
81433da084b3Smrg
8144d63fdb69Smrg# Linker flags that can not go in dependency_libs.
8145d63fdb69Smrginherited_linker_flags='$new_inherited_linker_flags'
81463da084b3Smrg
8147d63fdb69Smrg# Libraries that this one depends upon.
8148d63fdb69Smrgdependency_libs='$dependency_libs'
81493da084b3Smrg
8150d63fdb69Smrg# Names of additional weak libraries provided by this library
8151d63fdb69Smrgweak_library_names='$weak_libs'
81523da084b3Smrg
8153d63fdb69Smrg# Version information for $libname.
8154d63fdb69Smrgcurrent=$current
8155d63fdb69Smrgage=$age
8156d63fdb69Smrgrevision=$revision
81573da084b3Smrg
8158d63fdb69Smrg# Is this an already installed library?
8159d63fdb69Smrginstalled=$installed
81603da084b3Smrg
8161d63fdb69Smrg# Should we warn about portability when linking against -modules?
8162d63fdb69Smrgshouldnotlink=$module
81633da084b3Smrg
8164d63fdb69Smrg# Files to dlopen/dlpreopen
8165d63fdb69Smrgdlopen='$dlfiles'
8166d63fdb69Smrgdlpreopen='$dlprefiles'
81673da084b3Smrg
8168d63fdb69Smrg# Directory that this library needs to be installed in:
8169d63fdb69Smrglibdir='$install_libdir'"
8170d63fdb69Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
8171d63fdb69Smrg	    $ECHO >> $output "\
8172d63fdb69Smrgrelink_command=\"$relink_command\""
8173d63fdb69Smrg	  fi
8174d63fdb69Smrg	done
8175d63fdb69Smrg      }
81763da084b3Smrg
8177d63fdb69Smrg      # Do a symbolic link so that the libtool archive can be found in
8178d63fdb69Smrg      # LD_LIBRARY_PATH before the program is installed.
8179d63fdb69Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
8180d63fdb69Smrg      ;;
8181d63fdb69Smrg    esac
8182d63fdb69Smrg    exit $EXIT_SUCCESS
8183d63fdb69Smrg}
81843da084b3Smrg
8185d63fdb69Smrg{ test "$mode" = link || test "$mode" = relink; } &&
8186d63fdb69Smrg    func_mode_link ${1+"$@"}
81873da084b3Smrg
81883da084b3Smrg
8189d63fdb69Smrg# func_mode_uninstall arg...
8190d63fdb69Smrgfunc_mode_uninstall ()
8191d63fdb69Smrg{
8192d63fdb69Smrg    $opt_debug
8193d63fdb69Smrg    RM="$nonopt"
81943da084b3Smrg    files=
81953da084b3Smrg    rmforce=
81963da084b3Smrg    exit_status=0
81973da084b3Smrg
81983da084b3Smrg    # This variable tells wrapper scripts just to set variables rather
81993da084b3Smrg    # than running their programs.
82003da084b3Smrg    libtool_install_magic="$magic"
82013da084b3Smrg
82023da084b3Smrg    for arg
82033da084b3Smrg    do
82043da084b3Smrg      case $arg in
8205d63fdb69Smrg      -f) RM="$RM $arg"; rmforce=yes ;;
8206d63fdb69Smrg      -*) RM="$RM $arg" ;;
82073da084b3Smrg      *) files="$files $arg" ;;
82083da084b3Smrg      esac
82093da084b3Smrg    done
82103da084b3Smrg
8211d63fdb69Smrg    test -z "$RM" && \
8212d63fdb69Smrg      func_fatal_help "you must specify an RM program"
82133da084b3Smrg
82143da084b3Smrg    rmdirs=
82153da084b3Smrg
82163da084b3Smrg    origobjdir="$objdir"
82173da084b3Smrg    for file in $files; do
8218d63fdb69Smrg      func_dirname "$file" "" "."
8219d63fdb69Smrg      dir="$func_dirname_result"
8220d63fdb69Smrg      if test "X$dir" = X.; then
82213da084b3Smrg	objdir="$origobjdir"
82223da084b3Smrg      else
82233da084b3Smrg	objdir="$dir/$origobjdir"
82243da084b3Smrg      fi
8225d63fdb69Smrg      func_basename "$file"
8226d63fdb69Smrg      name="$func_basename_result"
82273da084b3Smrg      test "$mode" = uninstall && objdir="$dir"
82283da084b3Smrg
82293da084b3Smrg      # Remember objdir for removal later, being careful to avoid duplicates
82303da084b3Smrg      if test "$mode" = clean; then
82313da084b3Smrg	case " $rmdirs " in
82323da084b3Smrg	  *" $objdir "*) ;;
82333da084b3Smrg	  *) rmdirs="$rmdirs $objdir" ;;
82343da084b3Smrg	esac
82353da084b3Smrg      fi
82363da084b3Smrg
82373da084b3Smrg      # Don't error if the file doesn't exist and rm -f was used.
8238d63fdb69Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
8239d63fdb69Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
8240d63fdb69Smrg	 test -f "$file"; then
82413da084b3Smrg	:
82423da084b3Smrg      elif test -d "$file"; then
82433da084b3Smrg	exit_status=1
82443da084b3Smrg	continue
82453da084b3Smrg      elif test "$rmforce" = yes; then
82463da084b3Smrg	continue
82473da084b3Smrg      fi
82483da084b3Smrg
82493da084b3Smrg      rmfiles="$file"
82503da084b3Smrg
82513da084b3Smrg      case $name in
82523da084b3Smrg      *.la)
82533da084b3Smrg	# Possibly a libtool archive, so verify it.
8254d63fdb69Smrg	if func_lalib_p "$file"; then
8255d63fdb69Smrg	  func_source $dir/$name
82563da084b3Smrg
82573da084b3Smrg	  # Delete the libtool libraries and symlinks.
82583da084b3Smrg	  for n in $library_names; do
82593da084b3Smrg	    rmfiles="$rmfiles $objdir/$n"
82603da084b3Smrg	  done
82613da084b3Smrg	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
82623da084b3Smrg
82633da084b3Smrg	  case "$mode" in
82643da084b3Smrg	  clean)
82653da084b3Smrg	    case "  $library_names " in
82663da084b3Smrg	    # "  " in the beginning catches empty $dlname
82673da084b3Smrg	    *" $dlname "*) ;;
82683da084b3Smrg	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
82693da084b3Smrg	    esac
8270d63fdb69Smrg	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
82713da084b3Smrg	    ;;
82723da084b3Smrg	  uninstall)
82733da084b3Smrg	    if test -n "$library_names"; then
82743da084b3Smrg	      # Do each command in the postuninstall commands.
8275d63fdb69Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
82763da084b3Smrg	    fi
82773da084b3Smrg
82783da084b3Smrg	    if test -n "$old_library"; then
82793da084b3Smrg	      # Do each command in the old_postuninstall commands.
8280d63fdb69Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
82813da084b3Smrg	    fi
82823da084b3Smrg	    # FIXME: should reinstall the best remaining shared library.
82833da084b3Smrg	    ;;
82843da084b3Smrg	  esac
82853da084b3Smrg	fi
82863da084b3Smrg	;;
82873da084b3Smrg
82883da084b3Smrg      *.lo)
82893da084b3Smrg	# Possibly a libtool object, so verify it.
8290d63fdb69Smrg	if func_lalib_p "$file"; then
82913da084b3Smrg
82923da084b3Smrg	  # Read the .lo file
8293d63fdb69Smrg	  func_source $dir/$name
82943da084b3Smrg
82953da084b3Smrg	  # Add PIC object to the list of files to remove.
8296d63fdb69Smrg	  if test -n "$pic_object" &&
8297d63fdb69Smrg	     test "$pic_object" != none; then
82983da084b3Smrg	    rmfiles="$rmfiles $dir/$pic_object"
82993da084b3Smrg	  fi
83003da084b3Smrg
83013da084b3Smrg	  # Add non-PIC object to the list of files to remove.
8302d63fdb69Smrg	  if test -n "$non_pic_object" &&
8303d63fdb69Smrg	     test "$non_pic_object" != none; then
83043da084b3Smrg	    rmfiles="$rmfiles $dir/$non_pic_object"
83053da084b3Smrg	  fi
83063da084b3Smrg	fi
83073da084b3Smrg	;;
83083da084b3Smrg
83093da084b3Smrg      *)
83103da084b3Smrg	if test "$mode" = clean ; then
83113da084b3Smrg	  noexename=$name
83123da084b3Smrg	  case $file in
83133da084b3Smrg	  *.exe)
8314d63fdb69Smrg	    func_stripname '' '.exe' "$file"
8315d63fdb69Smrg	    file=$func_stripname_result
8316d63fdb69Smrg	    func_stripname '' '.exe' "$name"
8317d63fdb69Smrg	    noexename=$func_stripname_result
83183da084b3Smrg	    # $file with .exe has already been added to rmfiles,
83193da084b3Smrg	    # add $file without .exe
83203da084b3Smrg	    rmfiles="$rmfiles $file"
83213da084b3Smrg	    ;;
83223da084b3Smrg	  esac
83233da084b3Smrg	  # Do a test to see if this is a libtool program.
8324d63fdb69Smrg	  if func_ltwrapper_p "$file"; then
8325d63fdb69Smrg	    if func_ltwrapper_executable_p "$file"; then
8326d63fdb69Smrg	      func_ltwrapper_scriptname "$file"
8327d63fdb69Smrg	      relink_command=
8328d63fdb69Smrg	      func_source $func_ltwrapper_scriptname_result
8329d63fdb69Smrg	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
8330d63fdb69Smrg	    else
8331d63fdb69Smrg	      relink_command=
8332d63fdb69Smrg	      func_source $dir/$noexename
8333d63fdb69Smrg	    fi
83343da084b3Smrg
83353da084b3Smrg	    # note $name still contains .exe if it was in $file originally
83363da084b3Smrg	    # as does the version of $file that was added into $rmfiles
83373da084b3Smrg	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
83383da084b3Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
83393da084b3Smrg	      rmfiles="$rmfiles $objdir/lt-$name"
83403da084b3Smrg	    fi
83413da084b3Smrg	    if test "X$noexename" != "X$name" ; then
83423da084b3Smrg	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
83433da084b3Smrg	    fi
83443da084b3Smrg	  fi
83453da084b3Smrg	fi
83463da084b3Smrg	;;
83473da084b3Smrg      esac
8348d63fdb69Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
83493da084b3Smrg    done
83503da084b3Smrg    objdir="$origobjdir"
83513da084b3Smrg
83523da084b3Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
83533da084b3Smrg    for dir in $rmdirs; do
83543da084b3Smrg      if test -d "$dir"; then
8355d63fdb69Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
83563da084b3Smrg      fi
83573da084b3Smrg    done
83583da084b3Smrg
83593da084b3Smrg    exit $exit_status
8360d63fdb69Smrg}
83613da084b3Smrg
8362d63fdb69Smrg{ test "$mode" = uninstall || test "$mode" = clean; } &&
8363d63fdb69Smrg    func_mode_uninstall ${1+"$@"}
83643da084b3Smrg
8365d63fdb69Smrgtest -z "$mode" && {
8366d63fdb69Smrg  help="$generic_help"
8367d63fdb69Smrg  func_fatal_help "you must specify a MODE"
8368d63fdb69Smrg}
8369d63fdb69Smrg
8370d63fdb69Smrgtest -z "$exec_cmd" && \
8371d63fdb69Smrg  func_fatal_help "invalid operation mode \`$mode'"
83723da084b3Smrg
83733da084b3Smrgif test -n "$exec_cmd"; then
8374d63fdb69Smrg  eval exec "$exec_cmd"
83753da084b3Smrg  exit $EXIT_FAILURE
83763da084b3Smrgfi
83773da084b3Smrg
8378d63fdb69Smrgexit $exit_status
83793da084b3Smrg
83803da084b3Smrg
83813da084b3Smrg# The TAGs below are defined such that we never get into a situation
83823da084b3Smrg# in which we disable both kinds of libraries.  Given conflicting
83833da084b3Smrg# choices, we go for a static library, that is the most portable,
83843da084b3Smrg# since we can't tell whether shared libraries were disabled because
83853da084b3Smrg# the user asked for that or because the platform doesn't support
83863da084b3Smrg# them.  This is particularly important on AIX, because we don't
83873da084b3Smrg# support having both static and shared libraries enabled at the same
83883da084b3Smrg# time on that platform, so we default to a shared-only configuration.
83893da084b3Smrg# If a disable-shared tag is given, we'll fallback to a static-only
83903da084b3Smrg# configuration.  But we'll never go from static-only to shared-only.
83913da084b3Smrg
83923da084b3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
8393d63fdb69Smrgbuild_libtool_libs=no
8394d63fdb69Smrgbuild_old_libs=yes
83953da084b3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
83963da084b3Smrg
83973da084b3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
8398d63fdb69Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
83993da084b3Smrg# ### END LIBTOOL TAG CONFIG: disable-static
84003da084b3Smrg
84013da084b3Smrg# Local Variables:
84023da084b3Smrg# mode:shell-script
84033da084b3Smrg# sh-indentation:2
84043da084b3Smrg# End:
8405d63fdb69Smrg# vi:sw=2
8406d63fdb69Smrg
8407