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