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