ltmain.sh revision 1bedbe3f
1549e21daSmrg
21bedbe3fSmrg# libtool (GNU libtool) 2.4.2
3549e21daSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4549e21daSmrg
5549e21daSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
61bedbe3fSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7549e21daSmrg# This is free software; see the source for copying conditions.  There is NO
8549e21daSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9549e21daSmrg
10549e21daSmrg# GNU Libtool is free software; you can redistribute it and/or modify
11ba6a1819Smrg# it under the terms of the GNU General Public License as published by
12ba6a1819Smrg# the Free Software Foundation; either version 2 of the License, or
13ba6a1819Smrg# (at your option) any later version.
14ba6a1819Smrg#
15549e21daSmrg# As a special exception to the GNU General Public License,
16549e21daSmrg# if you distribute this file as part of a program or library that
17549e21daSmrg# is built using GNU Libtool, you may include this file under the
18549e21daSmrg# same distribution terms that you use for the rest of that program.
19549e21daSmrg#
20549e21daSmrg# GNU Libtool is distributed in the hope that it will be useful, but
21ba6a1819Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22ba6a1819Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23ba6a1819Smrg# General Public License for more details.
24ba6a1819Smrg#
25ba6a1819Smrg# You should have received a copy of the GNU General Public License
26549e21daSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27549e21daSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28549e21daSmrg# or obtained by writing to the Free Software Foundation, Inc.,
29549e21daSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30549e21daSmrg
31549e21daSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
32549e21daSmrg#
33549e21daSmrg# Provide generalized library-building support services.
34ba6a1819Smrg#
35549e21daSmrg#       --config             show all configuration variables
36549e21daSmrg#       --debug              enable verbose shell tracing
37549e21daSmrg#   -n, --dry-run            display commands without modifying any files
38549e21daSmrg#       --features           display basic configuration information and exit
39549e21daSmrg#       --mode=MODE          use operation mode MODE
40549e21daSmrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
41549e21daSmrg#       --quiet, --silent    don't print informational messages
42549e21daSmrg#       --no-quiet, --no-silent
43549e21daSmrg#                            print informational messages (default)
441bedbe3fSmrg#       --no-warn            don't display warning messages
45549e21daSmrg#       --tag=TAG            use configuration variables from tag TAG
46549e21daSmrg#   -v, --verbose            print more informational messages than default
47549e21daSmrg#       --no-verbose         don't print the extra informational messages
48549e21daSmrg#       --version            print version information
49549e21daSmrg#   -h, --help, --help-all   print short, long, or detailed help message
50549e21daSmrg#
51549e21daSmrg# MODE must be one of the following:
52549e21daSmrg#
53549e21daSmrg#         clean              remove files from the build directory
54549e21daSmrg#         compile            compile a source file into a libtool object
55549e21daSmrg#         execute            automatically set library path, then run a program
56549e21daSmrg#         finish             complete the installation of libtool libraries
57549e21daSmrg#         install            install libraries or executables
58549e21daSmrg#         link               create a library or an executable
59549e21daSmrg#         uninstall          remove libraries from an installed directory
60549e21daSmrg#
61549e21daSmrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
62549e21daSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63549e21daSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64549e21daSmrg#
65549e21daSmrg# When reporting a bug, please describe a test case to reproduce it and
66549e21daSmrg# include the following information:
67549e21daSmrg#
68549e21daSmrg#         host-triplet:	$host
69549e21daSmrg#         shell:		$SHELL
70549e21daSmrg#         compiler:		$LTCC
71549e21daSmrg#         compiler flags:		$LTCFLAGS
72549e21daSmrg#         linker:		$LD (gnu? $with_gnu_ld)
731bedbe3fSmrg#         $progname:	(GNU libtool) 2.4.2
74549e21daSmrg#         automake:	$automake_version
75549e21daSmrg#         autoconf:	$autoconf_version
76549e21daSmrg#
77549e21daSmrg# Report bugs to <bug-libtool@gnu.org>.
781bedbe3fSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
791bedbe3fSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
80549e21daSmrg
81549e21daSmrgPROGRAM=libtool
82549e21daSmrgPACKAGE=libtool
831bedbe3fSmrgVERSION=2.4.2
84549e21daSmrgTIMESTAMP=""
851bedbe3fSmrgpackage_revision=1.3337
86549e21daSmrg
87549e21daSmrg# Be Bourne compatible
88549e21daSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
89549e21daSmrg  emulate sh
90549e21daSmrg  NULLCMD=:
91549e21daSmrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
92549e21daSmrg  # is contrary to our usage.  Disable this feature.
93549e21daSmrg  alias -g '${1+"$@"}'='"$@"'
94549e21daSmrg  setopt NO_GLOB_SUBST
95549e21daSmrgelse
96549e21daSmrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
97549e21daSmrgfi
98549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
99549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh
100549e21daSmrg
101549e21daSmrg# A function that is used when there is no print builtin or printf.
102549e21daSmrgfunc_fallback_echo ()
103549e21daSmrg{
104549e21daSmrg  eval 'cat <<_LTECHO_EOF
105549e21daSmrg$1
106549e21daSmrg_LTECHO_EOF'
107549e21daSmrg}
108549e21daSmrg
109549e21daSmrg# NLS nuisances: We save the old values to restore during execute mode.
110549e21daSmrglt_user_locale=
111549e21daSmrglt_safe_locale=
112549e21daSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
113549e21daSmrgdo
114549e21daSmrg  eval "if test \"\${$lt_var+set}\" = set; then
115549e21daSmrg          save_$lt_var=\$$lt_var
116549e21daSmrg          $lt_var=C
117549e21daSmrg	  export $lt_var
118549e21daSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119549e21daSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
120549e21daSmrg	fi"
121549e21daSmrgdone
122549e21daSmrgLC_ALL=C
123549e21daSmrgLANGUAGE=C
124549e21daSmrgexport LANGUAGE LC_ALL
125549e21daSmrg
126549e21daSmrg$lt_unset CDPATH
127ba6a1819Smrg
128ba6a1819Smrg
129ba6a1819Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
130ba6a1819Smrg# is ksh but when the shell is invoked as "sh" and the current value of
131ba6a1819Smrg# the _XPG environment variable is not equal to 1 (one), the special
132ba6a1819Smrg# positional parameter $0, within a function call, is the name of the
133ba6a1819Smrg# function.
134ba6a1819Smrgprogpath="$0"
135ba6a1819Smrg
136549e21daSmrg
137549e21daSmrg
138549e21daSmrg: ${CP="cp -f"}
139549e21daSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140549e21daSmrg: ${MAKE="make"}
141549e21daSmrg: ${MKDIR="mkdir"}
142549e21daSmrg: ${MV="mv -f"}
143549e21daSmrg: ${RM="rm -f"}
144549e21daSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145549e21daSmrg: ${Xsed="$SED -e 1s/^X//"}
146ba6a1819Smrg
147ba6a1819Smrg# Global variables:
148ba6a1819SmrgEXIT_SUCCESS=0
149ba6a1819SmrgEXIT_FAILURE=1
150549e21daSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151549e21daSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152ba6a1819Smrg
153549e21daSmrgexit_status=$EXIT_SUCCESS
154ba6a1819Smrg
155549e21daSmrg# Make sure IFS has a sensible default
156549e21daSmrglt_nl='
157549e21daSmrg'
158549e21daSmrgIFS=" 	$lt_nl"
159ba6a1819Smrg
160549e21daSmrgdirname="s,/[^/]*$,,"
161549e21daSmrgbasename="s,^.*/,,"
162549e21daSmrg
1631bedbe3fSmrg# func_dirname file append nondir_replacement
1641bedbe3fSmrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
1651bedbe3fSmrg# otherwise set result to NONDIR_REPLACEMENT.
1661bedbe3fSmrgfunc_dirname ()
1671bedbe3fSmrg{
1681bedbe3fSmrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
1691bedbe3fSmrg    if test "X$func_dirname_result" = "X${1}"; then
1701bedbe3fSmrg      func_dirname_result="${3}"
1711bedbe3fSmrg    else
1721bedbe3fSmrg      func_dirname_result="$func_dirname_result${2}"
1731bedbe3fSmrg    fi
1741bedbe3fSmrg} # func_dirname may be replaced by extended shell implementation
1751bedbe3fSmrg
1761bedbe3fSmrg
1771bedbe3fSmrg# func_basename file
1781bedbe3fSmrgfunc_basename ()
1791bedbe3fSmrg{
1801bedbe3fSmrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
1811bedbe3fSmrg} # func_basename may be replaced by extended shell implementation
1821bedbe3fSmrg
1831bedbe3fSmrg
184549e21daSmrg# func_dirname_and_basename file append nondir_replacement
185549e21daSmrg# perform func_basename and func_dirname in a single function
186549e21daSmrg# call:
187549e21daSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
188549e21daSmrg#             add APPEND to the result, otherwise set result
189549e21daSmrg#             to NONDIR_REPLACEMENT.
190549e21daSmrg#             value returned in "$func_dirname_result"
191549e21daSmrg#   basename: Compute filename of FILE.
192549e21daSmrg#             value retuned in "$func_basename_result"
193549e21daSmrg# Implementation must be kept synchronized with func_dirname
194549e21daSmrg# and func_basename. For efficiency, we do not delegate to
195549e21daSmrg# those functions but instead duplicate the functionality here.
196549e21daSmrgfunc_dirname_and_basename ()
197549e21daSmrg{
1981bedbe3fSmrg    # Extract subdirectory from the argument.
1991bedbe3fSmrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
2001bedbe3fSmrg    if test "X$func_dirname_result" = "X${1}"; then
2011bedbe3fSmrg      func_dirname_result="${3}"
2021bedbe3fSmrg    else
2031bedbe3fSmrg      func_dirname_result="$func_dirname_result${2}"
2041bedbe3fSmrg    fi
2051bedbe3fSmrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
2061bedbe3fSmrg} # func_dirname_and_basename may be replaced by extended shell implementation
2071bedbe3fSmrg
2081bedbe3fSmrg
2091bedbe3fSmrg# func_stripname prefix suffix name
2101bedbe3fSmrg# strip PREFIX and SUFFIX off of NAME.
2111bedbe3fSmrg# PREFIX and SUFFIX must not contain globbing or regex special
2121bedbe3fSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading
2131bedbe3fSmrg# dot (in which case that matches only a dot).
2141bedbe3fSmrg# func_strip_suffix prefix name
2151bedbe3fSmrgfunc_stripname ()
2161bedbe3fSmrg{
2171bedbe3fSmrg    case ${2} in
2181bedbe3fSmrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
2191bedbe3fSmrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
2201bedbe3fSmrg    esac
2211bedbe3fSmrg} # func_stripname may be replaced by extended shell implementation
222ba6a1819Smrg
223549e21daSmrg
224549e21daSmrg# These SED scripts presuppose an absolute path with a trailing slash.
225549e21daSmrgpathcar='s,^/\([^/]*\).*$,\1,'
226549e21daSmrgpathcdr='s,^/[^/]*,,'
227549e21daSmrgremovedotparts=':dotsl
228549e21daSmrg		s@/\./@/@g
229549e21daSmrg		t dotsl
230549e21daSmrg		s,/\.$,/,'
231549e21daSmrgcollapseslashes='s@/\{1,\}@/@g'
232549e21daSmrgfinalslash='s,/*$,/,'
233549e21daSmrg
234549e21daSmrg# func_normal_abspath PATH
235549e21daSmrg# Remove doubled-up and trailing slashes, "." path components,
236549e21daSmrg# and cancel out any ".." path components in PATH after making
237549e21daSmrg# it an absolute path.
238549e21daSmrg#             value returned in "$func_normal_abspath_result"
239549e21daSmrgfunc_normal_abspath ()
240549e21daSmrg{
241549e21daSmrg  # Start from root dir and reassemble the path.
242549e21daSmrg  func_normal_abspath_result=
243549e21daSmrg  func_normal_abspath_tpath=$1
244549e21daSmrg  func_normal_abspath_altnamespace=
245549e21daSmrg  case $func_normal_abspath_tpath in
246549e21daSmrg    "")
247549e21daSmrg      # Empty path, that just means $cwd.
248549e21daSmrg      func_stripname '' '/' "`pwd`"
249549e21daSmrg      func_normal_abspath_result=$func_stripname_result
250549e21daSmrg      return
251549e21daSmrg    ;;
252549e21daSmrg    # The next three entries are used to spot a run of precisely
253549e21daSmrg    # two leading slashes without using negated character classes;
254549e21daSmrg    # we take advantage of case's first-match behaviour.
255549e21daSmrg    ///*)
256549e21daSmrg      # Unusual form of absolute path, do nothing.
257549e21daSmrg    ;;
258549e21daSmrg    //*)
259549e21daSmrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
260549e21daSmrg      # and for example Cygwin uses it to access remote file shares
261549e21daSmrg      # over CIFS/SMB, so we conserve a leading double slash if found.
262549e21daSmrg      func_normal_abspath_altnamespace=/
263549e21daSmrg    ;;
264549e21daSmrg    /*)
265549e21daSmrg      # Absolute path, do nothing.
266549e21daSmrg    ;;
267549e21daSmrg    *)
268549e21daSmrg      # Relative path, prepend $cwd.
269549e21daSmrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
270549e21daSmrg    ;;
271549e21daSmrg  esac
272549e21daSmrg  # Cancel out all the simple stuff to save iterations.  We also want
273549e21daSmrg  # the path to end with a slash for ease of parsing, so make sure
274549e21daSmrg  # there is one (and only one) here.
275549e21daSmrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
276549e21daSmrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
277549e21daSmrg  while :; do
278549e21daSmrg    # Processed it all yet?
279549e21daSmrg    if test "$func_normal_abspath_tpath" = / ; then
280549e21daSmrg      # If we ascended to the root using ".." the result may be empty now.
281549e21daSmrg      if test -z "$func_normal_abspath_result" ; then
282549e21daSmrg        func_normal_abspath_result=/
283549e21daSmrg      fi
284549e21daSmrg      break
285549e21daSmrg    fi
286549e21daSmrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
287549e21daSmrg        -e "$pathcar"`
288549e21daSmrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
289549e21daSmrg        -e "$pathcdr"`
290549e21daSmrg    # Figure out what to do with it
291549e21daSmrg    case $func_normal_abspath_tcomponent in
292549e21daSmrg      "")
293549e21daSmrg        # Trailing empty path component, ignore it.
294549e21daSmrg      ;;
295549e21daSmrg      ..)
296549e21daSmrg        # Parent dir; strip last assembled component from result.
297549e21daSmrg        func_dirname "$func_normal_abspath_result"
298549e21daSmrg        func_normal_abspath_result=$func_dirname_result
299549e21daSmrg      ;;
300549e21daSmrg      *)
301549e21daSmrg        # Actual path component, append it.
302549e21daSmrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
303549e21daSmrg      ;;
304549e21daSmrg    esac
305549e21daSmrg  done
306549e21daSmrg  # Restore leading double-slash if one was found on entry.
307549e21daSmrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308549e21daSmrg}
309ba6a1819Smrg
310549e21daSmrg# func_relative_path SRCDIR DSTDIR
311549e21daSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
312549e21daSmrg# slash if non-empty, suitable for immediately appending a filename
313549e21daSmrg# without needing to append a separator.
314549e21daSmrg#             value returned in "$func_relative_path_result"
315549e21daSmrgfunc_relative_path ()
316549e21daSmrg{
317549e21daSmrg  func_relative_path_result=
318549e21daSmrg  func_normal_abspath "$1"
319549e21daSmrg  func_relative_path_tlibdir=$func_normal_abspath_result
320549e21daSmrg  func_normal_abspath "$2"
321549e21daSmrg  func_relative_path_tbindir=$func_normal_abspath_result
322549e21daSmrg
323549e21daSmrg  # Ascend the tree starting from libdir
324549e21daSmrg  while :; do
325549e21daSmrg    # check if we have found a prefix of bindir
326549e21daSmrg    case $func_relative_path_tbindir in
327549e21daSmrg      $func_relative_path_tlibdir)
328549e21daSmrg        # found an exact match
329549e21daSmrg        func_relative_path_tcancelled=
330549e21daSmrg        break
331549e21daSmrg        ;;
332549e21daSmrg      $func_relative_path_tlibdir*)
333549e21daSmrg        # found a matching prefix
334549e21daSmrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
335549e21daSmrg        func_relative_path_tcancelled=$func_stripname_result
336549e21daSmrg        if test -z "$func_relative_path_result"; then
337549e21daSmrg          func_relative_path_result=.
338549e21daSmrg        fi
339549e21daSmrg        break
340549e21daSmrg        ;;
341549e21daSmrg      *)
342549e21daSmrg        func_dirname $func_relative_path_tlibdir
343549e21daSmrg        func_relative_path_tlibdir=${func_dirname_result}
344549e21daSmrg        if test "x$func_relative_path_tlibdir" = x ; then
345549e21daSmrg          # Have to descend all the way to the root!
346549e21daSmrg          func_relative_path_result=../$func_relative_path_result
347549e21daSmrg          func_relative_path_tcancelled=$func_relative_path_tbindir
348549e21daSmrg          break
349549e21daSmrg        fi
350549e21daSmrg        func_relative_path_result=../$func_relative_path_result
351549e21daSmrg        ;;
352549e21daSmrg    esac
353549e21daSmrg  done
354549e21daSmrg
355549e21daSmrg  # Now calculate path; take care to avoid doubling-up slashes.
356549e21daSmrg  func_stripname '' '/' "$func_relative_path_result"
357549e21daSmrg  func_relative_path_result=$func_stripname_result
358549e21daSmrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
359549e21daSmrg  if test "x$func_stripname_result" != x ; then
360549e21daSmrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
361549e21daSmrg  fi
362549e21daSmrg
363549e21daSmrg  # Normalisation. If bindir is libdir, return empty string,
364549e21daSmrg  # else relative path ending with a slash; either way, target
365549e21daSmrg  # file name can be directly appended.
366549e21daSmrg  if test ! -z "$func_relative_path_result"; then
367549e21daSmrg    func_stripname './' '' "$func_relative_path_result/"
368549e21daSmrg    func_relative_path_result=$func_stripname_result
369549e21daSmrg  fi
370549e21daSmrg}
371549e21daSmrg
372549e21daSmrg# The name of this program:
373549e21daSmrgfunc_dirname_and_basename "$progpath"
374549e21daSmrgprogname=$func_basename_result
375549e21daSmrg
376549e21daSmrg# Make sure we have an absolute path for reexecution:
377549e21daSmrgcase $progpath in
378549e21daSmrg  [\\/]*|[A-Za-z]:\\*) ;;
379549e21daSmrg  *[\\/]*)
380549e21daSmrg     progdir=$func_dirname_result
381549e21daSmrg     progdir=`cd "$progdir" && pwd`
382549e21daSmrg     progpath="$progdir/$progname"
383549e21daSmrg     ;;
384549e21daSmrg  *)
385549e21daSmrg     save_IFS="$IFS"
3861bedbe3fSmrg     IFS=${PATH_SEPARATOR-:}
387549e21daSmrg     for progdir in $PATH; do
388549e21daSmrg       IFS="$save_IFS"
389549e21daSmrg       test -x "$progdir/$progname" && break
390549e21daSmrg     done
391549e21daSmrg     IFS="$save_IFS"
392549e21daSmrg     test -n "$progdir" || progdir=`pwd`
393549e21daSmrg     progpath="$progdir/$progname"
394549e21daSmrg     ;;
395549e21daSmrgesac
396ba6a1819Smrg
397ba6a1819Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
398ba6a1819Smrg# metacharacters that are still active within double-quoted strings.
399ba6a1819SmrgXsed="${SED}"' -e 1s/^X//'
400549e21daSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401549e21daSmrg
402549e21daSmrg# Same as above, but do not quote variable references.
403549e21daSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404549e21daSmrg
4051bedbe3fSmrg# Sed substitution that turns a string into a regex matching for the
4061bedbe3fSmrg# string literally.
4071bedbe3fSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
4081bedbe3fSmrg
4091bedbe3fSmrg# Sed substitution that converts a w32 file name or path
4101bedbe3fSmrg# which contains forward slashes, into one that contains
4111bedbe3fSmrg# (escaped) backslashes.  A very naive implementation.
4121bedbe3fSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
4131bedbe3fSmrg
414549e21daSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
415549e21daSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416549e21daSmrg# in input to double_quote_subst, that '$' was protected from expansion.
417549e21daSmrg# Since each input `\' is now two `\'s, look for any number of runs of
418549e21daSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419549e21daSmrgbs='\\'
420549e21daSmrgbs2='\\\\'
421549e21daSmrgbs4='\\\\\\\\'
422549e21daSmrgdollar='\$'
423549e21daSmrgsed_double_backslash="\
424549e21daSmrg  s/$bs4/&\\
425549e21daSmrg/g
426549e21daSmrg  s/^$bs2$dollar/$bs&/
427549e21daSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428549e21daSmrg  s/\n//g"
429549e21daSmrg
430549e21daSmrg# Standard options:
431549e21daSmrgopt_dry_run=false
432549e21daSmrgopt_help=false
433549e21daSmrgopt_quiet=false
434549e21daSmrgopt_verbose=false
435549e21daSmrgopt_warning=:
436549e21daSmrg
437549e21daSmrg# func_echo arg...
438549e21daSmrg# Echo program name prefixed message, along with the current mode
439549e21daSmrg# name if it has been set yet.
440549e21daSmrgfunc_echo ()
441549e21daSmrg{
4421bedbe3fSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443549e21daSmrg}
444ba6a1819Smrg
445549e21daSmrg# func_verbose arg...
446549e21daSmrg# Echo program name prefixed message in verbose mode only.
447549e21daSmrgfunc_verbose ()
448549e21daSmrg{
449549e21daSmrg    $opt_verbose && func_echo ${1+"$@"}
450ba6a1819Smrg
451549e21daSmrg    # A bug in bash halts the script if the last line of a function
452549e21daSmrg    # fails when set -e is in force, so we need another command to
453549e21daSmrg    # work around that:
454549e21daSmrg    :
455549e21daSmrg}
456ba6a1819Smrg
457549e21daSmrg# func_echo_all arg...
458549e21daSmrg# Invoke $ECHO with all args, space-separated.
459549e21daSmrgfunc_echo_all ()
460549e21daSmrg{
461549e21daSmrg    $ECHO "$*"
462549e21daSmrg}
463ba6a1819Smrg
464549e21daSmrg# func_error arg...
465549e21daSmrg# Echo program name prefixed message to standard error.
466549e21daSmrgfunc_error ()
467549e21daSmrg{
4681bedbe3fSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469549e21daSmrg}
470549e21daSmrg
471549e21daSmrg# func_warning arg...
472549e21daSmrg# Echo program name prefixed warning message to standard error.
473549e21daSmrgfunc_warning ()
474549e21daSmrg{
4751bedbe3fSmrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476549e21daSmrg
477549e21daSmrg    # bash bug again:
478549e21daSmrg    :
479549e21daSmrg}
480549e21daSmrg
481549e21daSmrg# func_fatal_error arg...
482549e21daSmrg# Echo program name prefixed message to standard error, and exit.
483549e21daSmrgfunc_fatal_error ()
484549e21daSmrg{
485549e21daSmrg    func_error ${1+"$@"}
486549e21daSmrg    exit $EXIT_FAILURE
487549e21daSmrg}
488549e21daSmrg
489549e21daSmrg# func_fatal_help arg...
490549e21daSmrg# Echo program name prefixed message to standard error, followed by
491549e21daSmrg# a help hint, and exit.
492549e21daSmrgfunc_fatal_help ()
493549e21daSmrg{
494549e21daSmrg    func_error ${1+"$@"}
495549e21daSmrg    func_fatal_error "$help"
496549e21daSmrg}
497549e21daSmrghelp="Try \`$progname --help' for more information."  ## default
498549e21daSmrg
499549e21daSmrg
500549e21daSmrg# func_grep expression filename
501549e21daSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502549e21daSmrgfunc_grep ()
503549e21daSmrg{
504549e21daSmrg    $GREP "$1" "$2" >/dev/null 2>&1
505549e21daSmrg}
506549e21daSmrg
507549e21daSmrg
508549e21daSmrg# func_mkdir_p directory-path
509549e21daSmrg# Make sure the entire path to DIRECTORY-PATH is available.
510549e21daSmrgfunc_mkdir_p ()
511549e21daSmrg{
512549e21daSmrg    my_directory_path="$1"
513549e21daSmrg    my_dir_list=
514549e21daSmrg
515549e21daSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516549e21daSmrg
517549e21daSmrg      # Protect directory names starting with `-'
518549e21daSmrg      case $my_directory_path in
519549e21daSmrg        -*) my_directory_path="./$my_directory_path" ;;
520549e21daSmrg      esac
521549e21daSmrg
522549e21daSmrg      # While some portion of DIR does not yet exist...
523549e21daSmrg      while test ! -d "$my_directory_path"; do
524549e21daSmrg        # ...make a list in topmost first order.  Use a colon delimited
525549e21daSmrg	# list incase some portion of path contains whitespace.
526549e21daSmrg        my_dir_list="$my_directory_path:$my_dir_list"
527549e21daSmrg
528549e21daSmrg        # If the last portion added has no slash in it, the list is done
529549e21daSmrg        case $my_directory_path in */*) ;; *) break ;; esac
530549e21daSmrg
531549e21daSmrg        # ...otherwise throw away the child directory and loop
532549e21daSmrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533549e21daSmrg      done
534549e21daSmrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535549e21daSmrg
536549e21daSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
537549e21daSmrg      for my_dir in $my_dir_list; do
538549e21daSmrg	IFS="$save_mkdir_p_IFS"
539549e21daSmrg        # mkdir can fail with a `File exist' error if two processes
540549e21daSmrg        # try to create one of the directories concurrently.  Don't
541549e21daSmrg        # stop in that case!
542549e21daSmrg        $MKDIR "$my_dir" 2>/dev/null || :
543549e21daSmrg      done
544549e21daSmrg      IFS="$save_mkdir_p_IFS"
545549e21daSmrg
546549e21daSmrg      # Bail out if we (or some other process) failed to create a directory.
547549e21daSmrg      test -d "$my_directory_path" || \
548549e21daSmrg        func_fatal_error "Failed to create \`$1'"
549549e21daSmrg    fi
550549e21daSmrg}
551ba6a1819Smrg
552ba6a1819Smrg
553ba6a1819Smrg# func_mktempdir [string]
554ba6a1819Smrg# Make a temporary directory that won't clash with other running
555ba6a1819Smrg# libtool processes, and avoids race conditions if possible.  If
556ba6a1819Smrg# given, STRING is the basename for that directory.
557ba6a1819Smrgfunc_mktempdir ()
558ba6a1819Smrg{
559ba6a1819Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
560ba6a1819Smrg
561549e21daSmrg    if test "$opt_dry_run" = ":"; then
562ba6a1819Smrg      # Return a directory name, but don't create it in dry-run mode
563ba6a1819Smrg      my_tmpdir="${my_template}-$$"
564ba6a1819Smrg    else
565ba6a1819Smrg
566ba6a1819Smrg      # If mktemp works, use that first and foremost
567ba6a1819Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568ba6a1819Smrg
569ba6a1819Smrg      if test ! -d "$my_tmpdir"; then
570549e21daSmrg        # Failing that, at least try and use $RANDOM to avoid a race
571549e21daSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
572ba6a1819Smrg
573549e21daSmrg        save_mktempdir_umask=`umask`
574549e21daSmrg        umask 0077
575549e21daSmrg        $MKDIR "$my_tmpdir"
576549e21daSmrg        umask $save_mktempdir_umask
577ba6a1819Smrg      fi
578ba6a1819Smrg
579ba6a1819Smrg      # If we're not in dry-run mode, bomb out on failure
580549e21daSmrg      test -d "$my_tmpdir" || \
581549e21daSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
582ba6a1819Smrg    fi
583ba6a1819Smrg
584549e21daSmrg    $ECHO "$my_tmpdir"
585ba6a1819Smrg}
586ba6a1819Smrg
587ba6a1819Smrg
588549e21daSmrg# func_quote_for_eval arg
589549e21daSmrg# Aesthetically quote ARG to be evaled later.
590549e21daSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591549e21daSmrg# is double-quoted, suitable for a subsequent eval, whereas
592549e21daSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593549e21daSmrg# which are still active within double quotes backslashified.
594549e21daSmrgfunc_quote_for_eval ()
595ba6a1819Smrg{
596549e21daSmrg    case $1 in
597549e21daSmrg      *[\\\`\"\$]*)
598549e21daSmrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599549e21daSmrg      *)
600549e21daSmrg        func_quote_for_eval_unquoted_result="$1" ;;
601549e21daSmrg    esac
602549e21daSmrg
603549e21daSmrg    case $func_quote_for_eval_unquoted_result in
604549e21daSmrg      # Double-quote args containing shell metacharacters to delay
605549e21daSmrg      # word splitting, command substitution and and variable
606549e21daSmrg      # expansion for a subsequent eval.
607549e21daSmrg      # Many Bourne shells cannot handle close brackets correctly
608549e21daSmrg      # in scan sets, so we specify it separately.
609549e21daSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610549e21daSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611549e21daSmrg        ;;
612549e21daSmrg      *)
613549e21daSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
614ba6a1819Smrg    esac
615ba6a1819Smrg}
616ba6a1819Smrg
617ba6a1819Smrg
618549e21daSmrg# func_quote_for_expand arg
619549e21daSmrg# Aesthetically quote ARG to be evaled later; same as above,
620549e21daSmrg# but do not quote variable references.
621549e21daSmrgfunc_quote_for_expand ()
622ba6a1819Smrg{
623549e21daSmrg    case $1 in
624549e21daSmrg      *[\\\`\"]*)
625549e21daSmrg	my_arg=`$ECHO "$1" | $SED \
626549e21daSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
627ba6a1819Smrg      *)
628549e21daSmrg        my_arg="$1" ;;
629549e21daSmrg    esac
630549e21daSmrg
631549e21daSmrg    case $my_arg in
632549e21daSmrg      # Double-quote args containing shell metacharacters to delay
633549e21daSmrg      # word splitting and command substitution for a subsequent eval.
634549e21daSmrg      # Many Bourne shells cannot handle close brackets correctly
635549e21daSmrg      # in scan sets, so we specify it separately.
636549e21daSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637549e21daSmrg        my_arg="\"$my_arg\""
638549e21daSmrg        ;;
639549e21daSmrg    esac
640549e21daSmrg
641549e21daSmrg    func_quote_for_expand_result="$my_arg"
642ba6a1819Smrg}
643ba6a1819Smrg
644ba6a1819Smrg
645549e21daSmrg# func_show_eval cmd [fail_exp]
646549e21daSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647549e21daSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648549e21daSmrg# is given, then evaluate it.
649549e21daSmrgfunc_show_eval ()
650ba6a1819Smrg{
651549e21daSmrg    my_cmd="$1"
652549e21daSmrg    my_fail_exp="${2-:}"
653ba6a1819Smrg
654549e21daSmrg    ${opt_silent-false} || {
655549e21daSmrg      func_quote_for_expand "$my_cmd"
656549e21daSmrg      eval "func_echo $func_quote_for_expand_result"
657549e21daSmrg    }
658549e21daSmrg
659549e21daSmrg    if ${opt_dry_run-false}; then :; else
660549e21daSmrg      eval "$my_cmd"
661549e21daSmrg      my_status=$?
662549e21daSmrg      if test "$my_status" -eq 0; then :; else
663549e21daSmrg	eval "(exit $my_status); $my_fail_exp"
664549e21daSmrg      fi
665ba6a1819Smrg    fi
666ba6a1819Smrg}
667ba6a1819Smrg
668549e21daSmrg
669549e21daSmrg# func_show_eval_locale cmd [fail_exp]
670549e21daSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671549e21daSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672549e21daSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
673549e21daSmrgfunc_show_eval_locale ()
674ba6a1819Smrg{
675549e21daSmrg    my_cmd="$1"
676549e21daSmrg    my_fail_exp="${2-:}"
677ba6a1819Smrg
678549e21daSmrg    ${opt_silent-false} || {
679549e21daSmrg      func_quote_for_expand "$my_cmd"
680549e21daSmrg      eval "func_echo $func_quote_for_expand_result"
681549e21daSmrg    }
682549e21daSmrg
683549e21daSmrg    if ${opt_dry_run-false}; then :; else
684549e21daSmrg      eval "$lt_user_locale
685549e21daSmrg	    $my_cmd"
686549e21daSmrg      my_status=$?
687549e21daSmrg      eval "$lt_safe_locale"
688549e21daSmrg      if test "$my_status" -eq 0; then :; else
689549e21daSmrg	eval "(exit $my_status); $my_fail_exp"
690ba6a1819Smrg      fi
691549e21daSmrg    fi
692ba6a1819Smrg}
693ba6a1819Smrg
6941bedbe3fSmrg# func_tr_sh
6951bedbe3fSmrg# Turn $1 into a string suitable for a shell variable name.
6961bedbe3fSmrg# Result is stored in $func_tr_sh_result.  All characters
6971bedbe3fSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
6981bedbe3fSmrg# if $1 begins with a digit, a '_' is prepended as well.
6991bedbe3fSmrgfunc_tr_sh ()
7001bedbe3fSmrg{
7011bedbe3fSmrg  case $1 in
7021bedbe3fSmrg  [0-9]* | *[!a-zA-Z0-9_]*)
7031bedbe3fSmrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7041bedbe3fSmrg    ;;
7051bedbe3fSmrg  * )
7061bedbe3fSmrg    func_tr_sh_result=$1
7071bedbe3fSmrg    ;;
7081bedbe3fSmrg  esac
7091bedbe3fSmrg}
7101bedbe3fSmrg
711ba6a1819Smrg
712549e21daSmrg# func_version
713549e21daSmrg# Echo version message to standard output and exit.
714549e21daSmrgfunc_version ()
715549e21daSmrg{
7161bedbe3fSmrg    $opt_debug
7171bedbe3fSmrg
718549e21daSmrg    $SED -n '/(C)/!b go
719549e21daSmrg	:more
720549e21daSmrg	/\./!{
721549e21daSmrg	  N
722549e21daSmrg	  s/\n# / /
723549e21daSmrg	  b more
724549e21daSmrg	}
725549e21daSmrg	:go
726549e21daSmrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
727549e21daSmrg        s/^# //
728549e21daSmrg	s/^# *$//
729549e21daSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730549e21daSmrg        p
731549e21daSmrg     }' < "$progpath"
732549e21daSmrg     exit $?
733549e21daSmrg}
734ba6a1819Smrg
735549e21daSmrg# func_usage
736549e21daSmrg# Echo short help message to standard output and exit.
737549e21daSmrgfunc_usage ()
738549e21daSmrg{
7391bedbe3fSmrg    $opt_debug
7401bedbe3fSmrg
741549e21daSmrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742549e21daSmrg        s/^# //
743549e21daSmrg	s/^# *$//
744549e21daSmrg	s/\$progname/'$progname'/
745549e21daSmrg	p
746549e21daSmrg    }' < "$progpath"
747549e21daSmrg    echo
748549e21daSmrg    $ECHO "run \`$progname --help | more' for full usage"
749549e21daSmrg    exit $?
750549e21daSmrg}
751ba6a1819Smrg
752549e21daSmrg# func_help [NOEXIT]
753549e21daSmrg# Echo long help message to standard output and exit,
754549e21daSmrg# unless 'noexit' is passed as argument.
755549e21daSmrgfunc_help ()
756549e21daSmrg{
7571bedbe3fSmrg    $opt_debug
7581bedbe3fSmrg
759549e21daSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
7601bedbe3fSmrg	:print
761549e21daSmrg        s/^# //
762549e21daSmrg	s/^# *$//
763549e21daSmrg	s*\$progname*'$progname'*
764549e21daSmrg	s*\$host*'"$host"'*
765549e21daSmrg	s*\$SHELL*'"$SHELL"'*
766549e21daSmrg	s*\$LTCC*'"$LTCC"'*
767549e21daSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768549e21daSmrg	s*\$LD*'"$LD"'*
769549e21daSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7701bedbe3fSmrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
7711bedbe3fSmrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772549e21daSmrg	p
7731bedbe3fSmrg	d
7741bedbe3fSmrg     }
7751bedbe3fSmrg     /^# .* home page:/b print
7761bedbe3fSmrg     /^# General help using/b print
7771bedbe3fSmrg     ' < "$progpath"
778549e21daSmrg    ret=$?
779549e21daSmrg    if test -z "$1"; then
780549e21daSmrg      exit $ret
781549e21daSmrg    fi
782549e21daSmrg}
783ba6a1819Smrg
784549e21daSmrg# func_missing_arg argname
785549e21daSmrg# Echo program name prefixed message to standard error and set global
786549e21daSmrg# exit_cmd.
787549e21daSmrgfunc_missing_arg ()
788549e21daSmrg{
7891bedbe3fSmrg    $opt_debug
7901bedbe3fSmrg
791549e21daSmrg    func_error "missing argument for $1."
792549e21daSmrg    exit_cmd=exit
793549e21daSmrg}
794ba6a1819Smrg
795ba6a1819Smrg
7961bedbe3fSmrg# func_split_short_opt shortopt
7971bedbe3fSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
7981bedbe3fSmrg# variables after splitting SHORTOPT after the 2nd character.
7991bedbe3fSmrgfunc_split_short_opt ()
8001bedbe3fSmrg{
8011bedbe3fSmrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
8021bedbe3fSmrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
8031bedbe3fSmrg
8041bedbe3fSmrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
8051bedbe3fSmrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
8061bedbe3fSmrg} # func_split_short_opt may be replaced by extended shell implementation
8071bedbe3fSmrg
8081bedbe3fSmrg
8091bedbe3fSmrg# func_split_long_opt longopt
8101bedbe3fSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
8111bedbe3fSmrg# variables after splitting LONGOPT at the `=' sign.
8121bedbe3fSmrgfunc_split_long_opt ()
8131bedbe3fSmrg{
8141bedbe3fSmrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
8151bedbe3fSmrg    my_sed_long_arg='1s/^--[^=]*=//'
8161bedbe3fSmrg
8171bedbe3fSmrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
8181bedbe3fSmrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
8191bedbe3fSmrg} # func_split_long_opt may be replaced by extended shell implementation
8201bedbe3fSmrg
8211bedbe3fSmrgexit_cmd=:
822ba6a1819Smrg
823ba6a1819Smrg
824ba6a1819Smrg
825549e21daSmrg
826549e21daSmrg
827549e21daSmrgmagic="%%%MAGIC variable%%%"
828549e21daSmrgmagic_exe="%%%MAGIC EXE variable%%%"
829549e21daSmrg
830549e21daSmrg# Global variables.
831549e21daSmrgnonopt=
832549e21daSmrgpreserve_args=
833549e21daSmrglo2o="s/\\.lo\$/.${objext}/"
834549e21daSmrgo2lo="s/\\.${objext}\$/.lo/"
835549e21daSmrgextracted_archives=
836549e21daSmrgextracted_serial=0
837549e21daSmrg
838549e21daSmrg# If this variable is set in any of the actions, the command in it
839549e21daSmrg# will be execed at the end.  This prevents here-documents from being
840549e21daSmrg# left over by shells.
841549e21daSmrgexec_cmd=
842549e21daSmrg
8431bedbe3fSmrg# func_append var value
8441bedbe3fSmrg# Append VALUE to the end of shell variable VAR.
8451bedbe3fSmrgfunc_append ()
8461bedbe3fSmrg{
8471bedbe3fSmrg    eval "${1}=\$${1}\${2}"
8481bedbe3fSmrg} # func_append may be replaced by extended shell implementation
8491bedbe3fSmrg
8501bedbe3fSmrg# func_append_quoted var value
8511bedbe3fSmrg# Quote VALUE and append to the end of shell variable VAR, separated
8521bedbe3fSmrg# by a space.
8531bedbe3fSmrgfunc_append_quoted ()
8541bedbe3fSmrg{
8551bedbe3fSmrg    func_quote_for_eval "${2}"
8561bedbe3fSmrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
8571bedbe3fSmrg} # func_append_quoted may be replaced by extended shell implementation
8581bedbe3fSmrg
8591bedbe3fSmrg
8601bedbe3fSmrg# func_arith arithmetic-term...
8611bedbe3fSmrgfunc_arith ()
8621bedbe3fSmrg{
8631bedbe3fSmrg    func_arith_result=`expr "${@}"`
8641bedbe3fSmrg} # func_arith may be replaced by extended shell implementation
8651bedbe3fSmrg
8661bedbe3fSmrg
8671bedbe3fSmrg# func_len string
8681bedbe3fSmrg# STRING may not start with a hyphen.
8691bedbe3fSmrgfunc_len ()
8701bedbe3fSmrg{
8711bedbe3fSmrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
8721bedbe3fSmrg} # func_len may be replaced by extended shell implementation
8731bedbe3fSmrg
8741bedbe3fSmrg
8751bedbe3fSmrg# func_lo2o object
8761bedbe3fSmrgfunc_lo2o ()
8771bedbe3fSmrg{
8781bedbe3fSmrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
8791bedbe3fSmrg} # func_lo2o may be replaced by extended shell implementation
8801bedbe3fSmrg
8811bedbe3fSmrg
8821bedbe3fSmrg# func_xform libobj-or-source
8831bedbe3fSmrgfunc_xform ()
8841bedbe3fSmrg{
8851bedbe3fSmrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
8861bedbe3fSmrg} # func_xform may be replaced by extended shell implementation
8871bedbe3fSmrg
8881bedbe3fSmrg
889549e21daSmrg# func_fatal_configuration arg...
890549e21daSmrg# Echo program name prefixed message to standard error, followed by
891549e21daSmrg# a configuration failure hint, and exit.
892549e21daSmrgfunc_fatal_configuration ()
893549e21daSmrg{
894549e21daSmrg    func_error ${1+"$@"}
895549e21daSmrg    func_error "See the $PACKAGE documentation for more information."
896549e21daSmrg    func_fatal_error "Fatal configuration error."
897549e21daSmrg}
898549e21daSmrg
899549e21daSmrg
900549e21daSmrg# func_config
901549e21daSmrg# Display the configuration for all the tags in this script.
902549e21daSmrgfunc_config ()
903549e21daSmrg{
904549e21daSmrg    re_begincf='^# ### BEGIN LIBTOOL'
905549e21daSmrg    re_endcf='^# ### END LIBTOOL'
906549e21daSmrg
907549e21daSmrg    # Default configuration.
908549e21daSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
909549e21daSmrg
910ba6a1819Smrg    # Now print the configurations for the tags.
911ba6a1819Smrg    for tagname in $taglist; do
912549e21daSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913ba6a1819Smrg    done
914ba6a1819Smrg
915549e21daSmrg    exit $?
916549e21daSmrg}
917ba6a1819Smrg
918549e21daSmrg# func_features
919549e21daSmrg# Display the features supported by this script.
920549e21daSmrgfunc_features ()
921549e21daSmrg{
922549e21daSmrg    echo "host: $host"
923ba6a1819Smrg    if test "$build_libtool_libs" = yes; then
924549e21daSmrg      echo "enable shared libraries"
925ba6a1819Smrg    else
926549e21daSmrg      echo "disable shared libraries"
927ba6a1819Smrg    fi
928ba6a1819Smrg    if test "$build_old_libs" = yes; then
929549e21daSmrg      echo "enable static libraries"
930ba6a1819Smrg    else
931549e21daSmrg      echo "disable static libraries"
932ba6a1819Smrg    fi
933549e21daSmrg
934ba6a1819Smrg    exit $?
935549e21daSmrg}
936549e21daSmrg
937549e21daSmrg# func_enable_tag tagname
938549e21daSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939549e21daSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940549e21daSmrg# variable here.
941549e21daSmrgfunc_enable_tag ()
942549e21daSmrg{
943549e21daSmrg  # Global variable:
944549e21daSmrg  tagname="$1"
945ba6a1819Smrg
946549e21daSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947549e21daSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948549e21daSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949ba6a1819Smrg
950549e21daSmrg  # Validate tagname.
951549e21daSmrg  case $tagname in
952549e21daSmrg    *[!-_A-Za-z0-9,/]*)
953549e21daSmrg      func_fatal_error "invalid tag name: $tagname"
954549e21daSmrg      ;;
955549e21daSmrg  esac
956ba6a1819Smrg
957549e21daSmrg  # Don't test for the "default" C tag, as we know it's
958549e21daSmrg  # there but not specially marked.
959549e21daSmrg  case $tagname in
960549e21daSmrg    CC) ;;
961549e21daSmrg    *)
962549e21daSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963549e21daSmrg	taglist="$taglist $tagname"
964549e21daSmrg
965549e21daSmrg	# Evaluate the configuration.  Be careful to quote the path
966549e21daSmrg	# and the sed script, to avoid splitting on whitespace, but
967549e21daSmrg	# also don't use non-portable quotes within backquotes within
968549e21daSmrg	# quotes we have to do it in 2 steps:
969549e21daSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970549e21daSmrg	eval "$extractedcf"
971549e21daSmrg      else
972549e21daSmrg	func_error "ignoring unknown tag $tagname"
973549e21daSmrg      fi
974549e21daSmrg      ;;
975549e21daSmrg  esac
976549e21daSmrg}
977ba6a1819Smrg
9781bedbe3fSmrg# func_check_version_match
9791bedbe3fSmrg# Ensure that we are using m4 macros, and libtool script from the same
9801bedbe3fSmrg# release of libtool.
9811bedbe3fSmrgfunc_check_version_match ()
982549e21daSmrg{
9831bedbe3fSmrg  if test "$package_revision" != "$macro_revision"; then
9841bedbe3fSmrg    if test "$VERSION" != "$macro_version"; then
9851bedbe3fSmrg      if test -z "$macro_version"; then
9861bedbe3fSmrg        cat >&2 <<_LT_EOF
9871bedbe3fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9881bedbe3fSmrg$progname: definition of this LT_INIT comes from an older release.
9891bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9901bedbe3fSmrg$progname: and run autoconf again.
9911bedbe3fSmrg_LT_EOF
9921bedbe3fSmrg      else
9931bedbe3fSmrg        cat >&2 <<_LT_EOF
9941bedbe3fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9951bedbe3fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
9961bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9971bedbe3fSmrg$progname: and run autoconf again.
9981bedbe3fSmrg_LT_EOF
9991bedbe3fSmrg      fi
10001bedbe3fSmrg    else
10011bedbe3fSmrg      cat >&2 <<_LT_EOF
10021bedbe3fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
10031bedbe3fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
10041bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
10051bedbe3fSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
10061bedbe3fSmrg_LT_EOF
10071bedbe3fSmrg    fi
10081bedbe3fSmrg
10091bedbe3fSmrg    exit $EXIT_MISMATCH
10101bedbe3fSmrg  fi
10111bedbe3fSmrg}
10121bedbe3fSmrg
10131bedbe3fSmrg
10141bedbe3fSmrg# Shorthand for --mode=foo, only valid as the first argument
10151bedbe3fSmrgcase $1 in
10161bedbe3fSmrgclean|clea|cle|cl)
10171bedbe3fSmrg  shift; set dummy --mode clean ${1+"$@"}; shift
10181bedbe3fSmrg  ;;
10191bedbe3fSmrgcompile|compil|compi|comp|com|co|c)
10201bedbe3fSmrg  shift; set dummy --mode compile ${1+"$@"}; shift
10211bedbe3fSmrg  ;;
10221bedbe3fSmrgexecute|execut|execu|exec|exe|ex|e)
10231bedbe3fSmrg  shift; set dummy --mode execute ${1+"$@"}; shift
10241bedbe3fSmrg  ;;
10251bedbe3fSmrgfinish|finis|fini|fin|fi|f)
10261bedbe3fSmrg  shift; set dummy --mode finish ${1+"$@"}; shift
10271bedbe3fSmrg  ;;
10281bedbe3fSmrginstall|instal|insta|inst|ins|in|i)
10291bedbe3fSmrg  shift; set dummy --mode install ${1+"$@"}; shift
10301bedbe3fSmrg  ;;
10311bedbe3fSmrglink|lin|li|l)
10321bedbe3fSmrg  shift; set dummy --mode link ${1+"$@"}; shift
10331bedbe3fSmrg  ;;
10341bedbe3fSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
10351bedbe3fSmrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10361bedbe3fSmrg  ;;
10371bedbe3fSmrgesac
10381bedbe3fSmrg
10391bedbe3fSmrg
10401bedbe3fSmrg
10411bedbe3fSmrg# Option defaults:
10421bedbe3fSmrgopt_debug=:
10431bedbe3fSmrgopt_dry_run=false
10441bedbe3fSmrgopt_config=false
10451bedbe3fSmrgopt_preserve_dup_deps=false
10461bedbe3fSmrgopt_features=false
10471bedbe3fSmrgopt_finish=false
10481bedbe3fSmrgopt_help=false
10491bedbe3fSmrgopt_help_all=false
10501bedbe3fSmrgopt_silent=:
10511bedbe3fSmrgopt_warning=:
10521bedbe3fSmrgopt_verbose=:
10531bedbe3fSmrgopt_silent=false
10541bedbe3fSmrgopt_verbose=false
1055ba6a1819Smrg
1056ba6a1819Smrg
10571bedbe3fSmrg# Parse options once, thoroughly.  This comes as soon as possible in the
10581bedbe3fSmrg# script to make things like `--version' happen as quickly as we can.
10591bedbe3fSmrg{
10601bedbe3fSmrg  # this just eases exit handling
10611bedbe3fSmrg  while test $# -gt 0; do
1062549e21daSmrg    opt="$1"
1063549e21daSmrg    shift
1064549e21daSmrg    case $opt in
10651bedbe3fSmrg      --debug|-x)	opt_debug='set -x'
1066549e21daSmrg			func_echo "enabling shell trace mode"
1067549e21daSmrg			$opt_debug
1068549e21daSmrg			;;
10691bedbe3fSmrg      --dry-run|--dryrun|-n)
10701bedbe3fSmrg			opt_dry_run=:
1071549e21daSmrg			;;
10721bedbe3fSmrg      --config)
10731bedbe3fSmrg			opt_config=:
10741bedbe3fSmrgfunc_config
10751bedbe3fSmrg			;;
10761bedbe3fSmrg      --dlopen|-dlopen)
10771bedbe3fSmrg			optarg="$1"
10781bedbe3fSmrg			opt_dlopen="${opt_dlopen+$opt_dlopen
10791bedbe3fSmrg}$optarg"
1080549e21daSmrg			shift
1081549e21daSmrg			;;
1082549e21daSmrg      --preserve-dup-deps)
10831bedbe3fSmrg			opt_preserve_dup_deps=:
1084549e21daSmrg			;;
10851bedbe3fSmrg      --features)
10861bedbe3fSmrg			opt_features=:
10871bedbe3fSmrgfunc_features
1088549e21daSmrg			;;
10891bedbe3fSmrg      --finish)
10901bedbe3fSmrg			opt_finish=:
10911bedbe3fSmrgset dummy --mode finish ${1+"$@"}; shift
10921bedbe3fSmrg			;;
10931bedbe3fSmrg      --help)
10941bedbe3fSmrg			opt_help=:
10951bedbe3fSmrg			;;
10961bedbe3fSmrg      --help-all)
10971bedbe3fSmrg			opt_help_all=:
10981bedbe3fSmrgopt_help=': help-all'
10991bedbe3fSmrg			;;
11001bedbe3fSmrg      --mode)
11011bedbe3fSmrg			test $# = 0 && func_missing_arg $opt && break
11021bedbe3fSmrg			optarg="$1"
11031bedbe3fSmrg			opt_mode="$optarg"
11041bedbe3fSmrgcase $optarg in
11051bedbe3fSmrg  # Valid mode arguments:
11061bedbe3fSmrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
11071bedbe3fSmrg
11081bedbe3fSmrg  # Catch anything else as an error
11091bedbe3fSmrg  *) func_error "invalid argument for $opt"
11101bedbe3fSmrg     exit_cmd=exit
11111bedbe3fSmrg     break
11121bedbe3fSmrg     ;;
11131bedbe3fSmrgesac
11141bedbe3fSmrg			shift
11151bedbe3fSmrg			;;
11161bedbe3fSmrg      --no-silent|--no-quiet)
1117549e21daSmrg			opt_silent=false
11181bedbe3fSmrgfunc_append preserve_args " $opt"
1119549e21daSmrg			;;
11201bedbe3fSmrg      --no-warning|--no-warn)
11211bedbe3fSmrg			opt_warning=false
11221bedbe3fSmrgfunc_append preserve_args " $opt"
11231bedbe3fSmrg			;;
11241bedbe3fSmrg      --no-verbose)
1125549e21daSmrg			opt_verbose=false
11261bedbe3fSmrgfunc_append preserve_args " $opt"
1127549e21daSmrg			;;
11281bedbe3fSmrg      --silent|--quiet)
11291bedbe3fSmrg			opt_silent=:
11301bedbe3fSmrgfunc_append preserve_args " $opt"
11311bedbe3fSmrg        opt_verbose=false
11321bedbe3fSmrg			;;
11331bedbe3fSmrg      --verbose|-v)
11341bedbe3fSmrg			opt_verbose=:
11351bedbe3fSmrgfunc_append preserve_args " $opt"
11361bedbe3fSmrgopt_silent=false
11371bedbe3fSmrg			;;
11381bedbe3fSmrg      --tag)
11391bedbe3fSmrg			test $# = 0 && func_missing_arg $opt && break
11401bedbe3fSmrg			optarg="$1"
11411bedbe3fSmrg			opt_tag="$optarg"
11421bedbe3fSmrgfunc_append preserve_args " $opt $optarg"
11431bedbe3fSmrgfunc_enable_tag "$optarg"
1144549e21daSmrg			shift
1145549e21daSmrg			;;
1146549e21daSmrg
11471bedbe3fSmrg      -\?|-h)		func_usage				;;
11481bedbe3fSmrg      --help)		func_help				;;
11491bedbe3fSmrg      --version)	func_version				;;
11501bedbe3fSmrg
1151549e21daSmrg      # Separate optargs to long options:
11521bedbe3fSmrg      --*=*)
11531bedbe3fSmrg			func_split_long_opt "$opt"
11541bedbe3fSmrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155549e21daSmrg			shift
1156549e21daSmrg			;;
1157549e21daSmrg
11581bedbe3fSmrg      # Separate non-argument short options:
11591bedbe3fSmrg      -\?*|-h*|-n*|-v*)
11601bedbe3fSmrg			func_split_short_opt "$opt"
11611bedbe3fSmrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
11621bedbe3fSmrg			shift
1163549e21daSmrg			;;
11641bedbe3fSmrg
11651bedbe3fSmrg      --)		break					;;
11661bedbe3fSmrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
11671bedbe3fSmrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168549e21daSmrg    esac
1169549e21daSmrg  done
1170549e21daSmrg
11711bedbe3fSmrg  # Validate options:
11721bedbe3fSmrg
11731bedbe3fSmrg  # save first non-option argument
11741bedbe3fSmrg  if test "$#" -gt 0; then
11751bedbe3fSmrg    nonopt="$opt"
11761bedbe3fSmrg    shift
11771bedbe3fSmrg  fi
11781bedbe3fSmrg
11791bedbe3fSmrg  # preserve --debug
11801bedbe3fSmrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181549e21daSmrg
1182549e21daSmrg  case $host in
1183549e21daSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184549e21daSmrg      # don't eliminate duplications in $postdeps and $predeps
1185549e21daSmrg      opt_duplicate_compiler_generated_deps=:
1186ba6a1819Smrg      ;;
1187ba6a1819Smrg    *)
11881bedbe3fSmrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189549e21daSmrg      ;;
1190549e21daSmrg  esac
1191ba6a1819Smrg
11921bedbe3fSmrg  $opt_help || {
11931bedbe3fSmrg    # Sanity checks first:
11941bedbe3fSmrg    func_check_version_match
1195549e21daSmrg
11961bedbe3fSmrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
11971bedbe3fSmrg      func_fatal_configuration "not configured to build any kind of library"
1198549e21daSmrg    fi
1199549e21daSmrg
12001bedbe3fSmrg    # Darwin sucks
12011bedbe3fSmrg    eval std_shrext=\"$shrext_cmds\"
1202549e21daSmrg
12031bedbe3fSmrg    # Only execute mode is allowed to have -dlopen flags.
12041bedbe3fSmrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
12051bedbe3fSmrg      func_error "unrecognized option \`-dlopen'"
12061bedbe3fSmrg      $ECHO "$help" 1>&2
12071bedbe3fSmrg      exit $EXIT_FAILURE
12081bedbe3fSmrg    fi
1209549e21daSmrg
12101bedbe3fSmrg    # Change the help message to a mode-specific one.
12111bedbe3fSmrg    generic_help="$help"
12121bedbe3fSmrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
12131bedbe3fSmrg  }
1214549e21daSmrg
1215549e21daSmrg
12161bedbe3fSmrg  # Bail if the options were screwed
12171bedbe3fSmrg  $exit_cmd $EXIT_FAILURE
12181bedbe3fSmrg}
1219549e21daSmrg
1220549e21daSmrg
1221ba6a1819Smrg
1222ba6a1819Smrg
12231bedbe3fSmrg## ----------- ##
12241bedbe3fSmrg##    Main.    ##
12251bedbe3fSmrg## ----------- ##
1226ba6a1819Smrg
1227549e21daSmrg# func_lalib_p file
1228549e21daSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
1230549e21daSmrg# determined imposters.
1231549e21daSmrgfunc_lalib_p ()
1232549e21daSmrg{
1233549e21daSmrg    test -f "$1" &&
1234549e21daSmrg      $SED -e 4q "$1" 2>/dev/null \
1235549e21daSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236549e21daSmrg}
1237ba6a1819Smrg
1238549e21daSmrg# func_lalib_unsafe_p file
1239549e21daSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240549e21daSmrg# This function implements the same check as func_lalib_p without
1241549e21daSmrg# resorting to external programs.  To this end, it redirects stdin and
1242549e21daSmrg# closes it afterwards, without saving the original file descriptor.
1243549e21daSmrg# As a safety measure, use it only where a negative result would be
1244549e21daSmrg# fatal anyway.  Works if `file' does not exist.
1245549e21daSmrgfunc_lalib_unsafe_p ()
1246549e21daSmrg{
1247549e21daSmrg    lalib_p=no
1248549e21daSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249549e21daSmrg	for lalib_p_l in 1 2 3 4
1250549e21daSmrg	do
1251549e21daSmrg	    read lalib_p_line
1252549e21daSmrg	    case "$lalib_p_line" in
1253549e21daSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254549e21daSmrg	    esac
1255549e21daSmrg	done
1256549e21daSmrg	exec 0<&5 5<&-
1257549e21daSmrg    fi
1258549e21daSmrg    test "$lalib_p" = yes
1259549e21daSmrg}
1260ba6a1819Smrg
1261549e21daSmrg# func_ltwrapper_script_p file
1262549e21daSmrg# True iff FILE is a libtool wrapper script
1263549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
1264549e21daSmrg# determined imposters.
1265549e21daSmrgfunc_ltwrapper_script_p ()
1266549e21daSmrg{
1267549e21daSmrg    func_lalib_p "$1"
1268549e21daSmrg}
1269ba6a1819Smrg
1270549e21daSmrg# func_ltwrapper_executable_p file
1271549e21daSmrg# True iff FILE is a libtool wrapper executable
1272549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
1273549e21daSmrg# determined imposters.
1274549e21daSmrgfunc_ltwrapper_executable_p ()
1275549e21daSmrg{
1276549e21daSmrg    func_ltwrapper_exec_suffix=
1277549e21daSmrg    case $1 in
1278549e21daSmrg    *.exe) ;;
1279549e21daSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280549e21daSmrg    esac
1281549e21daSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282549e21daSmrg}
1283ba6a1819Smrg
1284549e21daSmrg# func_ltwrapper_scriptname file
1285549e21daSmrg# Assumes file is an ltwrapper_executable
1286549e21daSmrg# uses $file to determine the appropriate filename for a
1287549e21daSmrg# temporary ltwrapper_script.
1288549e21daSmrgfunc_ltwrapper_scriptname ()
1289549e21daSmrg{
12901bedbe3fSmrg    func_dirname_and_basename "$1" "" "."
12911bedbe3fSmrg    func_stripname '' '.exe' "$func_basename_result"
12921bedbe3fSmrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293549e21daSmrg}
1294ba6a1819Smrg
1295549e21daSmrg# func_ltwrapper_p file
1296549e21daSmrg# True iff FILE is a libtool wrapper script or wrapper executable
1297549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
1298549e21daSmrg# determined imposters.
1299549e21daSmrgfunc_ltwrapper_p ()
1300549e21daSmrg{
1301549e21daSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302549e21daSmrg}
1303ba6a1819Smrg
1304ba6a1819Smrg
1305549e21daSmrg# func_execute_cmds commands fail_cmd
1306549e21daSmrg# Execute tilde-delimited COMMANDS.
1307549e21daSmrg# If FAIL_CMD is given, eval that upon failure.
1308549e21daSmrg# FAIL_CMD may read-access the current command in variable CMD!
1309549e21daSmrgfunc_execute_cmds ()
1310549e21daSmrg{
1311549e21daSmrg    $opt_debug
1312549e21daSmrg    save_ifs=$IFS; IFS='~'
1313549e21daSmrg    for cmd in $1; do
1314549e21daSmrg      IFS=$save_ifs
1315549e21daSmrg      eval cmd=\"$cmd\"
1316549e21daSmrg      func_show_eval "$cmd" "${2-:}"
1317549e21daSmrg    done
1318549e21daSmrg    IFS=$save_ifs
1319549e21daSmrg}
1320ba6a1819Smrg
1321ba6a1819Smrg
1322549e21daSmrg# func_source file
1323549e21daSmrg# Source FILE, adding directory component if necessary.
1324549e21daSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325549e21daSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326549e21daSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327549e21daSmrg# `FILE.' does not work on cygwin managed mounts.
1328549e21daSmrgfunc_source ()
1329549e21daSmrg{
1330549e21daSmrg    $opt_debug
1331549e21daSmrg    case $1 in
1332549e21daSmrg    */* | *\\*)	. "$1" ;;
1333549e21daSmrg    *)		. "./$1" ;;
1334549e21daSmrg    esac
1335549e21daSmrg}
1336549e21daSmrg
1337549e21daSmrg
13381bedbe3fSmrg# func_resolve_sysroot PATH
13391bedbe3fSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
13401bedbe3fSmrg# func_resolve_sysroot_result
13411bedbe3fSmrgfunc_resolve_sysroot ()
13421bedbe3fSmrg{
13431bedbe3fSmrg  func_resolve_sysroot_result=$1
13441bedbe3fSmrg  case $func_resolve_sysroot_result in
13451bedbe3fSmrg  =*)
13461bedbe3fSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
13471bedbe3fSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
13481bedbe3fSmrg    ;;
13491bedbe3fSmrg  esac
13501bedbe3fSmrg}
13511bedbe3fSmrg
13521bedbe3fSmrg# func_replace_sysroot PATH
13531bedbe3fSmrg# If PATH begins with the sysroot, replace it with = and
13541bedbe3fSmrg# store the result into func_replace_sysroot_result.
13551bedbe3fSmrgfunc_replace_sysroot ()
13561bedbe3fSmrg{
13571bedbe3fSmrg  case "$lt_sysroot:$1" in
13581bedbe3fSmrg  ?*:"$lt_sysroot"*)
13591bedbe3fSmrg    func_stripname "$lt_sysroot" '' "$1"
13601bedbe3fSmrg    func_replace_sysroot_result="=$func_stripname_result"
13611bedbe3fSmrg    ;;
13621bedbe3fSmrg  *)
13631bedbe3fSmrg    # Including no sysroot.
13641bedbe3fSmrg    func_replace_sysroot_result=$1
13651bedbe3fSmrg    ;;
13661bedbe3fSmrg  esac
13671bedbe3fSmrg}
13681bedbe3fSmrg
1369549e21daSmrg# func_infer_tag arg
1370549e21daSmrg# Infer tagged configuration to use if any are available and
1371549e21daSmrg# if one wasn't chosen via the "--tag" command line option.
1372549e21daSmrg# Only attempt this if the compiler in the base compile
1373549e21daSmrg# command doesn't match the default compiler.
1374549e21daSmrg# arg is usually of the form 'gcc ...'
1375549e21daSmrgfunc_infer_tag ()
1376549e21daSmrg{
1377549e21daSmrg    $opt_debug
1378549e21daSmrg    if test -n "$available_tags" && test -z "$tagname"; then
1379549e21daSmrg      CC_quoted=
1380549e21daSmrg      for arg in $CC; do
13811bedbe3fSmrg	func_append_quoted CC_quoted "$arg"
1382549e21daSmrg      done
1383549e21daSmrg      CC_expanded=`func_echo_all $CC`
1384549e21daSmrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385549e21daSmrg      case $@ in
1386549e21daSmrg      # Blanks in the command may have been stripped by the calling shell,
1387549e21daSmrg      # but not from the CC environment variable when configure was run.
1388549e21daSmrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1389549e21daSmrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390549e21daSmrg      # Blanks at the start of $base_compile will cause this to fail
1391549e21daSmrg      # if we don't check for them as well.
1392549e21daSmrg      *)
1393549e21daSmrg	for z in $available_tags; do
1394549e21daSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395549e21daSmrg	    # Evaluate the configuration.
1396549e21daSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397549e21daSmrg	    CC_quoted=
1398549e21daSmrg	    for arg in $CC; do
1399549e21daSmrg	      # Double-quote args containing other shell metacharacters.
14001bedbe3fSmrg	      func_append_quoted CC_quoted "$arg"
1401549e21daSmrg	    done
1402549e21daSmrg	    CC_expanded=`func_echo_all $CC`
1403549e21daSmrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404549e21daSmrg	    case "$@ " in
1405549e21daSmrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1406549e21daSmrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407549e21daSmrg	      # The compiler in the base compile command matches
1408549e21daSmrg	      # the one in the tagged configuration.
1409549e21daSmrg	      # Assume this is the tagged configuration we want.
1410549e21daSmrg	      tagname=$z
1411549e21daSmrg	      break
1412549e21daSmrg	      ;;
1413549e21daSmrg	    esac
1414549e21daSmrg	  fi
1415549e21daSmrg	done
1416549e21daSmrg	# If $tagname still isn't set, then no tagged configuration
1417549e21daSmrg	# was found and let the user know that the "--tag" command
1418549e21daSmrg	# line option must be used.
1419549e21daSmrg	if test -z "$tagname"; then
1420549e21daSmrg	  func_echo "unable to infer tagged configuration"
1421549e21daSmrg	  func_fatal_error "specify a tag with \`--tag'"
1422549e21daSmrg#	else
1423549e21daSmrg#	  func_verbose "using $tagname tagged configuration"
1424549e21daSmrg	fi
1425549e21daSmrg	;;
1426549e21daSmrg      esac
1427549e21daSmrg    fi
1428549e21daSmrg}
1429549e21daSmrg
1430549e21daSmrg
14311bedbe3fSmrg
14321bedbe3fSmrg# func_write_libtool_object output_name pic_name nonpic_name
14331bedbe3fSmrg# Create a libtool object file (analogous to a ".la" file),
14341bedbe3fSmrg# but don't create it if we're doing a dry run.
14351bedbe3fSmrgfunc_write_libtool_object ()
14361bedbe3fSmrg{
14371bedbe3fSmrg    write_libobj=${1}
14381bedbe3fSmrg    if test "$build_libtool_libs" = yes; then
14391bedbe3fSmrg      write_lobj=\'${2}\'
14401bedbe3fSmrg    else
14411bedbe3fSmrg      write_lobj=none
14421bedbe3fSmrg    fi
14431bedbe3fSmrg
14441bedbe3fSmrg    if test "$build_old_libs" = yes; then
14451bedbe3fSmrg      write_oldobj=\'${3}\'
14461bedbe3fSmrg    else
14471bedbe3fSmrg      write_oldobj=none
14481bedbe3fSmrg    fi
14491bedbe3fSmrg
14501bedbe3fSmrg    $opt_dry_run || {
14511bedbe3fSmrg      cat >${write_libobj}T <<EOF
14521bedbe3fSmrg# $write_libobj - a libtool object file
14531bedbe3fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
14541bedbe3fSmrg#
14551bedbe3fSmrg# Please DO NOT delete this file!
14561bedbe3fSmrg# It is necessary for linking the library.
14571bedbe3fSmrg
14581bedbe3fSmrg# Name of the PIC object.
14591bedbe3fSmrgpic_object=$write_lobj
14601bedbe3fSmrg
14611bedbe3fSmrg# Name of the non-PIC object
14621bedbe3fSmrgnon_pic_object=$write_oldobj
14631bedbe3fSmrg
14641bedbe3fSmrgEOF
14651bedbe3fSmrg      $MV "${write_libobj}T" "${write_libobj}"
14661bedbe3fSmrg    }
14671bedbe3fSmrg}
14681bedbe3fSmrg
14691bedbe3fSmrg
14701bedbe3fSmrg##################################################
14711bedbe3fSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
14721bedbe3fSmrg##################################################
14731bedbe3fSmrg
14741bedbe3fSmrg# func_convert_core_file_wine_to_w32 ARG
14751bedbe3fSmrg# Helper function used by file name conversion functions when $build is *nix,
14761bedbe3fSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
14771bedbe3fSmrg# correctly configured wine environment available, with the winepath program
14781bedbe3fSmrg# in $build's $PATH.
14791bedbe3fSmrg#
14801bedbe3fSmrg# ARG is the $build file name to be converted to w32 format.
14811bedbe3fSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
14821bedbe3fSmrg# be empty on error (or when ARG is empty)
14831bedbe3fSmrgfunc_convert_core_file_wine_to_w32 ()
14841bedbe3fSmrg{
14851bedbe3fSmrg  $opt_debug
14861bedbe3fSmrg  func_convert_core_file_wine_to_w32_result="$1"
14871bedbe3fSmrg  if test -n "$1"; then
14881bedbe3fSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
14891bedbe3fSmrg    # are forced to check the contents of stdout. On the other hand, if the
14901bedbe3fSmrg    # command is not found, the shell will set an exit code of 127 and print
14911bedbe3fSmrg    # *an error message* to stdout. So we must check for both error code of
14921bedbe3fSmrg    # zero AND non-empty stdout, which explains the odd construction:
14931bedbe3fSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
14941bedbe3fSmrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
14951bedbe3fSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
14961bedbe3fSmrg        $SED -e "$lt_sed_naive_backslashify"`
14971bedbe3fSmrg    else
14981bedbe3fSmrg      func_convert_core_file_wine_to_w32_result=
14991bedbe3fSmrg    fi
15001bedbe3fSmrg  fi
15011bedbe3fSmrg}
15021bedbe3fSmrg# end: func_convert_core_file_wine_to_w32
15031bedbe3fSmrg
15041bedbe3fSmrg
15051bedbe3fSmrg# func_convert_core_path_wine_to_w32 ARG
15061bedbe3fSmrg# Helper function used by path conversion functions when $build is *nix, and
15071bedbe3fSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
15081bedbe3fSmrg# configured wine environment available, with the winepath program in $build's
15091bedbe3fSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
15101bedbe3fSmrg#
15111bedbe3fSmrg# ARG is path to be converted from $build format to win32.
15121bedbe3fSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
15131bedbe3fSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
15141bedbe3fSmrg# are convertible, then the result may be empty.
15151bedbe3fSmrgfunc_convert_core_path_wine_to_w32 ()
15161bedbe3fSmrg{
15171bedbe3fSmrg  $opt_debug
15181bedbe3fSmrg  # unfortunately, winepath doesn't convert paths, only file names
15191bedbe3fSmrg  func_convert_core_path_wine_to_w32_result=""
15201bedbe3fSmrg  if test -n "$1"; then
15211bedbe3fSmrg    oldIFS=$IFS
15221bedbe3fSmrg    IFS=:
15231bedbe3fSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
15241bedbe3fSmrg      IFS=$oldIFS
15251bedbe3fSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
15261bedbe3fSmrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
15271bedbe3fSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
15281bedbe3fSmrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
15291bedbe3fSmrg        else
15301bedbe3fSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
15311bedbe3fSmrg        fi
15321bedbe3fSmrg      fi
15331bedbe3fSmrg    done
15341bedbe3fSmrg    IFS=$oldIFS
15351bedbe3fSmrg  fi
15361bedbe3fSmrg}
15371bedbe3fSmrg# end: func_convert_core_path_wine_to_w32
15381bedbe3fSmrg
15391bedbe3fSmrg
15401bedbe3fSmrg# func_cygpath ARGS...
15411bedbe3fSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
15421bedbe3fSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
15431bedbe3fSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
15441bedbe3fSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
15451bedbe3fSmrg# file name or path is assumed to be in w32 format, as previously converted
15461bedbe3fSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
15471bedbe3fSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
15481bedbe3fSmrg# Cygwin format). Returns an empty string on error.
15491bedbe3fSmrg#
15501bedbe3fSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
15511bedbe3fSmrg# be converted.
15521bedbe3fSmrg#
15531bedbe3fSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
15541bedbe3fSmrg# environment variable; do not put it in $PATH.
15551bedbe3fSmrgfunc_cygpath ()
15561bedbe3fSmrg{
15571bedbe3fSmrg  $opt_debug
15581bedbe3fSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
15591bedbe3fSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
15601bedbe3fSmrg    if test "$?" -ne 0; then
15611bedbe3fSmrg      # on failure, ensure result is empty
15621bedbe3fSmrg      func_cygpath_result=
15631bedbe3fSmrg    fi
15641bedbe3fSmrg  else
15651bedbe3fSmrg    func_cygpath_result=
15661bedbe3fSmrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
15671bedbe3fSmrg  fi
15681bedbe3fSmrg}
15691bedbe3fSmrg#end: func_cygpath
15701bedbe3fSmrg
15711bedbe3fSmrg
15721bedbe3fSmrg# func_convert_core_msys_to_w32 ARG
15731bedbe3fSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
15741bedbe3fSmrg# result in func_convert_core_msys_to_w32_result.
15751bedbe3fSmrgfunc_convert_core_msys_to_w32 ()
15761bedbe3fSmrg{
15771bedbe3fSmrg  $opt_debug
15781bedbe3fSmrg  # awkward: cmd appends spaces to result
15791bedbe3fSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
15801bedbe3fSmrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
15811bedbe3fSmrg}
15821bedbe3fSmrg#end: func_convert_core_msys_to_w32
15831bedbe3fSmrg
15841bedbe3fSmrg
15851bedbe3fSmrg# func_convert_file_check ARG1 ARG2
15861bedbe3fSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
15871bedbe3fSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
15881bedbe3fSmrg# func_to_host_file_result to ARG1).
15891bedbe3fSmrgfunc_convert_file_check ()
15901bedbe3fSmrg{
15911bedbe3fSmrg  $opt_debug
15921bedbe3fSmrg  if test -z "$2" && test -n "$1" ; then
15931bedbe3fSmrg    func_error "Could not determine host file name corresponding to"
15941bedbe3fSmrg    func_error "  \`$1'"
15951bedbe3fSmrg    func_error "Continuing, but uninstalled executables may not work."
15961bedbe3fSmrg    # Fallback:
15971bedbe3fSmrg    func_to_host_file_result="$1"
15981bedbe3fSmrg  fi
15991bedbe3fSmrg}
16001bedbe3fSmrg# end func_convert_file_check
16011bedbe3fSmrg
16021bedbe3fSmrg
16031bedbe3fSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
16041bedbe3fSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
16051bedbe3fSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
16061bedbe3fSmrg# func_to_host_file_result to a simplistic fallback value (see below).
16071bedbe3fSmrgfunc_convert_path_check ()
16081bedbe3fSmrg{
16091bedbe3fSmrg  $opt_debug
16101bedbe3fSmrg  if test -z "$4" && test -n "$3"; then
16111bedbe3fSmrg    func_error "Could not determine the host path corresponding to"
16121bedbe3fSmrg    func_error "  \`$3'"
16131bedbe3fSmrg    func_error "Continuing, but uninstalled executables may not work."
16141bedbe3fSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
16151bedbe3fSmrg    # should not be "improved".  See libtool.info.
16161bedbe3fSmrg    if test "x$1" != "x$2"; then
16171bedbe3fSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
16181bedbe3fSmrg      func_to_host_path_result=`echo "$3" |
16191bedbe3fSmrg        $SED -e "$lt_replace_pathsep_chars"`
16201bedbe3fSmrg    else
16211bedbe3fSmrg      func_to_host_path_result="$3"
16221bedbe3fSmrg    fi
16231bedbe3fSmrg  fi
16241bedbe3fSmrg}
16251bedbe3fSmrg# end func_convert_path_check
16261bedbe3fSmrg
16271bedbe3fSmrg
16281bedbe3fSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
16291bedbe3fSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
16301bedbe3fSmrg# and appending REPL if ORIG matches BACKPAT.
16311bedbe3fSmrgfunc_convert_path_front_back_pathsep ()
16321bedbe3fSmrg{
16331bedbe3fSmrg  $opt_debug
16341bedbe3fSmrg  case $4 in
16351bedbe3fSmrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
16361bedbe3fSmrg    ;;
16371bedbe3fSmrg  esac
16381bedbe3fSmrg  case $4 in
16391bedbe3fSmrg  $2 ) func_append func_to_host_path_result "$3"
16401bedbe3fSmrg    ;;
16411bedbe3fSmrg  esac
16421bedbe3fSmrg}
16431bedbe3fSmrg# end func_convert_path_front_back_pathsep
16441bedbe3fSmrg
16451bedbe3fSmrg
16461bedbe3fSmrg##################################################
16471bedbe3fSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
16481bedbe3fSmrg##################################################
16491bedbe3fSmrg# invoked via `$to_host_file_cmd ARG'
16501bedbe3fSmrg#
16511bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format.
16521bedbe3fSmrg# Result will be available in $func_to_host_file_result.
16531bedbe3fSmrg
16541bedbe3fSmrg
16551bedbe3fSmrg# func_to_host_file ARG
16561bedbe3fSmrg# Converts the file name ARG from $build format to $host format. Return result
16571bedbe3fSmrg# in func_to_host_file_result.
16581bedbe3fSmrgfunc_to_host_file ()
16591bedbe3fSmrg{
16601bedbe3fSmrg  $opt_debug
16611bedbe3fSmrg  $to_host_file_cmd "$1"
16621bedbe3fSmrg}
16631bedbe3fSmrg# end func_to_host_file
16641bedbe3fSmrg
16651bedbe3fSmrg
16661bedbe3fSmrg# func_to_tool_file ARG LAZY
16671bedbe3fSmrg# converts the file name ARG from $build format to toolchain format. Return
16681bedbe3fSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
16691bedbe3fSmrg# in (the comma separated) LAZY, no conversion takes place.
16701bedbe3fSmrgfunc_to_tool_file ()
16711bedbe3fSmrg{
16721bedbe3fSmrg  $opt_debug
16731bedbe3fSmrg  case ,$2, in
16741bedbe3fSmrg    *,"$to_tool_file_cmd",*)
16751bedbe3fSmrg      func_to_tool_file_result=$1
16761bedbe3fSmrg      ;;
16771bedbe3fSmrg    *)
16781bedbe3fSmrg      $to_tool_file_cmd "$1"
16791bedbe3fSmrg      func_to_tool_file_result=$func_to_host_file_result
16801bedbe3fSmrg      ;;
16811bedbe3fSmrg  esac
16821bedbe3fSmrg}
16831bedbe3fSmrg# end func_to_tool_file
16841bedbe3fSmrg
16851bedbe3fSmrg
16861bedbe3fSmrg# func_convert_file_noop ARG
16871bedbe3fSmrg# Copy ARG to func_to_host_file_result.
16881bedbe3fSmrgfunc_convert_file_noop ()
16891bedbe3fSmrg{
16901bedbe3fSmrg  func_to_host_file_result="$1"
16911bedbe3fSmrg}
16921bedbe3fSmrg# end func_convert_file_noop
16931bedbe3fSmrg
16941bedbe3fSmrg
16951bedbe3fSmrg# func_convert_file_msys_to_w32 ARG
16961bedbe3fSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
16971bedbe3fSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
16981bedbe3fSmrg# func_to_host_file_result.
16991bedbe3fSmrgfunc_convert_file_msys_to_w32 ()
17001bedbe3fSmrg{
17011bedbe3fSmrg  $opt_debug
17021bedbe3fSmrg  func_to_host_file_result="$1"
17031bedbe3fSmrg  if test -n "$1"; then
17041bedbe3fSmrg    func_convert_core_msys_to_w32 "$1"
17051bedbe3fSmrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
17061bedbe3fSmrg  fi
17071bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17081bedbe3fSmrg}
17091bedbe3fSmrg# end func_convert_file_msys_to_w32
17101bedbe3fSmrg
17111bedbe3fSmrg
17121bedbe3fSmrg# func_convert_file_cygwin_to_w32 ARG
17131bedbe3fSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
17141bedbe3fSmrg# func_to_host_file_result.
17151bedbe3fSmrgfunc_convert_file_cygwin_to_w32 ()
17161bedbe3fSmrg{
17171bedbe3fSmrg  $opt_debug
17181bedbe3fSmrg  func_to_host_file_result="$1"
17191bedbe3fSmrg  if test -n "$1"; then
17201bedbe3fSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
17211bedbe3fSmrg    # LT_CYGPATH in this case.
17221bedbe3fSmrg    func_to_host_file_result=`cygpath -m "$1"`
17231bedbe3fSmrg  fi
17241bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17251bedbe3fSmrg}
17261bedbe3fSmrg# end func_convert_file_cygwin_to_w32
17271bedbe3fSmrg
17281bedbe3fSmrg
17291bedbe3fSmrg# func_convert_file_nix_to_w32 ARG
17301bedbe3fSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
17311bedbe3fSmrg# and a working winepath. Returns result in func_to_host_file_result.
17321bedbe3fSmrgfunc_convert_file_nix_to_w32 ()
17331bedbe3fSmrg{
17341bedbe3fSmrg  $opt_debug
17351bedbe3fSmrg  func_to_host_file_result="$1"
17361bedbe3fSmrg  if test -n "$1"; then
17371bedbe3fSmrg    func_convert_core_file_wine_to_w32 "$1"
17381bedbe3fSmrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
17391bedbe3fSmrg  fi
17401bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17411bedbe3fSmrg}
17421bedbe3fSmrg# end func_convert_file_nix_to_w32
17431bedbe3fSmrg
17441bedbe3fSmrg
17451bedbe3fSmrg# func_convert_file_msys_to_cygwin ARG
17461bedbe3fSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
17471bedbe3fSmrg# Returns result in func_to_host_file_result.
17481bedbe3fSmrgfunc_convert_file_msys_to_cygwin ()
17491bedbe3fSmrg{
17501bedbe3fSmrg  $opt_debug
17511bedbe3fSmrg  func_to_host_file_result="$1"
17521bedbe3fSmrg  if test -n "$1"; then
17531bedbe3fSmrg    func_convert_core_msys_to_w32 "$1"
17541bedbe3fSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
17551bedbe3fSmrg    func_to_host_file_result="$func_cygpath_result"
17561bedbe3fSmrg  fi
17571bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17581bedbe3fSmrg}
17591bedbe3fSmrg# end func_convert_file_msys_to_cygwin
17601bedbe3fSmrg
17611bedbe3fSmrg
17621bedbe3fSmrg# func_convert_file_nix_to_cygwin ARG
17631bedbe3fSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
17641bedbe3fSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
17651bedbe3fSmrg# in func_to_host_file_result.
17661bedbe3fSmrgfunc_convert_file_nix_to_cygwin ()
17671bedbe3fSmrg{
17681bedbe3fSmrg  $opt_debug
17691bedbe3fSmrg  func_to_host_file_result="$1"
17701bedbe3fSmrg  if test -n "$1"; then
17711bedbe3fSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
17721bedbe3fSmrg    func_convert_core_file_wine_to_w32 "$1"
17731bedbe3fSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
17741bedbe3fSmrg    func_to_host_file_result="$func_cygpath_result"
17751bedbe3fSmrg  fi
17761bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17771bedbe3fSmrg}
17781bedbe3fSmrg# end func_convert_file_nix_to_cygwin
17791bedbe3fSmrg
17801bedbe3fSmrg
17811bedbe3fSmrg#############################################
17821bedbe3fSmrg# $build to $host PATH CONVERSION FUNCTIONS #
17831bedbe3fSmrg#############################################
17841bedbe3fSmrg# invoked via `$to_host_path_cmd ARG'
17851bedbe3fSmrg#
17861bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format.
17871bedbe3fSmrg# The result will be available in $func_to_host_path_result.
17881bedbe3fSmrg#
17891bedbe3fSmrg# Path separators are also converted from $build format to $host format.  If
17901bedbe3fSmrg# ARG begins or ends with a path separator character, it is preserved (but
17911bedbe3fSmrg# converted to $host format) on output.
17921bedbe3fSmrg#
17931bedbe3fSmrg# All path conversion functions are named using the following convention:
17941bedbe3fSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
17951bedbe3fSmrg#   path conversion function         : func_convert_path_X_to_Y ()
17961bedbe3fSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
17971bedbe3fSmrg# same.  If conversion functions are added for new $build/$host combinations,
17981bedbe3fSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
17991bedbe3fSmrg# will break.
18001bedbe3fSmrg
18011bedbe3fSmrg
18021bedbe3fSmrg# func_init_to_host_path_cmd
18031bedbe3fSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
18041bedbe3fSmrg# appropriate value, based on the value of $to_host_file_cmd.
18051bedbe3fSmrgto_host_path_cmd=
18061bedbe3fSmrgfunc_init_to_host_path_cmd ()
18071bedbe3fSmrg{
18081bedbe3fSmrg  $opt_debug
18091bedbe3fSmrg  if test -z "$to_host_path_cmd"; then
18101bedbe3fSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
18111bedbe3fSmrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
18121bedbe3fSmrg  fi
18131bedbe3fSmrg}
18141bedbe3fSmrg
18151bedbe3fSmrg
18161bedbe3fSmrg# func_to_host_path ARG
18171bedbe3fSmrg# Converts the path ARG from $build format to $host format. Return result
18181bedbe3fSmrg# in func_to_host_path_result.
18191bedbe3fSmrgfunc_to_host_path ()
18201bedbe3fSmrg{
18211bedbe3fSmrg  $opt_debug
18221bedbe3fSmrg  func_init_to_host_path_cmd
18231bedbe3fSmrg  $to_host_path_cmd "$1"
18241bedbe3fSmrg}
18251bedbe3fSmrg# end func_to_host_path
18261bedbe3fSmrg
18271bedbe3fSmrg
18281bedbe3fSmrg# func_convert_path_noop ARG
18291bedbe3fSmrg# Copy ARG to func_to_host_path_result.
18301bedbe3fSmrgfunc_convert_path_noop ()
18311bedbe3fSmrg{
18321bedbe3fSmrg  func_to_host_path_result="$1"
18331bedbe3fSmrg}
18341bedbe3fSmrg# end func_convert_path_noop
18351bedbe3fSmrg
18361bedbe3fSmrg
18371bedbe3fSmrg# func_convert_path_msys_to_w32 ARG
18381bedbe3fSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
18391bedbe3fSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
18401bedbe3fSmrg# func_to_host_path_result.
18411bedbe3fSmrgfunc_convert_path_msys_to_w32 ()
18421bedbe3fSmrg{
18431bedbe3fSmrg  $opt_debug
18441bedbe3fSmrg  func_to_host_path_result="$1"
18451bedbe3fSmrg  if test -n "$1"; then
18461bedbe3fSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
18471bedbe3fSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
18481bedbe3fSmrg    # and winepath ignores them completely.
18491bedbe3fSmrg    func_stripname : : "$1"
18501bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
18511bedbe3fSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
18521bedbe3fSmrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
18531bedbe3fSmrg    func_convert_path_check : ";" \
18541bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18551bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18561bedbe3fSmrg  fi
18571bedbe3fSmrg}
18581bedbe3fSmrg# end func_convert_path_msys_to_w32
18591bedbe3fSmrg
18601bedbe3fSmrg
18611bedbe3fSmrg# func_convert_path_cygwin_to_w32 ARG
18621bedbe3fSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
18631bedbe3fSmrg# func_to_host_file_result.
18641bedbe3fSmrgfunc_convert_path_cygwin_to_w32 ()
18651bedbe3fSmrg{
18661bedbe3fSmrg  $opt_debug
18671bedbe3fSmrg  func_to_host_path_result="$1"
18681bedbe3fSmrg  if test -n "$1"; then
18691bedbe3fSmrg    # See func_convert_path_msys_to_w32:
18701bedbe3fSmrg    func_stripname : : "$1"
18711bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
18721bedbe3fSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
18731bedbe3fSmrg    func_convert_path_check : ";" \
18741bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18751bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18761bedbe3fSmrg  fi
18771bedbe3fSmrg}
18781bedbe3fSmrg# end func_convert_path_cygwin_to_w32
18791bedbe3fSmrg
18801bedbe3fSmrg
18811bedbe3fSmrg# func_convert_path_nix_to_w32 ARG
18821bedbe3fSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
18831bedbe3fSmrg# a working winepath.  Returns result in func_to_host_file_result.
18841bedbe3fSmrgfunc_convert_path_nix_to_w32 ()
1885549e21daSmrg{
18861bedbe3fSmrg  $opt_debug
18871bedbe3fSmrg  func_to_host_path_result="$1"
18881bedbe3fSmrg  if test -n "$1"; then
18891bedbe3fSmrg    # See func_convert_path_msys_to_w32:
18901bedbe3fSmrg    func_stripname : : "$1"
18911bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
18921bedbe3fSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
18931bedbe3fSmrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
18941bedbe3fSmrg    func_convert_path_check : ";" \
18951bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18961bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18971bedbe3fSmrg  fi
18981bedbe3fSmrg}
18991bedbe3fSmrg# end func_convert_path_nix_to_w32
1900549e21daSmrg
1901549e21daSmrg
19021bedbe3fSmrg# func_convert_path_msys_to_cygwin ARG
19031bedbe3fSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
19041bedbe3fSmrg# Returns result in func_to_host_file_result.
19051bedbe3fSmrgfunc_convert_path_msys_to_cygwin ()
19061bedbe3fSmrg{
19071bedbe3fSmrg  $opt_debug
19081bedbe3fSmrg  func_to_host_path_result="$1"
19091bedbe3fSmrg  if test -n "$1"; then
19101bedbe3fSmrg    # See func_convert_path_msys_to_w32:
19111bedbe3fSmrg    func_stripname : : "$1"
19121bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
19131bedbe3fSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
19141bedbe3fSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
19151bedbe3fSmrg    func_to_host_path_result="$func_cygpath_result"
19161bedbe3fSmrg    func_convert_path_check : : \
19171bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19181bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19191bedbe3fSmrg  fi
19201bedbe3fSmrg}
19211bedbe3fSmrg# end func_convert_path_msys_to_cygwin
1922549e21daSmrg
1923549e21daSmrg
19241bedbe3fSmrg# func_convert_path_nix_to_cygwin ARG
19251bedbe3fSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
19261bedbe3fSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
19271bedbe3fSmrg# func_to_host_file_result.
19281bedbe3fSmrgfunc_convert_path_nix_to_cygwin ()
19291bedbe3fSmrg{
19301bedbe3fSmrg  $opt_debug
19311bedbe3fSmrg  func_to_host_path_result="$1"
19321bedbe3fSmrg  if test -n "$1"; then
19331bedbe3fSmrg    # Remove leading and trailing path separator characters from
19341bedbe3fSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
19351bedbe3fSmrg    # into '.;' and ';.', and winepath ignores them completely.
19361bedbe3fSmrg    func_stripname : : "$1"
19371bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
19381bedbe3fSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
19391bedbe3fSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
19401bedbe3fSmrg    func_to_host_path_result="$func_cygpath_result"
19411bedbe3fSmrg    func_convert_path_check : : \
19421bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19431bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19441bedbe3fSmrg  fi
1945549e21daSmrg}
19461bedbe3fSmrg# end func_convert_path_nix_to_cygwin
19471bedbe3fSmrg
1948549e21daSmrg
1949549e21daSmrg# func_mode_compile arg...
1950549e21daSmrgfunc_mode_compile ()
1951549e21daSmrg{
1952549e21daSmrg    $opt_debug
1953549e21daSmrg    # Get the compilation command and the source file.
1954549e21daSmrg    base_compile=
1955549e21daSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956549e21daSmrg    suppress_opt=yes
1957549e21daSmrg    suppress_output=
1958549e21daSmrg    arg_mode=normal
1959549e21daSmrg    libobj=
1960549e21daSmrg    later=
1961549e21daSmrg    pie_flag=
1962549e21daSmrg
1963549e21daSmrg    for arg
1964549e21daSmrg    do
1965549e21daSmrg      case $arg_mode in
1966549e21daSmrg      arg  )
1967549e21daSmrg	# do not "continue".  Instead, add this to base_compile
1968549e21daSmrg	lastarg="$arg"
1969549e21daSmrg	arg_mode=normal
1970549e21daSmrg	;;
1971549e21daSmrg
1972549e21daSmrg      target )
1973549e21daSmrg	libobj="$arg"
1974549e21daSmrg	arg_mode=normal
1975549e21daSmrg	continue
1976549e21daSmrg	;;
1977549e21daSmrg
1978549e21daSmrg      normal )
1979549e21daSmrg	# Accept any command-line options.
1980549e21daSmrg	case $arg in
1981549e21daSmrg	-o)
1982549e21daSmrg	  test -n "$libobj" && \
1983549e21daSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984549e21daSmrg	  arg_mode=target
1985549e21daSmrg	  continue
1986549e21daSmrg	  ;;
1987549e21daSmrg
1988549e21daSmrg	-pie | -fpie | -fPIE)
19891bedbe3fSmrg          func_append pie_flag " $arg"
1990549e21daSmrg	  continue
1991549e21daSmrg	  ;;
1992549e21daSmrg
1993549e21daSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
19941bedbe3fSmrg	  func_append later " $arg"
1995549e21daSmrg	  continue
1996549e21daSmrg	  ;;
1997549e21daSmrg
1998549e21daSmrg	-no-suppress)
1999549e21daSmrg	  suppress_opt=no
2000549e21daSmrg	  continue
2001549e21daSmrg	  ;;
2002549e21daSmrg
2003549e21daSmrg	-Xcompiler)
2004549e21daSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005549e21daSmrg	  continue      #  The current "srcfile" will either be retained or
2006549e21daSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007549e21daSmrg
2008549e21daSmrg	-Wc,*)
2009549e21daSmrg	  func_stripname '-Wc,' '' "$arg"
2010549e21daSmrg	  args=$func_stripname_result
2011549e21daSmrg	  lastarg=
2012549e21daSmrg	  save_ifs="$IFS"; IFS=','
2013549e21daSmrg	  for arg in $args; do
2014549e21daSmrg	    IFS="$save_ifs"
20151bedbe3fSmrg	    func_append_quoted lastarg "$arg"
2016549e21daSmrg	  done
2017549e21daSmrg	  IFS="$save_ifs"
2018549e21daSmrg	  func_stripname ' ' '' "$lastarg"
2019549e21daSmrg	  lastarg=$func_stripname_result
2020549e21daSmrg
2021549e21daSmrg	  # Add the arguments to base_compile.
20221bedbe3fSmrg	  func_append base_compile " $lastarg"
2023549e21daSmrg	  continue
2024549e21daSmrg	  ;;
2025549e21daSmrg
2026549e21daSmrg	*)
2027549e21daSmrg	  # Accept the current argument as the source file.
2028549e21daSmrg	  # The previous "srcfile" becomes the current argument.
2029ba6a1819Smrg	  #
2030ba6a1819Smrg	  lastarg="$srcfile"
2031ba6a1819Smrg	  srcfile="$arg"
2032ba6a1819Smrg	  ;;
2033ba6a1819Smrg	esac  #  case $arg
2034ba6a1819Smrg	;;
2035ba6a1819Smrg      esac    #  case $arg_mode
2036ba6a1819Smrg
2037ba6a1819Smrg      # Aesthetically quote the previous argument.
20381bedbe3fSmrg      func_append_quoted base_compile "$lastarg"
2039ba6a1819Smrg    done # for arg
2040ba6a1819Smrg
2041ba6a1819Smrg    case $arg_mode in
2042ba6a1819Smrg    arg)
2043549e21daSmrg      func_fatal_error "you must specify an argument for -Xcompile"
2044ba6a1819Smrg      ;;
2045ba6a1819Smrg    target)
2046549e21daSmrg      func_fatal_error "you must specify a target with \`-o'"
2047ba6a1819Smrg      ;;
2048ba6a1819Smrg    *)
2049ba6a1819Smrg      # Get the name of the library object.
2050549e21daSmrg      test -z "$libobj" && {
2051549e21daSmrg	func_basename "$srcfile"
2052549e21daSmrg	libobj="$func_basename_result"
2053549e21daSmrg      }
2054ba6a1819Smrg      ;;
2055ba6a1819Smrg    esac
2056ba6a1819Smrg
2057ba6a1819Smrg    # Recognize several different file suffixes.
2058ba6a1819Smrg    # If the user specifies -o file.o, it is replaced with file.lo
2059ba6a1819Smrg    case $libobj in
2060549e21daSmrg    *.[cCFSifmso] | \
2061549e21daSmrg    *.ada | *.adb | *.ads | *.asm | \
2062549e21daSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
20631bedbe3fSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064549e21daSmrg      func_xform "$libobj"
2065549e21daSmrg      libobj=$func_xform_result
2066549e21daSmrg      ;;
2067ba6a1819Smrg    esac
2068ba6a1819Smrg
2069ba6a1819Smrg    case $libobj in
2070549e21daSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071ba6a1819Smrg    *)
2072549e21daSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073ba6a1819Smrg      ;;
2074ba6a1819Smrg    esac
2075ba6a1819Smrg
2076ba6a1819Smrg    func_infer_tag $base_compile
2077ba6a1819Smrg
2078ba6a1819Smrg    for arg in $later; do
2079ba6a1819Smrg      case $arg in
2080549e21daSmrg      -shared)
2081549e21daSmrg	test "$build_libtool_libs" != yes && \
2082549e21daSmrg	  func_fatal_configuration "can not build a shared library"
2083549e21daSmrg	build_old_libs=no
2084549e21daSmrg	continue
2085549e21daSmrg	;;
2086549e21daSmrg
2087ba6a1819Smrg      -static)
2088549e21daSmrg	build_libtool_libs=no
2089ba6a1819Smrg	build_old_libs=yes
2090ba6a1819Smrg	continue
2091ba6a1819Smrg	;;
2092ba6a1819Smrg
2093ba6a1819Smrg      -prefer-pic)
2094ba6a1819Smrg	pic_mode=yes
2095ba6a1819Smrg	continue
2096ba6a1819Smrg	;;
2097ba6a1819Smrg
2098ba6a1819Smrg      -prefer-non-pic)
2099ba6a1819Smrg	pic_mode=no
2100ba6a1819Smrg	continue
2101ba6a1819Smrg	;;
2102ba6a1819Smrg      esac
2103ba6a1819Smrg    done
2104ba6a1819Smrg
2105549e21daSmrg    func_quote_for_eval "$libobj"
2106549e21daSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107549e21daSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108549e21daSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109549e21daSmrg    func_dirname_and_basename "$obj" "/" ""
2110549e21daSmrg    objname="$func_basename_result"
2111549e21daSmrg    xdir="$func_dirname_result"
2112ba6a1819Smrg    lobj=${xdir}$objdir/$objname
2113ba6a1819Smrg
2114549e21daSmrg    test -z "$base_compile" && \
2115549e21daSmrg      func_fatal_help "you must specify a compilation command"
2116ba6a1819Smrg
2117ba6a1819Smrg    # Delete any leftover library objects.
2118ba6a1819Smrg    if test "$build_old_libs" = yes; then
2119ba6a1819Smrg      removelist="$obj $lobj $libobj ${libobj}T"
2120ba6a1819Smrg    else
2121ba6a1819Smrg      removelist="$lobj $libobj ${libobj}T"
2122ba6a1819Smrg    fi
2123ba6a1819Smrg
2124ba6a1819Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2125ba6a1819Smrg    case $host_os in
2126549e21daSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127ba6a1819Smrg      pic_mode=default
2128ba6a1819Smrg      ;;
2129ba6a1819Smrg    esac
2130ba6a1819Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131ba6a1819Smrg      # non-PIC code in shared libraries is not supported
2132ba6a1819Smrg      pic_mode=default
2133ba6a1819Smrg    fi
2134ba6a1819Smrg
2135ba6a1819Smrg    # Calculate the filename of the output object if compiler does
2136ba6a1819Smrg    # not support -o with -c
2137ba6a1819Smrg    if test "$compiler_c_o" = no; then
2138549e21daSmrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2139ba6a1819Smrg      lockfile="$output_obj.lock"
2140ba6a1819Smrg    else
2141ba6a1819Smrg      output_obj=
2142ba6a1819Smrg      need_locks=no
2143ba6a1819Smrg      lockfile=
2144ba6a1819Smrg    fi
2145ba6a1819Smrg
2146ba6a1819Smrg    # Lock this critical section if it is needed
2147ba6a1819Smrg    # We use this script file to make the link, it avoids creating a new file
2148ba6a1819Smrg    if test "$need_locks" = yes; then
2149549e21daSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150549e21daSmrg	func_echo "Waiting for $lockfile to be removed"
2151ba6a1819Smrg	sleep 2
2152ba6a1819Smrg      done
2153ba6a1819Smrg    elif test "$need_locks" = warn; then
2154ba6a1819Smrg      if test -f "$lockfile"; then
2155549e21daSmrg	$ECHO "\
2156ba6a1819Smrg*** ERROR, $lockfile exists and contains:
2157ba6a1819Smrg`cat $lockfile 2>/dev/null`
2158ba6a1819Smrg
2159ba6a1819SmrgThis indicates that another process is trying to use the same
2160ba6a1819Smrgtemporary object file, and libtool could not work around it because
2161ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2162ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better
2163ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better
2164ba6a1819Smrgcompiler."
2165ba6a1819Smrg
2166549e21daSmrg	$opt_dry_run || $RM $removelist
2167ba6a1819Smrg	exit $EXIT_FAILURE
2168ba6a1819Smrg      fi
21691bedbe3fSmrg      func_append removelist " $output_obj"
2170549e21daSmrg      $ECHO "$srcfile" > "$lockfile"
2171ba6a1819Smrg    fi
2172ba6a1819Smrg
2173549e21daSmrg    $opt_dry_run || $RM $removelist
21741bedbe3fSmrg    func_append removelist " $lockfile"
2175549e21daSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176549e21daSmrg
21771bedbe3fSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
21781bedbe3fSmrg    srcfile=$func_to_tool_file_result
2179549e21daSmrg    func_quote_for_eval "$srcfile"
2180549e21daSmrg    qsrcfile=$func_quote_for_eval_result
2181ba6a1819Smrg
2182ba6a1819Smrg    # Only build a PIC object if we are building libtool libraries.
2183ba6a1819Smrg    if test "$build_libtool_libs" = yes; then
2184ba6a1819Smrg      # Without this assignment, base_compile gets emptied.
2185ba6a1819Smrg      fbsd_hideous_sh_bug=$base_compile
2186ba6a1819Smrg
2187ba6a1819Smrg      if test "$pic_mode" != no; then
2188ba6a1819Smrg	command="$base_compile $qsrcfile $pic_flag"
2189ba6a1819Smrg      else
2190ba6a1819Smrg	# Don't build PIC code
2191ba6a1819Smrg	command="$base_compile $qsrcfile"
2192ba6a1819Smrg      fi
2193ba6a1819Smrg
2194549e21daSmrg      func_mkdir_p "$xdir$objdir"
2195ba6a1819Smrg
2196ba6a1819Smrg      if test -z "$output_obj"; then
2197ba6a1819Smrg	# Place PIC objects in $objdir
21981bedbe3fSmrg	func_append command " -o $lobj"
2199ba6a1819Smrg      fi
2200ba6a1819Smrg
2201549e21daSmrg      func_show_eval_locale "$command"	\
2202549e21daSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203ba6a1819Smrg
2204ba6a1819Smrg      if test "$need_locks" = warn &&
2205ba6a1819Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206549e21daSmrg	$ECHO "\
2207ba6a1819Smrg*** ERROR, $lockfile contains:
2208ba6a1819Smrg`cat $lockfile 2>/dev/null`
2209ba6a1819Smrg
2210ba6a1819Smrgbut it should contain:
2211ba6a1819Smrg$srcfile
2212ba6a1819Smrg
2213ba6a1819SmrgThis indicates that another process is trying to use the same
2214ba6a1819Smrgtemporary object file, and libtool could not work around it because
2215ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2216ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better
2217ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better
2218ba6a1819Smrgcompiler."
2219ba6a1819Smrg
2220549e21daSmrg	$opt_dry_run || $RM $removelist
2221ba6a1819Smrg	exit $EXIT_FAILURE
2222ba6a1819Smrg      fi
2223ba6a1819Smrg
2224ba6a1819Smrg      # Just move the object if needed, then go on to compile the next one
2225ba6a1819Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226549e21daSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227549e21daSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228ba6a1819Smrg      fi
2229ba6a1819Smrg
2230ba6a1819Smrg      # Allow error messages only from the first compilation.
2231ba6a1819Smrg      if test "$suppress_opt" = yes; then
2232549e21daSmrg	suppress_output=' >/dev/null 2>&1'
2233ba6a1819Smrg      fi
2234ba6a1819Smrg    fi
2235ba6a1819Smrg
2236ba6a1819Smrg    # Only build a position-dependent object if we build old libraries.
2237ba6a1819Smrg    if test "$build_old_libs" = yes; then
2238ba6a1819Smrg      if test "$pic_mode" != yes; then
2239ba6a1819Smrg	# Don't build PIC code
2240549e21daSmrg	command="$base_compile $qsrcfile$pie_flag"
2241ba6a1819Smrg      else
2242ba6a1819Smrg	command="$base_compile $qsrcfile $pic_flag"
2243ba6a1819Smrg      fi
2244ba6a1819Smrg      if test "$compiler_c_o" = yes; then
22451bedbe3fSmrg	func_append command " -o $obj"
2246ba6a1819Smrg      fi
2247ba6a1819Smrg
2248ba6a1819Smrg      # Suppress compiler output if we already did a PIC compilation.
22491bedbe3fSmrg      func_append command "$suppress_output"
2250549e21daSmrg      func_show_eval_locale "$command" \
2251549e21daSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252ba6a1819Smrg
2253ba6a1819Smrg      if test "$need_locks" = warn &&
2254ba6a1819Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255549e21daSmrg	$ECHO "\
2256ba6a1819Smrg*** ERROR, $lockfile contains:
2257ba6a1819Smrg`cat $lockfile 2>/dev/null`
2258ba6a1819Smrg
2259ba6a1819Smrgbut it should contain:
2260ba6a1819Smrg$srcfile
2261ba6a1819Smrg
2262ba6a1819SmrgThis indicates that another process is trying to use the same
2263ba6a1819Smrgtemporary object file, and libtool could not work around it because
2264ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2265ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better
2266ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better
2267ba6a1819Smrgcompiler."
2268ba6a1819Smrg
2269549e21daSmrg	$opt_dry_run || $RM $removelist
2270ba6a1819Smrg	exit $EXIT_FAILURE
2271ba6a1819Smrg      fi
2272ba6a1819Smrg
2273ba6a1819Smrg      # Just move the object if needed
2274ba6a1819Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275549e21daSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276549e21daSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277ba6a1819Smrg      fi
2278549e21daSmrg    fi
2279ba6a1819Smrg
2280549e21daSmrg    $opt_dry_run || {
2281549e21daSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282ba6a1819Smrg
2283549e21daSmrg      # Unlock the critical section if it was locked
2284549e21daSmrg      if test "$need_locks" != no; then
2285549e21daSmrg	removelist=$lockfile
2286549e21daSmrg        $RM "$lockfile"
2287549e21daSmrg      fi
2288549e21daSmrg    }
2289ba6a1819Smrg
2290549e21daSmrg    exit $EXIT_SUCCESS
2291549e21daSmrg}
2292ba6a1819Smrg
2293549e21daSmrg$opt_help || {
22941bedbe3fSmrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295549e21daSmrg}
2296ba6a1819Smrg
2297549e21daSmrgfunc_mode_help ()
2298549e21daSmrg{
2299549e21daSmrg    # We need to display help for each of the modes.
23001bedbe3fSmrg    case $opt_mode in
2301549e21daSmrg      "")
2302549e21daSmrg        # Generic help is extracted from the usage comments
2303549e21daSmrg        # at the start of this file.
2304549e21daSmrg        func_help
2305549e21daSmrg        ;;
2306ba6a1819Smrg
2307549e21daSmrg      clean)
2308549e21daSmrg        $ECHO \
2309549e21daSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310ba6a1819Smrg
2311549e21daSmrgRemove files from the build directory.
2312ba6a1819Smrg
2313549e21daSmrgRM is the name of the program to use to delete files associated with each FILE
2314549e21daSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315549e21daSmrgto RM.
2316ba6a1819Smrg
2317549e21daSmrgIf FILE is a libtool library, object or program, all the files associated
2318549e21daSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319549e21daSmrg        ;;
2320ba6a1819Smrg
2321549e21daSmrg      compile)
2322549e21daSmrg      $ECHO \
2323549e21daSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324ba6a1819Smrg
2325549e21daSmrgCompile a source file into a libtool library object.
2326ba6a1819Smrg
2327549e21daSmrgThis mode accepts the following additional options:
2328ba6a1819Smrg
2329549e21daSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330549e21daSmrg  -no-suppress      do not suppress compiler output for multiple passes
2331549e21daSmrg  -prefer-pic       try to build PIC objects only
2332549e21daSmrg  -prefer-non-pic   try to build non-PIC objects only
2333549e21daSmrg  -shared           do not build a \`.o' file suitable for static linking
2334549e21daSmrg  -static           only build a \`.o' file suitable for static linking
2335549e21daSmrg  -Wc,FLAG          pass FLAG directly to the compiler
2336ba6a1819Smrg
2337549e21daSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338549e21daSmrgfrom the given SOURCEFILE.
2339ba6a1819Smrg
2340549e21daSmrgThe output file name is determined by removing the directory component from
2341549e21daSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342549e21daSmrglibrary object suffix, \`.lo'."
2343549e21daSmrg        ;;
2344ba6a1819Smrg
2345549e21daSmrg      execute)
2346549e21daSmrg        $ECHO \
2347549e21daSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348ba6a1819Smrg
2349549e21daSmrgAutomatically set library path, then run a program.
2350ba6a1819Smrg
2351549e21daSmrgThis mode accepts the following additional options:
2352ba6a1819Smrg
2353549e21daSmrg  -dlopen FILE      add the directory containing FILE to the library path
2354ba6a1819Smrg
2355549e21daSmrgThis mode sets the library path environment variable according to \`-dlopen'
2356549e21daSmrgflags.
2357ba6a1819Smrg
2358549e21daSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359549e21daSmrginto their corresponding uninstalled binary, and any of their required library
2360549e21daSmrgdirectories are added to the library path.
2361ba6a1819Smrg
2362549e21daSmrgThen, COMMAND is executed, with ARGS as arguments."
2363549e21daSmrg        ;;
2364ba6a1819Smrg
2365549e21daSmrg      finish)
2366549e21daSmrg        $ECHO \
2367549e21daSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368ba6a1819Smrg
2369549e21daSmrgComplete the installation of libtool libraries.
2370ba6a1819Smrg
2371549e21daSmrgEach LIBDIR is a directory that contains libtool libraries.
2372ba6a1819Smrg
2373549e21daSmrgThe commands that this mode executes may require superuser privileges.  Use
2374549e21daSmrgthe \`--dry-run' option if you just want to see what would be executed."
2375549e21daSmrg        ;;
2376ba6a1819Smrg
2377549e21daSmrg      install)
2378549e21daSmrg        $ECHO \
2379549e21daSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380ba6a1819Smrg
2381549e21daSmrgInstall executables or libraries.
2382ba6a1819Smrg
2383549e21daSmrgINSTALL-COMMAND is the installation command.  The first component should be
2384549e21daSmrgeither the \`install' or \`cp' program.
2385ba6a1819Smrg
2386549e21daSmrgThe following components of INSTALL-COMMAND are treated specially:
2387ba6a1819Smrg
2388549e21daSmrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389ba6a1819Smrg
2390549e21daSmrgThe rest of the components are interpreted as arguments to that command (only
2391549e21daSmrgBSD-compatible install options are recognized)."
2392549e21daSmrg        ;;
2393ba6a1819Smrg
2394549e21daSmrg      link)
2395549e21daSmrg        $ECHO \
2396549e21daSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397ba6a1819Smrg
2398549e21daSmrgLink object files or libraries together to form another library, or to
2399549e21daSmrgcreate an executable program.
2400ba6a1819Smrg
2401549e21daSmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402549e21daSmrga program from several object files.
2403ba6a1819Smrg
2404549e21daSmrgThe following components of LINK-COMMAND are treated specially:
2405ba6a1819Smrg
2406549e21daSmrg  -all-static       do not do any dynamic linking at all
2407549e21daSmrg  -avoid-version    do not add a version suffix if possible
2408549e21daSmrg  -bindir BINDIR    specify path to binaries directory (for systems where
2409549e21daSmrg                    libraries must be found in the PATH setting at runtime)
2410549e21daSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411549e21daSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412549e21daSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413549e21daSmrg  -export-symbols SYMFILE
2414549e21daSmrg                    try to export only the symbols listed in SYMFILE
2415549e21daSmrg  -export-symbols-regex REGEX
2416549e21daSmrg                    try to export only the symbols matching REGEX
2417549e21daSmrg  -LLIBDIR          search LIBDIR for required installed libraries
2418549e21daSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419549e21daSmrg  -module           build a library that can dlopened
2420549e21daSmrg  -no-fast-install  disable the fast-install mode
2421549e21daSmrg  -no-install       link a not-installable executable
2422549e21daSmrg  -no-undefined     declare that a library does not refer to external symbols
2423549e21daSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424549e21daSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425549e21daSmrg  -precious-files-regex REGEX
2426549e21daSmrg                    don't remove output files matching REGEX
2427549e21daSmrg  -release RELEASE  specify package release information
2428549e21daSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429549e21daSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430549e21daSmrg  -shared           only do dynamic linking of libtool libraries
2431549e21daSmrg  -shrext SUFFIX    override the standard shared library file extension
2432549e21daSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433549e21daSmrg  -static-libtool-libs
2434549e21daSmrg                    do not do any dynamic linking of libtool libraries
2435549e21daSmrg  -version-info CURRENT[:REVISION[:AGE]]
2436549e21daSmrg                    specify library version info [each variable defaults to 0]
2437549e21daSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
2438549e21daSmrg  -Wc,FLAG
2439549e21daSmrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2440549e21daSmrg  -Wl,FLAG
2441549e21daSmrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2442549e21daSmrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443ba6a1819Smrg
2444549e21daSmrgAll other options (arguments beginning with \`-') are ignored.
2445ba6a1819Smrg
2446549e21daSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447549e21daSmrgtreated as uninstalled libtool libraries, other files are standard or library
2448549e21daSmrgobject files.
2449ba6a1819Smrg
2450549e21daSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451549e21daSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452549e21daSmrgrequired, except when creating a convenience library.
2453ba6a1819Smrg
2454549e21daSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455549e21daSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2456ba6a1819Smrg
2457549e21daSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458549e21daSmrgis created, otherwise an executable program is created."
2459549e21daSmrg        ;;
2460ba6a1819Smrg
2461549e21daSmrg      uninstall)
2462549e21daSmrg        $ECHO \
2463549e21daSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464ba6a1819Smrg
2465549e21daSmrgRemove libraries from an installation directory.
2466ba6a1819Smrg
2467549e21daSmrgRM is the name of the program to use to delete files associated with each FILE
2468549e21daSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469549e21daSmrgto RM.
2470ba6a1819Smrg
2471549e21daSmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472549e21daSmrgOtherwise, only FILE itself is deleted using RM."
2473ba6a1819Smrg        ;;
2474ba6a1819Smrg
2475549e21daSmrg      *)
24761bedbe3fSmrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477549e21daSmrg        ;;
2478549e21daSmrg    esac
2479ba6a1819Smrg
2480549e21daSmrg    echo
2481549e21daSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482549e21daSmrg}
2483ba6a1819Smrg
2484549e21daSmrg# Now that we've collected a possible --mode arg, show help if necessary
2485549e21daSmrgif $opt_help; then
2486549e21daSmrg  if test "$opt_help" = :; then
2487549e21daSmrg    func_mode_help
2488549e21daSmrg  else
2489549e21daSmrg    {
2490549e21daSmrg      func_help noexit
24911bedbe3fSmrg      for opt_mode in compile link execute install finish uninstall clean; do
2492549e21daSmrg	func_mode_help
2493549e21daSmrg      done
2494549e21daSmrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2495549e21daSmrg    {
2496549e21daSmrg      func_help noexit
24971bedbe3fSmrg      for opt_mode in compile link execute install finish uninstall clean; do
2498549e21daSmrg	echo
2499549e21daSmrg	func_mode_help
2500549e21daSmrg      done
2501549e21daSmrg    } |
2502549e21daSmrg    sed '1d
2503549e21daSmrg      /^When reporting/,/^Report/{
2504549e21daSmrg	H
2505549e21daSmrg	d
2506549e21daSmrg      }
2507549e21daSmrg      $x
2508549e21daSmrg      /information about other modes/d
2509549e21daSmrg      /more detailed .*MODE/d
2510549e21daSmrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2511549e21daSmrg  fi
2512549e21daSmrg  exit $?
2513549e21daSmrgfi
2514ba6a1819Smrg
2515ba6a1819Smrg
2516549e21daSmrg# func_mode_execute arg...
2517549e21daSmrgfunc_mode_execute ()
2518549e21daSmrg{
2519549e21daSmrg    $opt_debug
2520549e21daSmrg    # The first argument is the command name.
2521549e21daSmrg    cmd="$nonopt"
2522549e21daSmrg    test -z "$cmd" && \
2523549e21daSmrg      func_fatal_help "you must specify a COMMAND"
2524ba6a1819Smrg
2525549e21daSmrg    # Handle -dlopen flags immediately.
25261bedbe3fSmrg    for file in $opt_dlopen; do
2527549e21daSmrg      test -f "$file" \
2528549e21daSmrg	|| func_fatal_help "\`$file' is not a file"
2529ba6a1819Smrg
2530549e21daSmrg      dir=
2531549e21daSmrg      case $file in
2532549e21daSmrg      *.la)
25331bedbe3fSmrg	func_resolve_sysroot "$file"
25341bedbe3fSmrg	file=$func_resolve_sysroot_result
25351bedbe3fSmrg
2536549e21daSmrg	# Check to see that this really is a libtool archive.
2537549e21daSmrg	func_lalib_unsafe_p "$file" \
2538549e21daSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539ba6a1819Smrg
2540549e21daSmrg	# Read the libtool library.
2541549e21daSmrg	dlname=
2542549e21daSmrg	library_names=
2543549e21daSmrg	func_source "$file"
2544ba6a1819Smrg
2545549e21daSmrg	# Skip this library if it cannot be dlopened.
2546549e21daSmrg	if test -z "$dlname"; then
2547549e21daSmrg	  # Warn if it was a shared library.
2548549e21daSmrg	  test -n "$library_names" && \
2549549e21daSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550549e21daSmrg	  continue
2551549e21daSmrg	fi
2552ba6a1819Smrg
2553549e21daSmrg	func_dirname "$file" "" "."
2554549e21daSmrg	dir="$func_dirname_result"
2555ba6a1819Smrg
2556549e21daSmrg	if test -f "$dir/$objdir/$dlname"; then
25571bedbe3fSmrg	  func_append dir "/$objdir"
2558549e21daSmrg	else
2559549e21daSmrg	  if test ! -f "$dir/$dlname"; then
2560549e21daSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561549e21daSmrg	  fi
2562549e21daSmrg	fi
2563ba6a1819Smrg	;;
2564ba6a1819Smrg
2565549e21daSmrg      *.lo)
2566549e21daSmrg	# Just add the directory containing the .lo file.
2567549e21daSmrg	func_dirname "$file" "" "."
2568549e21daSmrg	dir="$func_dirname_result"
2569ba6a1819Smrg	;;
2570ba6a1819Smrg
2571549e21daSmrg      *)
2572549e21daSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573ba6a1819Smrg	continue
2574ba6a1819Smrg	;;
2575549e21daSmrg      esac
2576ba6a1819Smrg
2577549e21daSmrg      # Get the absolute pathname.
2578549e21daSmrg      absdir=`cd "$dir" && pwd`
2579549e21daSmrg      test -n "$absdir" && dir="$absdir"
2580ba6a1819Smrg
2581549e21daSmrg      # Now add the directory to shlibpath_var.
2582549e21daSmrg      if eval "test -z \"\$$shlibpath_var\""; then
2583549e21daSmrg	eval "$shlibpath_var=\"\$dir\""
2584549e21daSmrg      else
2585549e21daSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586549e21daSmrg      fi
2587549e21daSmrg    done
2588ba6a1819Smrg
2589549e21daSmrg    # This variable tells wrapper scripts just to set shlibpath_var
2590549e21daSmrg    # rather than running their programs.
2591549e21daSmrg    libtool_execute_magic="$magic"
2592ba6a1819Smrg
2593549e21daSmrg    # Check if any of the arguments is a wrapper script.
2594549e21daSmrg    args=
2595549e21daSmrg    for file
2596549e21daSmrg    do
2597549e21daSmrg      case $file in
2598549e21daSmrg      -* | *.la | *.lo ) ;;
2599549e21daSmrg      *)
2600549e21daSmrg	# Do a test to see if this is really a libtool program.
2601549e21daSmrg	if func_ltwrapper_script_p "$file"; then
2602549e21daSmrg	  func_source "$file"
2603549e21daSmrg	  # Transform arg to wrapped name.
2604549e21daSmrg	  file="$progdir/$program"
2605549e21daSmrg	elif func_ltwrapper_executable_p "$file"; then
2606549e21daSmrg	  func_ltwrapper_scriptname "$file"
2607549e21daSmrg	  func_source "$func_ltwrapper_scriptname_result"
2608549e21daSmrg	  # Transform arg to wrapped name.
2609549e21daSmrg	  file="$progdir/$program"
2610549e21daSmrg	fi
2611ba6a1819Smrg	;;
2612549e21daSmrg      esac
2613549e21daSmrg      # Quote arguments (to preserve shell metacharacters).
26141bedbe3fSmrg      func_append_quoted args "$file"
2615549e21daSmrg    done
2616ba6a1819Smrg
2617549e21daSmrg    if test "X$opt_dry_run" = Xfalse; then
2618549e21daSmrg      if test -n "$shlibpath_var"; then
2619549e21daSmrg	# Export the shlibpath_var.
2620549e21daSmrg	eval "export $shlibpath_var"
2621549e21daSmrg      fi
2622ba6a1819Smrg
2623549e21daSmrg      # Restore saved environment variables
2624549e21daSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625549e21daSmrg      do
2626549e21daSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627549e21daSmrg                $lt_var=\$save_$lt_var; export $lt_var
2628549e21daSmrg	      else
2629549e21daSmrg		$lt_unset $lt_var
2630549e21daSmrg	      fi"
2631549e21daSmrg      done
2632ba6a1819Smrg
2633549e21daSmrg      # Now prepare to actually exec the command.
2634549e21daSmrg      exec_cmd="\$cmd$args"
2635549e21daSmrg    else
2636549e21daSmrg      # Display what would be done.
2637549e21daSmrg      if test -n "$shlibpath_var"; then
2638549e21daSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
2639549e21daSmrg	echo "export $shlibpath_var"
2640549e21daSmrg      fi
2641549e21daSmrg      $ECHO "$cmd$args"
2642549e21daSmrg      exit $EXIT_SUCCESS
2643549e21daSmrg    fi
2644549e21daSmrg}
2645ba6a1819Smrg
26461bedbe3fSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647ba6a1819Smrg
2648ba6a1819Smrg
2649549e21daSmrg# func_mode_finish arg...
2650549e21daSmrgfunc_mode_finish ()
2651549e21daSmrg{
2652549e21daSmrg    $opt_debug
26531bedbe3fSmrg    libs=
26541bedbe3fSmrg    libdirs=
2655549e21daSmrg    admincmds=
2656ba6a1819Smrg
26571bedbe3fSmrg    for opt in "$nonopt" ${1+"$@"}
26581bedbe3fSmrg    do
26591bedbe3fSmrg      if test -d "$opt"; then
26601bedbe3fSmrg	func_append libdirs " $opt"
26611bedbe3fSmrg
26621bedbe3fSmrg      elif test -f "$opt"; then
26631bedbe3fSmrg	if func_lalib_unsafe_p "$opt"; then
26641bedbe3fSmrg	  func_append libs " $opt"
26651bedbe3fSmrg	else
26661bedbe3fSmrg	  func_warning "\`$opt' is not a valid libtool archive"
26671bedbe3fSmrg	fi
26681bedbe3fSmrg
26691bedbe3fSmrg      else
26701bedbe3fSmrg	func_fatal_error "invalid argument \`$opt'"
26711bedbe3fSmrg      fi
26721bedbe3fSmrg    done
26731bedbe3fSmrg
26741bedbe3fSmrg    if test -n "$libs"; then
26751bedbe3fSmrg      if test -n "$lt_sysroot"; then
26761bedbe3fSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
26771bedbe3fSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
26781bedbe3fSmrg      else
26791bedbe3fSmrg        sysroot_cmd=
26801bedbe3fSmrg      fi
26811bedbe3fSmrg
26821bedbe3fSmrg      # Remove sysroot references
26831bedbe3fSmrg      if $opt_dry_run; then
26841bedbe3fSmrg        for lib in $libs; do
26851bedbe3fSmrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
26861bedbe3fSmrg        done
26871bedbe3fSmrg      else
26881bedbe3fSmrg        tmpdir=`func_mktempdir`
26891bedbe3fSmrg        for lib in $libs; do
26901bedbe3fSmrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
26911bedbe3fSmrg	    > $tmpdir/tmp-la
26921bedbe3fSmrg	  mv -f $tmpdir/tmp-la $lib
26931bedbe3fSmrg	done
26941bedbe3fSmrg        ${RM}r "$tmpdir"
26951bedbe3fSmrg      fi
26961bedbe3fSmrg    fi
2697ba6a1819Smrg
26981bedbe3fSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699549e21daSmrg      for libdir in $libdirs; do
2700549e21daSmrg	if test -n "$finish_cmds"; then
2701549e21daSmrg	  # Do each command in the finish commands.
2702549e21daSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703549e21daSmrg'"$cmd"'"'
2704549e21daSmrg	fi
2705549e21daSmrg	if test -n "$finish_eval"; then
2706549e21daSmrg	  # Do the single finish_eval.
2707549e21daSmrg	  eval cmds=\"$finish_eval\"
27081bedbe3fSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709549e21daSmrg       $cmds"
2710549e21daSmrg	fi
2711549e21daSmrg      done
2712549e21daSmrg    fi
2713ba6a1819Smrg
2714549e21daSmrg    # Exit here if they wanted silent mode.
2715549e21daSmrg    $opt_silent && exit $EXIT_SUCCESS
2716ba6a1819Smrg
27171bedbe3fSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
27181bedbe3fSmrg      echo "----------------------------------------------------------------------"
27191bedbe3fSmrg      echo "Libraries have been installed in:"
27201bedbe3fSmrg      for libdir in $libdirs; do
27211bedbe3fSmrg	$ECHO "   $libdir"
27221bedbe3fSmrg      done
27231bedbe3fSmrg      echo
27241bedbe3fSmrg      echo "If you ever happen to want to link against installed libraries"
27251bedbe3fSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
27261bedbe3fSmrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
27271bedbe3fSmrg      echo "flag during linking and do at least one of the following:"
27281bedbe3fSmrg      if test -n "$shlibpath_var"; then
27291bedbe3fSmrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
27301bedbe3fSmrg	echo "     during execution"
27311bedbe3fSmrg      fi
27321bedbe3fSmrg      if test -n "$runpath_var"; then
27331bedbe3fSmrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
27341bedbe3fSmrg	echo "     during linking"
27351bedbe3fSmrg      fi
27361bedbe3fSmrg      if test -n "$hardcode_libdir_flag_spec"; then
27371bedbe3fSmrg	libdir=LIBDIR
27381bedbe3fSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739ba6a1819Smrg
27401bedbe3fSmrg	$ECHO "   - use the \`$flag' linker flag"
27411bedbe3fSmrg      fi
27421bedbe3fSmrg      if test -n "$admincmds"; then
27431bedbe3fSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
27441bedbe3fSmrg      fi
27451bedbe3fSmrg      if test -f /etc/ld.so.conf; then
27461bedbe3fSmrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
27471bedbe3fSmrg      fi
27481bedbe3fSmrg      echo
2749ba6a1819Smrg
27501bedbe3fSmrg      echo "See any operating system documentation about shared libraries for"
27511bedbe3fSmrg      case $host in
27521bedbe3fSmrg	solaris2.[6789]|solaris2.1[0-9])
27531bedbe3fSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
27541bedbe3fSmrg	  echo "pages."
27551bedbe3fSmrg	  ;;
27561bedbe3fSmrg	*)
27571bedbe3fSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
27581bedbe3fSmrg	  ;;
27591bedbe3fSmrg      esac
27601bedbe3fSmrg      echo "----------------------------------------------------------------------"
27611bedbe3fSmrg    fi
2762549e21daSmrg    exit $EXIT_SUCCESS
2763549e21daSmrg}
2764ba6a1819Smrg
27651bedbe3fSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766ba6a1819Smrg
2767ba6a1819Smrg
2768549e21daSmrg# func_mode_install arg...
2769549e21daSmrgfunc_mode_install ()
2770549e21daSmrg{
2771549e21daSmrg    $opt_debug
2772549e21daSmrg    # There may be an optional sh(1) argument at the beginning of
2773549e21daSmrg    # install_prog (especially on Windows NT).
2774549e21daSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775549e21daSmrg       # Allow the use of GNU shtool's install command.
2776549e21daSmrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777549e21daSmrg      # Aesthetically quote it.
2778549e21daSmrg      func_quote_for_eval "$nonopt"
2779549e21daSmrg      install_prog="$func_quote_for_eval_result "
2780549e21daSmrg      arg=$1
2781549e21daSmrg      shift
2782549e21daSmrg    else
2783549e21daSmrg      install_prog=
2784549e21daSmrg      arg=$nonopt
2785549e21daSmrg    fi
2786ba6a1819Smrg
2787549e21daSmrg    # The real first argument should be the name of the installation program.
2788549e21daSmrg    # Aesthetically quote it.
2789549e21daSmrg    func_quote_for_eval "$arg"
27901bedbe3fSmrg    func_append install_prog "$func_quote_for_eval_result"
2791549e21daSmrg    install_shared_prog=$install_prog
2792549e21daSmrg    case " $install_prog " in
2793549e21daSmrg      *[\\\ /]cp\ *) install_cp=: ;;
2794549e21daSmrg      *) install_cp=false ;;
2795549e21daSmrg    esac
2796ba6a1819Smrg
2797549e21daSmrg    # We need to accept at least all the BSD install flags.
2798549e21daSmrg    dest=
2799549e21daSmrg    files=
2800549e21daSmrg    opts=
2801549e21daSmrg    prev=
2802549e21daSmrg    install_type=
2803549e21daSmrg    isdir=no
2804549e21daSmrg    stripme=
2805549e21daSmrg    no_mode=:
2806549e21daSmrg    for arg
2807549e21daSmrg    do
2808549e21daSmrg      arg2=
2809549e21daSmrg      if test -n "$dest"; then
28101bedbe3fSmrg	func_append files " $dest"
2811549e21daSmrg	dest=$arg
2812549e21daSmrg	continue
2813549e21daSmrg      fi
2814ba6a1819Smrg
2815549e21daSmrg      case $arg in
2816549e21daSmrg      -d) isdir=yes ;;
2817549e21daSmrg      -f)
2818549e21daSmrg	if $install_cp; then :; else
2819549e21daSmrg	  prev=$arg
2820ba6a1819Smrg	fi
2821549e21daSmrg	;;
2822549e21daSmrg      -g | -m | -o)
2823549e21daSmrg	prev=$arg
2824549e21daSmrg	;;
2825549e21daSmrg      -s)
2826549e21daSmrg	stripme=" -s"
2827ba6a1819Smrg	continue
2828ba6a1819Smrg	;;
2829549e21daSmrg      -*)
2830549e21daSmrg	;;
2831ba6a1819Smrg      *)
2832549e21daSmrg	# If the previous option needed an argument, then skip it.
2833549e21daSmrg	if test -n "$prev"; then
2834549e21daSmrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2835549e21daSmrg	    arg2=$install_override_mode
2836549e21daSmrg	    no_mode=false
2837549e21daSmrg	  fi
2838549e21daSmrg	  prev=
2839549e21daSmrg	else
2840549e21daSmrg	  dest=$arg
2841549e21daSmrg	  continue
2842549e21daSmrg	fi
2843ba6a1819Smrg	;;
2844549e21daSmrg      esac
2845ba6a1819Smrg
2846549e21daSmrg      # Aesthetically quote the argument.
2847549e21daSmrg      func_quote_for_eval "$arg"
28481bedbe3fSmrg      func_append install_prog " $func_quote_for_eval_result"
2849549e21daSmrg      if test -n "$arg2"; then
2850549e21daSmrg	func_quote_for_eval "$arg2"
2851ba6a1819Smrg      fi
28521bedbe3fSmrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853549e21daSmrg    done
2854ba6a1819Smrg
2855549e21daSmrg    test -z "$install_prog" && \
2856549e21daSmrg      func_fatal_help "you must specify an install program"
2857ba6a1819Smrg
2858549e21daSmrg    test -n "$prev" && \
2859549e21daSmrg      func_fatal_help "the \`$prev' option requires an argument"
2860ba6a1819Smrg
2861549e21daSmrg    if test -n "$install_override_mode" && $no_mode; then
2862549e21daSmrg      if $install_cp; then :; else
2863549e21daSmrg	func_quote_for_eval "$install_override_mode"
28641bedbe3fSmrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
2865549e21daSmrg      fi
2866ba6a1819Smrg    fi
2867ba6a1819Smrg
2868549e21daSmrg    if test -z "$files"; then
2869549e21daSmrg      if test -z "$dest"; then
2870549e21daSmrg	func_fatal_help "no file or destination specified"
2871549e21daSmrg      else
2872549e21daSmrg	func_fatal_help "you must specify a destination"
2873ba6a1819Smrg      fi
2874ba6a1819Smrg    fi
2875ba6a1819Smrg
2876549e21daSmrg    # Strip any trailing slash from the destination.
2877549e21daSmrg    func_stripname '' '/' "$dest"
2878549e21daSmrg    dest=$func_stripname_result
2879ba6a1819Smrg
2880549e21daSmrg    # Check to see that the destination is a directory.
2881549e21daSmrg    test -d "$dest" && isdir=yes
2882549e21daSmrg    if test "$isdir" = yes; then
2883549e21daSmrg      destdir="$dest"
2884549e21daSmrg      destname=
2885549e21daSmrg    else
2886549e21daSmrg      func_dirname_and_basename "$dest" "" "."
2887549e21daSmrg      destdir="$func_dirname_result"
2888549e21daSmrg      destname="$func_basename_result"
2889549e21daSmrg
2890549e21daSmrg      # Not a directory, so check to see that there is only one file specified.
2891549e21daSmrg      set dummy $files; shift
2892549e21daSmrg      test "$#" -gt 1 && \
2893549e21daSmrg	func_fatal_help "\`$dest' is not a directory"
2894549e21daSmrg    fi
2895549e21daSmrg    case $destdir in
2896549e21daSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897ba6a1819Smrg    *)
2898549e21daSmrg      for file in $files; do
2899549e21daSmrg	case $file in
2900549e21daSmrg	*.lo) ;;
2901549e21daSmrg	*)
2902549e21daSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903549e21daSmrg	  ;;
2904549e21daSmrg	esac
2905549e21daSmrg      done
2906ba6a1819Smrg      ;;
2907ba6a1819Smrg    esac
2908ba6a1819Smrg
2909549e21daSmrg    # This variable tells wrapper scripts just to set variables rather
2910549e21daSmrg    # than running their programs.
2911549e21daSmrg    libtool_install_magic="$magic"
2912ba6a1819Smrg
2913549e21daSmrg    staticlibs=
2914549e21daSmrg    future_libdirs=
2915549e21daSmrg    current_libdirs=
2916549e21daSmrg    for file in $files; do
2917ba6a1819Smrg
2918549e21daSmrg      # Do each installation.
2919549e21daSmrg      case $file in
2920549e21daSmrg      *.$libext)
2921549e21daSmrg	# Do the static libraries later.
29221bedbe3fSmrg	func_append staticlibs " $file"
2923549e21daSmrg	;;
2924ba6a1819Smrg
2925549e21daSmrg      *.la)
29261bedbe3fSmrg	func_resolve_sysroot "$file"
29271bedbe3fSmrg	file=$func_resolve_sysroot_result
29281bedbe3fSmrg
2929549e21daSmrg	# Check to see that this really is a libtool archive.
2930549e21daSmrg	func_lalib_unsafe_p "$file" \
2931549e21daSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932549e21daSmrg
2933549e21daSmrg	library_names=
2934549e21daSmrg	old_library=
2935549e21daSmrg	relink_command=
2936549e21daSmrg	func_source "$file"
2937549e21daSmrg
2938549e21daSmrg	# Add the libdir to current_libdirs if it is the destination.
2939549e21daSmrg	if test "X$destdir" = "X$libdir"; then
2940549e21daSmrg	  case "$current_libdirs " in
2941549e21daSmrg	  *" $libdir "*) ;;
29421bedbe3fSmrg	  *) func_append current_libdirs " $libdir" ;;
2943ba6a1819Smrg	  esac
2944549e21daSmrg	else
2945549e21daSmrg	  # Note the libdir as a future libdir.
2946549e21daSmrg	  case "$future_libdirs " in
2947549e21daSmrg	  *" $libdir "*) ;;
29481bedbe3fSmrg	  *) func_append future_libdirs " $libdir" ;;
2949549e21daSmrg	  esac
2950549e21daSmrg	fi
2951549e21daSmrg
2952549e21daSmrg	func_dirname "$file" "/" ""
2953549e21daSmrg	dir="$func_dirname_result"
29541bedbe3fSmrg	func_append dir "$objdir"
2955549e21daSmrg
2956549e21daSmrg	if test -n "$relink_command"; then
2957549e21daSmrg	  # Determine the prefix the user has applied to our future dir.
2958549e21daSmrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959549e21daSmrg
2960549e21daSmrg	  # Don't allow the user to place us outside of our expected
2961549e21daSmrg	  # location b/c this prevents finding dependent libraries that
2962549e21daSmrg	  # are installed to the same prefix.
2963549e21daSmrg	  # At present, this check doesn't affect windows .dll's that
2964549e21daSmrg	  # are installed into $libdir/../bin (currently, that works fine)
2965549e21daSmrg	  # but it's something to keep an eye on.
2966549e21daSmrg	  test "$inst_prefix_dir" = "$destdir" && \
2967549e21daSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968549e21daSmrg
2969549e21daSmrg	  if test -n "$inst_prefix_dir"; then
2970549e21daSmrg	    # Stick the inst_prefix_dir data into the link command.
2971549e21daSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972ba6a1819Smrg	  else
2973549e21daSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974ba6a1819Smrg	  fi
2975549e21daSmrg
2976549e21daSmrg	  func_warning "relinking \`$file'"
2977549e21daSmrg	  func_show_eval "$relink_command" \
2978549e21daSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979549e21daSmrg	fi
2980549e21daSmrg
2981549e21daSmrg	# See the names of the shared library.
2982549e21daSmrg	set dummy $library_names; shift
2983549e21daSmrg	if test -n "$1"; then
2984549e21daSmrg	  realname="$1"
2985549e21daSmrg	  shift
2986549e21daSmrg
2987549e21daSmrg	  srcname="$realname"
2988549e21daSmrg	  test -n "$relink_command" && srcname="$realname"T
2989549e21daSmrg
2990549e21daSmrg	  # Install the shared library and build the symlinks.
2991549e21daSmrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992549e21daSmrg	      'exit $?'
2993549e21daSmrg	  tstripme="$stripme"
2994549e21daSmrg	  case $host_os in
2995549e21daSmrg	  cygwin* | mingw* | pw32* | cegcc*)
2996549e21daSmrg	    case $realname in
2997549e21daSmrg	    *.dll.a)
2998549e21daSmrg	      tstripme=""
2999549e21daSmrg	      ;;
3000549e21daSmrg	    esac
3001549e21daSmrg	    ;;
3002549e21daSmrg	  esac
3003549e21daSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004549e21daSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005ba6a1819Smrg	  fi
3006549e21daSmrg
3007549e21daSmrg	  if test "$#" -gt 0; then
3008549e21daSmrg	    # Delete the old symlinks, and create new ones.
3009549e21daSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010549e21daSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011549e21daSmrg	    # so we also need to try rm && ln -s.
3012549e21daSmrg	    for linkname
3013549e21daSmrg	    do
3014549e21daSmrg	      test "$linkname" != "$realname" \
3015549e21daSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016ba6a1819Smrg	    done
3017ba6a1819Smrg	  fi
3018549e21daSmrg
3019549e21daSmrg	  # Do each command in the postinstall commands.
3020549e21daSmrg	  lib="$destdir/$realname"
3021549e21daSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022549e21daSmrg	fi
3023549e21daSmrg
3024549e21daSmrg	# Install the pseudo-library for information purposes.
3025549e21daSmrg	func_basename "$file"
3026549e21daSmrg	name="$func_basename_result"
3027549e21daSmrg	instname="$dir/$name"i
3028549e21daSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3029549e21daSmrg
3030549e21daSmrg	# Maybe install the static library, too.
30311bedbe3fSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032549e21daSmrg	;;
3033549e21daSmrg
3034549e21daSmrg      *.lo)
3035549e21daSmrg	# Install (i.e. copy) a libtool object.
3036549e21daSmrg
3037549e21daSmrg	# Figure out destination file name, if it wasn't already specified.
3038549e21daSmrg	if test -n "$destname"; then
3039549e21daSmrg	  destfile="$destdir/$destname"
3040549e21daSmrg	else
3041549e21daSmrg	  func_basename "$file"
3042549e21daSmrg	  destfile="$func_basename_result"
3043549e21daSmrg	  destfile="$destdir/$destfile"
3044549e21daSmrg	fi
3045549e21daSmrg
3046549e21daSmrg	# Deduce the name of the destination old-style object file.
3047549e21daSmrg	case $destfile in
3048549e21daSmrg	*.lo)
3049549e21daSmrg	  func_lo2o "$destfile"
3050549e21daSmrg	  staticdest=$func_lo2o_result
3051ba6a1819Smrg	  ;;
3052549e21daSmrg	*.$objext)
3053549e21daSmrg	  staticdest="$destfile"
3054549e21daSmrg	  destfile=
3055ba6a1819Smrg	  ;;
3056549e21daSmrg	*)
3057549e21daSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058ba6a1819Smrg	  ;;
3059549e21daSmrg	esac
3060549e21daSmrg
3061549e21daSmrg	# Install the libtool object if requested.
3062549e21daSmrg	test -n "$destfile" && \
3063549e21daSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064549e21daSmrg
3065549e21daSmrg	# Install the old object if enabled.
3066549e21daSmrg	if test "$build_old_libs" = yes; then
3067549e21daSmrg	  # Deduce the name of the old-style object file.
3068549e21daSmrg	  func_lo2o "$file"
3069549e21daSmrg	  staticobj=$func_lo2o_result
3070549e21daSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071ba6a1819Smrg	fi
3072549e21daSmrg	exit $EXIT_SUCCESS
3073549e21daSmrg	;;
3074ba6a1819Smrg
3075549e21daSmrg      *)
3076549e21daSmrg	# Figure out destination file name, if it wasn't already specified.
3077549e21daSmrg	if test -n "$destname"; then
3078549e21daSmrg	  destfile="$destdir/$destname"
3079ba6a1819Smrg	else
3080549e21daSmrg	  func_basename "$file"
3081549e21daSmrg	  destfile="$func_basename_result"
3082549e21daSmrg	  destfile="$destdir/$destfile"
3083ba6a1819Smrg	fi
3084ba6a1819Smrg
3085549e21daSmrg	# If the file is missing, and there is a .exe on the end, strip it
3086549e21daSmrg	# because it is most likely a libtool script we actually want to
3087549e21daSmrg	# install
3088549e21daSmrg	stripped_ext=""
3089549e21daSmrg	case $file in
3090549e21daSmrg	  *.exe)
3091549e21daSmrg	    if test ! -f "$file"; then
3092549e21daSmrg	      func_stripname '' '.exe' "$file"
3093549e21daSmrg	      file=$func_stripname_result
3094549e21daSmrg	      stripped_ext=".exe"
3095549e21daSmrg	    fi
3096549e21daSmrg	    ;;
3097549e21daSmrg	esac
3098ba6a1819Smrg
3099549e21daSmrg	# Do a test to see if this is really a libtool program.
3100549e21daSmrg	case $host in
3101549e21daSmrg	*cygwin* | *mingw*)
3102549e21daSmrg	    if func_ltwrapper_executable_p "$file"; then
3103549e21daSmrg	      func_ltwrapper_scriptname "$file"
3104549e21daSmrg	      wrapper=$func_ltwrapper_scriptname_result
3105549e21daSmrg	    else
3106549e21daSmrg	      func_stripname '' '.exe' "$file"
3107549e21daSmrg	      wrapper=$func_stripname_result
3108549e21daSmrg	    fi
3109549e21daSmrg	    ;;
3110549e21daSmrg	*)
3111549e21daSmrg	    wrapper=$file
3112549e21daSmrg	    ;;
3113ba6a1819Smrg	esac
3114549e21daSmrg	if func_ltwrapper_script_p "$wrapper"; then
3115549e21daSmrg	  notinst_deplibs=
3116549e21daSmrg	  relink_command=
3117ba6a1819Smrg
3118549e21daSmrg	  func_source "$wrapper"
3119ba6a1819Smrg
3120549e21daSmrg	  # Check the variables that should have been set.
3121549e21daSmrg	  test -z "$generated_by_libtool_version" && \
3122549e21daSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123549e21daSmrg
3124549e21daSmrg	  finalize=yes
3125549e21daSmrg	  for lib in $notinst_deplibs; do
3126549e21daSmrg	    # Check to see that each library is installed.
3127549e21daSmrg	    libdir=
3128549e21daSmrg	    if test -f "$lib"; then
3129549e21daSmrg	      func_source "$lib"
3130ba6a1819Smrg	    fi
3131549e21daSmrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132549e21daSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3133549e21daSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134549e21daSmrg	      finalize=no
3135549e21daSmrg	    fi
3136549e21daSmrg	  done
3137ba6a1819Smrg
3138549e21daSmrg	  relink_command=
3139549e21daSmrg	  func_source "$wrapper"
3140ba6a1819Smrg
3141549e21daSmrg	  outputname=
3142549e21daSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143549e21daSmrg	    $opt_dry_run || {
3144549e21daSmrg	      if test "$finalize" = yes; then
3145549e21daSmrg	        tmpdir=`func_mktempdir`
3146549e21daSmrg		func_basename "$file$stripped_ext"
3147549e21daSmrg		file="$func_basename_result"
3148549e21daSmrg	        outputname="$tmpdir/$file"
3149549e21daSmrg	        # Replace the output file specification.
3150549e21daSmrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151549e21daSmrg
3152549e21daSmrg	        $opt_silent || {
3153549e21daSmrg	          func_quote_for_expand "$relink_command"
3154549e21daSmrg		  eval "func_echo $func_quote_for_expand_result"
3155549e21daSmrg	        }
3156549e21daSmrg	        if eval "$relink_command"; then :
3157549e21daSmrg	          else
3158549e21daSmrg		  func_error "error: relink \`$file' with the above command before installing it"
3159549e21daSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160549e21daSmrg		  continue
3161549e21daSmrg	        fi
3162549e21daSmrg	        file="$outputname"
3163549e21daSmrg	      else
3164549e21daSmrg	        func_warning "cannot relink \`$file'"
3165549e21daSmrg	      fi
3166549e21daSmrg	    }
3167ba6a1819Smrg	  else
3168549e21daSmrg	    # Install the binary that we compiled earlier.
3169549e21daSmrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170ba6a1819Smrg	  fi
3171549e21daSmrg	fi
3172ba6a1819Smrg
3173549e21daSmrg	# remove .exe since cygwin /usr/bin/install will append another
3174549e21daSmrg	# one anyway
3175549e21daSmrg	case $install_prog,$host in
3176549e21daSmrg	*/usr/bin/install*,*cygwin*)
3177549e21daSmrg	  case $file:$destfile in
3178549e21daSmrg	  *.exe:*.exe)
3179549e21daSmrg	    # this is ok
3180549e21daSmrg	    ;;
3181549e21daSmrg	  *.exe:*)
3182549e21daSmrg	    destfile=$destfile.exe
3183549e21daSmrg	    ;;
3184549e21daSmrg	  *:*.exe)
3185549e21daSmrg	    func_stripname '' '.exe' "$destfile"
3186549e21daSmrg	    destfile=$func_stripname_result
3187549e21daSmrg	    ;;
3188549e21daSmrg	  esac
3189ba6a1819Smrg	  ;;
3190ba6a1819Smrg	esac
3191549e21daSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192549e21daSmrg	$opt_dry_run || if test -n "$outputname"; then
3193549e21daSmrg	  ${RM}r "$tmpdir"
3194549e21daSmrg	fi
3195549e21daSmrg	;;
3196549e21daSmrg      esac
3197549e21daSmrg    done
3198ba6a1819Smrg
3199549e21daSmrg    for file in $staticlibs; do
3200549e21daSmrg      func_basename "$file"
3201549e21daSmrg      name="$func_basename_result"
3202ba6a1819Smrg
3203549e21daSmrg      # Set up the ranlib parameters.
3204549e21daSmrg      oldlib="$destdir/$name"
32051bedbe3fSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
32061bedbe3fSmrg      tool_oldlib=$func_to_tool_file_result
3207ba6a1819Smrg
3208549e21daSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209ba6a1819Smrg
3210549e21daSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
32111bedbe3fSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212549e21daSmrg      fi
3213ba6a1819Smrg
3214549e21daSmrg      # Do each command in the postinstall commands.
3215549e21daSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216549e21daSmrg    done
3217ba6a1819Smrg
3218549e21daSmrg    test -n "$future_libdirs" && \
3219549e21daSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220ba6a1819Smrg
3221549e21daSmrg    if test -n "$current_libdirs"; then
3222549e21daSmrg      # Maybe just do a dry run.
3223549e21daSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224549e21daSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225549e21daSmrg    else
3226549e21daSmrg      exit $EXIT_SUCCESS
3227549e21daSmrg    fi
3228549e21daSmrg}
3229ba6a1819Smrg
32301bedbe3fSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231ba6a1819Smrg
3232ba6a1819Smrg
3233549e21daSmrg# func_generate_dlsyms outputname originator pic_p
3234549e21daSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235549e21daSmrg# a dlpreopen symbol table.
3236549e21daSmrgfunc_generate_dlsyms ()
3237549e21daSmrg{
3238549e21daSmrg    $opt_debug
3239549e21daSmrg    my_outputname="$1"
3240549e21daSmrg    my_originator="$2"
3241549e21daSmrg    my_pic_p="${3-no}"
3242549e21daSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243549e21daSmrg    my_dlsyms=
3244549e21daSmrg
3245549e21daSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246549e21daSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247549e21daSmrg	my_dlsyms="${my_outputname}S.c"
3248549e21daSmrg      else
3249549e21daSmrg	func_error "not configured to extract global symbols from dlpreopened files"
3250549e21daSmrg      fi
3251549e21daSmrg    fi
3252ba6a1819Smrg
3253549e21daSmrg    if test -n "$my_dlsyms"; then
3254549e21daSmrg      case $my_dlsyms in
3255549e21daSmrg      "") ;;
3256549e21daSmrg      *.c)
3257549e21daSmrg	# Discover the nlist of each of the dlfiles.
3258549e21daSmrg	nlist="$output_objdir/${my_outputname}.nm"
3259549e21daSmrg
3260549e21daSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261549e21daSmrg
3262549e21daSmrg	# Parse the name list into a source file.
3263549e21daSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264549e21daSmrg
3265549e21daSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266549e21daSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267549e21daSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268549e21daSmrg
3269549e21daSmrg#ifdef __cplusplus
3270549e21daSmrgextern \"C\" {
3271549e21daSmrg#endif
3272549e21daSmrg
3273549e21daSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3274549e21daSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3275549e21daSmrg#endif
3276549e21daSmrg
32771bedbe3fSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
32781bedbe3fSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
32791bedbe3fSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
32801bedbe3fSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
32811bedbe3fSmrg# define LT_DLSYM_CONST
32821bedbe3fSmrg#elif defined(__osf__)
32831bedbe3fSmrg/* This system does not cope well with relocations in const data.  */
32841bedbe3fSmrg# define LT_DLSYM_CONST
32851bedbe3fSmrg#else
32861bedbe3fSmrg# define LT_DLSYM_CONST const
32871bedbe3fSmrg#endif
32881bedbe3fSmrg
3289549e21daSmrg/* External symbol declarations for the compiler. */\
3290549e21daSmrg"
3291549e21daSmrg
3292549e21daSmrg	if test "$dlself" = yes; then
3293549e21daSmrg	  func_verbose "generating symbol list for \`$output'"
3294549e21daSmrg
3295549e21daSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296549e21daSmrg
3297549e21daSmrg	  # Add our own program objects to the symbol list.
3298549e21daSmrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299549e21daSmrg	  for progfile in $progfiles; do
33001bedbe3fSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
33011bedbe3fSmrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
33021bedbe3fSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303549e21daSmrg	  done
3304549e21daSmrg
3305549e21daSmrg	  if test -n "$exclude_expsyms"; then
3306549e21daSmrg	    $opt_dry_run || {
3307549e21daSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308549e21daSmrg	      eval '$MV "$nlist"T "$nlist"'
3309549e21daSmrg	    }
3310ba6a1819Smrg	  fi
3311ba6a1819Smrg
3312549e21daSmrg	  if test -n "$export_symbols_regex"; then
3313549e21daSmrg	    $opt_dry_run || {
3314549e21daSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315549e21daSmrg	      eval '$MV "$nlist"T "$nlist"'
3316549e21daSmrg	    }
3317ba6a1819Smrg	  fi
3318549e21daSmrg
3319549e21daSmrg	  # Prepare the list of exported symbols
3320549e21daSmrg	  if test -z "$export_symbols"; then
3321549e21daSmrg	    export_symbols="$output_objdir/$outputname.exp"
3322549e21daSmrg	    $opt_dry_run || {
3323549e21daSmrg	      $RM $export_symbols
3324549e21daSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325549e21daSmrg	      case $host in
3326549e21daSmrg	      *cygwin* | *mingw* | *cegcc* )
3327549e21daSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328549e21daSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329549e21daSmrg	        ;;
3330ba6a1819Smrg	      esac
3331549e21daSmrg	    }
3332549e21daSmrg	  else
3333549e21daSmrg	    $opt_dry_run || {
3334549e21daSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335549e21daSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336549e21daSmrg	      eval '$MV "$nlist"T "$nlist"'
3337549e21daSmrg	      case $host in
3338549e21daSmrg	        *cygwin* | *mingw* | *cegcc* )
3339549e21daSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340549e21daSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341549e21daSmrg	          ;;
3342ba6a1819Smrg	      esac
3343549e21daSmrg	    }
3344ba6a1819Smrg	  fi
3345549e21daSmrg	fi
3346ba6a1819Smrg
3347549e21daSmrg	for dlprefile in $dlprefiles; do
3348549e21daSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349549e21daSmrg	  func_basename "$dlprefile"
3350549e21daSmrg	  name="$func_basename_result"
33511bedbe3fSmrg          case $host in
33521bedbe3fSmrg	    *cygwin* | *mingw* | *cegcc* )
33531bedbe3fSmrg	      # if an import library, we need to obtain dlname
33541bedbe3fSmrg	      if func_win32_import_lib_p "$dlprefile"; then
33551bedbe3fSmrg	        func_tr_sh "$dlprefile"
33561bedbe3fSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
33571bedbe3fSmrg	        dlprefile_dlbasename=""
33581bedbe3fSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
33591bedbe3fSmrg	          # Use subshell, to avoid clobbering current variable values
33601bedbe3fSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
33611bedbe3fSmrg	          if test -n "$dlprefile_dlname" ; then
33621bedbe3fSmrg	            func_basename "$dlprefile_dlname"
33631bedbe3fSmrg	            dlprefile_dlbasename="$func_basename_result"
33641bedbe3fSmrg	          else
33651bedbe3fSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
33661bedbe3fSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
33671bedbe3fSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
33681bedbe3fSmrg	          fi
33691bedbe3fSmrg	        fi
33701bedbe3fSmrg	        $opt_dry_run || {
33711bedbe3fSmrg	          if test -n "$dlprefile_dlbasename" ; then
33721bedbe3fSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
33731bedbe3fSmrg	          else
33741bedbe3fSmrg	            func_warning "Could not compute DLL name from $name"
33751bedbe3fSmrg	            eval '$ECHO ": $name " >> "$nlist"'
33761bedbe3fSmrg	          fi
33771bedbe3fSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33781bedbe3fSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
33791bedbe3fSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
33801bedbe3fSmrg	        }
33811bedbe3fSmrg	      else # not an import lib
33821bedbe3fSmrg	        $opt_dry_run || {
33831bedbe3fSmrg	          eval '$ECHO ": $name " >> "$nlist"'
33841bedbe3fSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33851bedbe3fSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33861bedbe3fSmrg	        }
33871bedbe3fSmrg	      fi
33881bedbe3fSmrg	    ;;
33891bedbe3fSmrg	    *)
33901bedbe3fSmrg	      $opt_dry_run || {
33911bedbe3fSmrg	        eval '$ECHO ": $name " >> "$nlist"'
33921bedbe3fSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33931bedbe3fSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33941bedbe3fSmrg	      }
33951bedbe3fSmrg	    ;;
33961bedbe3fSmrg          esac
3397549e21daSmrg	done
3398ba6a1819Smrg
3399549e21daSmrg	$opt_dry_run || {
3400549e21daSmrg	  # Make sure we have at least an empty file.
3401549e21daSmrg	  test -f "$nlist" || : > "$nlist"
3402ba6a1819Smrg
3403549e21daSmrg	  if test -n "$exclude_expsyms"; then
3404549e21daSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405549e21daSmrg	    $MV "$nlist"T "$nlist"
3406ba6a1819Smrg	  fi
3407ba6a1819Smrg
3408549e21daSmrg	  # Try sorting and uniquifying the output.
3409549e21daSmrg	  if $GREP -v "^: " < "$nlist" |
3410549e21daSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411549e21daSmrg		sort -k 3
3412ba6a1819Smrg	      else
3413549e21daSmrg		sort +2
3414549e21daSmrg	      fi |
3415549e21daSmrg	      uniq > "$nlist"S; then
3416549e21daSmrg	    :
3417ba6a1819Smrg	  else
3418549e21daSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419ba6a1819Smrg	  fi
3420ba6a1819Smrg
3421549e21daSmrg	  if test -f "$nlist"S; then
3422549e21daSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423ba6a1819Smrg	  else
3424549e21daSmrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425ba6a1819Smrg	  fi
3426ba6a1819Smrg
3427549e21daSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
3428ba6a1819Smrg
3429549e21daSmrg/* The mapping between symbol names and symbols.  */
3430549e21daSmrgtypedef struct {
3431549e21daSmrg  const char *name;
3432549e21daSmrg  void *address;
3433549e21daSmrg} lt_dlsymlist;
34341bedbe3fSmrgextern LT_DLSYM_CONST lt_dlsymlist
3435549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[];
34361bedbe3fSmrgLT_DLSYM_CONST lt_dlsymlist
3437549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
3438549e21daSmrg{\
3439549e21daSmrg  { \"$my_originator\", (void *) 0 },"
3440549e21daSmrg
3441549e21daSmrg	  case $need_lib_prefix in
3442549e21daSmrg	  no)
3443549e21daSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444549e21daSmrg	    ;;
3445549e21daSmrg	  *)
3446549e21daSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447549e21daSmrg	    ;;
3448549e21daSmrg	  esac
3449549e21daSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450549e21daSmrg  {0, (void *) 0}
3451549e21daSmrg};
3452549e21daSmrg
3453549e21daSmrg/* This works around a problem in FreeBSD linker */
3454549e21daSmrg#ifdef FREEBSD_WORKAROUND
3455549e21daSmrgstatic const void *lt_preloaded_setup() {
3456549e21daSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457549e21daSmrg}
3458549e21daSmrg#endif
3459549e21daSmrg
3460549e21daSmrg#ifdef __cplusplus
3461549e21daSmrg}
3462549e21daSmrg#endif\
3463549e21daSmrg"
3464549e21daSmrg	} # !$opt_dry_run
3465549e21daSmrg
3466549e21daSmrg	pic_flag_for_symtable=
3467549e21daSmrg	case "$compile_command " in
3468549e21daSmrg	*" -static "*) ;;
3469549e21daSmrg	*)
3470549e21daSmrg	  case $host in
3471549e21daSmrg	  # compiling the symbol table file with pic_flag works around
3472549e21daSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473549e21daSmrg	  # linked before any other PIC object.  But we must not use
3474549e21daSmrg	  # pic_flag when linking with -static.  The problem exists in
3475549e21daSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
34761bedbe3fSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477549e21daSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478549e21daSmrg	  *-*-hpux*)
3479549e21daSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480549e21daSmrg	  *)
3481549e21daSmrg	    if test "X$my_pic_p" != Xno; then
3482549e21daSmrg	      pic_flag_for_symtable=" $pic_flag"
3483ba6a1819Smrg	    fi
3484549e21daSmrg	    ;;
3485549e21daSmrg	  esac
3486549e21daSmrg	  ;;
3487549e21daSmrg	esac
3488549e21daSmrg	symtab_cflags=
3489549e21daSmrg	for arg in $LTCFLAGS; do
3490549e21daSmrg	  case $arg in
3491549e21daSmrg	  -pie | -fpie | -fPIE) ;;
34921bedbe3fSmrg	  *) func_append symtab_cflags " $arg" ;;
3493549e21daSmrg	  esac
3494549e21daSmrg	done
3495ba6a1819Smrg
3496549e21daSmrg	# Now compile the dynamic symbol file.
3497549e21daSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498ba6a1819Smrg
3499549e21daSmrg	# Clean up the generated files.
3500549e21daSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501549e21daSmrg
3502549e21daSmrg	# Transform the symbol file into the correct name.
3503549e21daSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504549e21daSmrg	case $host in
3505549e21daSmrg	*cygwin* | *mingw* | *cegcc* )
3506549e21daSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
3507549e21daSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3508549e21daSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509549e21daSmrg	  else
3510549e21daSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3511549e21daSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512549e21daSmrg	  fi
3513549e21daSmrg	  ;;
3514549e21daSmrg	*)
3515549e21daSmrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3516549e21daSmrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517ba6a1819Smrg	  ;;
3518ba6a1819Smrg	esac
3519549e21daSmrg	;;
3520549e21daSmrg      *)
3521549e21daSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522549e21daSmrg	;;
3523549e21daSmrg      esac
3524549e21daSmrg    else
3525549e21daSmrg      # We keep going just in case the user didn't refer to
3526549e21daSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527549e21daSmrg      # really was required.
3528ba6a1819Smrg
3529549e21daSmrg      # Nullify the symbol file.
3530549e21daSmrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3531549e21daSmrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532549e21daSmrg    fi
3533549e21daSmrg}
3534ba6a1819Smrg
3535549e21daSmrg# func_win32_libid arg
3536549e21daSmrg# return the library type of file 'arg'
3537549e21daSmrg#
3538549e21daSmrg# Need a lot of goo to handle *both* DLLs and import libs
3539549e21daSmrg# Has to be a shell function in order to 'eat' the argument
3540549e21daSmrg# that is supplied when $file_magic_command is called.
3541549e21daSmrg# Despite the name, also deal with 64 bit binaries.
3542549e21daSmrgfunc_win32_libid ()
3543549e21daSmrg{
3544549e21daSmrg  $opt_debug
3545549e21daSmrg  win32_libid_type="unknown"
3546549e21daSmrg  win32_fileres=`file -L $1 2>/dev/null`
3547549e21daSmrg  case $win32_fileres in
3548549e21daSmrg  *ar\ archive\ import\ library*) # definitely import
3549549e21daSmrg    win32_libid_type="x86 archive import"
3550549e21daSmrg    ;;
3551549e21daSmrg  *ar\ archive*) # could be an import, or static
3552549e21daSmrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553549e21daSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3554549e21daSmrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
35551bedbe3fSmrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
35561bedbe3fSmrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557549e21daSmrg	$SED -n -e '
3558549e21daSmrg	    1,100{
3559549e21daSmrg		/ I /{
3560549e21daSmrg		    s,.*,import,
3561549e21daSmrg		    p
3562549e21daSmrg		    q
3563549e21daSmrg		}
3564549e21daSmrg	    }'`
3565549e21daSmrg      case $win32_nmres in
3566549e21daSmrg      import*)  win32_libid_type="x86 archive import";;
3567549e21daSmrg      *)        win32_libid_type="x86 archive static";;
3568549e21daSmrg      esac
3569549e21daSmrg    fi
3570549e21daSmrg    ;;
3571549e21daSmrg  *DLL*)
3572549e21daSmrg    win32_libid_type="x86 DLL"
3573549e21daSmrg    ;;
3574549e21daSmrg  *executable*) # but shell scripts are "executable" too...
3575549e21daSmrg    case $win32_fileres in
3576549e21daSmrg    *MS\ Windows\ PE\ Intel*)
3577549e21daSmrg      win32_libid_type="x86 DLL"
3578549e21daSmrg      ;;
3579549e21daSmrg    esac
3580549e21daSmrg    ;;
3581549e21daSmrg  esac
3582549e21daSmrg  $ECHO "$win32_libid_type"
3583549e21daSmrg}
3584ba6a1819Smrg
35851bedbe3fSmrg# func_cygming_dll_for_implib ARG
35861bedbe3fSmrg#
35871bedbe3fSmrg# Platform-specific function to extract the
35881bedbe3fSmrg# name of the DLL associated with the specified
35891bedbe3fSmrg# import library ARG.
35901bedbe3fSmrg# Invoked by eval'ing the libtool variable
35911bedbe3fSmrg#    $sharedlib_from_linklib_cmd
35921bedbe3fSmrg# Result is available in the variable
35931bedbe3fSmrg#    $sharedlib_from_linklib_result
35941bedbe3fSmrgfunc_cygming_dll_for_implib ()
35951bedbe3fSmrg{
35961bedbe3fSmrg  $opt_debug
35971bedbe3fSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
35981bedbe3fSmrg}
35991bedbe3fSmrg
36001bedbe3fSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
36011bedbe3fSmrg#
36021bedbe3fSmrg# The is the core of a fallback implementation of a
36031bedbe3fSmrg# platform-specific function to extract the name of the
36041bedbe3fSmrg# DLL associated with the specified import library LIBNAME.
36051bedbe3fSmrg#
36061bedbe3fSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
36071bedbe3fSmrg# on the platform and compiler that created the implib.
36081bedbe3fSmrg#
36091bedbe3fSmrg# Echos the name of the DLL associated with the
36101bedbe3fSmrg# specified import library.
36111bedbe3fSmrgfunc_cygming_dll_for_implib_fallback_core ()
36121bedbe3fSmrg{
36131bedbe3fSmrg  $opt_debug
36141bedbe3fSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
36151bedbe3fSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
36161bedbe3fSmrg    $SED '/^Contents of section '"$match_literal"':/{
36171bedbe3fSmrg      # Place marker at beginning of archive member dllname section
36181bedbe3fSmrg      s/.*/====MARK====/
36191bedbe3fSmrg      p
36201bedbe3fSmrg      d
36211bedbe3fSmrg    }
36221bedbe3fSmrg    # These lines can sometimes be longer than 43 characters, but
36231bedbe3fSmrg    # are always uninteresting
36241bedbe3fSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
36251bedbe3fSmrg    /^In archive [^:]*:/d
36261bedbe3fSmrg    # Ensure marker is printed
36271bedbe3fSmrg    /^====MARK====/p
36281bedbe3fSmrg    # Remove all lines with less than 43 characters
36291bedbe3fSmrg    /^.\{43\}/!d
36301bedbe3fSmrg    # From remaining lines, remove first 43 characters
36311bedbe3fSmrg    s/^.\{43\}//' |
36321bedbe3fSmrg    $SED -n '
36331bedbe3fSmrg      # Join marker and all lines until next marker into a single line
36341bedbe3fSmrg      /^====MARK====/ b para
36351bedbe3fSmrg      H
36361bedbe3fSmrg      $ b para
36371bedbe3fSmrg      b
36381bedbe3fSmrg      :para
36391bedbe3fSmrg      x
36401bedbe3fSmrg      s/\n//g
36411bedbe3fSmrg      # Remove the marker
36421bedbe3fSmrg      s/^====MARK====//
36431bedbe3fSmrg      # Remove trailing dots and whitespace
36441bedbe3fSmrg      s/[\. \t]*$//
36451bedbe3fSmrg      # Print
36461bedbe3fSmrg      /./p' |
36471bedbe3fSmrg    # we now have a list, one entry per line, of the stringified
36481bedbe3fSmrg    # contents of the appropriate section of all members of the
36491bedbe3fSmrg    # archive which possess that section. Heuristic: eliminate
36501bedbe3fSmrg    # all those which have a first or second character that is
36511bedbe3fSmrg    # a '.' (that is, objdump's representation of an unprintable
36521bedbe3fSmrg    # character.) This should work for all archives with less than
36531bedbe3fSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
36541bedbe3fSmrg    # begins with a literal '.' or a single character followed by
36551bedbe3fSmrg    # a '.'.
36561bedbe3fSmrg    #
36571bedbe3fSmrg    # Of those that remain, print the first one.
36581bedbe3fSmrg    $SED -e '/^\./d;/^.\./d;q'
36591bedbe3fSmrg}
36601bedbe3fSmrg
36611bedbe3fSmrg# func_cygming_gnu_implib_p ARG
36621bedbe3fSmrg# This predicate returns with zero status (TRUE) if
36631bedbe3fSmrg# ARG is a GNU/binutils-style import library. Returns
36641bedbe3fSmrg# with nonzero status (FALSE) otherwise.
36651bedbe3fSmrgfunc_cygming_gnu_implib_p ()
36661bedbe3fSmrg{
36671bedbe3fSmrg  $opt_debug
36681bedbe3fSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36691bedbe3fSmrg  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)$'`
36701bedbe3fSmrg  test -n "$func_cygming_gnu_implib_tmp"
36711bedbe3fSmrg}
36721bedbe3fSmrg
36731bedbe3fSmrg# func_cygming_ms_implib_p ARG
36741bedbe3fSmrg# This predicate returns with zero status (TRUE) if
36751bedbe3fSmrg# ARG is an MS-style import library. Returns
36761bedbe3fSmrg# with nonzero status (FALSE) otherwise.
36771bedbe3fSmrgfunc_cygming_ms_implib_p ()
36781bedbe3fSmrg{
36791bedbe3fSmrg  $opt_debug
36801bedbe3fSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36811bedbe3fSmrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
36821bedbe3fSmrg  test -n "$func_cygming_ms_implib_tmp"
36831bedbe3fSmrg}
36841bedbe3fSmrg
36851bedbe3fSmrg# func_cygming_dll_for_implib_fallback ARG
36861bedbe3fSmrg# Platform-specific function to extract the
36871bedbe3fSmrg# name of the DLL associated with the specified
36881bedbe3fSmrg# import library ARG.
36891bedbe3fSmrg#
36901bedbe3fSmrg# This fallback implementation is for use when $DLLTOOL
36911bedbe3fSmrg# does not support the --identify-strict option.
36921bedbe3fSmrg# Invoked by eval'ing the libtool variable
36931bedbe3fSmrg#    $sharedlib_from_linklib_cmd
36941bedbe3fSmrg# Result is available in the variable
36951bedbe3fSmrg#    $sharedlib_from_linklib_result
36961bedbe3fSmrgfunc_cygming_dll_for_implib_fallback ()
36971bedbe3fSmrg{
36981bedbe3fSmrg  $opt_debug
36991bedbe3fSmrg  if func_cygming_gnu_implib_p "$1" ; then
37001bedbe3fSmrg    # binutils import library
37011bedbe3fSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
37021bedbe3fSmrg  elif func_cygming_ms_implib_p "$1" ; then
37031bedbe3fSmrg    # ms-generated import library
37041bedbe3fSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
37051bedbe3fSmrg  else
37061bedbe3fSmrg    # unknown
37071bedbe3fSmrg    sharedlib_from_linklib_result=""
37081bedbe3fSmrg  fi
37091bedbe3fSmrg}
3710ba6a1819Smrg
3711ba6a1819Smrg
3712549e21daSmrg# func_extract_an_archive dir oldlib
3713549e21daSmrgfunc_extract_an_archive ()
3714549e21daSmrg{
3715549e21daSmrg    $opt_debug
3716549e21daSmrg    f_ex_an_ar_dir="$1"; shift
3717549e21daSmrg    f_ex_an_ar_oldlib="$1"
3718549e21daSmrg    if test "$lock_old_archive_extraction" = yes; then
3719549e21daSmrg      lockfile=$f_ex_an_ar_oldlib.lock
3720549e21daSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3721549e21daSmrg	func_echo "Waiting for $lockfile to be removed"
3722549e21daSmrg	sleep 2
3723549e21daSmrg      done
3724549e21daSmrg    fi
3725549e21daSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3726549e21daSmrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
3727549e21daSmrg    if test "$lock_old_archive_extraction" = yes; then
3728549e21daSmrg      $opt_dry_run || rm -f "$lockfile"
3729549e21daSmrg    fi
3730549e21daSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731549e21daSmrg     :
3732549e21daSmrg    else
3733549e21daSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734549e21daSmrg    fi
3735549e21daSmrg}
3736ba6a1819Smrg
3737ba6a1819Smrg
3738549e21daSmrg# func_extract_archives gentop oldlib ...
3739549e21daSmrgfunc_extract_archives ()
3740549e21daSmrg{
3741549e21daSmrg    $opt_debug
3742549e21daSmrg    my_gentop="$1"; shift
3743549e21daSmrg    my_oldlibs=${1+"$@"}
3744549e21daSmrg    my_oldobjs=""
3745549e21daSmrg    my_xlib=""
3746549e21daSmrg    my_xabs=""
3747549e21daSmrg    my_xdir=""
3748ba6a1819Smrg
3749549e21daSmrg    for my_xlib in $my_oldlibs; do
3750549e21daSmrg      # Extract the objects.
3751549e21daSmrg      case $my_xlib in
3752549e21daSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753549e21daSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754ba6a1819Smrg      esac
3755549e21daSmrg      func_basename "$my_xlib"
3756549e21daSmrg      my_xlib="$func_basename_result"
3757549e21daSmrg      my_xlib_u=$my_xlib
3758549e21daSmrg      while :; do
3759549e21daSmrg        case " $extracted_archives " in
3760549e21daSmrg	*" $my_xlib_u "*)
3761549e21daSmrg	  func_arith $extracted_serial + 1
3762549e21daSmrg	  extracted_serial=$func_arith_result
3763549e21daSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764549e21daSmrg	*) break ;;
3765549e21daSmrg	esac
3766549e21daSmrg      done
3767549e21daSmrg      extracted_archives="$extracted_archives $my_xlib_u"
3768549e21daSmrg      my_xdir="$my_gentop/$my_xlib_u"
3769ba6a1819Smrg
3770549e21daSmrg      func_mkdir_p "$my_xdir"
3771ba6a1819Smrg
3772549e21daSmrg      case $host in
3773549e21daSmrg      *-darwin*)
3774549e21daSmrg	func_verbose "Extracting $my_xabs"
3775549e21daSmrg	# Do not bother doing anything if just a dry run
3776549e21daSmrg	$opt_dry_run || {
3777549e21daSmrg	  darwin_orig_dir=`pwd`
3778549e21daSmrg	  cd $my_xdir || exit $?
3779549e21daSmrg	  darwin_archive=$my_xabs
3780549e21daSmrg	  darwin_curdir=`pwd`
3781549e21daSmrg	  darwin_base_archive=`basename "$darwin_archive"`
3782549e21daSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783549e21daSmrg	  if test -n "$darwin_arches"; then
3784549e21daSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785549e21daSmrg	    darwin_arch=
3786549e21daSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787549e21daSmrg	    for darwin_arch in  $darwin_arches ; do
3788549e21daSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789549e21daSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790549e21daSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791549e21daSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792549e21daSmrg	      cd "$darwin_curdir"
3793549e21daSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794549e21daSmrg	    done # $darwin_arches
3795549e21daSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796549e21daSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797549e21daSmrg	    darwin_file=
3798549e21daSmrg	    darwin_files=
3799549e21daSmrg	    for darwin_file in $darwin_filelist; do
3800549e21daSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801549e21daSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802549e21daSmrg	    done # $darwin_filelist
3803549e21daSmrg	    $RM -rf unfat-$$
3804549e21daSmrg	    cd "$darwin_orig_dir"
3805549e21daSmrg	  else
3806549e21daSmrg	    cd $darwin_orig_dir
3807549e21daSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808549e21daSmrg	  fi # $darwin_arches
3809549e21daSmrg	} # !$opt_dry_run
3810549e21daSmrg	;;
3811549e21daSmrg      *)
3812549e21daSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813549e21daSmrg	;;
3814549e21daSmrg      esac
3815549e21daSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816549e21daSmrg    done
3817ba6a1819Smrg
3818549e21daSmrg    func_extract_archives_result="$my_oldobjs"
3819549e21daSmrg}
3820ba6a1819Smrg
3821ba6a1819Smrg
3822549e21daSmrg# func_emit_wrapper [arg=no]
3823549e21daSmrg#
3824549e21daSmrg# Emit a libtool wrapper script on stdout.
3825549e21daSmrg# Don't directly open a file because we may want to
3826549e21daSmrg# incorporate the script contents within a cygwin/mingw
3827549e21daSmrg# wrapper executable.  Must ONLY be called from within
3828549e21daSmrg# func_mode_link because it depends on a number of variables
3829549e21daSmrg# set therein.
3830549e21daSmrg#
3831549e21daSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3832549e21daSmrg# variable will take.  If 'yes', then the emitted script
3833549e21daSmrg# will assume that the directory in which it is stored is
3834549e21daSmrg# the $objdir directory.  This is a cygwin/mingw-specific
3835549e21daSmrg# behavior.
3836549e21daSmrgfunc_emit_wrapper ()
3837549e21daSmrg{
3838549e21daSmrg	func_emit_wrapper_arg1=${1-no}
3839ba6a1819Smrg
3840549e21daSmrg	$ECHO "\
3841549e21daSmrg#! $SHELL
3842ba6a1819Smrg
3843549e21daSmrg# $output - temporary wrapper script for $objdir/$outputname
3844549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845549e21daSmrg#
3846549e21daSmrg# The $output program cannot be directly executed until all the libtool
3847549e21daSmrg# libraries that it depends on are installed.
3848549e21daSmrg#
3849549e21daSmrg# This wrapper script should never be moved out of the build directory.
3850549e21daSmrg# If it is, it will not operate correctly.
3851ba6a1819Smrg
3852549e21daSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853549e21daSmrg# metacharacters that are still active within double-quoted strings.
3854549e21daSmrgsed_quote_subst='$sed_quote_subst'
3855ba6a1819Smrg
3856549e21daSmrg# Be Bourne compatible
3857549e21daSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858549e21daSmrg  emulate sh
3859549e21daSmrg  NULLCMD=:
3860549e21daSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861549e21daSmrg  # is contrary to our usage.  Disable this feature.
3862549e21daSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863549e21daSmrg  setopt NO_GLOB_SUBST
3864549e21daSmrgelse
3865549e21daSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866549e21daSmrgfi
3867549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh
3869ba6a1819Smrg
3870549e21daSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871549e21daSmrg# if CDPATH is set.
3872549e21daSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873ba6a1819Smrg
3874549e21daSmrgrelink_command=\"$relink_command\"
3875ba6a1819Smrg
3876549e21daSmrg# This environment variable determines our operation mode.
3877549e21daSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878549e21daSmrg  # install mode needs the following variables:
3879549e21daSmrg  generated_by_libtool_version='$macro_version'
3880549e21daSmrg  notinst_deplibs='$notinst_deplibs'
3881549e21daSmrgelse
3882549e21daSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883549e21daSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3884549e21daSmrg    file=\"\$0\""
3885ba6a1819Smrg
3886549e21daSmrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3887549e21daSmrg    $ECHO "\
3888ba6a1819Smrg
3889549e21daSmrg# A function that is used when there is no print builtin or printf.
3890549e21daSmrgfunc_fallback_echo ()
3891549e21daSmrg{
3892549e21daSmrg  eval 'cat <<_LTECHO_EOF
3893549e21daSmrg\$1
3894549e21daSmrg_LTECHO_EOF'
3895549e21daSmrg}
3896549e21daSmrg    ECHO=\"$qECHO\"
3897549e21daSmrg  fi
3898ba6a1819Smrg
3899549e21daSmrg# Very basic option parsing. These options are (a) specific to
3900549e21daSmrg# the libtool wrapper, (b) are identical between the wrapper
3901549e21daSmrg# /script/ and the wrapper /executable/ which is used only on
3902549e21daSmrg# windows platforms, and (c) all begin with the string "--lt-"
3903549e21daSmrg# (application programs are unlikely to have options which match
3904549e21daSmrg# this pattern).
3905549e21daSmrg#
3906549e21daSmrg# There are only two supported options: --lt-debug and
3907549e21daSmrg# --lt-dump-script. There is, deliberately, no --lt-help.
3908549e21daSmrg#
3909549e21daSmrg# The first argument to this parsing function should be the
3910549e21daSmrg# script's $0 value, followed by "$@".
3911549e21daSmrglt_option_debug=
3912549e21daSmrgfunc_parse_lt_options ()
3913549e21daSmrg{
3914549e21daSmrg  lt_script_arg0=\$0
3915549e21daSmrg  shift
3916549e21daSmrg  for lt_opt
3917549e21daSmrg  do
3918549e21daSmrg    case \"\$lt_opt\" in
3919549e21daSmrg    --lt-debug) lt_option_debug=1 ;;
3920549e21daSmrg    --lt-dump-script)
3921549e21daSmrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3922549e21daSmrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3923549e21daSmrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3924549e21daSmrg        cat \"\$lt_dump_D/\$lt_dump_F\"
3925549e21daSmrg        exit 0
3926549e21daSmrg      ;;
3927549e21daSmrg    --lt-*)
3928549e21daSmrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3929549e21daSmrg        exit 1
3930549e21daSmrg      ;;
3931549e21daSmrg    esac
3932549e21daSmrg  done
3933ba6a1819Smrg
3934549e21daSmrg  # Print the debug banner immediately:
3935549e21daSmrg  if test -n \"\$lt_option_debug\"; then
3936549e21daSmrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3937549e21daSmrg  fi
3938549e21daSmrg}
3939ba6a1819Smrg
3940549e21daSmrg# Used when --lt-debug. Prints its arguments to stdout
3941549e21daSmrg# (redirection is the responsibility of the caller)
3942549e21daSmrgfunc_lt_dump_args ()
3943549e21daSmrg{
3944549e21daSmrg  lt_dump_args_N=1;
3945549e21daSmrg  for lt_arg
3946549e21daSmrg  do
3947549e21daSmrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3948549e21daSmrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3949549e21daSmrg  done
3950549e21daSmrg}
3951ba6a1819Smrg
3952549e21daSmrg# Core function for launching the target application
3953549e21daSmrgfunc_exec_program_core ()
3954549e21daSmrg{
3955549e21daSmrg"
3956549e21daSmrg  case $host in
3957549e21daSmrg  # Backslashes separate directories on plain windows
3958549e21daSmrg  *-*-mingw | *-*-os2* | *-cegcc*)
3959549e21daSmrg    $ECHO "\
3960549e21daSmrg      if test -n \"\$lt_option_debug\"; then
3961549e21daSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3962549e21daSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3963549e21daSmrg      fi
3964549e21daSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3965549e21daSmrg"
3966549e21daSmrg    ;;
3967ba6a1819Smrg
3968549e21daSmrg  *)
3969549e21daSmrg    $ECHO "\
3970549e21daSmrg      if test -n \"\$lt_option_debug\"; then
3971549e21daSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3972549e21daSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3973549e21daSmrg      fi
3974549e21daSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3975549e21daSmrg"
3976549e21daSmrg    ;;
3977549e21daSmrg  esac
3978549e21daSmrg  $ECHO "\
3979549e21daSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3980549e21daSmrg      exit 1
3981549e21daSmrg}
3982ba6a1819Smrg
3983549e21daSmrg# A function to encapsulate launching the target application
3984549e21daSmrg# Strips options in the --lt-* namespace from \$@ and
3985549e21daSmrg# launches target application with the remaining arguments.
3986549e21daSmrgfunc_exec_program ()
3987549e21daSmrg{
39881bedbe3fSmrg  case \" \$* \" in
39891bedbe3fSmrg  *\\ --lt-*)
39901bedbe3fSmrg    for lt_wr_arg
39911bedbe3fSmrg    do
39921bedbe3fSmrg      case \$lt_wr_arg in
39931bedbe3fSmrg      --lt-*) ;;
39941bedbe3fSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
39951bedbe3fSmrg      esac
39961bedbe3fSmrg      shift
39971bedbe3fSmrg    done ;;
39981bedbe3fSmrg  esac
3999549e21daSmrg  func_exec_program_core \${1+\"\$@\"}
4000549e21daSmrg}
4001ba6a1819Smrg
4002549e21daSmrg  # Parse options
4003549e21daSmrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004ba6a1819Smrg
4005549e21daSmrg  # Find the directory that this script lives in.
4006549e21daSmrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007549e21daSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008ba6a1819Smrg
4009549e21daSmrg  # Follow symbolic links until we get to the real thisdir.
4010549e21daSmrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011549e21daSmrg  while test -n \"\$file\"; do
4012549e21daSmrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013ba6a1819Smrg
4014549e21daSmrg    # If there was a directory component, then change thisdir.
4015549e21daSmrg    if test \"x\$destdir\" != \"x\$file\"; then
4016549e21daSmrg      case \"\$destdir\" in
4017549e21daSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018549e21daSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019549e21daSmrg      esac
4020549e21daSmrg    fi
4021ba6a1819Smrg
4022549e21daSmrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4023549e21daSmrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024549e21daSmrg  done
4025ba6a1819Smrg
4026549e21daSmrg  # Usually 'no', except on cygwin/mingw when embedded into
4027549e21daSmrg  # the cwrapper.
4028549e21daSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029549e21daSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030549e21daSmrg    # special case for '.'
4031549e21daSmrg    if test \"\$thisdir\" = \".\"; then
4032549e21daSmrg      thisdir=\`pwd\`
4033549e21daSmrg    fi
4034549e21daSmrg    # remove .libs from thisdir
4035549e21daSmrg    case \"\$thisdir\" in
4036549e21daSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037549e21daSmrg    $objdir )   thisdir=. ;;
4038549e21daSmrg    esac
4039549e21daSmrg  fi
4040ba6a1819Smrg
4041549e21daSmrg  # Try to get the absolute directory name.
4042549e21daSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043549e21daSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044549e21daSmrg"
4045ba6a1819Smrg
4046549e21daSmrg	if test "$fast_install" = yes; then
4047549e21daSmrg	  $ECHO "\
4048549e21daSmrg  program=lt-'$outputname'$exeext
4049549e21daSmrg  progdir=\"\$thisdir/$objdir\"
4050ba6a1819Smrg
4051549e21daSmrg  if test ! -f \"\$progdir/\$program\" ||
4052549e21daSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053549e21daSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054ba6a1819Smrg
4055549e21daSmrg    file=\"\$\$-\$program\"
4056ba6a1819Smrg
4057549e21daSmrg    if test ! -d \"\$progdir\"; then
4058549e21daSmrg      $MKDIR \"\$progdir\"
4059549e21daSmrg    else
4060549e21daSmrg      $RM \"\$progdir/\$file\"
4061549e21daSmrg    fi"
4062ba6a1819Smrg
4063549e21daSmrg	  $ECHO "\
4064549e21daSmrg
4065549e21daSmrg    # relink executable if necessary
4066549e21daSmrg    if test -n \"\$relink_command\"; then
4067549e21daSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068549e21daSmrg      else
4069549e21daSmrg	$ECHO \"\$relink_command_output\" >&2
4070549e21daSmrg	$RM \"\$progdir/\$file\"
4071549e21daSmrg	exit 1
4072ba6a1819Smrg      fi
4073549e21daSmrg    fi
4074ba6a1819Smrg
4075549e21daSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076549e21daSmrg    { $RM \"\$progdir/\$program\";
4077549e21daSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078549e21daSmrg    $RM \"\$progdir/\$file\"
4079549e21daSmrg  fi"
4080549e21daSmrg	else
4081549e21daSmrg	  $ECHO "\
4082549e21daSmrg  program='$outputname'
4083549e21daSmrg  progdir=\"\$thisdir/$objdir\"
4084549e21daSmrg"
4085ba6a1819Smrg	fi
4086ba6a1819Smrg
4087549e21daSmrg	$ECHO "\
4088ba6a1819Smrg
4089549e21daSmrg  if test -f \"\$progdir/\$program\"; then"
4090ba6a1819Smrg
40911bedbe3fSmrg	# fixup the dll searchpath if we need to.
40921bedbe3fSmrg	#
40931bedbe3fSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
40941bedbe3fSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
40951bedbe3fSmrg	# libraries must come first.
40961bedbe3fSmrg	if test -n "$dllsearchpath"; then
40971bedbe3fSmrg	  $ECHO "\
40981bedbe3fSmrg    # Add the dll search path components to the executable PATH
40991bedbe3fSmrg    PATH=$dllsearchpath:\$PATH
41001bedbe3fSmrg"
41011bedbe3fSmrg	fi
41021bedbe3fSmrg
4103549e21daSmrg	# Export our shlibpath_var if we have one.
4104549e21daSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105549e21daSmrg	  $ECHO "\
4106549e21daSmrg    # Add our own library path to $shlibpath_var
4107549e21daSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108ba6a1819Smrg
4109549e21daSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110549e21daSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
4111549e21daSmrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112549e21daSmrg
4113549e21daSmrg    export $shlibpath_var
4114549e21daSmrg"
4115ba6a1819Smrg	fi
4116ba6a1819Smrg
4117549e21daSmrg	$ECHO "\
4118549e21daSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119549e21daSmrg      # Run the actual program with our arguments.
4120549e21daSmrg      func_exec_program \${1+\"\$@\"}
4121549e21daSmrg    fi
4122549e21daSmrg  else
4123549e21daSmrg    # The program doesn't exist.
4124549e21daSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125549e21daSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4126549e21daSmrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127549e21daSmrg    exit 1
4128549e21daSmrg  fi
4129549e21daSmrgfi\
4130549e21daSmrg"
4131549e21daSmrg}
4132ba6a1819Smrg
4133ba6a1819Smrg
4134549e21daSmrg# func_emit_cwrapperexe_src
4135549e21daSmrg# emit the source code for a wrapper executable on stdout
4136549e21daSmrg# Must ONLY be called from within func_mode_link because
4137549e21daSmrg# it depends on a number of variable set therein.
4138549e21daSmrgfunc_emit_cwrapperexe_src ()
4139549e21daSmrg{
4140549e21daSmrg	cat <<EOF
4141549e21daSmrg
4142549e21daSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143549e21daSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144549e21daSmrg
4145549e21daSmrg   The $output program cannot be directly executed until all the libtool
4146549e21daSmrg   libraries that it depends on are installed.
4147549e21daSmrg
4148549e21daSmrg   This wrapper executable should never be moved out of the build directory.
4149549e21daSmrg   If it is, it will not operate correctly.
4150549e21daSmrg*/
4151549e21daSmrgEOF
4152549e21daSmrg	    cat <<"EOF"
4153549e21daSmrg#ifdef _MSC_VER
4154549e21daSmrg# define _CRT_SECURE_NO_DEPRECATE 1
4155549e21daSmrg#endif
4156549e21daSmrg#include <stdio.h>
4157549e21daSmrg#include <stdlib.h>
4158549e21daSmrg#ifdef _MSC_VER
4159549e21daSmrg# include <direct.h>
4160549e21daSmrg# include <process.h>
4161549e21daSmrg# include <io.h>
4162549e21daSmrg#else
4163549e21daSmrg# include <unistd.h>
4164549e21daSmrg# include <stdint.h>
4165549e21daSmrg# ifdef __CYGWIN__
4166549e21daSmrg#  include <io.h>
4167549e21daSmrg# endif
4168549e21daSmrg#endif
4169549e21daSmrg#include <malloc.h>
4170549e21daSmrg#include <stdarg.h>
4171549e21daSmrg#include <assert.h>
4172549e21daSmrg#include <string.h>
4173549e21daSmrg#include <ctype.h>
4174549e21daSmrg#include <errno.h>
4175549e21daSmrg#include <fcntl.h>
4176549e21daSmrg#include <sys/stat.h>
4177549e21daSmrg
4178549e21daSmrg/* declarations of non-ANSI functions */
4179549e21daSmrg#if defined(__MINGW32__)
4180549e21daSmrg# ifdef __STRICT_ANSI__
4181549e21daSmrgint _putenv (const char *);
4182549e21daSmrg# endif
4183549e21daSmrg#elif defined(__CYGWIN__)
4184549e21daSmrg# ifdef __STRICT_ANSI__
4185549e21daSmrgchar *realpath (const char *, char *);
4186549e21daSmrgint putenv (char *);
4187549e21daSmrgint setenv (const char *, const char *, int);
4188549e21daSmrg# endif
4189549e21daSmrg/* #elif defined (other platforms) ... */
4190549e21daSmrg#endif
4191549e21daSmrg
4192549e21daSmrg/* portability defines, excluding path handling macros */
4193549e21daSmrg#if defined(_MSC_VER)
4194549e21daSmrg# define setmode _setmode
4195549e21daSmrg# define stat    _stat
4196549e21daSmrg# define chmod   _chmod
4197549e21daSmrg# define getcwd  _getcwd
4198549e21daSmrg# define putenv  _putenv
4199549e21daSmrg# define S_IXUSR _S_IEXEC
4200549e21daSmrg# ifndef _INTPTR_T_DEFINED
4201549e21daSmrg#  define _INTPTR_T_DEFINED
4202549e21daSmrg#  define intptr_t int
4203549e21daSmrg# endif
4204549e21daSmrg#elif defined(__MINGW32__)
4205549e21daSmrg# define setmode _setmode
4206549e21daSmrg# define stat    _stat
4207549e21daSmrg# define chmod   _chmod
4208549e21daSmrg# define getcwd  _getcwd
4209549e21daSmrg# define putenv  _putenv
4210549e21daSmrg#elif defined(__CYGWIN__)
4211549e21daSmrg# define HAVE_SETENV
4212549e21daSmrg# define FOPEN_WB "wb"
4213549e21daSmrg/* #elif defined (other platforms) ... */
4214549e21daSmrg#endif
4215549e21daSmrg
4216549e21daSmrg#if defined(PATH_MAX)
4217549e21daSmrg# define LT_PATHMAX PATH_MAX
4218549e21daSmrg#elif defined(MAXPATHLEN)
4219549e21daSmrg# define LT_PATHMAX MAXPATHLEN
4220549e21daSmrg#else
4221549e21daSmrg# define LT_PATHMAX 1024
4222549e21daSmrg#endif
4223549e21daSmrg
4224549e21daSmrg#ifndef S_IXOTH
4225549e21daSmrg# define S_IXOTH 0
4226549e21daSmrg#endif
4227549e21daSmrg#ifndef S_IXGRP
4228549e21daSmrg# define S_IXGRP 0
4229549e21daSmrg#endif
4230549e21daSmrg
4231549e21daSmrg/* path handling portability macros */
4232549e21daSmrg#ifndef DIR_SEPARATOR
4233549e21daSmrg# define DIR_SEPARATOR '/'
4234549e21daSmrg# define PATH_SEPARATOR ':'
4235549e21daSmrg#endif
4236549e21daSmrg
4237549e21daSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238549e21daSmrg  defined (__OS2__)
4239549e21daSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240549e21daSmrg# define FOPEN_WB "wb"
4241549e21daSmrg# ifndef DIR_SEPARATOR_2
4242549e21daSmrg#  define DIR_SEPARATOR_2 '\\'
4243549e21daSmrg# endif
4244549e21daSmrg# ifndef PATH_SEPARATOR_2
4245549e21daSmrg#  define PATH_SEPARATOR_2 ';'
4246549e21daSmrg# endif
4247549e21daSmrg#endif
4248549e21daSmrg
4249549e21daSmrg#ifndef DIR_SEPARATOR_2
4250549e21daSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251549e21daSmrg#else /* DIR_SEPARATOR_2 */
4252549e21daSmrg# define IS_DIR_SEPARATOR(ch) \
4253549e21daSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254549e21daSmrg#endif /* DIR_SEPARATOR_2 */
4255549e21daSmrg
4256549e21daSmrg#ifndef PATH_SEPARATOR_2
4257549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258549e21daSmrg#else /* PATH_SEPARATOR_2 */
4259549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260549e21daSmrg#endif /* PATH_SEPARATOR_2 */
4261549e21daSmrg
4262549e21daSmrg#ifndef FOPEN_WB
4263549e21daSmrg# define FOPEN_WB "w"
4264549e21daSmrg#endif
4265549e21daSmrg#ifndef _O_BINARY
4266549e21daSmrg# define _O_BINARY 0
4267549e21daSmrg#endif
4268549e21daSmrg
4269549e21daSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270549e21daSmrg#define XFREE(stale) do { \
4271549e21daSmrg  if (stale) { free ((void *) stale); stale = 0; } \
4272549e21daSmrg} while (0)
4273549e21daSmrg
4274549e21daSmrg#if defined(LT_DEBUGWRAPPER)
4275549e21daSmrgstatic int lt_debug = 1;
4276549e21daSmrg#else
4277549e21daSmrgstatic int lt_debug = 0;
4278549e21daSmrg#endif
4279549e21daSmrg
4280549e21daSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281549e21daSmrg
4282549e21daSmrgvoid *xmalloc (size_t num);
4283549e21daSmrgchar *xstrdup (const char *string);
4284549e21daSmrgconst char *base_name (const char *name);
4285549e21daSmrgchar *find_executable (const char *wrapper);
4286549e21daSmrgchar *chase_symlinks (const char *pathspec);
4287549e21daSmrgint make_executable (const char *path);
4288549e21daSmrgint check_executable (const char *path);
4289549e21daSmrgchar *strendzap (char *str, const char *pat);
4290549e21daSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4291549e21daSmrgvoid lt_fatal (const char *file, int line, const char *message, ...);
4292549e21daSmrgstatic const char *nonnull (const char *s);
4293549e21daSmrgstatic const char *nonempty (const char *s);
4294549e21daSmrgvoid lt_setenv (const char *name, const char *value);
4295549e21daSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296549e21daSmrgvoid lt_update_exe_path (const char *name, const char *value);
4297549e21daSmrgvoid lt_update_lib_path (const char *name, const char *value);
4298549e21daSmrgchar **prepare_spawn (char **argv);
4299549e21daSmrgvoid lt_dump_script (FILE *f);
4300549e21daSmrgEOF
4301549e21daSmrg
4302549e21daSmrg	    cat <<EOF
43031bedbe3fSmrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304549e21daSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305549e21daSmrgEOF
4306549e21daSmrg
4307549e21daSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
43081bedbe3fSmrg              func_to_host_path "$temp_rpath"
4309549e21daSmrg	      cat <<EOF
43101bedbe3fSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311ba6a1819SmrgEOF
4312ba6a1819Smrg	    else
4313549e21daSmrg	      cat <<"EOF"
4314549e21daSmrgconst char * LIB_PATH_VALUE   = "";
4315549e21daSmrgEOF
4316ba6a1819Smrg	    fi
4317549e21daSmrg
4318549e21daSmrg	    if test -n "$dllsearchpath"; then
43191bedbe3fSmrg              func_to_host_path "$dllsearchpath:"
4320549e21daSmrg	      cat <<EOF
4321549e21daSmrgconst char * EXE_PATH_VARNAME = "PATH";
43221bedbe3fSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323549e21daSmrgEOF
4324ba6a1819Smrg	    else
4325549e21daSmrg	      cat <<"EOF"
4326549e21daSmrgconst char * EXE_PATH_VARNAME = "";
4327549e21daSmrgconst char * EXE_PATH_VALUE   = "";
4328549e21daSmrgEOF
4329ba6a1819Smrg	    fi
4330ba6a1819Smrg
4331549e21daSmrg	    if test "$fast_install" = yes; then
4332549e21daSmrg	      cat <<EOF
4333549e21daSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334549e21daSmrgEOF
4335ba6a1819Smrg	    else
4336549e21daSmrg	      cat <<EOF
4337549e21daSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338549e21daSmrgEOF
4339ba6a1819Smrg	    fi
4340ba6a1819Smrg
4341ba6a1819Smrg
4342549e21daSmrg	    cat <<"EOF"
4343ba6a1819Smrg
4344549e21daSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345ba6a1819Smrg
4346549e21daSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347549e21daSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4348549e21daSmrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349ba6a1819Smrg
4350549e21daSmrgint
4351549e21daSmrgmain (int argc, char *argv[])
4352549e21daSmrg{
4353549e21daSmrg  char **newargz;
4354549e21daSmrg  int  newargc;
4355549e21daSmrg  char *tmp_pathspec;
4356549e21daSmrg  char *actual_cwrapper_path;
4357549e21daSmrg  char *actual_cwrapper_name;
4358549e21daSmrg  char *target_name;
4359549e21daSmrg  char *lt_argv_zero;
4360549e21daSmrg  intptr_t rval = 127;
4361ba6a1819Smrg
4362549e21daSmrg  int i;
4363ba6a1819Smrg
4364549e21daSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
4365549e21daSmrg  newargz = XMALLOC (char *, argc + 1);
4366ba6a1819Smrg
4367549e21daSmrg  /* very simple arg parsing; don't want to rely on getopt
4368549e21daSmrg   * also, copy all non cwrapper options to newargz, except
4369549e21daSmrg   * argz[0], which is handled differently
4370549e21daSmrg   */
4371549e21daSmrg  newargc=0;
4372549e21daSmrg  for (i = 1; i < argc; i++)
4373549e21daSmrg    {
4374549e21daSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375549e21daSmrg	{
4376549e21daSmrgEOF
4377549e21daSmrg	    case "$host" in
4378549e21daSmrg	      *mingw* | *cygwin* )
4379549e21daSmrg		# make stdout use "unix" line endings
4380549e21daSmrg		echo "          setmode(1,_O_BINARY);"
4381549e21daSmrg		;;
4382549e21daSmrg	      esac
4383ba6a1819Smrg
4384549e21daSmrg	    cat <<"EOF"
4385549e21daSmrg	  lt_dump_script (stdout);
4386549e21daSmrg	  return 0;
4387549e21daSmrg	}
4388549e21daSmrg      if (strcmp (argv[i], debug_opt) == 0)
4389549e21daSmrg	{
4390549e21daSmrg          lt_debug = 1;
4391549e21daSmrg          continue;
4392549e21daSmrg	}
4393549e21daSmrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4394549e21daSmrg        {
4395549e21daSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4396549e21daSmrg             namespace, but it is not one of the ones we know about and
4397549e21daSmrg             have already dealt with, above (inluding dump-script), then
4398549e21daSmrg             report an error. Otherwise, targets might begin to believe
4399549e21daSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4400549e21daSmrg             namespace. The first time any user complains about this, we'll
4401549e21daSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4402549e21daSmrg             or a configure.ac-settable value.
4403549e21daSmrg           */
4404549e21daSmrg          lt_fatal (__FILE__, __LINE__,
4405549e21daSmrg		    "unrecognized %s option: '%s'",
4406549e21daSmrg                    ltwrapper_option_prefix, argv[i]);
4407549e21daSmrg        }
4408549e21daSmrg      /* otherwise ... */
4409549e21daSmrg      newargz[++newargc] = xstrdup (argv[i]);
4410549e21daSmrg    }
4411549e21daSmrg  newargz[++newargc] = NULL;
4412ba6a1819Smrg
4413549e21daSmrgEOF
4414549e21daSmrg	    cat <<EOF
4415549e21daSmrg  /* The GNU banner must be the first non-error debug message */
4416549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4417549e21daSmrgEOF
4418549e21daSmrg	    cat <<"EOF"
4419549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4420549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4421549e21daSmrg
4422549e21daSmrg  tmp_pathspec = find_executable (argv[0]);
4423549e21daSmrg  if (tmp_pathspec == NULL)
4424549e21daSmrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4425549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
4426549e21daSmrg                  "(main) found exe (before symlink chase) at: %s\n",
4427549e21daSmrg		  tmp_pathspec);
4428549e21daSmrg
4429549e21daSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4430549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
4431549e21daSmrg                  "(main) found exe (after symlink chase) at: %s\n",
4432549e21daSmrg		  actual_cwrapper_path);
4433549e21daSmrg  XFREE (tmp_pathspec);
4434549e21daSmrg
4435549e21daSmrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436549e21daSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437549e21daSmrg
4438549e21daSmrg  /* wrapper name transforms */
4439549e21daSmrg  strendzap (actual_cwrapper_name, ".exe");
4440549e21daSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441549e21daSmrg  XFREE (actual_cwrapper_name);
4442549e21daSmrg  actual_cwrapper_name = tmp_pathspec;
4443549e21daSmrg  tmp_pathspec = 0;
4444549e21daSmrg
4445549e21daSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446549e21daSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447549e21daSmrg  strendzap (target_name, ".exe");
4448549e21daSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449549e21daSmrg  XFREE (target_name);
4450549e21daSmrg  target_name = tmp_pathspec;
4451549e21daSmrg  tmp_pathspec = 0;
4452549e21daSmrg
4453549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
4454549e21daSmrg		  "(main) libtool target name: %s\n",
4455549e21daSmrg		  target_name);
4456549e21daSmrgEOF
4457ba6a1819Smrg
4458549e21daSmrg	    cat <<EOF
4459549e21daSmrg  newargz[0] =
4460549e21daSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461549e21daSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462549e21daSmrg  strcpy (newargz[0], actual_cwrapper_path);
4463549e21daSmrg  strcat (newargz[0], "$objdir");
4464549e21daSmrg  strcat (newargz[0], "/");
4465549e21daSmrgEOF
4466ba6a1819Smrg
4467549e21daSmrg	    cat <<"EOF"
4468549e21daSmrg  /* stop here, and copy so we don't have to do this twice */
4469549e21daSmrg  tmp_pathspec = xstrdup (newargz[0]);
4470ba6a1819Smrg
4471549e21daSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472549e21daSmrg  strcat (newargz[0], actual_cwrapper_name);
4473ba6a1819Smrg
4474549e21daSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475549e21daSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476549e21daSmrg  XFREE (tmp_pathspec);
4477549e21daSmrg  tmp_pathspec = NULL;
4478549e21daSmrgEOF
4479ba6a1819Smrg
4480549e21daSmrg	    case $host_os in
4481549e21daSmrg	      mingw*)
4482549e21daSmrg	    cat <<"EOF"
4483549e21daSmrg  {
4484549e21daSmrg    char* p;
4485549e21daSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486549e21daSmrg      {
4487549e21daSmrg	*p = '/';
4488549e21daSmrg      }
4489549e21daSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490549e21daSmrg      {
4491549e21daSmrg	*p = '/';
4492549e21daSmrg      }
4493549e21daSmrg  }
4494549e21daSmrgEOF
4495549e21daSmrg	    ;;
4496549e21daSmrg	    esac
4497ba6a1819Smrg
4498549e21daSmrg	    cat <<"EOF"
4499549e21daSmrg  XFREE (target_name);
4500549e21daSmrg  XFREE (actual_cwrapper_path);
4501549e21daSmrg  XFREE (actual_cwrapper_name);
4502ba6a1819Smrg
4503549e21daSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504549e21daSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
45051bedbe3fSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
45061bedbe3fSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
45071bedbe3fSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
45081bedbe3fSmrg     libraries must come first. */
4509549e21daSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
45101bedbe3fSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511ba6a1819Smrg
4512549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4513549e21daSmrg		  nonnull (lt_argv_zero));
4514549e21daSmrg  for (i = 0; i < newargc; i++)
4515549e21daSmrg    {
4516549e21daSmrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4517549e21daSmrg		      i, nonnull (newargz[i]));
4518549e21daSmrg    }
4519ba6a1819Smrg
4520549e21daSmrgEOF
4521ba6a1819Smrg
4522549e21daSmrg	    case $host_os in
4523549e21daSmrg	      mingw*)
4524549e21daSmrg		cat <<"EOF"
4525549e21daSmrg  /* execv doesn't actually work on mingw as expected on unix */
4526549e21daSmrg  newargz = prepare_spawn (newargz);
4527549e21daSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528549e21daSmrg  if (rval == -1)
4529549e21daSmrg    {
4530549e21daSmrg      /* failed to start process */
4531549e21daSmrg      lt_debugprintf (__FILE__, __LINE__,
4532549e21daSmrg		      "(main) failed to launch target \"%s\": %s\n",
4533549e21daSmrg		      lt_argv_zero, nonnull (strerror (errno)));
4534549e21daSmrg      return 127;
4535549e21daSmrg    }
4536549e21daSmrg  return rval;
4537549e21daSmrgEOF
4538549e21daSmrg		;;
4539549e21daSmrg	      *)
4540549e21daSmrg		cat <<"EOF"
4541549e21daSmrg  execv (lt_argv_zero, newargz);
4542549e21daSmrg  return rval; /* =127, but avoids unused variable warning */
4543549e21daSmrgEOF
4544549e21daSmrg		;;
4545549e21daSmrg	    esac
4546ba6a1819Smrg
4547549e21daSmrg	    cat <<"EOF"
4548549e21daSmrg}
4549ba6a1819Smrg
4550549e21daSmrgvoid *
4551549e21daSmrgxmalloc (size_t num)
4552549e21daSmrg{
4553549e21daSmrg  void *p = (void *) malloc (num);
4554549e21daSmrg  if (!p)
4555549e21daSmrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556ba6a1819Smrg
4557549e21daSmrg  return p;
4558549e21daSmrg}
4559ba6a1819Smrg
4560549e21daSmrgchar *
4561549e21daSmrgxstrdup (const char *string)
4562549e21daSmrg{
4563549e21daSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564549e21daSmrg			  string) : NULL;
4565549e21daSmrg}
4566ba6a1819Smrg
4567549e21daSmrgconst char *
4568549e21daSmrgbase_name (const char *name)
4569549e21daSmrg{
4570549e21daSmrg  const char *base;
4571ba6a1819Smrg
4572549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573549e21daSmrg  /* Skip over the disk name in MSDOS pathnames. */
4574549e21daSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575549e21daSmrg    name += 2;
4576549e21daSmrg#endif
4577ba6a1819Smrg
4578549e21daSmrg  for (base = name; *name; name++)
4579549e21daSmrg    if (IS_DIR_SEPARATOR (*name))
4580549e21daSmrg      base = name + 1;
4581549e21daSmrg  return base;
4582549e21daSmrg}
4583ba6a1819Smrg
4584549e21daSmrgint
4585549e21daSmrgcheck_executable (const char *path)
4586549e21daSmrg{
4587549e21daSmrg  struct stat st;
4588ba6a1819Smrg
4589549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4590549e21daSmrg                  nonempty (path));
4591549e21daSmrg  if ((!path) || (!*path))
4592549e21daSmrg    return 0;
4593ba6a1819Smrg
4594549e21daSmrg  if ((stat (path, &st) >= 0)
4595549e21daSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596549e21daSmrg    return 1;
4597549e21daSmrg  else
4598549e21daSmrg    return 0;
4599549e21daSmrg}
4600ba6a1819Smrg
4601549e21daSmrgint
4602549e21daSmrgmake_executable (const char *path)
4603549e21daSmrg{
4604549e21daSmrg  int rval = 0;
4605549e21daSmrg  struct stat st;
4606ba6a1819Smrg
4607549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4608549e21daSmrg                  nonempty (path));
4609549e21daSmrg  if ((!path) || (!*path))
4610549e21daSmrg    return 0;
4611ba6a1819Smrg
4612549e21daSmrg  if (stat (path, &st) >= 0)
4613549e21daSmrg    {
4614549e21daSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615549e21daSmrg    }
4616549e21daSmrg  return rval;
4617549e21daSmrg}
4618ba6a1819Smrg
4619549e21daSmrg/* Searches for the full path of the wrapper.  Returns
4620549e21daSmrg   newly allocated full path name if found, NULL otherwise
4621549e21daSmrg   Does not chase symlinks, even on platforms that support them.
4622549e21daSmrg*/
4623549e21daSmrgchar *
4624549e21daSmrgfind_executable (const char *wrapper)
4625549e21daSmrg{
4626549e21daSmrg  int has_slash = 0;
4627549e21daSmrg  const char *p;
4628549e21daSmrg  const char *p_next;
4629549e21daSmrg  /* static buffer for getcwd */
4630549e21daSmrg  char tmp[LT_PATHMAX + 1];
4631549e21daSmrg  int tmp_len;
4632549e21daSmrg  char *concat_name;
4633ba6a1819Smrg
4634549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4635549e21daSmrg                  nonempty (wrapper));
4636ba6a1819Smrg
4637549e21daSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638549e21daSmrg    return NULL;
4639ba6a1819Smrg
4640549e21daSmrg  /* Absolute path? */
4641549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642549e21daSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643549e21daSmrg    {
4644549e21daSmrg      concat_name = xstrdup (wrapper);
4645549e21daSmrg      if (check_executable (concat_name))
4646549e21daSmrg	return concat_name;
4647549e21daSmrg      XFREE (concat_name);
4648549e21daSmrg    }
4649549e21daSmrg  else
4650549e21daSmrg    {
4651549e21daSmrg#endif
4652549e21daSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653549e21daSmrg	{
4654549e21daSmrg	  concat_name = xstrdup (wrapper);
4655549e21daSmrg	  if (check_executable (concat_name))
4656549e21daSmrg	    return concat_name;
4657549e21daSmrg	  XFREE (concat_name);
4658549e21daSmrg	}
4659549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660549e21daSmrg    }
4661549e21daSmrg#endif
4662ba6a1819Smrg
4663549e21daSmrg  for (p = wrapper; *p; p++)
4664549e21daSmrg    if (*p == '/')
4665549e21daSmrg      {
4666549e21daSmrg	has_slash = 1;
4667549e21daSmrg	break;
4668549e21daSmrg      }
4669549e21daSmrg  if (!has_slash)
4670549e21daSmrg    {
4671549e21daSmrg      /* no slashes; search PATH */
4672549e21daSmrg      const char *path = getenv ("PATH");
4673549e21daSmrg      if (path != NULL)
4674549e21daSmrg	{
4675549e21daSmrg	  for (p = path; *p; p = p_next)
4676549e21daSmrg	    {
4677549e21daSmrg	      const char *q;
4678549e21daSmrg	      size_t p_len;
4679549e21daSmrg	      for (q = p; *q; q++)
4680549e21daSmrg		if (IS_PATH_SEPARATOR (*q))
4681549e21daSmrg		  break;
4682549e21daSmrg	      p_len = q - p;
4683549e21daSmrg	      p_next = (*q == '\0' ? q : q + 1);
4684549e21daSmrg	      if (p_len == 0)
4685549e21daSmrg		{
4686549e21daSmrg		  /* empty path: current directory */
4687549e21daSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4688549e21daSmrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4689549e21daSmrg                              nonnull (strerror (errno)));
4690549e21daSmrg		  tmp_len = strlen (tmp);
4691549e21daSmrg		  concat_name =
4692549e21daSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693549e21daSmrg		  memcpy (concat_name, tmp, tmp_len);
4694549e21daSmrg		  concat_name[tmp_len] = '/';
4695549e21daSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696549e21daSmrg		}
4697549e21daSmrg	      else
4698549e21daSmrg		{
4699549e21daSmrg		  concat_name =
4700549e21daSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701549e21daSmrg		  memcpy (concat_name, p, p_len);
4702549e21daSmrg		  concat_name[p_len] = '/';
4703549e21daSmrg		  strcpy (concat_name + p_len + 1, wrapper);
4704549e21daSmrg		}
4705549e21daSmrg	      if (check_executable (concat_name))
4706549e21daSmrg		return concat_name;
4707549e21daSmrg	      XFREE (concat_name);
4708549e21daSmrg	    }
4709549e21daSmrg	}
4710549e21daSmrg      /* not found in PATH; assume curdir */
4711549e21daSmrg    }
4712549e21daSmrg  /* Relative path | not found in path: prepend cwd */
4713549e21daSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
4714549e21daSmrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4715549e21daSmrg              nonnull (strerror (errno)));
4716549e21daSmrg  tmp_len = strlen (tmp);
4717549e21daSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718549e21daSmrg  memcpy (concat_name, tmp, tmp_len);
4719549e21daSmrg  concat_name[tmp_len] = '/';
4720549e21daSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
4721ba6a1819Smrg
4722549e21daSmrg  if (check_executable (concat_name))
4723549e21daSmrg    return concat_name;
4724549e21daSmrg  XFREE (concat_name);
4725549e21daSmrg  return NULL;
4726549e21daSmrg}
4727ba6a1819Smrg
4728549e21daSmrgchar *
4729549e21daSmrgchase_symlinks (const char *pathspec)
4730549e21daSmrg{
4731549e21daSmrg#ifndef S_ISLNK
4732549e21daSmrg  return xstrdup (pathspec);
4733549e21daSmrg#else
4734549e21daSmrg  char buf[LT_PATHMAX];
4735549e21daSmrg  struct stat s;
4736549e21daSmrg  char *tmp_pathspec = xstrdup (pathspec);
4737549e21daSmrg  char *p;
4738549e21daSmrg  int has_symlinks = 0;
4739549e21daSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740549e21daSmrg    {
4741549e21daSmrg      lt_debugprintf (__FILE__, __LINE__,
4742549e21daSmrg		      "checking path component for symlinks: %s\n",
4743549e21daSmrg		      tmp_pathspec);
4744549e21daSmrg      if (lstat (tmp_pathspec, &s) == 0)
4745549e21daSmrg	{
4746549e21daSmrg	  if (S_ISLNK (s.st_mode) != 0)
4747549e21daSmrg	    {
4748549e21daSmrg	      has_symlinks = 1;
4749549e21daSmrg	      break;
4750549e21daSmrg	    }
4751ba6a1819Smrg
4752549e21daSmrg	  /* search backwards for last DIR_SEPARATOR */
4753549e21daSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754549e21daSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755549e21daSmrg	    p--;
4756549e21daSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757549e21daSmrg	    {
4758549e21daSmrg	      /* no more DIR_SEPARATORS left */
4759549e21daSmrg	      break;
4760549e21daSmrg	    }
4761549e21daSmrg	  *p = '\0';
4762549e21daSmrg	}
4763549e21daSmrg      else
4764549e21daSmrg	{
4765549e21daSmrg	  lt_fatal (__FILE__, __LINE__,
4766549e21daSmrg		    "error accessing file \"%s\": %s",
4767549e21daSmrg		    tmp_pathspec, nonnull (strerror (errno)));
4768549e21daSmrg	}
4769549e21daSmrg    }
4770549e21daSmrg  XFREE (tmp_pathspec);
4771ba6a1819Smrg
4772549e21daSmrg  if (!has_symlinks)
4773549e21daSmrg    {
4774549e21daSmrg      return xstrdup (pathspec);
4775549e21daSmrg    }
4776ba6a1819Smrg
4777549e21daSmrg  tmp_pathspec = realpath (pathspec, buf);
4778549e21daSmrg  if (tmp_pathspec == 0)
4779549e21daSmrg    {
4780549e21daSmrg      lt_fatal (__FILE__, __LINE__,
4781549e21daSmrg		"could not follow symlinks for %s", pathspec);
4782549e21daSmrg    }
4783549e21daSmrg  return xstrdup (tmp_pathspec);
4784549e21daSmrg#endif
4785549e21daSmrg}
4786ba6a1819Smrg
4787549e21daSmrgchar *
4788549e21daSmrgstrendzap (char *str, const char *pat)
4789549e21daSmrg{
4790549e21daSmrg  size_t len, patlen;
4791ba6a1819Smrg
4792549e21daSmrg  assert (str != NULL);
4793549e21daSmrg  assert (pat != NULL);
4794ba6a1819Smrg
4795549e21daSmrg  len = strlen (str);
4796549e21daSmrg  patlen = strlen (pat);
4797ba6a1819Smrg
4798549e21daSmrg  if (patlen <= len)
4799549e21daSmrg    {
4800549e21daSmrg      str += len - patlen;
4801549e21daSmrg      if (strcmp (str, pat) == 0)
4802549e21daSmrg	*str = '\0';
4803549e21daSmrg    }
4804549e21daSmrg  return str;
4805549e21daSmrg}
4806ba6a1819Smrg
4807549e21daSmrgvoid
4808549e21daSmrglt_debugprintf (const char *file, int line, const char *fmt, ...)
4809549e21daSmrg{
4810549e21daSmrg  va_list args;
4811549e21daSmrg  if (lt_debug)
4812549e21daSmrg    {
4813549e21daSmrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4814549e21daSmrg      va_start (args, fmt);
4815549e21daSmrg      (void) vfprintf (stderr, fmt, args);
4816549e21daSmrg      va_end (args);
4817549e21daSmrg    }
4818549e21daSmrg}
4819ba6a1819Smrg
4820549e21daSmrgstatic void
4821549e21daSmrglt_error_core (int exit_status, const char *file,
4822549e21daSmrg	       int line, const char *mode,
4823549e21daSmrg	       const char *message, va_list ap)
4824549e21daSmrg{
4825549e21daSmrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826549e21daSmrg  vfprintf (stderr, message, ap);
4827549e21daSmrg  fprintf (stderr, ".\n");
4828ba6a1819Smrg
4829549e21daSmrg  if (exit_status >= 0)
4830549e21daSmrg    exit (exit_status);
4831549e21daSmrg}
4832ba6a1819Smrg
4833549e21daSmrgvoid
4834549e21daSmrglt_fatal (const char *file, int line, const char *message, ...)
4835549e21daSmrg{
4836549e21daSmrg  va_list ap;
4837549e21daSmrg  va_start (ap, message);
4838549e21daSmrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839549e21daSmrg  va_end (ap);
4840549e21daSmrg}
4841ba6a1819Smrg
4842549e21daSmrgstatic const char *
4843549e21daSmrgnonnull (const char *s)
4844549e21daSmrg{
4845549e21daSmrg  return s ? s : "(null)";
4846549e21daSmrg}
4847ba6a1819Smrg
4848549e21daSmrgstatic const char *
4849549e21daSmrgnonempty (const char *s)
4850549e21daSmrg{
4851549e21daSmrg  return (s && !*s) ? "(empty)" : nonnull (s);
4852549e21daSmrg}
4853ba6a1819Smrg
4854549e21daSmrgvoid
4855549e21daSmrglt_setenv (const char *name, const char *value)
4856549e21daSmrg{
4857549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
4858549e21daSmrg		  "(lt_setenv) setting '%s' to '%s'\n",
4859549e21daSmrg                  nonnull (name), nonnull (value));
4860549e21daSmrg  {
4861549e21daSmrg#ifdef HAVE_SETENV
4862549e21daSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863549e21daSmrg    char *str = xstrdup (value);
4864549e21daSmrg    setenv (name, str, 1);
4865549e21daSmrg#else
4866549e21daSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867549e21daSmrg    char *str = XMALLOC (char, len);
4868549e21daSmrg    sprintf (str, "%s=%s", name, value);
4869549e21daSmrg    if (putenv (str) != EXIT_SUCCESS)
4870549e21daSmrg      {
4871549e21daSmrg        XFREE (str);
4872549e21daSmrg      }
4873549e21daSmrg#endif
4874549e21daSmrg  }
4875549e21daSmrg}
4876ba6a1819Smrg
4877549e21daSmrgchar *
4878549e21daSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879549e21daSmrg{
4880549e21daSmrg  char *new_value;
4881549e21daSmrg  if (orig_value && *orig_value)
4882549e21daSmrg    {
4883549e21daSmrg      int orig_value_len = strlen (orig_value);
4884549e21daSmrg      int add_len = strlen (add);
4885549e21daSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886549e21daSmrg      if (to_end)
4887549e21daSmrg        {
4888549e21daSmrg          strcpy (new_value, orig_value);
4889549e21daSmrg          strcpy (new_value + orig_value_len, add);
4890549e21daSmrg        }
4891549e21daSmrg      else
4892549e21daSmrg        {
4893549e21daSmrg          strcpy (new_value, add);
4894549e21daSmrg          strcpy (new_value + add_len, orig_value);
4895549e21daSmrg        }
4896549e21daSmrg    }
4897549e21daSmrg  else
4898549e21daSmrg    {
4899549e21daSmrg      new_value = xstrdup (add);
4900549e21daSmrg    }
4901549e21daSmrg  return new_value;
4902549e21daSmrg}
4903ba6a1819Smrg
4904549e21daSmrgvoid
4905549e21daSmrglt_update_exe_path (const char *name, const char *value)
4906549e21daSmrg{
4907549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
4908549e21daSmrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4909549e21daSmrg                  nonnull (name), nonnull (value));
4910ba6a1819Smrg
4911549e21daSmrg  if (name && *name && value && *value)
4912549e21daSmrg    {
4913549e21daSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914549e21daSmrg      /* some systems can't cope with a ':'-terminated path #' */
4915549e21daSmrg      int len = strlen (new_value);
4916549e21daSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917549e21daSmrg        {
4918549e21daSmrg          new_value[len-1] = '\0';
4919549e21daSmrg        }
4920549e21daSmrg      lt_setenv (name, new_value);
4921549e21daSmrg      XFREE (new_value);
4922549e21daSmrg    }
4923549e21daSmrg}
4924ba6a1819Smrg
4925549e21daSmrgvoid
4926549e21daSmrglt_update_lib_path (const char *name, const char *value)
4927549e21daSmrg{
4928549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
4929549e21daSmrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4930549e21daSmrg                  nonnull (name), nonnull (value));
4931ba6a1819Smrg
4932549e21daSmrg  if (name && *name && value && *value)
4933549e21daSmrg    {
4934549e21daSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935549e21daSmrg      lt_setenv (name, new_value);
4936549e21daSmrg      XFREE (new_value);
4937549e21daSmrg    }
4938549e21daSmrg}
4939ba6a1819Smrg
4940549e21daSmrgEOF
4941549e21daSmrg	    case $host_os in
4942549e21daSmrg	      mingw*)
4943549e21daSmrg		cat <<"EOF"
4944549e21daSmrg
4945549e21daSmrg/* Prepares an argument vector before calling spawn().
4946549e21daSmrg   Note that spawn() does not by itself call the command interpreter
4947549e21daSmrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4948549e21daSmrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4949549e21daSmrg         GetVersionEx(&v);
4950549e21daSmrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4951549e21daSmrg      }) ? "cmd.exe" : "command.com").
4952549e21daSmrg   Instead it simply concatenates the arguments, separated by ' ', and calls
4953549e21daSmrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4954549e21daSmrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4955549e21daSmrg   special way:
4956549e21daSmrg   - Space and tab are interpreted as delimiters. They are not treated as
4957549e21daSmrg     delimiters if they are surrounded by double quotes: "...".
4958549e21daSmrg   - Unescaped double quotes are removed from the input. Their only effect is
4959549e21daSmrg     that within double quotes, space and tab are treated like normal
4960549e21daSmrg     characters.
4961549e21daSmrg   - Backslashes not followed by double quotes are not special.
4962549e21daSmrg   - But 2*n+1 backslashes followed by a double quote become
4963549e21daSmrg     n backslashes followed by a double quote (n >= 0):
4964549e21daSmrg       \" -> "
4965549e21daSmrg       \\\" -> \"
4966549e21daSmrg       \\\\\" -> \\"
4967549e21daSmrg */
4968549e21daSmrg#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"
4969549e21daSmrg#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"
4970549e21daSmrgchar **
4971549e21daSmrgprepare_spawn (char **argv)
4972549e21daSmrg{
4973549e21daSmrg  size_t argc;
4974549e21daSmrg  char **new_argv;
4975549e21daSmrg  size_t i;
4976ba6a1819Smrg
4977549e21daSmrg  /* Count number of arguments.  */
4978549e21daSmrg  for (argc = 0; argv[argc] != NULL; argc++)
4979549e21daSmrg    ;
4980ba6a1819Smrg
4981549e21daSmrg  /* Allocate new argument vector.  */
4982549e21daSmrg  new_argv = XMALLOC (char *, argc + 1);
4983ba6a1819Smrg
4984549e21daSmrg  /* Put quoted arguments into the new argument vector.  */
4985549e21daSmrg  for (i = 0; i < argc; i++)
4986549e21daSmrg    {
4987549e21daSmrg      const char *string = argv[i];
4988549e21daSmrg
4989549e21daSmrg      if (string[0] == '\0')
4990549e21daSmrg	new_argv[i] = xstrdup ("\"\"");
4991549e21daSmrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4992549e21daSmrg	{
4993549e21daSmrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4994549e21daSmrg	  size_t length;
4995549e21daSmrg	  unsigned int backslashes;
4996549e21daSmrg	  const char *s;
4997549e21daSmrg	  char *quoted_string;
4998549e21daSmrg	  char *p;
4999549e21daSmrg
5000549e21daSmrg	  length = 0;
5001549e21daSmrg	  backslashes = 0;
5002549e21daSmrg	  if (quote_around)
5003549e21daSmrg	    length++;
5004549e21daSmrg	  for (s = string; *s != '\0'; s++)
5005549e21daSmrg	    {
5006549e21daSmrg	      char c = *s;
5007549e21daSmrg	      if (c == '"')
5008549e21daSmrg		length += backslashes + 1;
5009549e21daSmrg	      length++;
5010549e21daSmrg	      if (c == '\\')
5011549e21daSmrg		backslashes++;
5012549e21daSmrg	      else
5013549e21daSmrg		backslashes = 0;
5014549e21daSmrg	    }
5015549e21daSmrg	  if (quote_around)
5016549e21daSmrg	    length += backslashes + 1;
5017549e21daSmrg
5018549e21daSmrg	  quoted_string = XMALLOC (char, length + 1);
5019549e21daSmrg
5020549e21daSmrg	  p = quoted_string;
5021549e21daSmrg	  backslashes = 0;
5022549e21daSmrg	  if (quote_around)
5023549e21daSmrg	    *p++ = '"';
5024549e21daSmrg	  for (s = string; *s != '\0'; s++)
5025549e21daSmrg	    {
5026549e21daSmrg	      char c = *s;
5027549e21daSmrg	      if (c == '"')
5028549e21daSmrg		{
5029549e21daSmrg		  unsigned int j;
5030549e21daSmrg		  for (j = backslashes + 1; j > 0; j--)
5031549e21daSmrg		    *p++ = '\\';
5032549e21daSmrg		}
5033549e21daSmrg	      *p++ = c;
5034549e21daSmrg	      if (c == '\\')
5035549e21daSmrg		backslashes++;
5036549e21daSmrg	      else
5037549e21daSmrg		backslashes = 0;
5038549e21daSmrg	    }
5039549e21daSmrg	  if (quote_around)
5040549e21daSmrg	    {
5041549e21daSmrg	      unsigned int j;
5042549e21daSmrg	      for (j = backslashes; j > 0; j--)
5043549e21daSmrg		*p++ = '\\';
5044549e21daSmrg	      *p++ = '"';
5045549e21daSmrg	    }
5046549e21daSmrg	  *p = '\0';
5047ba6a1819Smrg
5048549e21daSmrg	  new_argv[i] = quoted_string;
5049549e21daSmrg	}
5050549e21daSmrg      else
5051549e21daSmrg	new_argv[i] = (char *) string;
5052549e21daSmrg    }
5053549e21daSmrg  new_argv[argc] = NULL;
5054ba6a1819Smrg
5055549e21daSmrg  return new_argv;
5056549e21daSmrg}
5057549e21daSmrgEOF
5058ba6a1819Smrg		;;
5059549e21daSmrg	    esac
5060ba6a1819Smrg
5061549e21daSmrg            cat <<"EOF"
5062549e21daSmrgvoid lt_dump_script (FILE* f)
5063549e21daSmrg{
5064549e21daSmrgEOF
5065549e21daSmrg	    func_emit_wrapper yes |
50661bedbe3fSmrg	      $SED -n -e '
50671bedbe3fSmrgs/^\(.\{79\}\)\(..*\)/\1\
50681bedbe3fSmrg\2/
50691bedbe3fSmrgh
50701bedbe3fSmrgs/\([\\"]\)/\\\1/g
50711bedbe3fSmrgs/$/\\n/
50721bedbe3fSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
50731bedbe3fSmrgg
50741bedbe3fSmrgD'
5075549e21daSmrg            cat <<"EOF"
5076549e21daSmrg}
5077549e21daSmrgEOF
5078549e21daSmrg}
5079549e21daSmrg# end: func_emit_cwrapperexe_src
5080ba6a1819Smrg
5081549e21daSmrg# func_win32_import_lib_p ARG
5082549e21daSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd
5083549e21daSmrgfunc_win32_import_lib_p ()
5084549e21daSmrg{
5085549e21daSmrg    $opt_debug
5086549e21daSmrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5087549e21daSmrg    *import*) : ;;
5088549e21daSmrg    *) false ;;
5089549e21daSmrg    esac
5090549e21daSmrg}
5091ba6a1819Smrg
5092549e21daSmrg# func_mode_link arg...
5093549e21daSmrgfunc_mode_link ()
5094549e21daSmrg{
5095549e21daSmrg    $opt_debug
5096549e21daSmrg    case $host in
5097549e21daSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098549e21daSmrg      # It is impossible to link a dll without this setting, and
5099549e21daSmrg      # we shouldn't force the makefile maintainer to figure out
5100549e21daSmrg      # which system we are compiling for in order to pass an extra
5101549e21daSmrg      # flag for every libtool invocation.
5102549e21daSmrg      # allow_undefined=no
5103ba6a1819Smrg
5104549e21daSmrg      # FIXME: Unfortunately, there are problems with the above when trying
5105549e21daSmrg      # to make a dll which has undefined symbols, in which case not
5106549e21daSmrg      # even a static library is built.  For now, we need to specify
5107549e21daSmrg      # -no-undefined on the libtool link line when we can be certain
5108549e21daSmrg      # that all symbols are satisfied, otherwise we get a static library.
5109549e21daSmrg      allow_undefined=yes
5110549e21daSmrg      ;;
5111549e21daSmrg    *)
5112549e21daSmrg      allow_undefined=yes
5113549e21daSmrg      ;;
5114549e21daSmrg    esac
5115549e21daSmrg    libtool_args=$nonopt
5116549e21daSmrg    base_compile="$nonopt $@"
5117549e21daSmrg    compile_command=$nonopt
5118549e21daSmrg    finalize_command=$nonopt
5119ba6a1819Smrg
5120549e21daSmrg    compile_rpath=
5121549e21daSmrg    finalize_rpath=
5122549e21daSmrg    compile_shlibpath=
5123549e21daSmrg    finalize_shlibpath=
5124549e21daSmrg    convenience=
5125549e21daSmrg    old_convenience=
5126549e21daSmrg    deplibs=
5127549e21daSmrg    old_deplibs=
5128549e21daSmrg    compiler_flags=
5129549e21daSmrg    linker_flags=
5130549e21daSmrg    dllsearchpath=
5131549e21daSmrg    lib_search_path=`pwd`
5132549e21daSmrg    inst_prefix_dir=
5133549e21daSmrg    new_inherited_linker_flags=
5134ba6a1819Smrg
5135549e21daSmrg    avoid_version=no
5136549e21daSmrg    bindir=
5137549e21daSmrg    dlfiles=
5138549e21daSmrg    dlprefiles=
5139549e21daSmrg    dlself=no
5140549e21daSmrg    export_dynamic=no
5141549e21daSmrg    export_symbols=
5142549e21daSmrg    export_symbols_regex=
5143549e21daSmrg    generated=
5144549e21daSmrg    libobjs=
5145549e21daSmrg    ltlibs=
5146549e21daSmrg    module=no
5147549e21daSmrg    no_install=no
5148549e21daSmrg    objs=
5149549e21daSmrg    non_pic_objects=
5150549e21daSmrg    precious_files_regex=
5151549e21daSmrg    prefer_static_libs=no
5152549e21daSmrg    preload=no
5153549e21daSmrg    prev=
5154549e21daSmrg    prevarg=
5155549e21daSmrg    release=
5156549e21daSmrg    rpath=
5157549e21daSmrg    xrpath=
5158549e21daSmrg    perm_rpath=
5159549e21daSmrg    temp_rpath=
5160549e21daSmrg    thread_safe=no
5161549e21daSmrg    vinfo=
5162549e21daSmrg    vinfo_number=no
5163549e21daSmrg    weak_libs=
5164549e21daSmrg    single_module="${wl}-single_module"
5165549e21daSmrg    func_infer_tag $base_compile
5166ba6a1819Smrg
5167549e21daSmrg    # We need to know -static, to get the right output filenames.
5168549e21daSmrg    for arg
5169549e21daSmrg    do
5170549e21daSmrg      case $arg in
5171549e21daSmrg      -shared)
5172549e21daSmrg	test "$build_libtool_libs" != yes && \
5173549e21daSmrg	  func_fatal_configuration "can not build a shared library"
5174549e21daSmrg	build_old_libs=no
5175549e21daSmrg	break
5176549e21daSmrg	;;
5177549e21daSmrg      -all-static | -static | -static-libtool-libs)
5178549e21daSmrg	case $arg in
5179549e21daSmrg	-all-static)
5180549e21daSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181549e21daSmrg	    func_warning "complete static linking is impossible in this configuration"
5182549e21daSmrg	  fi
5183549e21daSmrg	  if test -n "$link_static_flag"; then
5184549e21daSmrg	    dlopen_self=$dlopen_self_static
5185549e21daSmrg	  fi
5186549e21daSmrg	  prefer_static_libs=yes
5187549e21daSmrg	  ;;
5188549e21daSmrg	-static)
5189549e21daSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190549e21daSmrg	    dlopen_self=$dlopen_self_static
5191549e21daSmrg	  fi
5192549e21daSmrg	  prefer_static_libs=built
5193549e21daSmrg	  ;;
5194549e21daSmrg	-static-libtool-libs)
5195549e21daSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196549e21daSmrg	    dlopen_self=$dlopen_self_static
5197549e21daSmrg	  fi
5198549e21daSmrg	  prefer_static_libs=yes
5199549e21daSmrg	  ;;
5200549e21daSmrg	esac
5201549e21daSmrg	build_libtool_libs=no
5202549e21daSmrg	build_old_libs=yes
5203549e21daSmrg	break
5204549e21daSmrg	;;
5205549e21daSmrg      esac
5206549e21daSmrg    done
5207ba6a1819Smrg
5208549e21daSmrg    # See if our shared archives depend on static archives.
5209549e21daSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210ba6a1819Smrg
5211549e21daSmrg    # Go through the arguments, transforming them on the way.
5212549e21daSmrg    while test "$#" -gt 0; do
5213549e21daSmrg      arg="$1"
5214549e21daSmrg      shift
5215549e21daSmrg      func_quote_for_eval "$arg"
5216549e21daSmrg      qarg=$func_quote_for_eval_unquoted_result
5217549e21daSmrg      func_append libtool_args " $func_quote_for_eval_result"
5218ba6a1819Smrg
5219549e21daSmrg      # If the previous option needs an argument, assign it.
5220549e21daSmrg      if test -n "$prev"; then
5221549e21daSmrg	case $prev in
5222549e21daSmrg	output)
5223549e21daSmrg	  func_append compile_command " @OUTPUT@"
5224549e21daSmrg	  func_append finalize_command " @OUTPUT@"
5225549e21daSmrg	  ;;
5226549e21daSmrg	esac
5227ba6a1819Smrg
5228549e21daSmrg	case $prev in
5229549e21daSmrg	bindir)
5230549e21daSmrg	  bindir="$arg"
5231549e21daSmrg	  prev=
5232549e21daSmrg	  continue
5233549e21daSmrg	  ;;
5234549e21daSmrg	dlfiles|dlprefiles)
5235549e21daSmrg	  if test "$preload" = no; then
5236549e21daSmrg	    # Add the symbol object into the linking commands.
5237549e21daSmrg	    func_append compile_command " @SYMFILE@"
5238549e21daSmrg	    func_append finalize_command " @SYMFILE@"
5239549e21daSmrg	    preload=yes
5240ba6a1819Smrg	  fi
5241549e21daSmrg	  case $arg in
5242549e21daSmrg	  *.la | *.lo) ;;  # We handle these cases below.
5243549e21daSmrg	  force)
5244549e21daSmrg	    if test "$dlself" = no; then
5245549e21daSmrg	      dlself=needless
5246549e21daSmrg	      export_dynamic=yes
5247ba6a1819Smrg	    fi
5248549e21daSmrg	    prev=
5249549e21daSmrg	    continue
5250549e21daSmrg	    ;;
5251549e21daSmrg	  self)
5252549e21daSmrg	    if test "$prev" = dlprefiles; then
5253549e21daSmrg	      dlself=yes
5254549e21daSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255549e21daSmrg	      dlself=yes
5256ba6a1819Smrg	    else
5257549e21daSmrg	      dlself=needless
5258549e21daSmrg	      export_dynamic=yes
5259ba6a1819Smrg	    fi
5260549e21daSmrg	    prev=
5261549e21daSmrg	    continue
5262549e21daSmrg	    ;;
5263549e21daSmrg	  *)
5264549e21daSmrg	    if test "$prev" = dlfiles; then
52651bedbe3fSmrg	      func_append dlfiles " $arg"
5266ba6a1819Smrg	    else
52671bedbe3fSmrg	      func_append dlprefiles " $arg"
5268ba6a1819Smrg	    fi
5269549e21daSmrg	    prev=
5270549e21daSmrg	    continue
5271549e21daSmrg	    ;;
5272549e21daSmrg	  esac
5273549e21daSmrg	  ;;
5274549e21daSmrg	expsyms)
5275549e21daSmrg	  export_symbols="$arg"
5276549e21daSmrg	  test -f "$arg" \
5277549e21daSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278549e21daSmrg	  prev=
5279549e21daSmrg	  continue
5280549e21daSmrg	  ;;
5281549e21daSmrg	expsyms_regex)
5282549e21daSmrg	  export_symbols_regex="$arg"
5283549e21daSmrg	  prev=
5284549e21daSmrg	  continue
5285549e21daSmrg	  ;;
5286549e21daSmrg	framework)
5287549e21daSmrg	  case $host in
5288549e21daSmrg	    *-*-darwin*)
5289549e21daSmrg	      case "$deplibs " in
5290549e21daSmrg		*" $qarg.ltframework "*) ;;
52911bedbe3fSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292549e21daSmrg		   ;;
5293549e21daSmrg	      esac
5294549e21daSmrg	      ;;
5295549e21daSmrg	  esac
5296549e21daSmrg	  prev=
5297549e21daSmrg	  continue
5298549e21daSmrg	  ;;
5299549e21daSmrg	inst_prefix)
5300549e21daSmrg	  inst_prefix_dir="$arg"
5301549e21daSmrg	  prev=
5302549e21daSmrg	  continue
5303549e21daSmrg	  ;;
5304549e21daSmrg	objectlist)
5305549e21daSmrg	  if test -f "$arg"; then
5306549e21daSmrg	    save_arg=$arg
5307549e21daSmrg	    moreargs=
5308549e21daSmrg	    for fil in `cat "$save_arg"`
5309549e21daSmrg	    do
53101bedbe3fSmrg#	      func_append moreargs " $fil"
5311549e21daSmrg	      arg=$fil
5312549e21daSmrg	      # A libtool-controlled object.
5313ba6a1819Smrg
5314549e21daSmrg	      # Check to see that this really is a libtool object.
5315549e21daSmrg	      if func_lalib_unsafe_p "$arg"; then
5316549e21daSmrg		pic_object=
5317549e21daSmrg		non_pic_object=
5318ba6a1819Smrg
5319549e21daSmrg		# Read the .lo file
5320549e21daSmrg		func_source "$arg"
5321ba6a1819Smrg
5322549e21daSmrg		if test -z "$pic_object" ||
5323549e21daSmrg		   test -z "$non_pic_object" ||
5324549e21daSmrg		   test "$pic_object" = none &&
5325549e21daSmrg		   test "$non_pic_object" = none; then
5326549e21daSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327549e21daSmrg		fi
5328ba6a1819Smrg
5329549e21daSmrg		# Extract subdirectory from the argument.
5330549e21daSmrg		func_dirname "$arg" "/" ""
5331549e21daSmrg		xdir="$func_dirname_result"
5332ba6a1819Smrg
5333549e21daSmrg		if test "$pic_object" != none; then
5334549e21daSmrg		  # Prepend the subdirectory the object is found in.
5335549e21daSmrg		  pic_object="$xdir$pic_object"
5336ba6a1819Smrg
5337549e21daSmrg		  if test "$prev" = dlfiles; then
5338549e21daSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
53391bedbe3fSmrg		      func_append dlfiles " $pic_object"
5340549e21daSmrg		      prev=
5341549e21daSmrg		      continue
5342549e21daSmrg		    else
5343549e21daSmrg		      # If libtool objects are unsupported, then we need to preload.
5344549e21daSmrg		      prev=dlprefiles
5345549e21daSmrg		    fi
5346549e21daSmrg		  fi
5347ba6a1819Smrg
5348549e21daSmrg		  # CHECK ME:  I think I busted this.  -Ossama
5349549e21daSmrg		  if test "$prev" = dlprefiles; then
5350549e21daSmrg		    # Preload the old-style object.
53511bedbe3fSmrg		    func_append dlprefiles " $pic_object"
5352549e21daSmrg		    prev=
5353549e21daSmrg		  fi
5354ba6a1819Smrg
5355549e21daSmrg		  # A PIC object.
5356549e21daSmrg		  func_append libobjs " $pic_object"
5357549e21daSmrg		  arg="$pic_object"
5358549e21daSmrg		fi
5359ba6a1819Smrg
5360549e21daSmrg		# Non-PIC object.
5361549e21daSmrg		if test "$non_pic_object" != none; then
5362549e21daSmrg		  # Prepend the subdirectory the object is found in.
5363549e21daSmrg		  non_pic_object="$xdir$non_pic_object"
5364ba6a1819Smrg
5365549e21daSmrg		  # A standard non-PIC object
5366549e21daSmrg		  func_append non_pic_objects " $non_pic_object"
5367549e21daSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368549e21daSmrg		    arg="$non_pic_object"
5369549e21daSmrg		  fi
5370549e21daSmrg		else
5371549e21daSmrg		  # If the PIC object exists, use it instead.
5372549e21daSmrg		  # $xdir was prepended to $pic_object above.
5373549e21daSmrg		  non_pic_object="$pic_object"
5374549e21daSmrg		  func_append non_pic_objects " $non_pic_object"
5375549e21daSmrg		fi
5376549e21daSmrg	      else
5377549e21daSmrg		# Only an error if not doing a dry-run.
5378549e21daSmrg		if $opt_dry_run; then
5379549e21daSmrg		  # Extract subdirectory from the argument.
5380549e21daSmrg		  func_dirname "$arg" "/" ""
5381549e21daSmrg		  xdir="$func_dirname_result"
5382549e21daSmrg
5383549e21daSmrg		  func_lo2o "$arg"
5384549e21daSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385549e21daSmrg		  non_pic_object=$xdir$func_lo2o_result
5386549e21daSmrg		  func_append libobjs " $pic_object"
5387549e21daSmrg		  func_append non_pic_objects " $non_pic_object"
5388549e21daSmrg	        else
5389549e21daSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390549e21daSmrg		fi
5391549e21daSmrg	      fi
5392549e21daSmrg	    done
5393549e21daSmrg	  else
5394549e21daSmrg	    func_fatal_error "link input file \`$arg' does not exist"
5395ba6a1819Smrg	  fi
5396549e21daSmrg	  arg=$save_arg
5397549e21daSmrg	  prev=
5398549e21daSmrg	  continue
5399549e21daSmrg	  ;;
5400549e21daSmrg	precious_regex)
5401549e21daSmrg	  precious_files_regex="$arg"
5402549e21daSmrg	  prev=
5403549e21daSmrg	  continue
5404549e21daSmrg	  ;;
5405549e21daSmrg	release)
5406549e21daSmrg	  release="-$arg"
5407549e21daSmrg	  prev=
5408549e21daSmrg	  continue
5409549e21daSmrg	  ;;
5410549e21daSmrg	rpath | xrpath)
5411549e21daSmrg	  # We need an absolute path.
5412549e21daSmrg	  case $arg in
5413549e21daSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414549e21daSmrg	  *)
5415549e21daSmrg	    func_fatal_error "only absolute run-paths are allowed"
5416549e21daSmrg	    ;;
5417ba6a1819Smrg	  esac
5418549e21daSmrg	  if test "$prev" = rpath; then
5419549e21daSmrg	    case "$rpath " in
5420549e21daSmrg	    *" $arg "*) ;;
54211bedbe3fSmrg	    *) func_append rpath " $arg" ;;
5422549e21daSmrg	    esac
5423549e21daSmrg	  else
5424549e21daSmrg	    case "$xrpath " in
5425549e21daSmrg	    *" $arg "*) ;;
54261bedbe3fSmrg	    *) func_append xrpath " $arg" ;;
5427549e21daSmrg	    esac
5428549e21daSmrg	  fi
5429549e21daSmrg	  prev=
5430549e21daSmrg	  continue
5431549e21daSmrg	  ;;
5432549e21daSmrg	shrext)
5433549e21daSmrg	  shrext_cmds="$arg"
5434549e21daSmrg	  prev=
5435549e21daSmrg	  continue
5436549e21daSmrg	  ;;
5437549e21daSmrg	weak)
54381bedbe3fSmrg	  func_append weak_libs " $arg"
5439549e21daSmrg	  prev=
5440549e21daSmrg	  continue
5441549e21daSmrg	  ;;
5442549e21daSmrg	xcclinker)
54431bedbe3fSmrg	  func_append linker_flags " $qarg"
54441bedbe3fSmrg	  func_append compiler_flags " $qarg"
5445549e21daSmrg	  prev=
5446549e21daSmrg	  func_append compile_command " $qarg"
5447549e21daSmrg	  func_append finalize_command " $qarg"
5448549e21daSmrg	  continue
5449549e21daSmrg	  ;;
5450549e21daSmrg	xcompiler)
54511bedbe3fSmrg	  func_append compiler_flags " $qarg"
5452549e21daSmrg	  prev=
5453549e21daSmrg	  func_append compile_command " $qarg"
5454549e21daSmrg	  func_append finalize_command " $qarg"
5455549e21daSmrg	  continue
5456549e21daSmrg	  ;;
5457549e21daSmrg	xlinker)
54581bedbe3fSmrg	  func_append linker_flags " $qarg"
54591bedbe3fSmrg	  func_append compiler_flags " $wl$qarg"
5460549e21daSmrg	  prev=
5461549e21daSmrg	  func_append compile_command " $wl$qarg"
5462549e21daSmrg	  func_append finalize_command " $wl$qarg"
5463549e21daSmrg	  continue
5464ba6a1819Smrg	  ;;
5465ba6a1819Smrg	*)
5466549e21daSmrg	  eval "$prev=\"\$arg\""
5467549e21daSmrg	  prev=
5468549e21daSmrg	  continue
5469ba6a1819Smrg	  ;;
5470ba6a1819Smrg	esac
5471549e21daSmrg      fi # test -n "$prev"
5472ba6a1819Smrg
5473549e21daSmrg      prevarg="$arg"
5474ba6a1819Smrg
5475549e21daSmrg      case $arg in
5476549e21daSmrg      -all-static)
5477549e21daSmrg	if test -n "$link_static_flag"; then
5478549e21daSmrg	  # See comment for -static flag below, for more details.
5479549e21daSmrg	  func_append compile_command " $link_static_flag"
5480549e21daSmrg	  func_append finalize_command " $link_static_flag"
5481ba6a1819Smrg	fi
5482549e21daSmrg	continue
5483549e21daSmrg	;;
5484ba6a1819Smrg
5485549e21daSmrg      -allow-undefined)
5486549e21daSmrg	# FIXME: remove this flag sometime in the future.
5487549e21daSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488549e21daSmrg	;;
5489ba6a1819Smrg
5490549e21daSmrg      -avoid-version)
5491549e21daSmrg	avoid_version=yes
5492549e21daSmrg	continue
5493549e21daSmrg	;;
5494ba6a1819Smrg
5495549e21daSmrg      -bindir)
5496549e21daSmrg	prev=bindir
5497549e21daSmrg	continue
5498549e21daSmrg	;;
5499ba6a1819Smrg
5500549e21daSmrg      -dlopen)
5501549e21daSmrg	prev=dlfiles
5502549e21daSmrg	continue
5503549e21daSmrg	;;
5504ba6a1819Smrg
5505549e21daSmrg      -dlpreopen)
5506549e21daSmrg	prev=dlprefiles
5507549e21daSmrg	continue
5508549e21daSmrg	;;
5509ba6a1819Smrg
5510549e21daSmrg      -export-dynamic)
5511549e21daSmrg	export_dynamic=yes
5512549e21daSmrg	continue
5513549e21daSmrg	;;
5514ba6a1819Smrg
5515549e21daSmrg      -export-symbols | -export-symbols-regex)
5516549e21daSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517549e21daSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518549e21daSmrg	fi
5519549e21daSmrg	if test "X$arg" = "X-export-symbols"; then
5520549e21daSmrg	  prev=expsyms
5521ba6a1819Smrg	else
5522549e21daSmrg	  prev=expsyms_regex
5523ba6a1819Smrg	fi
5524549e21daSmrg	continue
5525549e21daSmrg	;;
5526ba6a1819Smrg
5527549e21daSmrg      -framework)
5528549e21daSmrg	prev=framework
5529549e21daSmrg	continue
5530549e21daSmrg	;;
5531ba6a1819Smrg
5532549e21daSmrg      -inst-prefix-dir)
5533549e21daSmrg	prev=inst_prefix
5534549e21daSmrg	continue
5535549e21daSmrg	;;
5536ba6a1819Smrg
5537549e21daSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538549e21daSmrg      # so, if we see these flags be careful not to treat them like -L
5539549e21daSmrg      -L[A-Z][A-Z]*:*)
5540549e21daSmrg	case $with_gcc/$host in
5541549e21daSmrg	no/*-*-irix* | /*-*-irix*)
5542549e21daSmrg	  func_append compile_command " $arg"
5543549e21daSmrg	  func_append finalize_command " $arg"
5544549e21daSmrg	  ;;
5545549e21daSmrg	esac
5546549e21daSmrg	continue
5547549e21daSmrg	;;
5548ba6a1819Smrg
5549549e21daSmrg      -L*)
55501bedbe3fSmrg	func_stripname "-L" '' "$arg"
55511bedbe3fSmrg	if test -z "$func_stripname_result"; then
5552549e21daSmrg	  if test "$#" -gt 0; then
5553549e21daSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554ba6a1819Smrg	  else
5555549e21daSmrg	    func_fatal_error "need path for \`-L' option"
5556ba6a1819Smrg	  fi
5557549e21daSmrg	fi
55581bedbe3fSmrg	func_resolve_sysroot "$func_stripname_result"
55591bedbe3fSmrg	dir=$func_resolve_sysroot_result
5560549e21daSmrg	# We need an absolute path.
5561549e21daSmrg	case $dir in
5562549e21daSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563549e21daSmrg	*)
5564549e21daSmrg	  absdir=`cd "$dir" && pwd`
5565549e21daSmrg	  test -z "$absdir" && \
5566549e21daSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567549e21daSmrg	  dir="$absdir"
5568549e21daSmrg	  ;;
5569ba6a1819Smrg	esac
5570549e21daSmrg	case "$deplibs " in
55711bedbe3fSmrg	*" -L$dir "* | *" $arg "*)
55721bedbe3fSmrg	  # Will only happen for absolute or sysroot arguments
55731bedbe3fSmrg	  ;;
5574549e21daSmrg	*)
55751bedbe3fSmrg	  # Preserve sysroot, but never include relative directories
55761bedbe3fSmrg	  case $dir in
55771bedbe3fSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
55781bedbe3fSmrg	    *) func_append deplibs " -L$dir" ;;
55791bedbe3fSmrg	  esac
55801bedbe3fSmrg	  func_append lib_search_path " $dir"
5581549e21daSmrg	  ;;
5582ba6a1819Smrg	esac
5583ba6a1819Smrg	case $host in
5584549e21daSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5585549e21daSmrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586549e21daSmrg	  case :$dllsearchpath: in
5587549e21daSmrg	  *":$dir:"*) ;;
5588549e21daSmrg	  ::) dllsearchpath=$dir;;
55891bedbe3fSmrg	  *) func_append dllsearchpath ":$dir";;
5590549e21daSmrg	  esac
5591549e21daSmrg	  case :$dllsearchpath: in
5592549e21daSmrg	  *":$testbindir:"*) ;;
5593549e21daSmrg	  ::) dllsearchpath=$testbindir;;
55941bedbe3fSmrg	  *) func_append dllsearchpath ":$testbindir";;
5595549e21daSmrg	  esac
5596549e21daSmrg	  ;;
5597ba6a1819Smrg	esac
5598549e21daSmrg	continue
5599549e21daSmrg	;;
5600ba6a1819Smrg
5601549e21daSmrg      -l*)
5602549e21daSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603549e21daSmrg	  case $host in
5604549e21daSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605549e21daSmrg	    # These systems don't actually have a C or math library (as such)
5606549e21daSmrg	    continue
5607549e21daSmrg	    ;;
5608549e21daSmrg	  *-*-os2*)
5609549e21daSmrg	    # These systems don't actually have a C library (as such)
5610549e21daSmrg	    test "X$arg" = "X-lc" && continue
5611549e21daSmrg	    ;;
5612549e21daSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613549e21daSmrg	    # Do not include libc due to us having libc/libc_r.
5614549e21daSmrg	    test "X$arg" = "X-lc" && continue
5615549e21daSmrg	    ;;
5616549e21daSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617549e21daSmrg	    # Rhapsody C and math libraries are in the System framework
56181bedbe3fSmrg	    func_append deplibs " System.ltframework"
5619549e21daSmrg	    continue
5620549e21daSmrg	    ;;
5621549e21daSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622549e21daSmrg	    # Causes problems with __ctype
5623549e21daSmrg	    test "X$arg" = "X-lc" && continue
5624549e21daSmrg	    ;;
5625549e21daSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626549e21daSmrg	    # Compiler inserts libc in the correct place for threads to work
5627549e21daSmrg	    test "X$arg" = "X-lc" && continue
5628549e21daSmrg	    ;;
5629549e21daSmrg	  esac
5630549e21daSmrg	elif test "X$arg" = "X-lc_r"; then
5631549e21daSmrg	 case $host in
5632549e21daSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633549e21daSmrg	   # Do not include libc_r directly, use -pthread flag.
5634549e21daSmrg	   continue
5635549e21daSmrg	   ;;
5636549e21daSmrg	 esac
5637549e21daSmrg	fi
56381bedbe3fSmrg	func_append deplibs " $arg"
5639549e21daSmrg	continue
5640549e21daSmrg	;;
5641ba6a1819Smrg
5642549e21daSmrg      -module)
5643549e21daSmrg	module=yes
5644549e21daSmrg	continue
5645549e21daSmrg	;;
5646ba6a1819Smrg
5647549e21daSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648549e21daSmrg      # classes, name mangling, and exception handling.
5649549e21daSmrg      # Darwin uses the -arch flag to determine output architecture.
56501bedbe3fSmrg      -model|-arch|-isysroot|--sysroot)
56511bedbe3fSmrg	func_append compiler_flags " $arg"
5652549e21daSmrg	func_append compile_command " $arg"
5653549e21daSmrg	func_append finalize_command " $arg"
5654549e21daSmrg	prev=xcompiler
5655549e21daSmrg	continue
5656549e21daSmrg	;;
5657ba6a1819Smrg
56581bedbe3fSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
56591bedbe3fSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
56601bedbe3fSmrg	func_append compiler_flags " $arg"
5661549e21daSmrg	func_append compile_command " $arg"
5662549e21daSmrg	func_append finalize_command " $arg"
5663549e21daSmrg	case "$new_inherited_linker_flags " in
5664549e21daSmrg	    *" $arg "*) ;;
56651bedbe3fSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666549e21daSmrg	esac
5667549e21daSmrg	continue
5668549e21daSmrg	;;
5669ba6a1819Smrg
5670549e21daSmrg      -multi_module)
5671549e21daSmrg	single_module="${wl}-multi_module"
5672549e21daSmrg	continue
5673549e21daSmrg	;;
5674ba6a1819Smrg
5675549e21daSmrg      -no-fast-install)
5676549e21daSmrg	fast_install=no
5677549e21daSmrg	continue
5678549e21daSmrg	;;
5679ba6a1819Smrg
5680549e21daSmrg      -no-install)
5681549e21daSmrg	case $host in
5682549e21daSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683549e21daSmrg	  # The PATH hackery in wrapper scripts is required on Windows
5684549e21daSmrg	  # and Darwin in order for the loader to find any dlls it needs.
5685549e21daSmrg	  func_warning "\`-no-install' is ignored for $host"
5686549e21daSmrg	  func_warning "assuming \`-no-fast-install' instead"
5687549e21daSmrg	  fast_install=no
5688549e21daSmrg	  ;;
5689549e21daSmrg	*) no_install=yes ;;
5690549e21daSmrg	esac
5691549e21daSmrg	continue
5692549e21daSmrg	;;
5693ba6a1819Smrg
5694549e21daSmrg      -no-undefined)
5695549e21daSmrg	allow_undefined=no
5696549e21daSmrg	continue
5697549e21daSmrg	;;
5698ba6a1819Smrg
5699549e21daSmrg      -objectlist)
5700549e21daSmrg	prev=objectlist
5701549e21daSmrg	continue
5702549e21daSmrg	;;
5703ba6a1819Smrg
5704549e21daSmrg      -o) prev=output ;;
5705ba6a1819Smrg
5706549e21daSmrg      -precious-files-regex)
5707549e21daSmrg	prev=precious_regex
5708549e21daSmrg	continue
5709549e21daSmrg	;;
5710ba6a1819Smrg
5711549e21daSmrg      -release)
5712549e21daSmrg	prev=release
5713549e21daSmrg	continue
5714549e21daSmrg	;;
5715ba6a1819Smrg
5716549e21daSmrg      -rpath)
5717549e21daSmrg	prev=rpath
5718549e21daSmrg	continue
5719549e21daSmrg	;;
5720ba6a1819Smrg
5721549e21daSmrg      -R)
5722549e21daSmrg	prev=xrpath
5723549e21daSmrg	continue
5724549e21daSmrg	;;
5725ba6a1819Smrg
5726549e21daSmrg      -R*)
5727549e21daSmrg	func_stripname '-R' '' "$arg"
5728549e21daSmrg	dir=$func_stripname_result
5729549e21daSmrg	# We need an absolute path.
5730549e21daSmrg	case $dir in
5731549e21daSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
57321bedbe3fSmrg	=*)
57331bedbe3fSmrg	  func_stripname '=' '' "$dir"
57341bedbe3fSmrg	  dir=$lt_sysroot$func_stripname_result
57351bedbe3fSmrg	  ;;
5736549e21daSmrg	*)
5737549e21daSmrg	  func_fatal_error "only absolute run-paths are allowed"
5738549e21daSmrg	  ;;
5739549e21daSmrg	esac
5740549e21daSmrg	case "$xrpath " in
5741549e21daSmrg	*" $dir "*) ;;
57421bedbe3fSmrg	*) func_append xrpath " $dir" ;;
5743549e21daSmrg	esac
5744549e21daSmrg	continue
5745549e21daSmrg	;;
5746ba6a1819Smrg
5747549e21daSmrg      -shared)
5748549e21daSmrg	# The effects of -shared are defined in a previous loop.
5749549e21daSmrg	continue
5750549e21daSmrg	;;
5751ba6a1819Smrg
5752549e21daSmrg      -shrext)
5753549e21daSmrg	prev=shrext
5754549e21daSmrg	continue
5755549e21daSmrg	;;
5756ba6a1819Smrg
5757549e21daSmrg      -static | -static-libtool-libs)
5758549e21daSmrg	# The effects of -static are defined in a previous loop.
5759549e21daSmrg	# We used to do the same as -all-static on platforms that
5760549e21daSmrg	# didn't have a PIC flag, but the assumption that the effects
5761549e21daSmrg	# would be equivalent was wrong.  It would break on at least
5762549e21daSmrg	# Digital Unix and AIX.
5763549e21daSmrg	continue
5764549e21daSmrg	;;
5765ba6a1819Smrg
5766549e21daSmrg      -thread-safe)
5767549e21daSmrg	thread_safe=yes
5768549e21daSmrg	continue
5769549e21daSmrg	;;
5770ba6a1819Smrg
5771549e21daSmrg      -version-info)
5772549e21daSmrg	prev=vinfo
5773549e21daSmrg	continue
5774549e21daSmrg	;;
5775ba6a1819Smrg
5776549e21daSmrg      -version-number)
5777549e21daSmrg	prev=vinfo
5778549e21daSmrg	vinfo_number=yes
5779549e21daSmrg	continue
5780549e21daSmrg	;;
5781ba6a1819Smrg
5782549e21daSmrg      -weak)
5783549e21daSmrg        prev=weak
5784549e21daSmrg	continue
5785549e21daSmrg	;;
5786ba6a1819Smrg
5787549e21daSmrg      -Wc,*)
5788549e21daSmrg	func_stripname '-Wc,' '' "$arg"
5789549e21daSmrg	args=$func_stripname_result
5790549e21daSmrg	arg=
5791549e21daSmrg	save_ifs="$IFS"; IFS=','
5792549e21daSmrg	for flag in $args; do
5793549e21daSmrg	  IFS="$save_ifs"
5794549e21daSmrg          func_quote_for_eval "$flag"
57951bedbe3fSmrg	  func_append arg " $func_quote_for_eval_result"
57961bedbe3fSmrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797549e21daSmrg	done
5798549e21daSmrg	IFS="$save_ifs"
5799549e21daSmrg	func_stripname ' ' '' "$arg"
5800549e21daSmrg	arg=$func_stripname_result
5801549e21daSmrg	;;
5802ba6a1819Smrg
5803549e21daSmrg      -Wl,*)
5804549e21daSmrg	func_stripname '-Wl,' '' "$arg"
5805549e21daSmrg	args=$func_stripname_result
5806549e21daSmrg	arg=
5807549e21daSmrg	save_ifs="$IFS"; IFS=','
5808549e21daSmrg	for flag in $args; do
5809549e21daSmrg	  IFS="$save_ifs"
5810549e21daSmrg          func_quote_for_eval "$flag"
58111bedbe3fSmrg	  func_append arg " $wl$func_quote_for_eval_result"
58121bedbe3fSmrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
58131bedbe3fSmrg	  func_append linker_flags " $func_quote_for_eval_result"
5814549e21daSmrg	done
5815549e21daSmrg	IFS="$save_ifs"
5816549e21daSmrg	func_stripname ' ' '' "$arg"
5817549e21daSmrg	arg=$func_stripname_result
5818549e21daSmrg	;;
5819ba6a1819Smrg
5820549e21daSmrg      -Xcompiler)
5821549e21daSmrg	prev=xcompiler
5822549e21daSmrg	continue
5823549e21daSmrg	;;
5824ba6a1819Smrg
5825549e21daSmrg      -Xlinker)
5826549e21daSmrg	prev=xlinker
5827549e21daSmrg	continue
5828549e21daSmrg	;;
5829ba6a1819Smrg
5830549e21daSmrg      -XCClinker)
5831549e21daSmrg	prev=xcclinker
5832549e21daSmrg	continue
5833549e21daSmrg	;;
5834ba6a1819Smrg
5835549e21daSmrg      # -msg_* for osf cc
5836549e21daSmrg      -msg_*)
5837549e21daSmrg	func_quote_for_eval "$arg"
5838549e21daSmrg	arg="$func_quote_for_eval_result"
5839549e21daSmrg	;;
5840ba6a1819Smrg
5841549e21daSmrg      # Flags to be passed through unchanged, with rationale:
5842549e21daSmrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5843549e21daSmrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
5844549e21daSmrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5845549e21daSmrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5846549e21daSmrg      # -q*                  compiler args for the IBM compiler
5847549e21daSmrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5848549e21daSmrg      # -F/path              path to uninstalled frameworks, gcc on darwin
5849549e21daSmrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5850549e21daSmrg      # @file                GCC response files
5851549e21daSmrg      # -tp=*                Portland pgcc target processor selection
58521bedbe3fSmrg      # --sysroot=*          for sysroot support
58531bedbe3fSmrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854549e21daSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
58551bedbe3fSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
58561bedbe3fSmrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857549e21daSmrg        func_quote_for_eval "$arg"
5858549e21daSmrg	arg="$func_quote_for_eval_result"
5859549e21daSmrg        func_append compile_command " $arg"
5860549e21daSmrg        func_append finalize_command " $arg"
58611bedbe3fSmrg        func_append compiler_flags " $arg"
5862549e21daSmrg        continue
5863549e21daSmrg        ;;
5864ba6a1819Smrg
5865549e21daSmrg      # Some other compiler flag.
5866549e21daSmrg      -* | +*)
5867549e21daSmrg        func_quote_for_eval "$arg"
5868549e21daSmrg	arg="$func_quote_for_eval_result"
5869549e21daSmrg	;;
5870ba6a1819Smrg
5871549e21daSmrg      *.$objext)
5872549e21daSmrg	# A standard object.
58731bedbe3fSmrg	func_append objs " $arg"
5874549e21daSmrg	;;
5875ba6a1819Smrg
5876549e21daSmrg      *.lo)
5877549e21daSmrg	# A libtool-controlled object.
5878ba6a1819Smrg
5879549e21daSmrg	# Check to see that this really is a libtool object.
5880549e21daSmrg	if func_lalib_unsafe_p "$arg"; then
5881549e21daSmrg	  pic_object=
5882549e21daSmrg	  non_pic_object=
5883ba6a1819Smrg
5884549e21daSmrg	  # Read the .lo file
5885549e21daSmrg	  func_source "$arg"
5886ba6a1819Smrg
5887549e21daSmrg	  if test -z "$pic_object" ||
5888549e21daSmrg	     test -z "$non_pic_object" ||
5889549e21daSmrg	     test "$pic_object" = none &&
5890549e21daSmrg	     test "$non_pic_object" = none; then
5891549e21daSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892549e21daSmrg	  fi
5893ba6a1819Smrg
5894549e21daSmrg	  # Extract subdirectory from the argument.
5895549e21daSmrg	  func_dirname "$arg" "/" ""
5896549e21daSmrg	  xdir="$func_dirname_result"
5897ba6a1819Smrg
5898549e21daSmrg	  if test "$pic_object" != none; then
5899549e21daSmrg	    # Prepend the subdirectory the object is found in.
5900549e21daSmrg	    pic_object="$xdir$pic_object"
5901ba6a1819Smrg
5902549e21daSmrg	    if test "$prev" = dlfiles; then
5903549e21daSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
59041bedbe3fSmrg		func_append dlfiles " $pic_object"
5905549e21daSmrg		prev=
5906549e21daSmrg		continue
5907549e21daSmrg	      else
5908549e21daSmrg		# If libtool objects are unsupported, then we need to preload.
5909549e21daSmrg		prev=dlprefiles
5910549e21daSmrg	      fi
5911549e21daSmrg	    fi
5912ba6a1819Smrg
5913549e21daSmrg	    # CHECK ME:  I think I busted this.  -Ossama
5914549e21daSmrg	    if test "$prev" = dlprefiles; then
5915549e21daSmrg	      # Preload the old-style object.
59161bedbe3fSmrg	      func_append dlprefiles " $pic_object"
5917549e21daSmrg	      prev=
5918549e21daSmrg	    fi
5919ba6a1819Smrg
5920549e21daSmrg	    # A PIC object.
5921549e21daSmrg	    func_append libobjs " $pic_object"
5922549e21daSmrg	    arg="$pic_object"
5923549e21daSmrg	  fi
5924ba6a1819Smrg
5925549e21daSmrg	  # Non-PIC object.
5926549e21daSmrg	  if test "$non_pic_object" != none; then
5927549e21daSmrg	    # Prepend the subdirectory the object is found in.
5928549e21daSmrg	    non_pic_object="$xdir$non_pic_object"
5929ba6a1819Smrg
5930549e21daSmrg	    # A standard non-PIC object
5931549e21daSmrg	    func_append non_pic_objects " $non_pic_object"
5932549e21daSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933549e21daSmrg	      arg="$non_pic_object"
5934549e21daSmrg	    fi
5935549e21daSmrg	  else
5936549e21daSmrg	    # If the PIC object exists, use it instead.
5937549e21daSmrg	    # $xdir was prepended to $pic_object above.
5938549e21daSmrg	    non_pic_object="$pic_object"
5939549e21daSmrg	    func_append non_pic_objects " $non_pic_object"
5940549e21daSmrg	  fi
5941549e21daSmrg	else
5942549e21daSmrg	  # Only an error if not doing a dry-run.
5943549e21daSmrg	  if $opt_dry_run; then
5944549e21daSmrg	    # Extract subdirectory from the argument.
5945549e21daSmrg	    func_dirname "$arg" "/" ""
5946549e21daSmrg	    xdir="$func_dirname_result"
5947549e21daSmrg
5948549e21daSmrg	    func_lo2o "$arg"
5949549e21daSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950549e21daSmrg	    non_pic_object=$xdir$func_lo2o_result
5951549e21daSmrg	    func_append libobjs " $pic_object"
5952549e21daSmrg	    func_append non_pic_objects " $non_pic_object"
5953549e21daSmrg	  else
5954549e21daSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955549e21daSmrg	  fi
5956549e21daSmrg	fi
5957549e21daSmrg	;;
5958ba6a1819Smrg
5959549e21daSmrg      *.$libext)
5960549e21daSmrg	# An archive.
59611bedbe3fSmrg	func_append deplibs " $arg"
59621bedbe3fSmrg	func_append old_deplibs " $arg"
5963549e21daSmrg	continue
5964549e21daSmrg	;;
5965ba6a1819Smrg
5966549e21daSmrg      *.la)
5967549e21daSmrg	# A libtool-controlled library.
5968ba6a1819Smrg
59691bedbe3fSmrg	func_resolve_sysroot "$arg"
5970549e21daSmrg	if test "$prev" = dlfiles; then
5971549e21daSmrg	  # This library was specified with -dlopen.
59721bedbe3fSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973549e21daSmrg	  prev=
5974549e21daSmrg	elif test "$prev" = dlprefiles; then
5975549e21daSmrg	  # The library was specified with -dlpreopen.
59761bedbe3fSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977549e21daSmrg	  prev=
5978549e21daSmrg	else
59791bedbe3fSmrg	  func_append deplibs " $func_resolve_sysroot_result"
5980549e21daSmrg	fi
5981549e21daSmrg	continue
5982549e21daSmrg	;;
5983ba6a1819Smrg
5984549e21daSmrg      # Some other compiler argument.
5985549e21daSmrg      *)
5986549e21daSmrg	# Unknown arguments in both finalize_command and compile_command need
5987549e21daSmrg	# to be aesthetically quoted because they are evaled later.
5988549e21daSmrg	func_quote_for_eval "$arg"
5989549e21daSmrg	arg="$func_quote_for_eval_result"
5990549e21daSmrg	;;
5991549e21daSmrg      esac # arg
5992ba6a1819Smrg
5993549e21daSmrg      # Now actually substitute the argument into the commands.
5994549e21daSmrg      if test -n "$arg"; then
5995549e21daSmrg	func_append compile_command " $arg"
5996549e21daSmrg	func_append finalize_command " $arg"
5997549e21daSmrg      fi
5998549e21daSmrg    done # argument parsing loop
5999ba6a1819Smrg
6000549e21daSmrg    test -n "$prev" && \
6001549e21daSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002ba6a1819Smrg
6003549e21daSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004549e21daSmrg      eval arg=\"$export_dynamic_flag_spec\"
6005549e21daSmrg      func_append compile_command " $arg"
6006549e21daSmrg      func_append finalize_command " $arg"
6007549e21daSmrg    fi
6008ba6a1819Smrg
6009549e21daSmrg    oldlibs=
6010549e21daSmrg    # calculate the name of the file, without its directory
6011549e21daSmrg    func_basename "$output"
6012549e21daSmrg    outputname="$func_basename_result"
6013549e21daSmrg    libobjs_save="$libobjs"
6014549e21daSmrg
6015549e21daSmrg    if test -n "$shlibpath_var"; then
6016549e21daSmrg      # get the directories listed in $shlibpath_var
6017549e21daSmrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018ba6a1819Smrg    else
6019549e21daSmrg      shlib_search_path=
6020ba6a1819Smrg    fi
6021549e21daSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022549e21daSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023ba6a1819Smrg
6024549e21daSmrg    func_dirname "$output" "/" ""
6025549e21daSmrg    output_objdir="$func_dirname_result$objdir"
60261bedbe3fSmrg    func_to_tool_file "$output_objdir/"
60271bedbe3fSmrg    tool_output_objdir=$func_to_tool_file_result
6028549e21daSmrg    # Create the object directory.
6029549e21daSmrg    func_mkdir_p "$output_objdir"
6030549e21daSmrg
6031549e21daSmrg    # Determine the type of output
6032549e21daSmrg    case $output in
6033549e21daSmrg    "")
6034549e21daSmrg      func_fatal_help "you must specify an output file"
6035549e21daSmrg      ;;
6036549e21daSmrg    *.$libext) linkmode=oldlib ;;
6037549e21daSmrg    *.lo | *.$objext) linkmode=obj ;;
6038549e21daSmrg    *.la) linkmode=lib ;;
6039549e21daSmrg    *) linkmode=prog ;; # Anything else should be a program.
6040549e21daSmrg    esac
6041549e21daSmrg
6042549e21daSmrg    specialdeplibs=
6043549e21daSmrg
6044549e21daSmrg    libs=
6045549e21daSmrg    # Find all interdependent deplibs by searching for libraries
6046549e21daSmrg    # that are linked more than once (e.g. -la -lb -la)
6047549e21daSmrg    for deplib in $deplibs; do
60481bedbe3fSmrg      if $opt_preserve_dup_deps ; then
6049549e21daSmrg	case "$libs " in
60501bedbe3fSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051549e21daSmrg	esac
6052549e21daSmrg      fi
60531bedbe3fSmrg      func_append libs " $deplib"
6054549e21daSmrg    done
6055549e21daSmrg
6056549e21daSmrg    if test "$linkmode" = lib; then
6057549e21daSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058549e21daSmrg
6059549e21daSmrg      # Compute libraries that are listed more than once in $predeps
6060549e21daSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061549e21daSmrg      # not to be eliminated).
6062549e21daSmrg      pre_post_deps=
6063549e21daSmrg      if $opt_duplicate_compiler_generated_deps; then
6064549e21daSmrg	for pre_post_dep in $predeps $postdeps; do
6065549e21daSmrg	  case "$pre_post_deps " in
60661bedbe3fSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067549e21daSmrg	  esac
60681bedbe3fSmrg	  func_append pre_post_deps " $pre_post_dep"
6069549e21daSmrg	done
6070549e21daSmrg      fi
6071549e21daSmrg      pre_post_deps=
6072549e21daSmrg    fi
6073549e21daSmrg
6074549e21daSmrg    deplibs=
6075549e21daSmrg    newdependency_libs=
6076549e21daSmrg    newlib_search_path=
6077549e21daSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078549e21daSmrg    notinst_deplibs= # not-installed libtool libraries
6079549e21daSmrg    notinst_path= # paths that contain not-installed libtool libraries
6080549e21daSmrg
6081549e21daSmrg    case $linkmode in
6082549e21daSmrg    lib)
6083549e21daSmrg	passes="conv dlpreopen link"
6084549e21daSmrg	for file in $dlfiles $dlprefiles; do
6085549e21daSmrg	  case $file in
6086549e21daSmrg	  *.la) ;;
6087549e21daSmrg	  *)
6088549e21daSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089549e21daSmrg	    ;;
6090549e21daSmrg	  esac
6091549e21daSmrg	done
6092549e21daSmrg	;;
6093549e21daSmrg    prog)
6094549e21daSmrg	compile_deplibs=
6095549e21daSmrg	finalize_deplibs=
6096549e21daSmrg	alldeplibs=no
6097549e21daSmrg	newdlfiles=
6098549e21daSmrg	newdlprefiles=
6099549e21daSmrg	passes="conv scan dlopen dlpreopen link"
6100549e21daSmrg	;;
6101549e21daSmrg    *)  passes="conv"
6102549e21daSmrg	;;
6103549e21daSmrg    esac
6104549e21daSmrg
6105549e21daSmrg    for pass in $passes; do
6106549e21daSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107549e21daSmrg      # so that -L comes before libs that need it for instance...
6108549e21daSmrg      if test "$linkmode,$pass" = "lib,link"; then
6109549e21daSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110549e21daSmrg	##        order, and fix it there properly
6111549e21daSmrg        tmp_deplibs=
6112549e21daSmrg	for deplib in $deplibs; do
6113549e21daSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114549e21daSmrg	done
6115549e21daSmrg	deplibs="$tmp_deplibs"
6116549e21daSmrg      fi
6117549e21daSmrg
6118549e21daSmrg      if test "$linkmode,$pass" = "lib,link" ||
6119549e21daSmrg	 test "$linkmode,$pass" = "prog,scan"; then
6120549e21daSmrg	libs="$deplibs"
6121549e21daSmrg	deplibs=
6122549e21daSmrg      fi
6123549e21daSmrg      if test "$linkmode" = prog; then
6124549e21daSmrg	case $pass in
6125549e21daSmrg	dlopen) libs="$dlfiles" ;;
6126549e21daSmrg	dlpreopen) libs="$dlprefiles" ;;
6127549e21daSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128549e21daSmrg	esac
6129549e21daSmrg      fi
6130549e21daSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131549e21daSmrg	# Collect and forward deplibs of preopened libtool libs
6132549e21daSmrg	for lib in $dlprefiles; do
6133549e21daSmrg	  # Ignore non-libtool-libs
6134549e21daSmrg	  dependency_libs=
61351bedbe3fSmrg	  func_resolve_sysroot "$lib"
6136549e21daSmrg	  case $lib in
61371bedbe3fSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138549e21daSmrg	  esac
6139549e21daSmrg
6140549e21daSmrg	  # Collect preopened libtool deplibs, except any this library
6141549e21daSmrg	  # has declared as weak libs
6142549e21daSmrg	  for deplib in $dependency_libs; do
6143549e21daSmrg	    func_basename "$deplib"
6144549e21daSmrg            deplib_base=$func_basename_result
6145549e21daSmrg	    case " $weak_libs " in
6146549e21daSmrg	    *" $deplib_base "*) ;;
61471bedbe3fSmrg	    *) func_append deplibs " $deplib" ;;
6148549e21daSmrg	    esac
6149549e21daSmrg	  done
6150549e21daSmrg	done
6151549e21daSmrg	libs="$dlprefiles"
6152549e21daSmrg      fi
6153549e21daSmrg      if test "$pass" = dlopen; then
6154549e21daSmrg	# Collect dlpreopened libraries
6155549e21daSmrg	save_deplibs="$deplibs"
6156549e21daSmrg	deplibs=
6157549e21daSmrg      fi
6158549e21daSmrg
6159549e21daSmrg      for deplib in $libs; do
6160549e21daSmrg	lib=
6161549e21daSmrg	found=no
6162549e21daSmrg	case $deplib in
61631bedbe3fSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
61641bedbe3fSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165549e21daSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6166549e21daSmrg	    compile_deplibs="$deplib $compile_deplibs"
6167549e21daSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168549e21daSmrg	  else
61691bedbe3fSmrg	    func_append compiler_flags " $deplib"
6170549e21daSmrg	    if test "$linkmode" = lib ; then
6171549e21daSmrg		case "$new_inherited_linker_flags " in
6172549e21daSmrg		    *" $deplib "*) ;;
61731bedbe3fSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174549e21daSmrg		esac
6175549e21daSmrg	    fi
6176549e21daSmrg	  fi
6177549e21daSmrg	  continue
6178549e21daSmrg	  ;;
6179549e21daSmrg	-l*)
6180549e21daSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181549e21daSmrg	    func_warning "\`-l' is ignored for archives/objects"
6182549e21daSmrg	    continue
6183549e21daSmrg	  fi
6184549e21daSmrg	  func_stripname '-l' '' "$deplib"
6185549e21daSmrg	  name=$func_stripname_result
6186549e21daSmrg	  if test "$linkmode" = lib; then
6187549e21daSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188549e21daSmrg	  else
6189549e21daSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190549e21daSmrg	  fi
6191549e21daSmrg	  for searchdir in $searchdirs; do
6192549e21daSmrg	    for search_ext in .la $std_shrext .so .a; do
6193549e21daSmrg	      # Search the libtool library
6194549e21daSmrg	      lib="$searchdir/lib${name}${search_ext}"
6195549e21daSmrg	      if test -f "$lib"; then
6196549e21daSmrg		if test "$search_ext" = ".la"; then
6197549e21daSmrg		  found=yes
6198549e21daSmrg		else
6199549e21daSmrg		  found=no
6200549e21daSmrg		fi
6201549e21daSmrg		break 2
6202549e21daSmrg	      fi
6203549e21daSmrg	    done
6204549e21daSmrg	  done
6205549e21daSmrg	  if test "$found" != yes; then
6206549e21daSmrg	    # deplib doesn't seem to be a libtool library
6207549e21daSmrg	    if test "$linkmode,$pass" = "prog,link"; then
6208549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
6209549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6210549e21daSmrg	    else
6211549e21daSmrg	      deplibs="$deplib $deplibs"
6212549e21daSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213549e21daSmrg	    fi
6214549e21daSmrg	    continue
6215549e21daSmrg	  else # deplib is a libtool library
6216549e21daSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217549e21daSmrg	    # We need to do some special things here, and not later.
6218549e21daSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219549e21daSmrg	      case " $predeps $postdeps " in
6220549e21daSmrg	      *" $deplib "*)
6221549e21daSmrg		if func_lalib_p "$lib"; then
6222549e21daSmrg		  library_names=
6223549e21daSmrg		  old_library=
6224549e21daSmrg		  func_source "$lib"
6225549e21daSmrg		  for l in $old_library $library_names; do
6226549e21daSmrg		    ll="$l"
6227549e21daSmrg		  done
6228549e21daSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6229549e21daSmrg		    found=no
6230549e21daSmrg		    func_dirname "$lib" "" "."
6231549e21daSmrg		    ladir="$func_dirname_result"
6232549e21daSmrg		    lib=$ladir/$old_library
6233549e21daSmrg		    if test "$linkmode,$pass" = "prog,link"; then
6234549e21daSmrg		      compile_deplibs="$deplib $compile_deplibs"
6235549e21daSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236549e21daSmrg		    else
6237549e21daSmrg		      deplibs="$deplib $deplibs"
6238549e21daSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239549e21daSmrg		    fi
6240549e21daSmrg		    continue
6241549e21daSmrg		  fi
6242549e21daSmrg		fi
6243549e21daSmrg		;;
6244549e21daSmrg	      *) ;;
6245549e21daSmrg	      esac
6246549e21daSmrg	    fi
6247549e21daSmrg	  fi
6248549e21daSmrg	  ;; # -l
6249549e21daSmrg	*.ltframework)
6250549e21daSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6251549e21daSmrg	    compile_deplibs="$deplib $compile_deplibs"
6252549e21daSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253549e21daSmrg	  else
6254549e21daSmrg	    deplibs="$deplib $deplibs"
6255549e21daSmrg	    if test "$linkmode" = lib ; then
6256549e21daSmrg		case "$new_inherited_linker_flags " in
6257549e21daSmrg		    *" $deplib "*) ;;
62581bedbe3fSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259549e21daSmrg		esac
6260549e21daSmrg	    fi
6261549e21daSmrg	  fi
6262549e21daSmrg	  continue
6263549e21daSmrg	  ;;
6264549e21daSmrg	-L*)
6265549e21daSmrg	  case $linkmode in
6266549e21daSmrg	  lib)
6267549e21daSmrg	    deplibs="$deplib $deplibs"
6268549e21daSmrg	    test "$pass" = conv && continue
6269549e21daSmrg	    newdependency_libs="$deplib $newdependency_libs"
6270549e21daSmrg	    func_stripname '-L' '' "$deplib"
62711bedbe3fSmrg	    func_resolve_sysroot "$func_stripname_result"
62721bedbe3fSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273549e21daSmrg	    ;;
6274549e21daSmrg	  prog)
6275549e21daSmrg	    if test "$pass" = conv; then
6276549e21daSmrg	      deplibs="$deplib $deplibs"
6277549e21daSmrg	      continue
6278549e21daSmrg	    fi
6279549e21daSmrg	    if test "$pass" = scan; then
6280549e21daSmrg	      deplibs="$deplib $deplibs"
6281549e21daSmrg	    else
6282549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
6283549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284549e21daSmrg	    fi
6285549e21daSmrg	    func_stripname '-L' '' "$deplib"
62861bedbe3fSmrg	    func_resolve_sysroot "$func_stripname_result"
62871bedbe3fSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288549e21daSmrg	    ;;
6289549e21daSmrg	  *)
6290549e21daSmrg	    func_warning "\`-L' is ignored for archives/objects"
6291549e21daSmrg	    ;;
6292549e21daSmrg	  esac # linkmode
6293549e21daSmrg	  continue
6294549e21daSmrg	  ;; # -L
6295549e21daSmrg	-R*)
6296549e21daSmrg	  if test "$pass" = link; then
6297549e21daSmrg	    func_stripname '-R' '' "$deplib"
62981bedbe3fSmrg	    func_resolve_sysroot "$func_stripname_result"
62991bedbe3fSmrg	    dir=$func_resolve_sysroot_result
6300549e21daSmrg	    # Make sure the xrpath contains only unique directories.
6301549e21daSmrg	    case "$xrpath " in
6302549e21daSmrg	    *" $dir "*) ;;
63031bedbe3fSmrg	    *) func_append xrpath " $dir" ;;
6304549e21daSmrg	    esac
6305549e21daSmrg	  fi
6306549e21daSmrg	  deplibs="$deplib $deplibs"
6307549e21daSmrg	  continue
6308549e21daSmrg	  ;;
63091bedbe3fSmrg	*.la)
63101bedbe3fSmrg	  func_resolve_sysroot "$deplib"
63111bedbe3fSmrg	  lib=$func_resolve_sysroot_result
63121bedbe3fSmrg	  ;;
6313549e21daSmrg	*.$libext)
6314549e21daSmrg	  if test "$pass" = conv; then
6315549e21daSmrg	    deplibs="$deplib $deplibs"
6316549e21daSmrg	    continue
6317549e21daSmrg	  fi
6318549e21daSmrg	  case $linkmode in
6319549e21daSmrg	  lib)
6320549e21daSmrg	    # Linking convenience modules into shared libraries is allowed,
6321549e21daSmrg	    # but linking other static libraries is non-portable.
6322549e21daSmrg	    case " $dlpreconveniencelibs " in
6323549e21daSmrg	    *" $deplib "*) ;;
6324549e21daSmrg	    *)
6325549e21daSmrg	      valid_a_lib=no
6326549e21daSmrg	      case $deplibs_check_method in
6327549e21daSmrg		match_pattern*)
6328549e21daSmrg		  set dummy $deplibs_check_method; shift
6329549e21daSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6330549e21daSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331549e21daSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332549e21daSmrg		    valid_a_lib=yes
6333549e21daSmrg		  fi
6334549e21daSmrg		;;
6335549e21daSmrg		pass_all)
6336549e21daSmrg		  valid_a_lib=yes
6337549e21daSmrg		;;
6338549e21daSmrg	      esac
6339549e21daSmrg	      if test "$valid_a_lib" != yes; then
6340549e21daSmrg		echo
6341549e21daSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6342549e21daSmrg		echo "*** I have the capability to make that library automatically link in when"
6343549e21daSmrg		echo "*** you link to this library.  But I can only do this if you have a"
6344549e21daSmrg		echo "*** shared version of the library, which you do not appear to have"
6345549e21daSmrg		echo "*** because the file extensions .$libext of this argument makes me believe"
6346549e21daSmrg		echo "*** that it is just a static archive that I should not use here."
6347549e21daSmrg	      else
6348549e21daSmrg		echo
6349549e21daSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
6350549e21daSmrg		$ECHO "*** static library $deplib is not portable!"
6351549e21daSmrg		deplibs="$deplib $deplibs"
6352549e21daSmrg	      fi
6353549e21daSmrg	      ;;
6354549e21daSmrg	    esac
6355549e21daSmrg	    continue
6356549e21daSmrg	    ;;
6357549e21daSmrg	  prog)
6358549e21daSmrg	    if test "$pass" != link; then
6359549e21daSmrg	      deplibs="$deplib $deplibs"
6360549e21daSmrg	    else
6361549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
6362549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363549e21daSmrg	    fi
6364549e21daSmrg	    continue
6365549e21daSmrg	    ;;
6366549e21daSmrg	  esac # linkmode
6367549e21daSmrg	  ;; # *.$libext
6368549e21daSmrg	*.lo | *.$objext)
6369549e21daSmrg	  if test "$pass" = conv; then
6370549e21daSmrg	    deplibs="$deplib $deplibs"
6371549e21daSmrg	  elif test "$linkmode" = prog; then
6372549e21daSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373549e21daSmrg	      # If there is no dlopen support or we're linking statically,
6374549e21daSmrg	      # we need to preload.
63751bedbe3fSmrg	      func_append newdlprefiles " $deplib"
6376549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
6377549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378549e21daSmrg	    else
63791bedbe3fSmrg	      func_append newdlfiles " $deplib"
6380549e21daSmrg	    fi
6381549e21daSmrg	  fi
6382549e21daSmrg	  continue
6383549e21daSmrg	  ;;
6384549e21daSmrg	%DEPLIBS%)
6385549e21daSmrg	  alldeplibs=yes
6386549e21daSmrg	  continue
6387549e21daSmrg	  ;;
6388549e21daSmrg	esac # case $deplib
6389549e21daSmrg
6390549e21daSmrg	if test "$found" = yes || test -f "$lib"; then :
6391549e21daSmrg	else
6392549e21daSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393549e21daSmrg	fi
6394549e21daSmrg
6395549e21daSmrg	# Check to see that this really is a libtool archive.
6396549e21daSmrg	func_lalib_unsafe_p "$lib" \
6397549e21daSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398549e21daSmrg
6399549e21daSmrg	func_dirname "$lib" "" "."
6400549e21daSmrg	ladir="$func_dirname_result"
6401549e21daSmrg
6402549e21daSmrg	dlname=
6403549e21daSmrg	dlopen=
6404549e21daSmrg	dlpreopen=
6405549e21daSmrg	libdir=
6406549e21daSmrg	library_names=
6407549e21daSmrg	old_library=
6408549e21daSmrg	inherited_linker_flags=
6409549e21daSmrg	# If the library was installed with an old release of libtool,
6410549e21daSmrg	# it will not redefine variables installed, or shouldnotlink
6411549e21daSmrg	installed=yes
6412549e21daSmrg	shouldnotlink=no
6413549e21daSmrg	avoidtemprpath=
6414549e21daSmrg
6415549e21daSmrg
6416549e21daSmrg	# Read the .la file
6417549e21daSmrg	func_source "$lib"
6418549e21daSmrg
6419549e21daSmrg	# Convert "-framework foo" to "foo.ltframework"
6420549e21daSmrg	if test -n "$inherited_linker_flags"; then
6421549e21daSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422549e21daSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423549e21daSmrg	    case " $new_inherited_linker_flags " in
6424549e21daSmrg	      *" $tmp_inherited_linker_flag "*) ;;
64251bedbe3fSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426549e21daSmrg	    esac
6427549e21daSmrg	  done
6428549e21daSmrg	fi
6429549e21daSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430549e21daSmrg	if test "$linkmode,$pass" = "lib,link" ||
6431549e21daSmrg	   test "$linkmode,$pass" = "prog,scan" ||
6432549e21daSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
64331bedbe3fSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
64341bedbe3fSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435549e21daSmrg	fi
6436549e21daSmrg
6437549e21daSmrg	if test "$pass" = conv; then
6438549e21daSmrg	  # Only check for convenience libraries
6439549e21daSmrg	  deplibs="$lib $deplibs"
6440549e21daSmrg	  if test -z "$libdir"; then
6441549e21daSmrg	    if test -z "$old_library"; then
6442549e21daSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443549e21daSmrg	    fi
6444549e21daSmrg	    # It is a libtool convenience library, so add in its objects.
64451bedbe3fSmrg	    func_append convenience " $ladir/$objdir/$old_library"
64461bedbe3fSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6447549e21daSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448549e21daSmrg	    func_fatal_error "\`$lib' is not a convenience library"
6449549e21daSmrg	  fi
6450549e21daSmrg	  tmp_libs=
6451549e21daSmrg	  for deplib in $dependency_libs; do
6452549e21daSmrg	    deplibs="$deplib $deplibs"
64531bedbe3fSmrg	    if $opt_preserve_dup_deps ; then
6454549e21daSmrg	      case "$tmp_libs " in
64551bedbe3fSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456549e21daSmrg	      esac
6457549e21daSmrg	    fi
64581bedbe3fSmrg	    func_append tmp_libs " $deplib"
6459549e21daSmrg	  done
6460549e21daSmrg	  continue
6461549e21daSmrg	fi # $pass = conv
6462549e21daSmrg
6463549e21daSmrg
6464549e21daSmrg	# Get the name of the library we link against.
6465549e21daSmrg	linklib=
64661bedbe3fSmrg	if test -n "$old_library" &&
64671bedbe3fSmrg	   { test "$prefer_static_libs" = yes ||
64681bedbe3fSmrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
64691bedbe3fSmrg	  linklib=$old_library
64701bedbe3fSmrg	else
64711bedbe3fSmrg	  for l in $old_library $library_names; do
64721bedbe3fSmrg	    linklib="$l"
64731bedbe3fSmrg	  done
64741bedbe3fSmrg	fi
6475549e21daSmrg	if test -z "$linklib"; then
6476549e21daSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477549e21daSmrg	fi
6478549e21daSmrg
6479549e21daSmrg	# This library was specified with -dlopen.
6480549e21daSmrg	if test "$pass" = dlopen; then
6481549e21daSmrg	  if test -z "$libdir"; then
6482549e21daSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483549e21daSmrg	  fi
6484549e21daSmrg	  if test -z "$dlname" ||
6485549e21daSmrg	     test "$dlopen_support" != yes ||
6486549e21daSmrg	     test "$build_libtool_libs" = no; then
6487549e21daSmrg	    # If there is no dlname, no dlopen support or we're linking
6488549e21daSmrg	    # statically, we need to preload.  We also need to preload any
6489549e21daSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490549e21daSmrg	    # bomb out in the load deplibs phase.
64911bedbe3fSmrg	    func_append dlprefiles " $lib $dependency_libs"
6492549e21daSmrg	  else
64931bedbe3fSmrg	    func_append newdlfiles " $lib"
6494549e21daSmrg	  fi
6495549e21daSmrg	  continue
6496549e21daSmrg	fi # $pass = dlopen
6497549e21daSmrg
6498549e21daSmrg	# We need an absolute path.
6499549e21daSmrg	case $ladir in
6500549e21daSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501549e21daSmrg	*)
6502549e21daSmrg	  abs_ladir=`cd "$ladir" && pwd`
6503549e21daSmrg	  if test -z "$abs_ladir"; then
6504549e21daSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505549e21daSmrg	    func_warning "passing it literally to the linker, although it might fail"
6506549e21daSmrg	    abs_ladir="$ladir"
6507549e21daSmrg	  fi
6508549e21daSmrg	  ;;
6509549e21daSmrg	esac
6510549e21daSmrg	func_basename "$lib"
6511549e21daSmrg	laname="$func_basename_result"
6512549e21daSmrg
6513549e21daSmrg	# Find the relevant object directory and library name.
6514549e21daSmrg	if test "X$installed" = Xyes; then
65151bedbe3fSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516549e21daSmrg	    func_warning "library \`$lib' was moved."
6517549e21daSmrg	    dir="$ladir"
6518549e21daSmrg	    absdir="$abs_ladir"
6519549e21daSmrg	    libdir="$abs_ladir"
6520549e21daSmrg	  else
65211bedbe3fSmrg	    dir="$lt_sysroot$libdir"
65221bedbe3fSmrg	    absdir="$lt_sysroot$libdir"
6523549e21daSmrg	  fi
6524549e21daSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525549e21daSmrg	else
6526549e21daSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527549e21daSmrg	    dir="$ladir"
6528549e21daSmrg	    absdir="$abs_ladir"
6529549e21daSmrg	    # Remove this search path later
65301bedbe3fSmrg	    func_append notinst_path " $abs_ladir"
6531549e21daSmrg	  else
6532549e21daSmrg	    dir="$ladir/$objdir"
6533549e21daSmrg	    absdir="$abs_ladir/$objdir"
6534549e21daSmrg	    # Remove this search path later
65351bedbe3fSmrg	    func_append notinst_path " $abs_ladir"
6536549e21daSmrg	  fi
6537549e21daSmrg	fi # $installed = yes
6538549e21daSmrg	func_stripname 'lib' '.la' "$laname"
6539549e21daSmrg	name=$func_stripname_result
6540549e21daSmrg
6541549e21daSmrg	# This library was specified with -dlpreopen.
6542549e21daSmrg	if test "$pass" = dlpreopen; then
6543549e21daSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6544549e21daSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545549e21daSmrg	  fi
65461bedbe3fSmrg	  case "$host" in
65471bedbe3fSmrg	    # special handling for platforms with PE-DLLs.
65481bedbe3fSmrg	    *cygwin* | *mingw* | *cegcc* )
65491bedbe3fSmrg	      # Linker will automatically link against shared library if both
65501bedbe3fSmrg	      # static and shared are present.  Therefore, ensure we extract
65511bedbe3fSmrg	      # symbols from the import library if a shared library is present
65521bedbe3fSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
65531bedbe3fSmrg	      # this by putting the import library name into $newdlprefiles.
65541bedbe3fSmrg	      # We recover the dlopen module name by 'saving' the la file
65551bedbe3fSmrg	      # name in a special purpose variable, and (later) extracting the
65561bedbe3fSmrg	      # dlname from the la file.
65571bedbe3fSmrg	      if test -n "$dlname"; then
65581bedbe3fSmrg	        func_tr_sh "$dir/$linklib"
65591bedbe3fSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
65601bedbe3fSmrg	        func_append newdlprefiles " $dir/$linklib"
65611bedbe3fSmrg	      else
65621bedbe3fSmrg	        func_append newdlprefiles " $dir/$old_library"
65631bedbe3fSmrg	        # Keep a list of preopened convenience libraries to check
65641bedbe3fSmrg	        # that they are being used correctly in the link pass.
65651bedbe3fSmrg	        test -z "$libdir" && \
65661bedbe3fSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65671bedbe3fSmrg	      fi
65681bedbe3fSmrg	    ;;
65691bedbe3fSmrg	    * )
65701bedbe3fSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
65711bedbe3fSmrg	      # are required to link).
65721bedbe3fSmrg	      if test -n "$old_library"; then
65731bedbe3fSmrg	        func_append newdlprefiles " $dir/$old_library"
65741bedbe3fSmrg	        # Keep a list of preopened convenience libraries to check
65751bedbe3fSmrg	        # that they are being used correctly in the link pass.
65761bedbe3fSmrg	        test -z "$libdir" && \
65771bedbe3fSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65781bedbe3fSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
65791bedbe3fSmrg	      elif test -n "$dlname"; then
65801bedbe3fSmrg	        func_append newdlprefiles " $dir/$dlname"
65811bedbe3fSmrg	      else
65821bedbe3fSmrg	        func_append newdlprefiles " $dir/$linklib"
65831bedbe3fSmrg	      fi
65841bedbe3fSmrg	    ;;
65851bedbe3fSmrg	  esac
6586549e21daSmrg	fi # $pass = dlpreopen
6587549e21daSmrg
6588549e21daSmrg	if test -z "$libdir"; then
6589549e21daSmrg	  # Link the convenience library
6590549e21daSmrg	  if test "$linkmode" = lib; then
6591549e21daSmrg	    deplibs="$dir/$old_library $deplibs"
6592549e21daSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593549e21daSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594549e21daSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595549e21daSmrg	  else
6596549e21daSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597549e21daSmrg	  fi
6598549e21daSmrg	  continue
6599549e21daSmrg	fi
6600549e21daSmrg
6601549e21daSmrg
6602549e21daSmrg	if test "$linkmode" = prog && test "$pass" != link; then
66031bedbe3fSmrg	  func_append newlib_search_path " $ladir"
6604549e21daSmrg	  deplibs="$lib $deplibs"
6605549e21daSmrg
6606549e21daSmrg	  linkalldeplibs=no
6607549e21daSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608549e21daSmrg	     test "$build_libtool_libs" = no; then
6609549e21daSmrg	    linkalldeplibs=yes
6610549e21daSmrg	  fi
6611549e21daSmrg
6612549e21daSmrg	  tmp_libs=
6613549e21daSmrg	  for deplib in $dependency_libs; do
6614549e21daSmrg	    case $deplib in
6615549e21daSmrg	    -L*) func_stripname '-L' '' "$deplib"
66161bedbe3fSmrg	         func_resolve_sysroot "$func_stripname_result"
66171bedbe3fSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618549e21daSmrg		 ;;
6619549e21daSmrg	    esac
6620549e21daSmrg	    # Need to link against all dependency_libs?
6621549e21daSmrg	    if test "$linkalldeplibs" = yes; then
6622549e21daSmrg	      deplibs="$deplib $deplibs"
6623549e21daSmrg	    else
6624549e21daSmrg	      # Need to hardcode shared library paths
6625549e21daSmrg	      # or/and link against static libraries
6626549e21daSmrg	      newdependency_libs="$deplib $newdependency_libs"
6627549e21daSmrg	    fi
66281bedbe3fSmrg	    if $opt_preserve_dup_deps ; then
6629549e21daSmrg	      case "$tmp_libs " in
66301bedbe3fSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631549e21daSmrg	      esac
6632549e21daSmrg	    fi
66331bedbe3fSmrg	    func_append tmp_libs " $deplib"
6634549e21daSmrg	  done # for deplib
6635549e21daSmrg	  continue
6636549e21daSmrg	fi # $linkmode = prog...
6637549e21daSmrg
6638549e21daSmrg	if test "$linkmode,$pass" = "prog,link"; then
6639549e21daSmrg	  if test -n "$library_names" &&
6640549e21daSmrg	     { { test "$prefer_static_libs" = no ||
6641549e21daSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642549e21daSmrg	       test -z "$old_library"; }; then
6643549e21daSmrg	    # We need to hardcode the library path
6644549e21daSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645549e21daSmrg	      # Make sure the rpath contains only unique directories.
6646549e21daSmrg	      case "$temp_rpath:" in
6647549e21daSmrg	      *"$absdir:"*) ;;
66481bedbe3fSmrg	      *) func_append temp_rpath "$absdir:" ;;
6649549e21daSmrg	      esac
6650549e21daSmrg	    fi
6651549e21daSmrg
6652549e21daSmrg	    # Hardcode the library path.
6653549e21daSmrg	    # Skip directories that are in the system default run-time
6654549e21daSmrg	    # search path.
6655549e21daSmrg	    case " $sys_lib_dlsearch_path " in
6656549e21daSmrg	    *" $absdir "*) ;;
6657549e21daSmrg	    *)
6658549e21daSmrg	      case "$compile_rpath " in
6659549e21daSmrg	      *" $absdir "*) ;;
66601bedbe3fSmrg	      *) func_append compile_rpath " $absdir" ;;
6661549e21daSmrg	      esac
6662549e21daSmrg	      ;;
6663549e21daSmrg	    esac
6664549e21daSmrg	    case " $sys_lib_dlsearch_path " in
6665549e21daSmrg	    *" $libdir "*) ;;
6666549e21daSmrg	    *)
6667549e21daSmrg	      case "$finalize_rpath " in
6668549e21daSmrg	      *" $libdir "*) ;;
66691bedbe3fSmrg	      *) func_append finalize_rpath " $libdir" ;;
6670549e21daSmrg	      esac
6671549e21daSmrg	      ;;
6672549e21daSmrg	    esac
6673549e21daSmrg	  fi # $linkmode,$pass = prog,link...
6674549e21daSmrg
6675549e21daSmrg	  if test "$alldeplibs" = yes &&
6676549e21daSmrg	     { test "$deplibs_check_method" = pass_all ||
6677549e21daSmrg	       { test "$build_libtool_libs" = yes &&
6678549e21daSmrg		 test -n "$library_names"; }; }; then
6679549e21daSmrg	    # We only need to search for static libraries
6680549e21daSmrg	    continue
6681549e21daSmrg	  fi
6682549e21daSmrg	fi
6683549e21daSmrg
6684549e21daSmrg	link_static=no # Whether the deplib will be linked statically
6685549e21daSmrg	use_static_libs=$prefer_static_libs
6686549e21daSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687549e21daSmrg	  use_static_libs=no
6688549e21daSmrg	fi
6689549e21daSmrg	if test -n "$library_names" &&
6690549e21daSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691549e21daSmrg	  case $host in
6692549e21daSmrg	  *cygwin* | *mingw* | *cegcc*)
6693549e21daSmrg	      # No point in relinking DLLs because paths are not encoded
66941bedbe3fSmrg	      func_append notinst_deplibs " $lib"
6695549e21daSmrg	      need_relink=no
6696549e21daSmrg	    ;;
6697549e21daSmrg	  *)
6698549e21daSmrg	    if test "$installed" = no; then
66991bedbe3fSmrg	      func_append notinst_deplibs " $lib"
6700549e21daSmrg	      need_relink=yes
6701549e21daSmrg	    fi
6702549e21daSmrg	    ;;
6703549e21daSmrg	  esac
6704549e21daSmrg	  # This is a shared library
6705549e21daSmrg
6706549e21daSmrg	  # Warn about portability, can't link against -module's on some
6707549e21daSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6708549e21daSmrg	  dlopenmodule=""
6709549e21daSmrg	  for dlpremoduletest in $dlprefiles; do
6710549e21daSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
6711549e21daSmrg	      dlopenmodule="$dlpremoduletest"
6712549e21daSmrg	      break
6713549e21daSmrg	    fi
6714549e21daSmrg	  done
6715549e21daSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6716549e21daSmrg	    echo
6717549e21daSmrg	    if test "$linkmode" = prog; then
6718549e21daSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719549e21daSmrg	    else
6720549e21daSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721549e21daSmrg	    fi
6722549e21daSmrg	    $ECHO "*** $linklib is not portable!"
6723549e21daSmrg	  fi
6724549e21daSmrg	  if test "$linkmode" = lib &&
6725549e21daSmrg	     test "$hardcode_into_libs" = yes; then
6726549e21daSmrg	    # Hardcode the library path.
6727549e21daSmrg	    # Skip directories that are in the system default run-time
6728549e21daSmrg	    # search path.
6729549e21daSmrg	    case " $sys_lib_dlsearch_path " in
6730549e21daSmrg	    *" $absdir "*) ;;
6731549e21daSmrg	    *)
6732549e21daSmrg	      case "$compile_rpath " in
6733549e21daSmrg	      *" $absdir "*) ;;
67341bedbe3fSmrg	      *) func_append compile_rpath " $absdir" ;;
6735549e21daSmrg	      esac
6736549e21daSmrg	      ;;
6737549e21daSmrg	    esac
6738549e21daSmrg	    case " $sys_lib_dlsearch_path " in
6739549e21daSmrg	    *" $libdir "*) ;;
6740549e21daSmrg	    *)
6741549e21daSmrg	      case "$finalize_rpath " in
6742549e21daSmrg	      *" $libdir "*) ;;
67431bedbe3fSmrg	      *) func_append finalize_rpath " $libdir" ;;
6744549e21daSmrg	      esac
6745549e21daSmrg	      ;;
6746549e21daSmrg	    esac
6747549e21daSmrg	  fi
6748549e21daSmrg
6749549e21daSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750549e21daSmrg	    # figure out the soname
6751549e21daSmrg	    set dummy $library_names
6752549e21daSmrg	    shift
6753549e21daSmrg	    realname="$1"
6754549e21daSmrg	    shift
6755549e21daSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756549e21daSmrg	    # use dlname if we got it. it's perfectly good, no?
6757549e21daSmrg	    if test -n "$dlname"; then
6758549e21daSmrg	      soname="$dlname"
6759549e21daSmrg	    elif test -n "$soname_spec"; then
6760549e21daSmrg	      # bleh windows
6761549e21daSmrg	      case $host in
6762549e21daSmrg	      *cygwin* | mingw* | *cegcc*)
6763549e21daSmrg	        func_arith $current - $age
6764549e21daSmrg		major=$func_arith_result
6765549e21daSmrg		versuffix="-$major"
6766549e21daSmrg		;;
6767549e21daSmrg	      esac
6768549e21daSmrg	      eval soname=\"$soname_spec\"
6769549e21daSmrg	    else
6770549e21daSmrg	      soname="$realname"
6771549e21daSmrg	    fi
6772549e21daSmrg
6773549e21daSmrg	    # Make a new name for the extract_expsyms_cmds to use
6774549e21daSmrg	    soroot="$soname"
6775549e21daSmrg	    func_basename "$soroot"
6776549e21daSmrg	    soname="$func_basename_result"
6777549e21daSmrg	    func_stripname 'lib' '.dll' "$soname"
6778549e21daSmrg	    newlib=libimp-$func_stripname_result.a
6779549e21daSmrg
6780549e21daSmrg	    # If the library has no export list, then create one now
6781549e21daSmrg	    if test -f "$output_objdir/$soname-def"; then :
6782549e21daSmrg	    else
6783549e21daSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784549e21daSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785549e21daSmrg	    fi
6786549e21daSmrg
6787549e21daSmrg	    # Create $newlib
6788549e21daSmrg	    if test -f "$output_objdir/$newlib"; then :; else
6789549e21daSmrg	      func_verbose "generating import library for \`$soname'"
6790549e21daSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791549e21daSmrg	    fi
6792549e21daSmrg	    # make sure the library variables are pointing to the new library
6793549e21daSmrg	    dir=$output_objdir
6794549e21daSmrg	    linklib=$newlib
6795549e21daSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796549e21daSmrg
67971bedbe3fSmrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798549e21daSmrg	    add_shlibpath=
6799549e21daSmrg	    add_dir=
6800549e21daSmrg	    add=
6801549e21daSmrg	    lib_linked=yes
6802549e21daSmrg	    case $hardcode_action in
6803549e21daSmrg	    immediate | unsupported)
6804549e21daSmrg	      if test "$hardcode_direct" = no; then
6805549e21daSmrg		add="$dir/$linklib"
6806549e21daSmrg		case $host in
6807549e21daSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808549e21daSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809549e21daSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810549e21daSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811549e21daSmrg		  *-*-darwin* )
6812549e21daSmrg		    # if the lib is a (non-dlopened) module then we can not
6813549e21daSmrg		    # link against it, someone is ignoring the earlier warnings
6814549e21daSmrg		    if /usr/bin/file -L $add 2> /dev/null |
6815549e21daSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816549e21daSmrg		      if test "X$dlopenmodule" != "X$lib"; then
6817549e21daSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818549e21daSmrg			if test -z "$old_library" ; then
6819549e21daSmrg			  echo
6820549e21daSmrg			  echo "*** And there doesn't seem to be a static archive available"
6821549e21daSmrg			  echo "*** The link will probably fail, sorry"
6822549e21daSmrg			else
6823549e21daSmrg			  add="$dir/$old_library"
6824549e21daSmrg			fi
6825549e21daSmrg		      elif test -n "$old_library"; then
6826549e21daSmrg			add="$dir/$old_library"
6827549e21daSmrg		      fi
6828549e21daSmrg		    fi
6829549e21daSmrg		esac
6830549e21daSmrg	      elif test "$hardcode_minus_L" = no; then
6831549e21daSmrg		case $host in
6832549e21daSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833549e21daSmrg		esac
6834549e21daSmrg		add_dir="-L$dir"
6835549e21daSmrg		add="-l$name"
6836549e21daSmrg	      elif test "$hardcode_shlibpath_var" = no; then
6837549e21daSmrg		add_shlibpath="$dir"
6838549e21daSmrg		add="-l$name"
6839549e21daSmrg	      else
6840549e21daSmrg		lib_linked=no
6841549e21daSmrg	      fi
6842549e21daSmrg	      ;;
6843549e21daSmrg	    relink)
6844549e21daSmrg	      if test "$hardcode_direct" = yes &&
6845549e21daSmrg	         test "$hardcode_direct_absolute" = no; then
6846549e21daSmrg		add="$dir/$linklib"
6847549e21daSmrg	      elif test "$hardcode_minus_L" = yes; then
68481bedbe3fSmrg		add_dir="-L$absdir"
6849549e21daSmrg		# Try looking first in the location we're being installed to.
6850549e21daSmrg		if test -n "$inst_prefix_dir"; then
6851549e21daSmrg		  case $libdir in
6852549e21daSmrg		    [\\/]*)
68531bedbe3fSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854549e21daSmrg		      ;;
6855549e21daSmrg		  esac
6856549e21daSmrg		fi
6857549e21daSmrg		add="-l$name"
6858549e21daSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
6859549e21daSmrg		add_shlibpath="$dir"
6860549e21daSmrg		add="-l$name"
6861549e21daSmrg	      else
6862549e21daSmrg		lib_linked=no
6863549e21daSmrg	      fi
6864549e21daSmrg	      ;;
6865549e21daSmrg	    *) lib_linked=no ;;
6866549e21daSmrg	    esac
6867549e21daSmrg
6868549e21daSmrg	    if test "$lib_linked" != yes; then
6869549e21daSmrg	      func_fatal_configuration "unsupported hardcode properties"
6870549e21daSmrg	    fi
6871549e21daSmrg
6872549e21daSmrg	    if test -n "$add_shlibpath"; then
6873549e21daSmrg	      case :$compile_shlibpath: in
6874549e21daSmrg	      *":$add_shlibpath:"*) ;;
68751bedbe3fSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876549e21daSmrg	      esac
6877549e21daSmrg	    fi
6878549e21daSmrg	    if test "$linkmode" = prog; then
6879549e21daSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880549e21daSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881549e21daSmrg	    else
6882549e21daSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883549e21daSmrg	      test -n "$add" && deplibs="$add $deplibs"
6884549e21daSmrg	      if test "$hardcode_direct" != yes &&
6885549e21daSmrg		 test "$hardcode_minus_L" != yes &&
6886549e21daSmrg		 test "$hardcode_shlibpath_var" = yes; then
6887549e21daSmrg		case :$finalize_shlibpath: in
6888549e21daSmrg		*":$libdir:"*) ;;
68891bedbe3fSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890549e21daSmrg		esac
6891549e21daSmrg	      fi
6892549e21daSmrg	    fi
6893549e21daSmrg	  fi
6894549e21daSmrg
68951bedbe3fSmrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896549e21daSmrg	    add_shlibpath=
6897549e21daSmrg	    add_dir=
6898549e21daSmrg	    add=
6899549e21daSmrg	    # Finalize command for both is simple: just hardcode it.
6900549e21daSmrg	    if test "$hardcode_direct" = yes &&
6901549e21daSmrg	       test "$hardcode_direct_absolute" = no; then
6902549e21daSmrg	      add="$libdir/$linklib"
6903549e21daSmrg	    elif test "$hardcode_minus_L" = yes; then
6904549e21daSmrg	      add_dir="-L$libdir"
6905549e21daSmrg	      add="-l$name"
6906549e21daSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907549e21daSmrg	      case :$finalize_shlibpath: in
6908549e21daSmrg	      *":$libdir:"*) ;;
69091bedbe3fSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910549e21daSmrg	      esac
6911549e21daSmrg	      add="-l$name"
6912549e21daSmrg	    elif test "$hardcode_automatic" = yes; then
6913549e21daSmrg	      if test -n "$inst_prefix_dir" &&
6914549e21daSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915549e21daSmrg		add="$inst_prefix_dir$libdir/$linklib"
6916549e21daSmrg	      else
6917549e21daSmrg		add="$libdir/$linklib"
6918549e21daSmrg	      fi
6919549e21daSmrg	    else
6920549e21daSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
6921549e21daSmrg	      add_dir="-L$libdir"
6922549e21daSmrg	      # Try looking first in the location we're being installed to.
6923549e21daSmrg	      if test -n "$inst_prefix_dir"; then
6924549e21daSmrg		case $libdir in
6925549e21daSmrg		  [\\/]*)
69261bedbe3fSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927549e21daSmrg		    ;;
6928549e21daSmrg		esac
6929549e21daSmrg	      fi
6930549e21daSmrg	      add="-l$name"
6931549e21daSmrg	    fi
6932549e21daSmrg
6933549e21daSmrg	    if test "$linkmode" = prog; then
6934549e21daSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935549e21daSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936549e21daSmrg	    else
6937549e21daSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938549e21daSmrg	      test -n "$add" && deplibs="$add $deplibs"
6939549e21daSmrg	    fi
6940549e21daSmrg	  fi
6941549e21daSmrg	elif test "$linkmode" = prog; then
6942549e21daSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943549e21daSmrg	  # is not unsupported.  This is valid on all known static and
6944549e21daSmrg	  # shared platforms.
6945549e21daSmrg	  if test "$hardcode_direct" != unsupported; then
6946549e21daSmrg	    test -n "$old_library" && linklib="$old_library"
6947549e21daSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948549e21daSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949549e21daSmrg	  else
6950549e21daSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951549e21daSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952549e21daSmrg	  fi
6953549e21daSmrg	elif test "$build_libtool_libs" = yes; then
6954549e21daSmrg	  # Not a shared library
6955549e21daSmrg	  if test "$deplibs_check_method" != pass_all; then
6956549e21daSmrg	    # We're trying link a shared library against a static one
6957549e21daSmrg	    # but the system doesn't support it.
6958549e21daSmrg
6959549e21daSmrg	    # Just print a warning and add the library to dependency_libs so
6960549e21daSmrg	    # that the program can be linked against the static library.
6961549e21daSmrg	    echo
6962549e21daSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6963549e21daSmrg	    echo "*** I have the capability to make that library automatically link in when"
6964549e21daSmrg	    echo "*** you link to this library.  But I can only do this if you have a"
6965549e21daSmrg	    echo "*** shared version of the library, which you do not appear to have."
6966549e21daSmrg	    if test "$module" = yes; then
6967549e21daSmrg	      echo "*** But as you try to build a module library, libtool will still create "
6968549e21daSmrg	      echo "*** a static module, that should work as long as the dlopening application"
6969549e21daSmrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970549e21daSmrg	      if test -z "$global_symbol_pipe"; then
6971549e21daSmrg		echo
6972549e21daSmrg		echo "*** However, this would only work if libtool was able to extract symbol"
6973549e21daSmrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6974549e21daSmrg		echo "*** not find such a program.  So, this module is probably useless."
6975549e21daSmrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976549e21daSmrg	      fi
6977549e21daSmrg	      if test "$build_old_libs" = no; then
6978549e21daSmrg		build_libtool_libs=module
6979549e21daSmrg		build_old_libs=yes
6980549e21daSmrg	      else
6981549e21daSmrg		build_libtool_libs=no
6982549e21daSmrg	      fi
6983549e21daSmrg	    fi
6984549e21daSmrg	  else
6985549e21daSmrg	    deplibs="$dir/$old_library $deplibs"
6986549e21daSmrg	    link_static=yes
6987549e21daSmrg	  fi
6988549e21daSmrg	fi # link shared/static library?
6989549e21daSmrg
6990549e21daSmrg	if test "$linkmode" = lib; then
6991549e21daSmrg	  if test -n "$dependency_libs" &&
6992549e21daSmrg	     { test "$hardcode_into_libs" != yes ||
6993549e21daSmrg	       test "$build_old_libs" = yes ||
6994549e21daSmrg	       test "$link_static" = yes; }; then
6995549e21daSmrg	    # Extract -R from dependency_libs
6996549e21daSmrg	    temp_deplibs=
6997549e21daSmrg	    for libdir in $dependency_libs; do
6998549e21daSmrg	      case $libdir in
6999549e21daSmrg	      -R*) func_stripname '-R' '' "$libdir"
7000549e21daSmrg	           temp_xrpath=$func_stripname_result
7001549e21daSmrg		   case " $xrpath " in
7002549e21daSmrg		   *" $temp_xrpath "*) ;;
70031bedbe3fSmrg		   *) func_append xrpath " $temp_xrpath";;
7004549e21daSmrg		   esac;;
70051bedbe3fSmrg	      *) func_append temp_deplibs " $libdir";;
7006549e21daSmrg	      esac
7007549e21daSmrg	    done
7008549e21daSmrg	    dependency_libs="$temp_deplibs"
7009549e21daSmrg	  fi
7010549e21daSmrg
70111bedbe3fSmrg	  func_append newlib_search_path " $absdir"
7012549e21daSmrg	  # Link against this library
7013549e21daSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014549e21daSmrg	  # ... and its dependency_libs
7015549e21daSmrg	  tmp_libs=
7016549e21daSmrg	  for deplib in $dependency_libs; do
7017549e21daSmrg	    newdependency_libs="$deplib $newdependency_libs"
70181bedbe3fSmrg	    case $deplib in
70191bedbe3fSmrg              -L*) func_stripname '-L' '' "$deplib"
70201bedbe3fSmrg                   func_resolve_sysroot "$func_stripname_result";;
70211bedbe3fSmrg              *) func_resolve_sysroot "$deplib" ;;
70221bedbe3fSmrg            esac
70231bedbe3fSmrg	    if $opt_preserve_dup_deps ; then
7024549e21daSmrg	      case "$tmp_libs " in
70251bedbe3fSmrg	      *" $func_resolve_sysroot_result "*)
70261bedbe3fSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027549e21daSmrg	      esac
7028549e21daSmrg	    fi
70291bedbe3fSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030549e21daSmrg	  done
7031549e21daSmrg
7032549e21daSmrg	  if test "$link_all_deplibs" != no; then
7033549e21daSmrg	    # Add the search paths of all dependency libraries
7034549e21daSmrg	    for deplib in $dependency_libs; do
7035549e21daSmrg	      path=
7036549e21daSmrg	      case $deplib in
7037549e21daSmrg	      -L*) path="$deplib" ;;
7038549e21daSmrg	      *.la)
70391bedbe3fSmrg	        func_resolve_sysroot "$deplib"
70401bedbe3fSmrg	        deplib=$func_resolve_sysroot_result
7041549e21daSmrg	        func_dirname "$deplib" "" "."
70421bedbe3fSmrg		dir=$func_dirname_result
7043549e21daSmrg		# We need an absolute path.
7044549e21daSmrg		case $dir in
7045549e21daSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046549e21daSmrg		*)
7047549e21daSmrg		  absdir=`cd "$dir" && pwd`
7048549e21daSmrg		  if test -z "$absdir"; then
7049549e21daSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7050549e21daSmrg		    absdir="$dir"
7051549e21daSmrg		  fi
7052549e21daSmrg		  ;;
7053549e21daSmrg		esac
7054549e21daSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055549e21daSmrg		case $host in
7056549e21daSmrg		*-*-darwin*)
7057549e21daSmrg		  depdepl=
7058549e21daSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059549e21daSmrg		  if test -n "$deplibrary_names" ; then
7060549e21daSmrg		    for tmp in $deplibrary_names ; do
7061549e21daSmrg		      depdepl=$tmp
7062549e21daSmrg		    done
7063549e21daSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7064549e21daSmrg		      depdepl="$absdir/$objdir/$depdepl"
7065549e21daSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066549e21daSmrg                      if test -z "$darwin_install_name"; then
7067549e21daSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068549e21daSmrg                      fi
70691bedbe3fSmrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70701bedbe3fSmrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071549e21daSmrg		      path=
7072549e21daSmrg		    fi
7073549e21daSmrg		  fi
7074549e21daSmrg		  ;;
7075549e21daSmrg		*)
7076549e21daSmrg		  path="-L$absdir/$objdir"
7077549e21daSmrg		  ;;
7078549e21daSmrg		esac
7079549e21daSmrg		else
7080549e21daSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081549e21daSmrg		  test -z "$libdir" && \
7082549e21daSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083549e21daSmrg		  test "$absdir" != "$libdir" && \
7084549e21daSmrg		    func_warning "\`$deplib' seems to be moved"
7085549e21daSmrg
7086549e21daSmrg		  path="-L$absdir"
7087549e21daSmrg		fi
7088549e21daSmrg		;;
7089549e21daSmrg	      esac
7090549e21daSmrg	      case " $deplibs " in
7091549e21daSmrg	      *" $path "*) ;;
7092549e21daSmrg	      *) deplibs="$path $deplibs" ;;
7093549e21daSmrg	      esac
7094549e21daSmrg	    done
7095549e21daSmrg	  fi # link_all_deplibs != no
7096549e21daSmrg	fi # linkmode = lib
7097549e21daSmrg      done # for deplib in $libs
7098549e21daSmrg      if test "$pass" = link; then
7099549e21daSmrg	if test "$linkmode" = "prog"; then
7100549e21daSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101549e21daSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102549e21daSmrg	else
7103549e21daSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104549e21daSmrg	fi
7105549e21daSmrg      fi
7106549e21daSmrg      dependency_libs="$newdependency_libs"
7107549e21daSmrg      if test "$pass" = dlpreopen; then
7108549e21daSmrg	# Link the dlpreopened libraries before other libraries
7109549e21daSmrg	for deplib in $save_deplibs; do
7110549e21daSmrg	  deplibs="$deplib $deplibs"
7111549e21daSmrg	done
7112549e21daSmrg      fi
7113549e21daSmrg      if test "$pass" != dlopen; then
7114549e21daSmrg	if test "$pass" != conv; then
7115549e21daSmrg	  # Make sure lib_search_path contains only unique directories.
7116549e21daSmrg	  lib_search_path=
7117549e21daSmrg	  for dir in $newlib_search_path; do
7118549e21daSmrg	    case "$lib_search_path " in
7119549e21daSmrg	    *" $dir "*) ;;
71201bedbe3fSmrg	    *) func_append lib_search_path " $dir" ;;
7121549e21daSmrg	    esac
7122549e21daSmrg	  done
7123549e21daSmrg	  newlib_search_path=
7124549e21daSmrg	fi
7125549e21daSmrg
7126549e21daSmrg	if test "$linkmode,$pass" != "prog,link"; then
7127549e21daSmrg	  vars="deplibs"
7128549e21daSmrg	else
7129549e21daSmrg	  vars="compile_deplibs finalize_deplibs"
7130549e21daSmrg	fi
7131549e21daSmrg	for var in $vars dependency_libs; do
7132549e21daSmrg	  # Add libraries to $var in reverse order
7133549e21daSmrg	  eval tmp_libs=\"\$$var\"
7134549e21daSmrg	  new_libs=
7135549e21daSmrg	  for deplib in $tmp_libs; do
7136549e21daSmrg	    # FIXME: Pedantically, this is the right thing to do, so
7137549e21daSmrg	    #        that some nasty dependency loop isn't accidentally
7138549e21daSmrg	    #        broken:
7139549e21daSmrg	    #new_libs="$deplib $new_libs"
7140549e21daSmrg	    # Pragmatically, this seems to cause very few problems in
7141549e21daSmrg	    # practice:
7142549e21daSmrg	    case $deplib in
7143549e21daSmrg	    -L*) new_libs="$deplib $new_libs" ;;
7144549e21daSmrg	    -R*) ;;
7145549e21daSmrg	    *)
7146549e21daSmrg	      # And here is the reason: when a library appears more
7147549e21daSmrg	      # than once as an explicit dependence of a library, or
7148549e21daSmrg	      # is implicitly linked in more than once by the
7149549e21daSmrg	      # compiler, it is considered special, and multiple
7150549e21daSmrg	      # occurrences thereof are not removed.  Compare this
7151549e21daSmrg	      # with having the same library being listed as a
7152549e21daSmrg	      # dependency of multiple other libraries: in this case,
7153549e21daSmrg	      # we know (pedantically, we assume) the library does not
7154549e21daSmrg	      # need to be listed more than once, so we keep only the
7155549e21daSmrg	      # last copy.  This is not always right, but it is rare
7156549e21daSmrg	      # enough that we require users that really mean to play
7157549e21daSmrg	      # such unportable linking tricks to link the library
7158549e21daSmrg	      # using -Wl,-lname, so that libtool does not consider it
7159549e21daSmrg	      # for duplicate removal.
7160549e21daSmrg	      case " $specialdeplibs " in
7161549e21daSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162549e21daSmrg	      *)
7163549e21daSmrg		case " $new_libs " in
7164549e21daSmrg		*" $deplib "*) ;;
7165549e21daSmrg		*) new_libs="$deplib $new_libs" ;;
7166549e21daSmrg		esac
7167549e21daSmrg		;;
7168549e21daSmrg	      esac
7169549e21daSmrg	      ;;
7170549e21daSmrg	    esac
7171549e21daSmrg	  done
7172549e21daSmrg	  tmp_libs=
7173549e21daSmrg	  for deplib in $new_libs; do
7174549e21daSmrg	    case $deplib in
7175549e21daSmrg	    -L*)
7176549e21daSmrg	      case " $tmp_libs " in
7177549e21daSmrg	      *" $deplib "*) ;;
71781bedbe3fSmrg	      *) func_append tmp_libs " $deplib" ;;
7179549e21daSmrg	      esac
7180549e21daSmrg	      ;;
71811bedbe3fSmrg	    *) func_append tmp_libs " $deplib" ;;
7182549e21daSmrg	    esac
7183549e21daSmrg	  done
7184549e21daSmrg	  eval $var=\"$tmp_libs\"
7185549e21daSmrg	done # for var
7186549e21daSmrg      fi
7187549e21daSmrg      # Last step: remove runtime libs from dependency_libs
7188549e21daSmrg      # (they stay in deplibs)
7189549e21daSmrg      tmp_libs=
7190549e21daSmrg      for i in $dependency_libs ; do
7191549e21daSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192549e21daSmrg	*" $i "*)
7193549e21daSmrg	  i=""
7194549e21daSmrg	  ;;
7195549e21daSmrg	esac
7196549e21daSmrg	if test -n "$i" ; then
71971bedbe3fSmrg	  func_append tmp_libs " $i"
7198549e21daSmrg	fi
7199549e21daSmrg      done
7200549e21daSmrg      dependency_libs=$tmp_libs
7201549e21daSmrg    done # for pass
7202549e21daSmrg    if test "$linkmode" = prog; then
7203549e21daSmrg      dlfiles="$newdlfiles"
7204549e21daSmrg    fi
7205549e21daSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206549e21daSmrg      dlprefiles="$newdlprefiles"
7207549e21daSmrg    fi
7208549e21daSmrg
7209549e21daSmrg    case $linkmode in
7210549e21daSmrg    oldlib)
7211549e21daSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212549e21daSmrg	func_warning "\`-dlopen' is ignored for archives"
7213549e21daSmrg      fi
7214549e21daSmrg
7215549e21daSmrg      case " $deplibs" in
7216549e21daSmrg      *\ -l* | *\ -L*)
7217549e21daSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218549e21daSmrg      esac
7219549e21daSmrg
7220549e21daSmrg      test -n "$rpath" && \
7221549e21daSmrg	func_warning "\`-rpath' is ignored for archives"
7222549e21daSmrg
7223549e21daSmrg      test -n "$xrpath" && \
7224549e21daSmrg	func_warning "\`-R' is ignored for archives"
7225549e21daSmrg
7226549e21daSmrg      test -n "$vinfo" && \
7227549e21daSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228549e21daSmrg
7229549e21daSmrg      test -n "$release" && \
7230549e21daSmrg	func_warning "\`-release' is ignored for archives"
7231549e21daSmrg
7232549e21daSmrg      test -n "$export_symbols$export_symbols_regex" && \
7233549e21daSmrg	func_warning "\`-export-symbols' is ignored for archives"
7234549e21daSmrg
7235549e21daSmrg      # Now set the variables for building old libraries.
7236549e21daSmrg      build_libtool_libs=no
7237549e21daSmrg      oldlibs="$output"
72381bedbe3fSmrg      func_append objs "$old_deplibs"
7239549e21daSmrg      ;;
7240549e21daSmrg
7241549e21daSmrg    lib)
7242549e21daSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243549e21daSmrg      case $outputname in
7244549e21daSmrg      lib*)
7245549e21daSmrg	func_stripname 'lib' '.la' "$outputname"
7246549e21daSmrg	name=$func_stripname_result
7247549e21daSmrg	eval shared_ext=\"$shrext_cmds\"
7248549e21daSmrg	eval libname=\"$libname_spec\"
7249549e21daSmrg	;;
7250549e21daSmrg      *)
7251549e21daSmrg	test "$module" = no && \
7252549e21daSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253549e21daSmrg
7254549e21daSmrg	if test "$need_lib_prefix" != no; then
7255549e21daSmrg	  # Add the "lib" prefix for modules if required
7256549e21daSmrg	  func_stripname '' '.la' "$outputname"
7257549e21daSmrg	  name=$func_stripname_result
7258549e21daSmrg	  eval shared_ext=\"$shrext_cmds\"
7259549e21daSmrg	  eval libname=\"$libname_spec\"
7260549e21daSmrg	else
7261549e21daSmrg	  func_stripname '' '.la' "$outputname"
7262549e21daSmrg	  libname=$func_stripname_result
7263549e21daSmrg	fi
7264549e21daSmrg	;;
7265549e21daSmrg      esac
7266549e21daSmrg
7267549e21daSmrg      if test -n "$objs"; then
7268549e21daSmrg	if test "$deplibs_check_method" != pass_all; then
7269549e21daSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270549e21daSmrg	else
7271549e21daSmrg	  echo
7272549e21daSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273549e21daSmrg	  $ECHO "*** objects $objs is not portable!"
72741bedbe3fSmrg	  func_append libobjs " $objs"
7275549e21daSmrg	fi
7276549e21daSmrg      fi
7277549e21daSmrg
7278549e21daSmrg      test "$dlself" != no && \
7279549e21daSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280549e21daSmrg
7281549e21daSmrg      set dummy $rpath
7282549e21daSmrg      shift
7283549e21daSmrg      test "$#" -gt 1 && \
7284549e21daSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285549e21daSmrg
7286549e21daSmrg      install_libdir="$1"
7287549e21daSmrg
7288549e21daSmrg      oldlibs=
7289549e21daSmrg      if test -z "$rpath"; then
7290549e21daSmrg	if test "$build_libtool_libs" = yes; then
7291549e21daSmrg	  # Building a libtool convenience library.
7292549e21daSmrg	  # Some compilers have problems with a `.al' extension so
7293549e21daSmrg	  # convenience libraries should have the same extension an
7294549e21daSmrg	  # archive normally would.
7295549e21daSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296549e21daSmrg	  build_libtool_libs=convenience
7297549e21daSmrg	  build_old_libs=yes
7298549e21daSmrg	fi
7299549e21daSmrg
7300549e21daSmrg	test -n "$vinfo" && \
7301549e21daSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302549e21daSmrg
7303549e21daSmrg	test -n "$release" && \
7304549e21daSmrg	  func_warning "\`-release' is ignored for convenience libraries"
7305549e21daSmrg      else
7306549e21daSmrg
7307549e21daSmrg	# Parse the version information argument.
7308549e21daSmrg	save_ifs="$IFS"; IFS=':'
7309549e21daSmrg	set dummy $vinfo 0 0 0
7310549e21daSmrg	shift
7311549e21daSmrg	IFS="$save_ifs"
7312549e21daSmrg
7313549e21daSmrg	test -n "$7" && \
7314549e21daSmrg	  func_fatal_help "too many parameters to \`-version-info'"
7315549e21daSmrg
7316549e21daSmrg	# convert absolute version numbers to libtool ages
7317549e21daSmrg	# this retains compatibility with .la files and attempts
7318549e21daSmrg	# to make the code below a bit more comprehensible
7319549e21daSmrg
7320549e21daSmrg	case $vinfo_number in
7321549e21daSmrg	yes)
7322549e21daSmrg	  number_major="$1"
7323549e21daSmrg	  number_minor="$2"
7324549e21daSmrg	  number_revision="$3"
7325549e21daSmrg	  #
7326549e21daSmrg	  # There are really only two kinds -- those that
7327549e21daSmrg	  # use the current revision as the major version
7328549e21daSmrg	  # and those that subtract age and use age as
7329549e21daSmrg	  # a minor version.  But, then there is irix
7330549e21daSmrg	  # which has an extra 1 added just for fun
7331549e21daSmrg	  #
7332549e21daSmrg	  case $version_type in
73331bedbe3fSmrg	  # correct linux to gnu/linux during the next big refactor
7334549e21daSmrg	  darwin|linux|osf|windows|none)
7335549e21daSmrg	    func_arith $number_major + $number_minor
7336549e21daSmrg	    current=$func_arith_result
7337549e21daSmrg	    age="$number_minor"
7338549e21daSmrg	    revision="$number_revision"
7339549e21daSmrg	    ;;
7340549e21daSmrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7341549e21daSmrg	    current="$number_major"
7342549e21daSmrg	    revision="$number_minor"
7343549e21daSmrg	    age="0"
7344549e21daSmrg	    ;;
7345549e21daSmrg	  irix|nonstopux)
7346549e21daSmrg	    func_arith $number_major + $number_minor
7347549e21daSmrg	    current=$func_arith_result
7348549e21daSmrg	    age="$number_minor"
7349549e21daSmrg	    revision="$number_minor"
7350549e21daSmrg	    lt_irix_increment=no
7351549e21daSmrg	    ;;
7352549e21daSmrg	  esac
7353549e21daSmrg	  ;;
7354549e21daSmrg	no)
7355549e21daSmrg	  current="$1"
7356549e21daSmrg	  revision="$2"
7357549e21daSmrg	  age="$3"
7358549e21daSmrg	  ;;
7359549e21daSmrg	esac
7360549e21daSmrg
7361549e21daSmrg	# Check that each of the things are valid numbers.
7362549e21daSmrg	case $current in
7363549e21daSmrg	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]) ;;
7364549e21daSmrg	*)
7365549e21daSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366549e21daSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367549e21daSmrg	  ;;
7368549e21daSmrg	esac
7369549e21daSmrg
7370549e21daSmrg	case $revision in
7371549e21daSmrg	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]) ;;
7372549e21daSmrg	*)
7373549e21daSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374549e21daSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375549e21daSmrg	  ;;
7376549e21daSmrg	esac
7377549e21daSmrg
7378549e21daSmrg	case $age in
7379549e21daSmrg	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]) ;;
7380549e21daSmrg	*)
7381549e21daSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
7382549e21daSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383549e21daSmrg	  ;;
7384549e21daSmrg	esac
7385549e21daSmrg
7386549e21daSmrg	if test "$age" -gt "$current"; then
7387549e21daSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388549e21daSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389549e21daSmrg	fi
7390549e21daSmrg
7391549e21daSmrg	# Calculate the version variables.
7392549e21daSmrg	major=
7393549e21daSmrg	versuffix=
7394549e21daSmrg	verstring=
7395549e21daSmrg	case $version_type in
7396549e21daSmrg	none) ;;
7397549e21daSmrg
7398549e21daSmrg	darwin)
7399549e21daSmrg	  # Like Linux, but with the current version available in
7400549e21daSmrg	  # verstring for coding it into the library header
7401549e21daSmrg	  func_arith $current - $age
7402549e21daSmrg	  major=.$func_arith_result
7403549e21daSmrg	  versuffix="$major.$age.$revision"
7404549e21daSmrg	  # Darwin ld doesn't like 0 for these options...
7405549e21daSmrg	  func_arith $current + 1
7406549e21daSmrg	  minor_current=$func_arith_result
7407549e21daSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408549e21daSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409549e21daSmrg	  ;;
7410549e21daSmrg
7411549e21daSmrg	freebsd-aout)
7412549e21daSmrg	  major=".$current"
7413549e21daSmrg	  versuffix=".$current.$revision";
7414549e21daSmrg	  ;;
7415549e21daSmrg
7416549e21daSmrg	freebsd-elf)
7417549e21daSmrg	  major=".$current"
7418549e21daSmrg	  versuffix=".$current"
7419549e21daSmrg	  ;;
7420549e21daSmrg
7421549e21daSmrg	irix | nonstopux)
7422549e21daSmrg	  if test "X$lt_irix_increment" = "Xno"; then
7423549e21daSmrg	    func_arith $current - $age
7424549e21daSmrg	  else
7425549e21daSmrg	    func_arith $current - $age + 1
7426549e21daSmrg	  fi
7427549e21daSmrg	  major=$func_arith_result
7428549e21daSmrg
7429549e21daSmrg	  case $version_type in
7430549e21daSmrg	    nonstopux) verstring_prefix=nonstopux ;;
7431549e21daSmrg	    *)         verstring_prefix=sgi ;;
7432549e21daSmrg	  esac
7433549e21daSmrg	  verstring="$verstring_prefix$major.$revision"
7434549e21daSmrg
7435549e21daSmrg	  # Add in all the interfaces that we are compatible with.
7436549e21daSmrg	  loop=$revision
7437549e21daSmrg	  while test "$loop" -ne 0; do
7438549e21daSmrg	    func_arith $revision - $loop
7439549e21daSmrg	    iface=$func_arith_result
7440549e21daSmrg	    func_arith $loop - 1
7441549e21daSmrg	    loop=$func_arith_result
7442549e21daSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443549e21daSmrg	  done
7444549e21daSmrg
7445549e21daSmrg	  # Before this point, $major must not contain `.'.
7446549e21daSmrg	  major=.$major
7447549e21daSmrg	  versuffix="$major.$revision"
7448549e21daSmrg	  ;;
7449549e21daSmrg
74501bedbe3fSmrg	linux) # correct to gnu/linux during the next big refactor
7451549e21daSmrg	  func_arith $current - $age
7452549e21daSmrg	  major=.$func_arith_result
7453549e21daSmrg	  versuffix="$major.$age.$revision"
7454549e21daSmrg	  ;;
7455549e21daSmrg
7456549e21daSmrg	osf)
7457549e21daSmrg	  func_arith $current - $age
7458549e21daSmrg	  major=.$func_arith_result
7459549e21daSmrg	  versuffix=".$current.$age.$revision"
7460549e21daSmrg	  verstring="$current.$age.$revision"
7461549e21daSmrg
7462549e21daSmrg	  # Add in all the interfaces that we are compatible with.
7463549e21daSmrg	  loop=$age
7464549e21daSmrg	  while test "$loop" -ne 0; do
7465549e21daSmrg	    func_arith $current - $loop
7466549e21daSmrg	    iface=$func_arith_result
7467549e21daSmrg	    func_arith $loop - 1
7468549e21daSmrg	    loop=$func_arith_result
7469549e21daSmrg	    verstring="$verstring:${iface}.0"
7470549e21daSmrg	  done
7471549e21daSmrg
7472549e21daSmrg	  # Make executables depend on our current version.
74731bedbe3fSmrg	  func_append verstring ":${current}.0"
7474549e21daSmrg	  ;;
7475549e21daSmrg
7476549e21daSmrg	qnx)
7477549e21daSmrg	  major=".$current"
7478549e21daSmrg	  versuffix=".$current"
7479549e21daSmrg	  ;;
7480549e21daSmrg
7481549e21daSmrg	sunos)
7482549e21daSmrg	  major=".$current"
7483549e21daSmrg	  versuffix=".$current.$revision"
7484549e21daSmrg	  ;;
7485549e21daSmrg
7486549e21daSmrg	windows)
7487549e21daSmrg	  # Use '-' rather than '.', since we only want one
7488549e21daSmrg	  # extension on DOS 8.3 filesystems.
7489549e21daSmrg	  func_arith $current - $age
7490549e21daSmrg	  major=$func_arith_result
7491549e21daSmrg	  versuffix="-$major"
7492549e21daSmrg	  ;;
7493549e21daSmrg
7494549e21daSmrg	*)
7495549e21daSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496549e21daSmrg	  ;;
7497549e21daSmrg	esac
7498549e21daSmrg
7499549e21daSmrg	# Clear the version info if we defaulted, and they specified a release.
7500549e21daSmrg	if test -z "$vinfo" && test -n "$release"; then
7501549e21daSmrg	  major=
7502549e21daSmrg	  case $version_type in
7503549e21daSmrg	  darwin)
7504549e21daSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505549e21daSmrg	    # problems, so we reset it completely
7506549e21daSmrg	    verstring=
7507549e21daSmrg	    ;;
7508549e21daSmrg	  *)
7509549e21daSmrg	    verstring="0.0"
7510549e21daSmrg	    ;;
7511549e21daSmrg	  esac
7512549e21daSmrg	  if test "$need_version" = no; then
7513549e21daSmrg	    versuffix=
7514549e21daSmrg	  else
7515549e21daSmrg	    versuffix=".0.0"
7516549e21daSmrg	  fi
7517549e21daSmrg	fi
7518549e21daSmrg
7519549e21daSmrg	# Remove version info from name if versioning should be avoided
7520549e21daSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521549e21daSmrg	  major=
7522549e21daSmrg	  versuffix=
7523549e21daSmrg	  verstring=""
7524549e21daSmrg	fi
7525549e21daSmrg
7526549e21daSmrg	# Check to see if the archive will have undefined symbols.
7527549e21daSmrg	if test "$allow_undefined" = yes; then
7528549e21daSmrg	  if test "$allow_undefined_flag" = unsupported; then
7529549e21daSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7530549e21daSmrg	    build_libtool_libs=no
7531549e21daSmrg	    build_old_libs=yes
7532549e21daSmrg	  fi
7533549e21daSmrg	else
7534549e21daSmrg	  # Don't allow undefined symbols.
7535549e21daSmrg	  allow_undefined_flag="$no_undefined_flag"
7536549e21daSmrg	fi
7537549e21daSmrg
7538549e21daSmrg      fi
7539549e21daSmrg
7540549e21daSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
75411bedbe3fSmrg      func_append libobjs " $symfileobj"
7542549e21daSmrg      test "X$libobjs" = "X " && libobjs=
7543549e21daSmrg
75441bedbe3fSmrg      if test "$opt_mode" != relink; then
7545549e21daSmrg	# Remove our outputs, but don't remove object files since they
7546549e21daSmrg	# may have been created when compiling PIC objects.
7547549e21daSmrg	removelist=
7548549e21daSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549549e21daSmrg	for p in $tempremovelist; do
7550549e21daSmrg	  case $p in
7551549e21daSmrg	    *.$objext | *.gcno)
7552549e21daSmrg	       ;;
7553549e21daSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554549e21daSmrg	       if test "X$precious_files_regex" != "X"; then
7555549e21daSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556549e21daSmrg		 then
7557549e21daSmrg		   continue
7558549e21daSmrg		 fi
7559549e21daSmrg	       fi
75601bedbe3fSmrg	       func_append removelist " $p"
7561549e21daSmrg	       ;;
7562549e21daSmrg	    *) ;;
7563549e21daSmrg	  esac
7564549e21daSmrg	done
7565549e21daSmrg	test -n "$removelist" && \
7566549e21daSmrg	  func_show_eval "${RM}r \$removelist"
7567549e21daSmrg      fi
7568549e21daSmrg
7569549e21daSmrg      # Now set the variables for building old libraries.
7570549e21daSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
75711bedbe3fSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572549e21daSmrg
7573549e21daSmrg	# Transform .lo files to .o files.
7574549e21daSmrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575549e21daSmrg      fi
7576549e21daSmrg
7577549e21daSmrg      # Eliminate all temporary directories.
7578549e21daSmrg      #for path in $notinst_path; do
7579549e21daSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7580549e21daSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7581549e21daSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582549e21daSmrg      #done
7583549e21daSmrg
7584549e21daSmrg      if test -n "$xrpath"; then
7585549e21daSmrg	# If the user specified any rpath flags, then add them.
7586549e21daSmrg	temp_xrpath=
7587549e21daSmrg	for libdir in $xrpath; do
75881bedbe3fSmrg	  func_replace_sysroot "$libdir"
75891bedbe3fSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590549e21daSmrg	  case "$finalize_rpath " in
7591549e21daSmrg	  *" $libdir "*) ;;
75921bedbe3fSmrg	  *) func_append finalize_rpath " $libdir" ;;
7593549e21daSmrg	  esac
7594549e21daSmrg	done
7595549e21daSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596549e21daSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597549e21daSmrg	fi
7598549e21daSmrg      fi
7599549e21daSmrg
7600549e21daSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601549e21daSmrg      old_dlfiles="$dlfiles"
7602549e21daSmrg      dlfiles=
7603549e21daSmrg      for lib in $old_dlfiles; do
7604549e21daSmrg	case " $dlprefiles $dlfiles " in
7605549e21daSmrg	*" $lib "*) ;;
76061bedbe3fSmrg	*) func_append dlfiles " $lib" ;;
7607549e21daSmrg	esac
7608549e21daSmrg      done
7609549e21daSmrg
7610549e21daSmrg      # Make sure dlprefiles contains only unique files
7611549e21daSmrg      old_dlprefiles="$dlprefiles"
7612549e21daSmrg      dlprefiles=
7613549e21daSmrg      for lib in $old_dlprefiles; do
7614549e21daSmrg	case "$dlprefiles " in
7615549e21daSmrg	*" $lib "*) ;;
76161bedbe3fSmrg	*) func_append dlprefiles " $lib" ;;
7617549e21daSmrg	esac
7618549e21daSmrg      done
7619549e21daSmrg
7620549e21daSmrg      if test "$build_libtool_libs" = yes; then
7621549e21daSmrg	if test -n "$rpath"; then
7622549e21daSmrg	  case $host in
7623549e21daSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624549e21daSmrg	    # these systems don't actually have a c library (as such)!
7625549e21daSmrg	    ;;
7626549e21daSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627549e21daSmrg	    # Rhapsody C library is in the System framework
76281bedbe3fSmrg	    func_append deplibs " System.ltframework"
7629549e21daSmrg	    ;;
7630549e21daSmrg	  *-*-netbsd*)
7631549e21daSmrg	    # Don't link with libc until the a.out ld.so is fixed.
7632549e21daSmrg	    ;;
7633549e21daSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634549e21daSmrg	    # Do not include libc due to us having libc/libc_r.
7635549e21daSmrg	    ;;
7636549e21daSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637549e21daSmrg	    # Causes problems with __ctype
7638549e21daSmrg	    ;;
7639549e21daSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640549e21daSmrg	    # Compiler inserts libc in the correct place for threads to work
7641549e21daSmrg	    ;;
7642549e21daSmrg	  *)
7643549e21daSmrg	    # Add libc to deplibs on all other systems if necessary.
7644549e21daSmrg	    if test "$build_libtool_need_lc" = "yes"; then
76451bedbe3fSmrg	      func_append deplibs " -lc"
7646549e21daSmrg	    fi
7647549e21daSmrg	    ;;
7648549e21daSmrg	  esac
7649549e21daSmrg	fi
7650549e21daSmrg
7651549e21daSmrg	# Transform deplibs into only deplibs that can be linked in shared.
7652549e21daSmrg	name_save=$name
7653549e21daSmrg	libname_save=$libname
7654549e21daSmrg	release_save=$release
7655549e21daSmrg	versuffix_save=$versuffix
7656549e21daSmrg	major_save=$major
7657549e21daSmrg	# I'm not sure if I'm treating the release correctly.  I think
7658549e21daSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659549e21daSmrg	# add it in twice.  Is that correct?
7660549e21daSmrg	release=""
7661549e21daSmrg	versuffix=""
7662549e21daSmrg	major=""
7663549e21daSmrg	newdeplibs=
7664549e21daSmrg	droppeddeps=no
7665549e21daSmrg	case $deplibs_check_method in
7666549e21daSmrg	pass_all)
7667549e21daSmrg	  # Don't check for shared/static.  Everything works.
7668549e21daSmrg	  # This might be a little naive.  We might want to check
7669549e21daSmrg	  # whether the library exists or not.  But this is on
7670549e21daSmrg	  # osf3 & osf4 and I'm not really sure... Just
7671549e21daSmrg	  # implementing what was already the behavior.
7672549e21daSmrg	  newdeplibs=$deplibs
7673549e21daSmrg	  ;;
7674549e21daSmrg	test_compile)
7675549e21daSmrg	  # This code stresses the "libraries are programs" paradigm to its
7676549e21daSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677549e21daSmrg	  # against the deplibs as a proxy for the library.  Then we can check
7678549e21daSmrg	  # whether they linked in statically or dynamically with ldd.
7679549e21daSmrg	  $opt_dry_run || $RM conftest.c
7680549e21daSmrg	  cat > conftest.c <<EOF
7681549e21daSmrg	  int main() { return 0; }
7682549e21daSmrgEOF
7683549e21daSmrg	  $opt_dry_run || $RM conftest
7684549e21daSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685549e21daSmrg	    ldd_output=`ldd conftest`
7686549e21daSmrg	    for i in $deplibs; do
7687549e21daSmrg	      case $i in
7688549e21daSmrg	      -l*)
7689549e21daSmrg		func_stripname -l '' "$i"
7690549e21daSmrg		name=$func_stripname_result
7691549e21daSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692549e21daSmrg		  case " $predeps $postdeps " in
7693549e21daSmrg		  *" $i "*)
76941bedbe3fSmrg		    func_append newdeplibs " $i"
7695549e21daSmrg		    i=""
7696549e21daSmrg		    ;;
7697549e21daSmrg		  esac
7698549e21daSmrg		fi
7699549e21daSmrg		if test -n "$i" ; then
7700549e21daSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701549e21daSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702549e21daSmrg		  set dummy $deplib_matches; shift
7703549e21daSmrg		  deplib_match=$1
7704549e21daSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77051bedbe3fSmrg		    func_append newdeplibs " $i"
7706549e21daSmrg		  else
7707549e21daSmrg		    droppeddeps=yes
7708549e21daSmrg		    echo
7709549e21daSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7710549e21daSmrg		    echo "*** I have the capability to make that library automatically link in when"
7711549e21daSmrg		    echo "*** you link to this library.  But I can only do this if you have a"
7712549e21daSmrg		    echo "*** shared version of the library, which I believe you do not have"
7713549e21daSmrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
7714549e21daSmrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715549e21daSmrg		  fi
7716549e21daSmrg		fi
7717549e21daSmrg		;;
7718549e21daSmrg	      *)
77191bedbe3fSmrg		func_append newdeplibs " $i"
7720549e21daSmrg		;;
7721549e21daSmrg	      esac
7722549e21daSmrg	    done
7723549e21daSmrg	  else
7724549e21daSmrg	    # Error occurred in the first compile.  Let's try to salvage
7725549e21daSmrg	    # the situation: Compile a separate program for each library.
7726549e21daSmrg	    for i in $deplibs; do
7727549e21daSmrg	      case $i in
7728549e21daSmrg	      -l*)
7729549e21daSmrg		func_stripname -l '' "$i"
7730549e21daSmrg		name=$func_stripname_result
7731549e21daSmrg		$opt_dry_run || $RM conftest
7732549e21daSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733549e21daSmrg		  ldd_output=`ldd conftest`
7734549e21daSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735549e21daSmrg		    case " $predeps $postdeps " in
7736549e21daSmrg		    *" $i "*)
77371bedbe3fSmrg		      func_append newdeplibs " $i"
7738549e21daSmrg		      i=""
7739549e21daSmrg		      ;;
7740549e21daSmrg		    esac
7741549e21daSmrg		  fi
7742549e21daSmrg		  if test -n "$i" ; then
7743549e21daSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744549e21daSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745549e21daSmrg		    set dummy $deplib_matches; shift
7746549e21daSmrg		    deplib_match=$1
7747549e21daSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77481bedbe3fSmrg		      func_append newdeplibs " $i"
7749549e21daSmrg		    else
7750549e21daSmrg		      droppeddeps=yes
7751549e21daSmrg		      echo
7752549e21daSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7753549e21daSmrg		      echo "*** I have the capability to make that library automatically link in when"
7754549e21daSmrg		      echo "*** you link to this library.  But I can only do this if you have a"
7755549e21daSmrg		      echo "*** shared version of the library, which you do not appear to have"
7756549e21daSmrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
7757549e21daSmrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758549e21daSmrg		    fi
7759549e21daSmrg		  fi
7760549e21daSmrg		else
7761549e21daSmrg		  droppeddeps=yes
7762549e21daSmrg		  echo
7763549e21daSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7764549e21daSmrg		  echo "*** make it link in!  You will probably need to install it or some"
7765549e21daSmrg		  echo "*** library that it depends on before this library will be fully"
7766549e21daSmrg		  echo "*** functional.  Installing it before continuing would be even better."
7767549e21daSmrg		fi
7768549e21daSmrg		;;
7769549e21daSmrg	      *)
77701bedbe3fSmrg		func_append newdeplibs " $i"
7771549e21daSmrg		;;
7772549e21daSmrg	      esac
7773549e21daSmrg	    done
7774549e21daSmrg	  fi
7775549e21daSmrg	  ;;
7776549e21daSmrg	file_magic*)
7777549e21daSmrg	  set dummy $deplibs_check_method; shift
7778549e21daSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779549e21daSmrg	  for a_deplib in $deplibs; do
7780549e21daSmrg	    case $a_deplib in
7781549e21daSmrg	    -l*)
7782549e21daSmrg	      func_stripname -l '' "$a_deplib"
7783549e21daSmrg	      name=$func_stripname_result
7784549e21daSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785549e21daSmrg		case " $predeps $postdeps " in
7786549e21daSmrg		*" $a_deplib "*)
77871bedbe3fSmrg		  func_append newdeplibs " $a_deplib"
7788549e21daSmrg		  a_deplib=""
7789549e21daSmrg		  ;;
7790549e21daSmrg		esac
7791549e21daSmrg	      fi
7792549e21daSmrg	      if test -n "$a_deplib" ; then
7793549e21daSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
77941bedbe3fSmrg		if test -n "$file_magic_glob"; then
77951bedbe3fSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
77961bedbe3fSmrg		else
77971bedbe3fSmrg		  libnameglob=$libname
77981bedbe3fSmrg		fi
77991bedbe3fSmrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800549e21daSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78011bedbe3fSmrg		  if test "$want_nocaseglob" = yes; then
78021bedbe3fSmrg		    shopt -s nocaseglob
78031bedbe3fSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78041bedbe3fSmrg		    $nocaseglob
78051bedbe3fSmrg		  else
78061bedbe3fSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78071bedbe3fSmrg		  fi
7808549e21daSmrg		  for potent_lib in $potential_libs; do
7809549e21daSmrg		      # Follow soft links.
7810549e21daSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811549e21daSmrg			 $GREP " -> " >/dev/null; then
7812549e21daSmrg			continue
7813549e21daSmrg		      fi
7814549e21daSmrg		      # The statement above tries to avoid entering an
7815549e21daSmrg		      # endless loop below, in case of cyclic links.
7816549e21daSmrg		      # We might still enter an endless loop, since a link
7817549e21daSmrg		      # loop can be closed while we follow links,
7818549e21daSmrg		      # but so what?
7819549e21daSmrg		      potlib="$potent_lib"
7820549e21daSmrg		      while test -h "$potlib" 2>/dev/null; do
7821549e21daSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822549e21daSmrg			case $potliblink in
7823549e21daSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
7824549e21daSmrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825549e21daSmrg			esac
7826549e21daSmrg		      done
7827549e21daSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828549e21daSmrg			 $SED -e 10q |
7829549e21daSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
78301bedbe3fSmrg			func_append newdeplibs " $a_deplib"
7831549e21daSmrg			a_deplib=""
7832549e21daSmrg			break 2
7833549e21daSmrg		      fi
7834549e21daSmrg		  done
7835549e21daSmrg		done
7836549e21daSmrg	      fi
7837549e21daSmrg	      if test -n "$a_deplib" ; then
7838549e21daSmrg		droppeddeps=yes
7839549e21daSmrg		echo
7840549e21daSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7841549e21daSmrg		echo "*** I have the capability to make that library automatically link in when"
7842549e21daSmrg		echo "*** you link to this library.  But I can only do this if you have a"
7843549e21daSmrg		echo "*** shared version of the library, which you do not appear to have"
7844549e21daSmrg		echo "*** because I did check the linker path looking for a file starting"
7845549e21daSmrg		if test -z "$potlib" ; then
7846549e21daSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847549e21daSmrg		else
7848549e21daSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849549e21daSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850549e21daSmrg		fi
7851549e21daSmrg	      fi
7852549e21daSmrg	      ;;
7853549e21daSmrg	    *)
7854549e21daSmrg	      # Add a -L argument.
78551bedbe3fSmrg	      func_append newdeplibs " $a_deplib"
7856549e21daSmrg	      ;;
7857549e21daSmrg	    esac
7858549e21daSmrg	  done # Gone through all deplibs.
7859549e21daSmrg	  ;;
7860549e21daSmrg	match_pattern*)
7861549e21daSmrg	  set dummy $deplibs_check_method; shift
7862549e21daSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863549e21daSmrg	  for a_deplib in $deplibs; do
7864549e21daSmrg	    case $a_deplib in
7865549e21daSmrg	    -l*)
7866549e21daSmrg	      func_stripname -l '' "$a_deplib"
7867549e21daSmrg	      name=$func_stripname_result
7868549e21daSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869549e21daSmrg		case " $predeps $postdeps " in
7870549e21daSmrg		*" $a_deplib "*)
78711bedbe3fSmrg		  func_append newdeplibs " $a_deplib"
7872549e21daSmrg		  a_deplib=""
7873549e21daSmrg		  ;;
7874549e21daSmrg		esac
7875549e21daSmrg	      fi
7876549e21daSmrg	      if test -n "$a_deplib" ; then
7877549e21daSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878549e21daSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879549e21daSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880549e21daSmrg		  for potent_lib in $potential_libs; do
7881549e21daSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
7882549e21daSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883549e21daSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
78841bedbe3fSmrg		      func_append newdeplibs " $a_deplib"
7885549e21daSmrg		      a_deplib=""
7886549e21daSmrg		      break 2
7887549e21daSmrg		    fi
7888549e21daSmrg		  done
7889549e21daSmrg		done
7890549e21daSmrg	      fi
7891549e21daSmrg	      if test -n "$a_deplib" ; then
7892549e21daSmrg		droppeddeps=yes
7893549e21daSmrg		echo
7894549e21daSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7895549e21daSmrg		echo "*** I have the capability to make that library automatically link in when"
7896549e21daSmrg		echo "*** you link to this library.  But I can only do this if you have a"
7897549e21daSmrg		echo "*** shared version of the library, which you do not appear to have"
7898549e21daSmrg		echo "*** because I did check the linker path looking for a file starting"
7899549e21daSmrg		if test -z "$potlib" ; then
7900549e21daSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901549e21daSmrg		else
7902549e21daSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903549e21daSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904549e21daSmrg		fi
7905549e21daSmrg	      fi
7906549e21daSmrg	      ;;
7907549e21daSmrg	    *)
7908549e21daSmrg	      # Add a -L argument.
79091bedbe3fSmrg	      func_append newdeplibs " $a_deplib"
7910549e21daSmrg	      ;;
7911549e21daSmrg	    esac
7912549e21daSmrg	  done # Gone through all deplibs.
7913549e21daSmrg	  ;;
7914549e21daSmrg	none | unknown | *)
7915549e21daSmrg	  newdeplibs=""
7916549e21daSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917549e21daSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918549e21daSmrg	    for i in $predeps $postdeps ; do
7919549e21daSmrg	      # can't use Xsed below, because $i might contain '/'
7920549e21daSmrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921549e21daSmrg	    done
7922549e21daSmrg	  fi
7923549e21daSmrg	  case $tmp_deplibs in
7924549e21daSmrg	  *[!\	\ ]*)
7925549e21daSmrg	    echo
7926549e21daSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
7927549e21daSmrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928549e21daSmrg	    else
7929549e21daSmrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930549e21daSmrg	    fi
7931549e21daSmrg	    echo "*** All declared inter-library dependencies are being dropped."
7932549e21daSmrg	    droppeddeps=yes
7933549e21daSmrg	    ;;
7934549e21daSmrg	  esac
7935549e21daSmrg	  ;;
7936549e21daSmrg	esac
7937549e21daSmrg	versuffix=$versuffix_save
7938549e21daSmrg	major=$major_save
7939549e21daSmrg	release=$release_save
7940549e21daSmrg	libname=$libname_save
7941549e21daSmrg	name=$name_save
7942549e21daSmrg
7943549e21daSmrg	case $host in
7944549e21daSmrg	*-*-rhapsody* | *-*-darwin1.[012])
7945549e21daSmrg	  # On Rhapsody replace the C library with the System framework
7946549e21daSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947549e21daSmrg	  ;;
7948549e21daSmrg	esac
7949549e21daSmrg
7950549e21daSmrg	if test "$droppeddeps" = yes; then
7951549e21daSmrg	  if test "$module" = yes; then
7952549e21daSmrg	    echo
7953549e21daSmrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954549e21daSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7955549e21daSmrg	    echo "*** a static module, that should work as long as the dlopening"
7956549e21daSmrg	    echo "*** application is linked with the -dlopen flag."
7957549e21daSmrg	    if test -z "$global_symbol_pipe"; then
7958549e21daSmrg	      echo
7959549e21daSmrg	      echo "*** However, this would only work if libtool was able to extract symbol"
7960549e21daSmrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7961549e21daSmrg	      echo "*** not find such a program.  So, this module is probably useless."
7962549e21daSmrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963549e21daSmrg	    fi
7964549e21daSmrg	    if test "$build_old_libs" = no; then
7965549e21daSmrg	      oldlibs="$output_objdir/$libname.$libext"
7966549e21daSmrg	      build_libtool_libs=module
7967549e21daSmrg	      build_old_libs=yes
7968549e21daSmrg	    else
7969549e21daSmrg	      build_libtool_libs=no
7970549e21daSmrg	    fi
7971549e21daSmrg	  else
7972549e21daSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
7973549e21daSmrg	    echo "*** automatically added whenever a program is linked with this library"
7974549e21daSmrg	    echo "*** or is declared to -dlopen it."
7975549e21daSmrg
7976549e21daSmrg	    if test "$allow_undefined" = no; then
7977549e21daSmrg	      echo
7978549e21daSmrg	      echo "*** Since this library must not contain undefined symbols,"
7979549e21daSmrg	      echo "*** because either the platform does not support them or"
7980549e21daSmrg	      echo "*** it was explicitly requested with -no-undefined,"
7981549e21daSmrg	      echo "*** libtool will only create a static version of it."
7982549e21daSmrg	      if test "$build_old_libs" = no; then
7983549e21daSmrg		oldlibs="$output_objdir/$libname.$libext"
7984549e21daSmrg		build_libtool_libs=module
7985549e21daSmrg		build_old_libs=yes
7986549e21daSmrg	      else
7987549e21daSmrg		build_libtool_libs=no
7988549e21daSmrg	      fi
7989549e21daSmrg	    fi
7990549e21daSmrg	  fi
7991549e21daSmrg	fi
7992549e21daSmrg	# Done checking deplibs!
7993549e21daSmrg	deplibs=$newdeplibs
7994549e21daSmrg      fi
7995549e21daSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996549e21daSmrg      case $host in
7997549e21daSmrg	*-*-darwin*)
7998549e21daSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7999549e21daSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8000549e21daSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001549e21daSmrg	  ;;
8002549e21daSmrg      esac
8003549e21daSmrg
8004549e21daSmrg      # move library search paths that coincide with paths to not yet
8005549e21daSmrg      # installed libraries to the beginning of the library search list
8006549e21daSmrg      new_libs=
8007549e21daSmrg      for path in $notinst_path; do
8008549e21daSmrg	case " $new_libs " in
8009549e21daSmrg	*" -L$path/$objdir "*) ;;
8010549e21daSmrg	*)
8011549e21daSmrg	  case " $deplibs " in
8012549e21daSmrg	  *" -L$path/$objdir "*)
80131bedbe3fSmrg	    func_append new_libs " -L$path/$objdir" ;;
8014549e21daSmrg	  esac
8015549e21daSmrg	  ;;
8016549e21daSmrg	esac
8017549e21daSmrg      done
8018549e21daSmrg      for deplib in $deplibs; do
8019549e21daSmrg	case $deplib in
8020549e21daSmrg	-L*)
8021549e21daSmrg	  case " $new_libs " in
8022549e21daSmrg	  *" $deplib "*) ;;
80231bedbe3fSmrg	  *) func_append new_libs " $deplib" ;;
8024549e21daSmrg	  esac
8025549e21daSmrg	  ;;
80261bedbe3fSmrg	*) func_append new_libs " $deplib" ;;
8027549e21daSmrg	esac
8028549e21daSmrg      done
8029549e21daSmrg      deplibs="$new_libs"
8030549e21daSmrg
8031549e21daSmrg      # All the library-specific variables (install_libdir is set above).
8032549e21daSmrg      library_names=
8033549e21daSmrg      old_library=
8034549e21daSmrg      dlname=
8035ba6a1819Smrg
8036549e21daSmrg      # Test again, we may have decided not to build it any more
8037549e21daSmrg      if test "$build_libtool_libs" = yes; then
80381bedbe3fSmrg	# Remove ${wl} instances when linking with ld.
80391bedbe3fSmrg	# FIXME: should test the right _cmds variable.
80401bedbe3fSmrg	case $archive_cmds in
80411bedbe3fSmrg	  *\$LD\ *) wl= ;;
80421bedbe3fSmrg        esac
8043549e21daSmrg	if test "$hardcode_into_libs" = yes; then
8044549e21daSmrg	  # Hardcode the library paths
8045549e21daSmrg	  hardcode_libdirs=
8046549e21daSmrg	  dep_rpath=
8047549e21daSmrg	  rpath="$finalize_rpath"
80481bedbe3fSmrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049549e21daSmrg	  for libdir in $rpath; do
8050549e21daSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051549e21daSmrg	      if test -n "$hardcode_libdir_separator"; then
80521bedbe3fSmrg		func_replace_sysroot "$libdir"
80531bedbe3fSmrg		libdir=$func_replace_sysroot_result
8054549e21daSmrg		if test -z "$hardcode_libdirs"; then
8055549e21daSmrg		  hardcode_libdirs="$libdir"
8056549e21daSmrg		else
8057549e21daSmrg		  # Just accumulate the unique libdirs.
8058549e21daSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059549e21daSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060549e21daSmrg		    ;;
8061549e21daSmrg		  *)
80621bedbe3fSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063549e21daSmrg		    ;;
8064549e21daSmrg		  esac
8065549e21daSmrg		fi
8066549e21daSmrg	      else
8067549e21daSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
80681bedbe3fSmrg		func_append dep_rpath " $flag"
8069549e21daSmrg	      fi
8070549e21daSmrg	    elif test -n "$runpath_var"; then
8071549e21daSmrg	      case "$perm_rpath " in
8072549e21daSmrg	      *" $libdir "*) ;;
80731bedbe3fSmrg	      *) func_append perm_rpath " $libdir" ;;
8074549e21daSmrg	      esac
8075549e21daSmrg	    fi
8076549e21daSmrg	  done
8077549e21daSmrg	  # Substitute the hardcoded libdirs into the rpath.
8078549e21daSmrg	  if test -n "$hardcode_libdir_separator" &&
8079549e21daSmrg	     test -n "$hardcode_libdirs"; then
8080549e21daSmrg	    libdir="$hardcode_libdirs"
80811bedbe3fSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082549e21daSmrg	  fi
8083549e21daSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084549e21daSmrg	    # We should set the runpath_var.
8085549e21daSmrg	    rpath=
8086549e21daSmrg	    for dir in $perm_rpath; do
80871bedbe3fSmrg	      func_append rpath "$dir:"
8088549e21daSmrg	    done
8089549e21daSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090549e21daSmrg	  fi
8091549e21daSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092549e21daSmrg	fi
8093ba6a1819Smrg
8094549e21daSmrg	shlibpath="$finalize_shlibpath"
80951bedbe3fSmrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096549e21daSmrg	if test -n "$shlibpath"; then
8097549e21daSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098549e21daSmrg	fi
8099ba6a1819Smrg
8100549e21daSmrg	# Get the real and link names of the library.
8101549e21daSmrg	eval shared_ext=\"$shrext_cmds\"
8102549e21daSmrg	eval library_names=\"$library_names_spec\"
8103549e21daSmrg	set dummy $library_names
8104549e21daSmrg	shift
8105549e21daSmrg	realname="$1"
8106549e21daSmrg	shift
8107ba6a1819Smrg
8108549e21daSmrg	if test -n "$soname_spec"; then
8109549e21daSmrg	  eval soname=\"$soname_spec\"
8110549e21daSmrg	else
8111549e21daSmrg	  soname="$realname"
8112549e21daSmrg	fi
8113549e21daSmrg	if test -z "$dlname"; then
8114549e21daSmrg	  dlname=$soname
8115549e21daSmrg	fi
8116ba6a1819Smrg
8117549e21daSmrg	lib="$output_objdir/$realname"
8118549e21daSmrg	linknames=
8119549e21daSmrg	for link
8120549e21daSmrg	do
81211bedbe3fSmrg	  func_append linknames " $link"
8122549e21daSmrg	done
8123ba6a1819Smrg
8124549e21daSmrg	# Use standard objects if they are pic
8125549e21daSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126549e21daSmrg	test "X$libobjs" = "X " && libobjs=
8127ba6a1819Smrg
8128549e21daSmrg	delfiles=
8129549e21daSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130549e21daSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131549e21daSmrg	  export_symbols="$output_objdir/$libname.uexp"
81321bedbe3fSmrg	  func_append delfiles " $export_symbols"
8133549e21daSmrg	fi
8134ba6a1819Smrg
8135549e21daSmrg	orig_export_symbols=
8136549e21daSmrg	case $host_os in
8137549e21daSmrg	cygwin* | mingw* | cegcc*)
8138549e21daSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139549e21daSmrg	    # exporting using user supplied symfile
8140549e21daSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141549e21daSmrg	      # and it's NOT already a .def file. Must figure out
8142549e21daSmrg	      # which of the given symbols are data symbols and tag
8143549e21daSmrg	      # them as such. So, trigger use of export_symbols_cmds.
8144549e21daSmrg	      # export_symbols gets reassigned inside the "prepare
8145549e21daSmrg	      # the list of exported symbols" if statement, so the
8146549e21daSmrg	      # include_expsyms logic still works.
8147549e21daSmrg	      orig_export_symbols="$export_symbols"
8148549e21daSmrg	      export_symbols=
8149549e21daSmrg	      always_export_symbols=yes
8150549e21daSmrg	    fi
8151549e21daSmrg	  fi
8152549e21daSmrg	  ;;
8153549e21daSmrg	esac
8154ba6a1819Smrg
8155549e21daSmrg	# Prepare the list of exported symbols
8156549e21daSmrg	if test -z "$export_symbols"; then
8157549e21daSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158549e21daSmrg	    func_verbose "generating symbol list for \`$libname.la'"
8159549e21daSmrg	    export_symbols="$output_objdir/$libname.exp"
8160549e21daSmrg	    $opt_dry_run || $RM $export_symbols
8161549e21daSmrg	    cmds=$export_symbols_cmds
8162549e21daSmrg	    save_ifs="$IFS"; IFS='~'
81631bedbe3fSmrg	    for cmd1 in $cmds; do
8164549e21daSmrg	      IFS="$save_ifs"
81651bedbe3fSmrg	      # Take the normal branch if the nm_file_list_spec branch
81661bedbe3fSmrg	      # doesn't work or if tool conversion is not needed.
81671bedbe3fSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
81681bedbe3fSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
81691bedbe3fSmrg		  try_normal_branch=yes
81701bedbe3fSmrg		  eval cmd=\"$cmd1\"
81711bedbe3fSmrg		  func_len " $cmd"
81721bedbe3fSmrg		  len=$func_len_result
81731bedbe3fSmrg		  ;;
81741bedbe3fSmrg		*)
81751bedbe3fSmrg		  try_normal_branch=no
81761bedbe3fSmrg		  ;;
81771bedbe3fSmrg	      esac
81781bedbe3fSmrg	      if test "$try_normal_branch" = yes \
81791bedbe3fSmrg		 && { test "$len" -lt "$max_cmd_len" \
81801bedbe3fSmrg		      || test "$max_cmd_len" -le -1; }
81811bedbe3fSmrg	      then
81821bedbe3fSmrg		func_show_eval "$cmd" 'exit $?'
81831bedbe3fSmrg		skipped_export=false
81841bedbe3fSmrg	      elif test -n "$nm_file_list_spec"; then
81851bedbe3fSmrg		func_basename "$output"
81861bedbe3fSmrg		output_la=$func_basename_result
81871bedbe3fSmrg		save_libobjs=$libobjs
81881bedbe3fSmrg		save_output=$output
81891bedbe3fSmrg		output=${output_objdir}/${output_la}.nm
81901bedbe3fSmrg		func_to_tool_file "$output"
81911bedbe3fSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
81921bedbe3fSmrg		func_append delfiles " $output"
81931bedbe3fSmrg		func_verbose "creating $NM input file list: $output"
81941bedbe3fSmrg		for obj in $save_libobjs; do
81951bedbe3fSmrg		  func_to_tool_file "$obj"
81961bedbe3fSmrg		  $ECHO "$func_to_tool_file_result"
81971bedbe3fSmrg		done > "$output"
81981bedbe3fSmrg		eval cmd=\"$cmd1\"
8199549e21daSmrg		func_show_eval "$cmd" 'exit $?'
82001bedbe3fSmrg		output=$save_output
82011bedbe3fSmrg		libobjs=$save_libobjs
8202549e21daSmrg		skipped_export=false
8203549e21daSmrg	      else
8204549e21daSmrg		# The command line is too long to execute in one step.
8205549e21daSmrg		func_verbose "using reloadable object file for export list..."
8206549e21daSmrg		skipped_export=:
8207549e21daSmrg		# Break out early, otherwise skipped_export may be
8208549e21daSmrg		# set to false by a later but shorter cmd.
8209549e21daSmrg		break
8210549e21daSmrg	      fi
8211549e21daSmrg	    done
8212549e21daSmrg	    IFS="$save_ifs"
8213549e21daSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214549e21daSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215549e21daSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216549e21daSmrg	    fi
8217549e21daSmrg	  fi
8218549e21daSmrg	fi
8219ba6a1819Smrg
8220549e21daSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221549e21daSmrg	  tmp_export_symbols="$export_symbols"
8222549e21daSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8223549e21daSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224549e21daSmrg	fi
8225ba6a1819Smrg
8226549e21daSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227549e21daSmrg	  # The given exports_symbols file has to be filtered, so filter it.
8228549e21daSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229549e21daSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230549e21daSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231549e21daSmrg	  # though. Also, the filter scales superlinearly with the number of
8232549e21daSmrg	  # global variables. join(1) would be nice here, but unfortunately
8233549e21daSmrg	  # isn't a blessed tool.
8234549e21daSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
82351bedbe3fSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236549e21daSmrg	  export_symbols=$output_objdir/$libname.def
8237549e21daSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238ba6a1819Smrg	fi
8239ba6a1819Smrg
8240549e21daSmrg	tmp_deplibs=
8241549e21daSmrg	for test_deplib in $deplibs; do
8242549e21daSmrg	  case " $convenience " in
8243549e21daSmrg	  *" $test_deplib "*) ;;
8244549e21daSmrg	  *)
82451bedbe3fSmrg	    func_append tmp_deplibs " $test_deplib"
8246549e21daSmrg	    ;;
8247549e21daSmrg	  esac
8248549e21daSmrg	done
8249549e21daSmrg	deplibs="$tmp_deplibs"
8250ba6a1819Smrg
8251549e21daSmrg	if test -n "$convenience"; then
8252549e21daSmrg	  if test -n "$whole_archive_flag_spec" &&
8253549e21daSmrg	    test "$compiler_needs_object" = yes &&
8254549e21daSmrg	    test -z "$libobjs"; then
8255549e21daSmrg	    # extract the archives, so we have objects to list.
8256549e21daSmrg	    # TODO: could optimize this to just extract one archive.
8257549e21daSmrg	    whole_archive_flag_spec=
8258549e21daSmrg	  fi
8259549e21daSmrg	  if test -n "$whole_archive_flag_spec"; then
8260549e21daSmrg	    save_libobjs=$libobjs
8261549e21daSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262549e21daSmrg	    test "X$libobjs" = "X " && libobjs=
8263549e21daSmrg	  else
8264549e21daSmrg	    gentop="$output_objdir/${outputname}x"
82651bedbe3fSmrg	    func_append generated " $gentop"
8266ba6a1819Smrg
8267549e21daSmrg	    func_extract_archives $gentop $convenience
82681bedbe3fSmrg	    func_append libobjs " $func_extract_archives_result"
8269549e21daSmrg	    test "X$libobjs" = "X " && libobjs=
8270549e21daSmrg	  fi
8271549e21daSmrg	fi
8272ba6a1819Smrg
8273549e21daSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274549e21daSmrg	  eval flag=\"$thread_safe_flag_spec\"
82751bedbe3fSmrg	  func_append linker_flags " $flag"
8276549e21daSmrg	fi
8277ba6a1819Smrg
8278549e21daSmrg	# Make a backup of the uninstalled library when relinking
82791bedbe3fSmrg	if test "$opt_mode" = relink; then
8280549e21daSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281ba6a1819Smrg	fi
8282ba6a1819Smrg
8283549e21daSmrg	# Do each of the archive commands.
8284549e21daSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285549e21daSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286549e21daSmrg	    eval test_cmds=\"$module_expsym_cmds\"
8287549e21daSmrg	    cmds=$module_expsym_cmds
8288549e21daSmrg	  else
8289549e21daSmrg	    eval test_cmds=\"$module_cmds\"
8290549e21daSmrg	    cmds=$module_cmds
8291549e21daSmrg	  fi
8292549e21daSmrg	else
8293549e21daSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294549e21daSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295549e21daSmrg	    cmds=$archive_expsym_cmds
8296549e21daSmrg	  else
8297549e21daSmrg	    eval test_cmds=\"$archive_cmds\"
8298549e21daSmrg	    cmds=$archive_cmds
8299549e21daSmrg	  fi
8300ba6a1819Smrg	fi
8301ba6a1819Smrg
8302549e21daSmrg	if test "X$skipped_export" != "X:" &&
8303549e21daSmrg	   func_len " $test_cmds" &&
8304549e21daSmrg	   len=$func_len_result &&
8305549e21daSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306549e21daSmrg	  :
8307549e21daSmrg	else
8308549e21daSmrg	  # The command line is too long to link in one step, link piecewise
8309549e21daSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310549e21daSmrg	  # script.
8311ba6a1819Smrg
8312549e21daSmrg	  # Save the value of $output and $libobjs because we want to
8313549e21daSmrg	  # use them later.  If we have whole_archive_flag_spec, we
8314549e21daSmrg	  # want to use save_libobjs as it was before
8315549e21daSmrg	  # whole_archive_flag_spec was expanded, because we can't
8316549e21daSmrg	  # assume the linker understands whole_archive_flag_spec.
8317549e21daSmrg	  # This may have to be revisited, in case too many
8318549e21daSmrg	  # convenience libraries get linked in and end up exceeding
8319549e21daSmrg	  # the spec.
8320549e21daSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321549e21daSmrg	    save_libobjs=$libobjs
8322549e21daSmrg	  fi
8323549e21daSmrg	  save_output=$output
8324549e21daSmrg	  func_basename "$output"
8325549e21daSmrg	  output_la=$func_basename_result
8326ba6a1819Smrg
8327549e21daSmrg	  # Clear the reloadable object creation command queue and
8328549e21daSmrg	  # initialize k to one.
8329549e21daSmrg	  test_cmds=
8330549e21daSmrg	  concat_cmds=
8331549e21daSmrg	  objlist=
8332549e21daSmrg	  last_robj=
8333549e21daSmrg	  k=1
8334549e21daSmrg
8335549e21daSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336549e21daSmrg	    output=${output_objdir}/${output_la}.lnkscript
8337549e21daSmrg	    func_verbose "creating GNU ld script: $output"
8338549e21daSmrg	    echo 'INPUT (' > $output
8339549e21daSmrg	    for obj in $save_libobjs
8340549e21daSmrg	    do
83411bedbe3fSmrg	      func_to_tool_file "$obj"
83421bedbe3fSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8343549e21daSmrg	    done
8344549e21daSmrg	    echo ')' >> $output
83451bedbe3fSmrg	    func_append delfiles " $output"
83461bedbe3fSmrg	    func_to_tool_file "$output"
83471bedbe3fSmrg	    output=$func_to_tool_file_result
8348549e21daSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349549e21daSmrg	    output=${output_objdir}/${output_la}.lnk
8350549e21daSmrg	    func_verbose "creating linker input file list: $output"
8351549e21daSmrg	    : > $output
8352549e21daSmrg	    set x $save_libobjs
8353549e21daSmrg	    shift
8354549e21daSmrg	    firstobj=
8355549e21daSmrg	    if test "$compiler_needs_object" = yes; then
8356549e21daSmrg	      firstobj="$1 "
8357549e21daSmrg	      shift
8358549e21daSmrg	    fi
8359549e21daSmrg	    for obj
8360549e21daSmrg	    do
83611bedbe3fSmrg	      func_to_tool_file "$obj"
83621bedbe3fSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8363549e21daSmrg	    done
83641bedbe3fSmrg	    func_append delfiles " $output"
83651bedbe3fSmrg	    func_to_tool_file "$output"
83661bedbe3fSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367549e21daSmrg	  else
8368549e21daSmrg	    if test -n "$save_libobjs"; then
8369549e21daSmrg	      func_verbose "creating reloadable object files..."
8370549e21daSmrg	      output=$output_objdir/$output_la-${k}.$objext
8371549e21daSmrg	      eval test_cmds=\"$reload_cmds\"
8372549e21daSmrg	      func_len " $test_cmds"
8373549e21daSmrg	      len0=$func_len_result
8374549e21daSmrg	      len=$len0
8375549e21daSmrg
8376549e21daSmrg	      # Loop over the list of objects to be linked.
8377549e21daSmrg	      for obj in $save_libobjs
8378549e21daSmrg	      do
8379549e21daSmrg		func_len " $obj"
8380549e21daSmrg		func_arith $len + $func_len_result
8381549e21daSmrg		len=$func_arith_result
8382549e21daSmrg		if test "X$objlist" = X ||
8383549e21daSmrg		   test "$len" -lt "$max_cmd_len"; then
8384549e21daSmrg		  func_append objlist " $obj"
8385549e21daSmrg		else
8386549e21daSmrg		  # The command $test_cmds is almost too long, add a
8387549e21daSmrg		  # command to the queue.
8388549e21daSmrg		  if test "$k" -eq 1 ; then
8389549e21daSmrg		    # The first file doesn't have a previous command to add.
8390549e21daSmrg		    reload_objs=$objlist
8391549e21daSmrg		    eval concat_cmds=\"$reload_cmds\"
8392549e21daSmrg		  else
8393549e21daSmrg		    # All subsequent reloadable object files will link in
8394549e21daSmrg		    # the last one created.
8395549e21daSmrg		    reload_objs="$objlist $last_robj"
8396549e21daSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397549e21daSmrg		  fi
8398549e21daSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399549e21daSmrg		  func_arith $k + 1
8400549e21daSmrg		  k=$func_arith_result
8401549e21daSmrg		  output=$output_objdir/$output_la-${k}.$objext
8402549e21daSmrg		  objlist=" $obj"
8403549e21daSmrg		  func_len " $last_robj"
8404549e21daSmrg		  func_arith $len0 + $func_len_result
8405549e21daSmrg		  len=$func_arith_result
8406549e21daSmrg		fi
8407549e21daSmrg	      done
8408549e21daSmrg	      # Handle the remaining objects by creating one last
8409549e21daSmrg	      # reloadable object file.  All subsequent reloadable object
8410549e21daSmrg	      # files will link in the last one created.
8411549e21daSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8412549e21daSmrg	      reload_objs="$objlist $last_robj"
8413549e21daSmrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414549e21daSmrg	      if test -n "$last_robj"; then
8415549e21daSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416549e21daSmrg	      fi
84171bedbe3fSmrg	      func_append delfiles " $output"
8418ba6a1819Smrg
8419549e21daSmrg	    else
8420549e21daSmrg	      output=
8421549e21daSmrg	    fi
8422ba6a1819Smrg
8423549e21daSmrg	    if ${skipped_export-false}; then
8424549e21daSmrg	      func_verbose "generating symbol list for \`$libname.la'"
8425549e21daSmrg	      export_symbols="$output_objdir/$libname.exp"
8426549e21daSmrg	      $opt_dry_run || $RM $export_symbols
8427549e21daSmrg	      libobjs=$output
8428549e21daSmrg	      # Append the command to create the export file.
8429549e21daSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430549e21daSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431549e21daSmrg	      if test -n "$last_robj"; then
8432549e21daSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433549e21daSmrg	      fi
8434549e21daSmrg	    fi
8435ba6a1819Smrg
8436549e21daSmrg	    test -n "$save_libobjs" &&
8437549e21daSmrg	      func_verbose "creating a temporary reloadable object file: $output"
8438ba6a1819Smrg
8439549e21daSmrg	    # Loop through the commands generated above and execute them.
8440549e21daSmrg	    save_ifs="$IFS"; IFS='~'
8441549e21daSmrg	    for cmd in $concat_cmds; do
8442549e21daSmrg	      IFS="$save_ifs"
8443549e21daSmrg	      $opt_silent || {
8444549e21daSmrg		  func_quote_for_expand "$cmd"
8445549e21daSmrg		  eval "func_echo $func_quote_for_expand_result"
8446549e21daSmrg	      }
8447549e21daSmrg	      $opt_dry_run || eval "$cmd" || {
8448549e21daSmrg		lt_exit=$?
8449549e21daSmrg
8450549e21daSmrg		# Restore the uninstalled library and exit
84511bedbe3fSmrg		if test "$opt_mode" = relink; then
8452549e21daSmrg		  ( cd "$output_objdir" && \
8453549e21daSmrg		    $RM "${realname}T" && \
8454549e21daSmrg		    $MV "${realname}U" "$realname" )
8455549e21daSmrg		fi
8456ba6a1819Smrg
8457549e21daSmrg		exit $lt_exit
8458549e21daSmrg	      }
8459549e21daSmrg	    done
8460549e21daSmrg	    IFS="$save_ifs"
8461ba6a1819Smrg
8462549e21daSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463549e21daSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464549e21daSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8465ba6a1819Smrg	    fi
8466ba6a1819Smrg	  fi
8467ba6a1819Smrg
8468549e21daSmrg          if ${skipped_export-false}; then
8469549e21daSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470549e21daSmrg	      tmp_export_symbols="$export_symbols"
8471549e21daSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8472549e21daSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473549e21daSmrg	    fi
8474ba6a1819Smrg
8475549e21daSmrg	    if test -n "$orig_export_symbols"; then
8476549e21daSmrg	      # The given exports_symbols file has to be filtered, so filter it.
8477549e21daSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478549e21daSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479549e21daSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480549e21daSmrg	      # though. Also, the filter scales superlinearly with the number of
8481549e21daSmrg	      # global variables. join(1) would be nice here, but unfortunately
8482549e21daSmrg	      # isn't a blessed tool.
8483549e21daSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
84841bedbe3fSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485549e21daSmrg	      export_symbols=$output_objdir/$libname.def
8486549e21daSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487549e21daSmrg	    fi
8488549e21daSmrg	  fi
8489ba6a1819Smrg
8490549e21daSmrg	  libobjs=$output
8491549e21daSmrg	  # Restore the value of output.
8492549e21daSmrg	  output=$save_output
8493ba6a1819Smrg
8494549e21daSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495549e21daSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496549e21daSmrg	    test "X$libobjs" = "X " && libobjs=
8497549e21daSmrg	  fi
8498549e21daSmrg	  # Expand the library linking commands again to reset the
8499549e21daSmrg	  # value of $libobjs for piecewise linking.
8500549e21daSmrg
8501549e21daSmrg	  # Do each of the archive commands.
8502549e21daSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503549e21daSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504549e21daSmrg	      cmds=$module_expsym_cmds
8505ba6a1819Smrg	    else
8506549e21daSmrg	      cmds=$module_cmds
8507ba6a1819Smrg	    fi
8508ba6a1819Smrg	  else
8509549e21daSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510549e21daSmrg	      cmds=$archive_expsym_cmds
8511549e21daSmrg	    else
8512549e21daSmrg	      cmds=$archive_cmds
8513549e21daSmrg	    fi
8514ba6a1819Smrg	  fi
8515ba6a1819Smrg	fi
8516ba6a1819Smrg
8517549e21daSmrg	if test -n "$delfiles"; then
8518549e21daSmrg	  # Append the command to remove temporary files to $cmds.
8519549e21daSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520549e21daSmrg	fi
8521ba6a1819Smrg
8522549e21daSmrg	# Add any objects from preloaded convenience libraries
8523549e21daSmrg	if test -n "$dlprefiles"; then
8524549e21daSmrg	  gentop="$output_objdir/${outputname}x"
85251bedbe3fSmrg	  func_append generated " $gentop"
8526ba6a1819Smrg
8527549e21daSmrg	  func_extract_archives $gentop $dlprefiles
85281bedbe3fSmrg	  func_append libobjs " $func_extract_archives_result"
8529549e21daSmrg	  test "X$libobjs" = "X " && libobjs=
8530ba6a1819Smrg	fi
8531ba6a1819Smrg
8532549e21daSmrg	save_ifs="$IFS"; IFS='~'
8533549e21daSmrg	for cmd in $cmds; do
8534549e21daSmrg	  IFS="$save_ifs"
8535549e21daSmrg	  eval cmd=\"$cmd\"
8536549e21daSmrg	  $opt_silent || {
8537549e21daSmrg	    func_quote_for_expand "$cmd"
8538549e21daSmrg	    eval "func_echo $func_quote_for_expand_result"
8539549e21daSmrg	  }
8540549e21daSmrg	  $opt_dry_run || eval "$cmd" || {
8541549e21daSmrg	    lt_exit=$?
8542ba6a1819Smrg
8543549e21daSmrg	    # Restore the uninstalled library and exit
85441bedbe3fSmrg	    if test "$opt_mode" = relink; then
8545549e21daSmrg	      ( cd "$output_objdir" && \
8546549e21daSmrg	        $RM "${realname}T" && \
8547549e21daSmrg		$MV "${realname}U" "$realname" )
8548ba6a1819Smrg	    fi
8549ba6a1819Smrg
8550549e21daSmrg	    exit $lt_exit
8551549e21daSmrg	  }
8552549e21daSmrg	done
8553549e21daSmrg	IFS="$save_ifs"
8554ba6a1819Smrg
8555549e21daSmrg	# Restore the uninstalled library and exit
85561bedbe3fSmrg	if test "$opt_mode" = relink; then
8557549e21daSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558ba6a1819Smrg
8559549e21daSmrg	  if test -n "$convenience"; then
8560549e21daSmrg	    if test -z "$whole_archive_flag_spec"; then
8561549e21daSmrg	      func_show_eval '${RM}r "$gentop"'
8562549e21daSmrg	    fi
8563549e21daSmrg	  fi
8564ba6a1819Smrg
8565549e21daSmrg	  exit $EXIT_SUCCESS
8566549e21daSmrg	fi
8567ba6a1819Smrg
8568549e21daSmrg	# Create links to the real library.
8569549e21daSmrg	for linkname in $linknames; do
8570549e21daSmrg	  if test "$realname" != "$linkname"; then
8571549e21daSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572ba6a1819Smrg	  fi
8573ba6a1819Smrg	done
8574549e21daSmrg
8575549e21daSmrg	# If -module or -export-dynamic was specified, set the dlname.
8576549e21daSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577549e21daSmrg	  # On all known operating systems, these are identical.
8578549e21daSmrg	  dlname="$soname"
8579549e21daSmrg	fi
8580ba6a1819Smrg      fi
8581ba6a1819Smrg      ;;
8582ba6a1819Smrg
8583549e21daSmrg    obj)
8584549e21daSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585549e21daSmrg	func_warning "\`-dlopen' is ignored for objects"
8586549e21daSmrg      fi
8587ba6a1819Smrg
8588549e21daSmrg      case " $deplibs" in
8589549e21daSmrg      *\ -l* | *\ -L*)
8590549e21daSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591ba6a1819Smrg      esac
8592ba6a1819Smrg
8593549e21daSmrg      test -n "$rpath" && \
8594549e21daSmrg	func_warning "\`-rpath' is ignored for objects"
8595ba6a1819Smrg
8596549e21daSmrg      test -n "$xrpath" && \
8597549e21daSmrg	func_warning "\`-R' is ignored for objects"
8598ba6a1819Smrg
8599549e21daSmrg      test -n "$vinfo" && \
8600549e21daSmrg	func_warning "\`-version-info' is ignored for objects"
8601549e21daSmrg
8602549e21daSmrg      test -n "$release" && \
8603549e21daSmrg	func_warning "\`-release' is ignored for objects"
8604549e21daSmrg
8605549e21daSmrg      case $output in
8606549e21daSmrg      *.lo)
8607549e21daSmrg	test -n "$objs$old_deplibs" && \
8608549e21daSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609549e21daSmrg
8610549e21daSmrg	libobj=$output
8611549e21daSmrg	func_lo2o "$libobj"
8612549e21daSmrg	obj=$func_lo2o_result
8613ba6a1819Smrg	;;
8614ba6a1819Smrg      *)
8615549e21daSmrg	libobj=
8616549e21daSmrg	obj="$output"
8617ba6a1819Smrg	;;
8618ba6a1819Smrg      esac
8619ba6a1819Smrg
8620549e21daSmrg      # Delete the old objects.
8621549e21daSmrg      $opt_dry_run || $RM $obj $libobj
8622ba6a1819Smrg
8623549e21daSmrg      # Objects from convenience libraries.  This assumes
8624549e21daSmrg      # single-version convenience libraries.  Whenever we create
8625549e21daSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626549e21daSmrg      # the extraction.
8627549e21daSmrg      reload_conv_objs=
8628549e21daSmrg      gentop=
8629549e21daSmrg      # reload_cmds runs $LD directly, so let us get rid of
8630549e21daSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8631549e21daSmrg      # turning comma into space..
8632549e21daSmrg      wl=
8633ba6a1819Smrg
8634549e21daSmrg      if test -n "$convenience"; then
8635549e21daSmrg	if test -n "$whole_archive_flag_spec"; then
8636549e21daSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
8637549e21daSmrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638549e21daSmrg	else
8639549e21daSmrg	  gentop="$output_objdir/${obj}x"
86401bedbe3fSmrg	  func_append generated " $gentop"
8641ba6a1819Smrg
8642549e21daSmrg	  func_extract_archives $gentop $convenience
8643549e21daSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644549e21daSmrg	fi
8645ba6a1819Smrg      fi
8646ba6a1819Smrg
86471bedbe3fSmrg      # If we're not building shared, we need to use non_pic_objs
86481bedbe3fSmrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
86491bedbe3fSmrg
8650549e21daSmrg      # Create the old-style object.
8651549e21daSmrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652ba6a1819Smrg
8653549e21daSmrg      output="$obj"
8654549e21daSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
8655ba6a1819Smrg
8656549e21daSmrg      # Exit if we aren't doing a library object file.
8657549e21daSmrg      if test -z "$libobj"; then
8658549e21daSmrg	if test -n "$gentop"; then
8659549e21daSmrg	  func_show_eval '${RM}r "$gentop"'
8660549e21daSmrg	fi
8661549e21daSmrg
8662549e21daSmrg	exit $EXIT_SUCCESS
8663ba6a1819Smrg      fi
8664549e21daSmrg
8665549e21daSmrg      if test "$build_libtool_libs" != yes; then
8666549e21daSmrg	if test -n "$gentop"; then
8667549e21daSmrg	  func_show_eval '${RM}r "$gentop"'
8668549e21daSmrg	fi
8669549e21daSmrg
8670549e21daSmrg	# Create an invalid libtool object if no PIC, so that we don't
8671549e21daSmrg	# accidentally link it into a program.
8672549e21daSmrg	# $show "echo timestamp > $libobj"
8673549e21daSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674549e21daSmrg	exit $EXIT_SUCCESS
8675549e21daSmrg      fi
8676549e21daSmrg
8677549e21daSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678549e21daSmrg	# Only do commands if we really have different PIC objects.
8679549e21daSmrg	reload_objs="$libobjs $reload_conv_objs"
8680549e21daSmrg	output="$libobj"
8681549e21daSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682549e21daSmrg      fi
8683549e21daSmrg
8684549e21daSmrg      if test -n "$gentop"; then
8685549e21daSmrg	func_show_eval '${RM}r "$gentop"'
8686549e21daSmrg      fi
8687549e21daSmrg
8688549e21daSmrg      exit $EXIT_SUCCESS
8689ba6a1819Smrg      ;;
8690ba6a1819Smrg
8691549e21daSmrg    prog)
8692549e21daSmrg      case $host in
8693549e21daSmrg	*cygwin*) func_stripname '' '.exe' "$output"
8694549e21daSmrg	          output=$func_stripname_result.exe;;
8695549e21daSmrg      esac
8696549e21daSmrg      test -n "$vinfo" && \
8697549e21daSmrg	func_warning "\`-version-info' is ignored for programs"
8698ba6a1819Smrg
8699549e21daSmrg      test -n "$release" && \
8700549e21daSmrg	func_warning "\`-release' is ignored for programs"
8701ba6a1819Smrg
8702549e21daSmrg      test "$preload" = yes \
8703549e21daSmrg        && test "$dlopen_support" = unknown \
8704549e21daSmrg	&& test "$dlopen_self" = unknown \
8705549e21daSmrg	&& test "$dlopen_self_static" = unknown && \
8706549e21daSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707549e21daSmrg
8708549e21daSmrg      case $host in
8709549e21daSmrg      *-*-rhapsody* | *-*-darwin1.[012])
8710549e21daSmrg	# On Rhapsody replace the C library is the System framework
8711549e21daSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8712549e21daSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713ba6a1819Smrg	;;
8714549e21daSmrg      esac
8715ba6a1819Smrg
8716549e21daSmrg      case $host in
8717549e21daSmrg      *-*-darwin*)
8718549e21daSmrg	# Don't allow lazy linking, it breaks C++ global constructors
8719549e21daSmrg	# But is supposedly fixed on 10.4 or later (yay!).
8720549e21daSmrg	if test "$tagname" = CXX ; then
8721549e21daSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722549e21daSmrg	    10.[0123])
87231bedbe3fSmrg	      func_append compile_command " ${wl}-bind_at_load"
87241bedbe3fSmrg	      func_append finalize_command " ${wl}-bind_at_load"
8725549e21daSmrg	    ;;
8726549e21daSmrg	  esac
8727ba6a1819Smrg	fi
8728549e21daSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8729549e21daSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8730549e21daSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731549e21daSmrg	;;
8732549e21daSmrg      esac
8733ba6a1819Smrg
8734ba6a1819Smrg
8735549e21daSmrg      # move library search paths that coincide with paths to not yet
8736549e21daSmrg      # installed libraries to the beginning of the library search list
8737549e21daSmrg      new_libs=
8738549e21daSmrg      for path in $notinst_path; do
8739549e21daSmrg	case " $new_libs " in
8740549e21daSmrg	*" -L$path/$objdir "*) ;;
8741549e21daSmrg	*)
8742549e21daSmrg	  case " $compile_deplibs " in
8743549e21daSmrg	  *" -L$path/$objdir "*)
87441bedbe3fSmrg	    func_append new_libs " -L$path/$objdir" ;;
8745ba6a1819Smrg	  esac
8746549e21daSmrg	  ;;
8747549e21daSmrg	esac
8748549e21daSmrg      done
8749549e21daSmrg      for deplib in $compile_deplibs; do
8750549e21daSmrg	case $deplib in
8751549e21daSmrg	-L*)
8752549e21daSmrg	  case " $new_libs " in
8753549e21daSmrg	  *" $deplib "*) ;;
87541bedbe3fSmrg	  *) func_append new_libs " $deplib" ;;
8755ba6a1819Smrg	  esac
8756549e21daSmrg	  ;;
87571bedbe3fSmrg	*) func_append new_libs " $deplib" ;;
8758549e21daSmrg	esac
8759549e21daSmrg      done
8760549e21daSmrg      compile_deplibs="$new_libs"
8761ba6a1819Smrg
8762ba6a1819Smrg
87631bedbe3fSmrg      func_append compile_command " $compile_deplibs"
87641bedbe3fSmrg      func_append finalize_command " $finalize_deplibs"
8765ba6a1819Smrg
8766549e21daSmrg      if test -n "$rpath$xrpath"; then
8767549e21daSmrg	# If the user specified any rpath flags, then add them.
8768549e21daSmrg	for libdir in $rpath $xrpath; do
8769549e21daSmrg	  # This is the magic to use -rpath.
8770549e21daSmrg	  case "$finalize_rpath " in
8771549e21daSmrg	  *" $libdir "*) ;;
87721bedbe3fSmrg	  *) func_append finalize_rpath " $libdir" ;;
8773549e21daSmrg	  esac
8774549e21daSmrg	done
8775549e21daSmrg      fi
8776ba6a1819Smrg
8777549e21daSmrg      # Now hardcode the library paths
8778549e21daSmrg      rpath=
8779549e21daSmrg      hardcode_libdirs=
8780549e21daSmrg      for libdir in $compile_rpath $finalize_rpath; do
8781549e21daSmrg	if test -n "$hardcode_libdir_flag_spec"; then
8782549e21daSmrg	  if test -n "$hardcode_libdir_separator"; then
8783549e21daSmrg	    if test -z "$hardcode_libdirs"; then
8784549e21daSmrg	      hardcode_libdirs="$libdir"
8785549e21daSmrg	    else
8786549e21daSmrg	      # Just accumulate the unique libdirs.
8787549e21daSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788549e21daSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789549e21daSmrg		;;
8790549e21daSmrg	      *)
87911bedbe3fSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792549e21daSmrg		;;
8793549e21daSmrg	      esac
8794549e21daSmrg	    fi
8795ba6a1819Smrg	  else
8796549e21daSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
87971bedbe3fSmrg	    func_append rpath " $flag"
8798ba6a1819Smrg	  fi
8799549e21daSmrg	elif test -n "$runpath_var"; then
8800549e21daSmrg	  case "$perm_rpath " in
8801549e21daSmrg	  *" $libdir "*) ;;
88021bedbe3fSmrg	  *) func_append perm_rpath " $libdir" ;;
8803549e21daSmrg	  esac
8804549e21daSmrg	fi
8805549e21daSmrg	case $host in
8806549e21daSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807549e21daSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808549e21daSmrg	  case :$dllsearchpath: in
8809549e21daSmrg	  *":$libdir:"*) ;;
8810549e21daSmrg	  ::) dllsearchpath=$libdir;;
88111bedbe3fSmrg	  *) func_append dllsearchpath ":$libdir";;
8812549e21daSmrg	  esac
8813549e21daSmrg	  case :$dllsearchpath: in
8814549e21daSmrg	  *":$testbindir:"*) ;;
8815549e21daSmrg	  ::) dllsearchpath=$testbindir;;
88161bedbe3fSmrg	  *) func_append dllsearchpath ":$testbindir";;
8817549e21daSmrg	  esac
8818549e21daSmrg	  ;;
8819549e21daSmrg	esac
8820549e21daSmrg      done
8821549e21daSmrg      # Substitute the hardcoded libdirs into the rpath.
8822549e21daSmrg      if test -n "$hardcode_libdir_separator" &&
8823549e21daSmrg	 test -n "$hardcode_libdirs"; then
8824549e21daSmrg	libdir="$hardcode_libdirs"
8825549e21daSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826549e21daSmrg      fi
8827549e21daSmrg      compile_rpath="$rpath"
8828ba6a1819Smrg
8829549e21daSmrg      rpath=
8830549e21daSmrg      hardcode_libdirs=
8831549e21daSmrg      for libdir in $finalize_rpath; do
8832549e21daSmrg	if test -n "$hardcode_libdir_flag_spec"; then
8833549e21daSmrg	  if test -n "$hardcode_libdir_separator"; then
8834549e21daSmrg	    if test -z "$hardcode_libdirs"; then
8835549e21daSmrg	      hardcode_libdirs="$libdir"
8836549e21daSmrg	    else
8837549e21daSmrg	      # Just accumulate the unique libdirs.
8838549e21daSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839549e21daSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840549e21daSmrg		;;
8841549e21daSmrg	      *)
88421bedbe3fSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843549e21daSmrg		;;
8844549e21daSmrg	      esac
8845549e21daSmrg	    fi
8846ba6a1819Smrg	  else
8847549e21daSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
88481bedbe3fSmrg	    func_append rpath " $flag"
8849ba6a1819Smrg	  fi
8850549e21daSmrg	elif test -n "$runpath_var"; then
8851549e21daSmrg	  case "$finalize_perm_rpath " in
8852549e21daSmrg	  *" $libdir "*) ;;
88531bedbe3fSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8854549e21daSmrg	  esac
8855ba6a1819Smrg	fi
8856549e21daSmrg      done
8857549e21daSmrg      # Substitute the hardcoded libdirs into the rpath.
8858549e21daSmrg      if test -n "$hardcode_libdir_separator" &&
8859549e21daSmrg	 test -n "$hardcode_libdirs"; then
8860549e21daSmrg	libdir="$hardcode_libdirs"
8861549e21daSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862549e21daSmrg      fi
8863549e21daSmrg      finalize_rpath="$rpath"
8864ba6a1819Smrg
8865549e21daSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866549e21daSmrg	# Transform all the library objects into standard objects.
8867549e21daSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8868549e21daSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869549e21daSmrg      fi
8870ba6a1819Smrg
8871549e21daSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8872ba6a1819Smrg
8873549e21daSmrg      # template prelinking step
8874549e21daSmrg      if test -n "$prelink_cmds"; then
8875549e21daSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876549e21daSmrg      fi
8877ba6a1819Smrg
8878549e21daSmrg      wrappers_required=yes
8879549e21daSmrg      case $host in
8880549e21daSmrg      *cegcc* | *mingw32ce*)
8881549e21daSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8882549e21daSmrg        wrappers_required=no
8883549e21daSmrg        ;;
8884549e21daSmrg      *cygwin* | *mingw* )
8885549e21daSmrg        if test "$build_libtool_libs" != yes; then
8886549e21daSmrg          wrappers_required=no
8887549e21daSmrg        fi
8888549e21daSmrg        ;;
8889549e21daSmrg      *)
8890549e21daSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891549e21daSmrg          wrappers_required=no
8892549e21daSmrg        fi
8893549e21daSmrg        ;;
8894549e21daSmrg      esac
8895549e21daSmrg      if test "$wrappers_required" = no; then
8896549e21daSmrg	# Replace the output file specification.
8897549e21daSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898549e21daSmrg	link_command="$compile_command$compile_rpath"
8899ba6a1819Smrg
8900549e21daSmrg	# We have no uninstalled library dependencies, so finalize right now.
8901549e21daSmrg	exit_status=0
8902549e21daSmrg	func_show_eval "$link_command" 'exit_status=$?'
8903ba6a1819Smrg
89041bedbe3fSmrg	if test -n "$postlink_cmds"; then
89051bedbe3fSmrg	  func_to_tool_file "$output"
89061bedbe3fSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89071bedbe3fSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89081bedbe3fSmrg	fi
89091bedbe3fSmrg
8910549e21daSmrg	# Delete the generated files.
8911549e21daSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912549e21daSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913ba6a1819Smrg	fi
8914ba6a1819Smrg
8915549e21daSmrg	exit $exit_status
8916549e21daSmrg      fi
8917ba6a1819Smrg
8918549e21daSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919549e21daSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920549e21daSmrg      fi
8921549e21daSmrg      if test -n "$finalize_shlibpath"; then
8922549e21daSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923549e21daSmrg      fi
8924ba6a1819Smrg
8925549e21daSmrg      compile_var=
8926549e21daSmrg      finalize_var=
8927549e21daSmrg      if test -n "$runpath_var"; then
8928549e21daSmrg	if test -n "$perm_rpath"; then
8929549e21daSmrg	  # We should set the runpath_var.
8930549e21daSmrg	  rpath=
8931549e21daSmrg	  for dir in $perm_rpath; do
89321bedbe3fSmrg	    func_append rpath "$dir:"
8933549e21daSmrg	  done
8934549e21daSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8935ba6a1819Smrg	fi
8936549e21daSmrg	if test -n "$finalize_perm_rpath"; then
8937549e21daSmrg	  # We should set the runpath_var.
8938549e21daSmrg	  rpath=
8939549e21daSmrg	  for dir in $finalize_perm_rpath; do
89401bedbe3fSmrg	    func_append rpath "$dir:"
8941549e21daSmrg	  done
8942549e21daSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943ba6a1819Smrg	fi
8944549e21daSmrg      fi
8945ba6a1819Smrg
8946549e21daSmrg      if test "$no_install" = yes; then
8947549e21daSmrg	# We don't need to create a wrapper script.
8948549e21daSmrg	link_command="$compile_var$compile_command$compile_rpath"
8949549e21daSmrg	# Replace the output file specification.
8950549e21daSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951549e21daSmrg	# Delete the old output file.
8952549e21daSmrg	$opt_dry_run || $RM $output
8953549e21daSmrg	# Link the executable and exit
8954549e21daSmrg	func_show_eval "$link_command" 'exit $?'
89551bedbe3fSmrg
89561bedbe3fSmrg	if test -n "$postlink_cmds"; then
89571bedbe3fSmrg	  func_to_tool_file "$output"
89581bedbe3fSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89591bedbe3fSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89601bedbe3fSmrg	fi
89611bedbe3fSmrg
8962ba6a1819Smrg	exit $EXIT_SUCCESS
8963549e21daSmrg      fi
8964ba6a1819Smrg
8965549e21daSmrg      if test "$hardcode_action" = relink; then
8966549e21daSmrg	# Fast installation is not supported
8967549e21daSmrg	link_command="$compile_var$compile_command$compile_rpath"
8968549e21daSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969549e21daSmrg
8970549e21daSmrg	func_warning "this platform does not like uninstalled shared libraries"
8971549e21daSmrg	func_warning "\`$output' will be relinked during installation"
8972549e21daSmrg      else
8973549e21daSmrg	if test "$fast_install" != no; then
8974549e21daSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8975549e21daSmrg	  if test "$fast_install" = yes; then
8976549e21daSmrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977549e21daSmrg	  else
8978549e21daSmrg	    # fast_install is set to needless
8979549e21daSmrg	    relink_command=
8980549e21daSmrg	  fi
8981ba6a1819Smrg	else
8982549e21daSmrg	  link_command="$compile_var$compile_command$compile_rpath"
8983549e21daSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8984ba6a1819Smrg	fi
8985549e21daSmrg      fi
8986ba6a1819Smrg
8987549e21daSmrg      # Replace the output file specification.
8988549e21daSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8989ba6a1819Smrg
8990549e21daSmrg      # Delete the old output files.
8991549e21daSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8992ba6a1819Smrg
8993549e21daSmrg      func_show_eval "$link_command" 'exit $?'
8994ba6a1819Smrg
89951bedbe3fSmrg      if test -n "$postlink_cmds"; then
89961bedbe3fSmrg	func_to_tool_file "$output_objdir/$outputname"
89971bedbe3fSmrg	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'`
89981bedbe3fSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
89991bedbe3fSmrg      fi
90001bedbe3fSmrg
9001549e21daSmrg      # Now create the wrapper script.
9002549e21daSmrg      func_verbose "creating $output"
9003ba6a1819Smrg
9004549e21daSmrg      # Quote the relink command for shipping.
9005549e21daSmrg      if test -n "$relink_command"; then
9006549e21daSmrg	# Preserve any variables that may affect compiler behavior
9007549e21daSmrg	for var in $variables_saved_for_relink; do
9008549e21daSmrg	  if eval test -z \"\${$var+set}\"; then
9009549e21daSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010549e21daSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011549e21daSmrg	    relink_command="$var=; export $var; $relink_command"
9012549e21daSmrg	  else
9013549e21daSmrg	    func_quote_for_eval "$var_value"
9014549e21daSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015549e21daSmrg	  fi
9016549e21daSmrg	done
9017549e21daSmrg	relink_command="(cd `pwd`; $relink_command)"
9018549e21daSmrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019549e21daSmrg      fi
9020ba6a1819Smrg
9021549e21daSmrg      # Only actually do things if not in dry run mode.
9022549e21daSmrg      $opt_dry_run || {
9023549e21daSmrg	# win32 will think the script is a binary if it has
9024549e21daSmrg	# a .exe suffix, so we strip it off here.
9025549e21daSmrg	case $output in
9026549e21daSmrg	  *.exe) func_stripname '' '.exe' "$output"
9027549e21daSmrg	         output=$func_stripname_result ;;
9028549e21daSmrg	esac
9029549e21daSmrg	# test for cygwin because mv fails w/o .exe extensions
9030549e21daSmrg	case $host in
9031549e21daSmrg	  *cygwin*)
9032549e21daSmrg	    exeext=.exe
9033549e21daSmrg	    func_stripname '' '.exe' "$outputname"
9034549e21daSmrg	    outputname=$func_stripname_result ;;
9035549e21daSmrg	  *) exeext= ;;
9036549e21daSmrg	esac
9037549e21daSmrg	case $host in
9038549e21daSmrg	  *cygwin* | *mingw* )
9039549e21daSmrg	    func_dirname_and_basename "$output" "" "."
9040549e21daSmrg	    output_name=$func_basename_result
9041549e21daSmrg	    output_path=$func_dirname_result
9042549e21daSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043549e21daSmrg	    cwrapper="$output_path/$output_name.exe"
9044549e21daSmrg	    $RM $cwrappersource $cwrapper
9045549e21daSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046549e21daSmrg
9047549e21daSmrg	    func_emit_cwrapperexe_src > $cwrappersource
9048549e21daSmrg
9049549e21daSmrg	    # The wrapper executable is built using the $host compiler,
9050549e21daSmrg	    # because it contains $host paths and files. If cross-
9051549e21daSmrg	    # compiling, it, like the target executable, must be
9052549e21daSmrg	    # executed on the $host or under an emulation environment.
9053549e21daSmrg	    $opt_dry_run || {
9054549e21daSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055549e21daSmrg	      $STRIP $cwrapper
9056549e21daSmrg	    }
9057549e21daSmrg
9058549e21daSmrg	    # Now, create the wrapper script for func_source use:
9059549e21daSmrg	    func_ltwrapper_scriptname $cwrapper
9060549e21daSmrg	    $RM $func_ltwrapper_scriptname_result
9061549e21daSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062549e21daSmrg	    $opt_dry_run || {
9063549e21daSmrg	      # note: this script will not be executed, so do not chmod.
9064549e21daSmrg	      if test "x$build" = "x$host" ; then
9065549e21daSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066ba6a1819Smrg	      else
9067549e21daSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068ba6a1819Smrg	      fi
9069549e21daSmrg	    }
9070549e21daSmrg	  ;;
9071549e21daSmrg	  * )
9072549e21daSmrg	    $RM $output
9073549e21daSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9074ba6a1819Smrg
9075549e21daSmrg	    func_emit_wrapper no > $output
9076549e21daSmrg	    chmod +x $output
9077ba6a1819Smrg	  ;;
9078ba6a1819Smrg	esac
9079549e21daSmrg      }
9080549e21daSmrg      exit $EXIT_SUCCESS
9081549e21daSmrg      ;;
9082549e21daSmrg    esac
9083ba6a1819Smrg
9084549e21daSmrg    # See if we need to build an old-fashioned archive.
9085549e21daSmrg    for oldlib in $oldlibs; do
9086ba6a1819Smrg
9087549e21daSmrg      if test "$build_libtool_libs" = convenience; then
9088549e21daSmrg	oldobjs="$libobjs_save $symfileobj"
9089549e21daSmrg	addlibs="$convenience"
9090549e21daSmrg	build_libtool_libs=no
9091549e21daSmrg      else
9092549e21daSmrg	if test "$build_libtool_libs" = module; then
9093549e21daSmrg	  oldobjs="$libobjs_save"
9094549e21daSmrg	  build_libtool_libs=no
9095549e21daSmrg	else
9096549e21daSmrg	  oldobjs="$old_deplibs $non_pic_objects"
9097549e21daSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
90981bedbe3fSmrg	    func_append oldobjs " $symfileobj"
9099549e21daSmrg	  fi
9100549e21daSmrg	fi
9101549e21daSmrg	addlibs="$old_convenience"
9102ba6a1819Smrg      fi
9103ba6a1819Smrg
9104549e21daSmrg      if test -n "$addlibs"; then
9105549e21daSmrg	gentop="$output_objdir/${outputname}x"
91061bedbe3fSmrg	func_append generated " $gentop"
9107ba6a1819Smrg
9108549e21daSmrg	func_extract_archives $gentop $addlibs
91091bedbe3fSmrg	func_append oldobjs " $func_extract_archives_result"
9110549e21daSmrg      fi
9111ba6a1819Smrg
9112549e21daSmrg      # Do each command in the archive commands.
9113549e21daSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114549e21daSmrg	cmds=$old_archive_from_new_cmds
9115549e21daSmrg      else
9116ba6a1819Smrg
9117549e21daSmrg	# Add any objects from preloaded convenience libraries
9118549e21daSmrg	if test -n "$dlprefiles"; then
9119549e21daSmrg	  gentop="$output_objdir/${outputname}x"
91201bedbe3fSmrg	  func_append generated " $gentop"
9121ba6a1819Smrg
9122549e21daSmrg	  func_extract_archives $gentop $dlprefiles
91231bedbe3fSmrg	  func_append oldobjs " $func_extract_archives_result"
9124549e21daSmrg	fi
9125ba6a1819Smrg
9126549e21daSmrg	# POSIX demands no paths to be encoded in archives.  We have
9127549e21daSmrg	# to avoid creating archives with duplicate basenames if we
9128549e21daSmrg	# might have to extract them afterwards, e.g., when creating a
9129549e21daSmrg	# static archive out of a convenience library, or when linking
9130549e21daSmrg	# the entirety of a libtool archive into another (currently
9131549e21daSmrg	# not supported by libtool).
9132549e21daSmrg	if (for obj in $oldobjs
9133549e21daSmrg	    do
9134549e21daSmrg	      func_basename "$obj"
9135549e21daSmrg	      $ECHO "$func_basename_result"
9136549e21daSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137549e21daSmrg	  :
9138549e21daSmrg	else
9139549e21daSmrg	  echo "copying selected object files to avoid basename conflicts..."
9140549e21daSmrg	  gentop="$output_objdir/${outputname}x"
91411bedbe3fSmrg	  func_append generated " $gentop"
9142549e21daSmrg	  func_mkdir_p "$gentop"
9143549e21daSmrg	  save_oldobjs=$oldobjs
9144549e21daSmrg	  oldobjs=
9145549e21daSmrg	  counter=1
9146549e21daSmrg	  for obj in $save_oldobjs
9147549e21daSmrg	  do
9148549e21daSmrg	    func_basename "$obj"
9149549e21daSmrg	    objbase="$func_basename_result"
9150549e21daSmrg	    case " $oldobjs " in
9151549e21daSmrg	    " ") oldobjs=$obj ;;
9152549e21daSmrg	    *[\ /]"$objbase "*)
9153549e21daSmrg	      while :; do
9154549e21daSmrg		# Make sure we don't pick an alternate name that also
9155549e21daSmrg		# overlaps.
9156549e21daSmrg		newobj=lt$counter-$objbase
9157549e21daSmrg		func_arith $counter + 1
9158549e21daSmrg		counter=$func_arith_result
9159549e21daSmrg		case " $oldobjs " in
9160549e21daSmrg		*[\ /]"$newobj "*) ;;
9161549e21daSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162549e21daSmrg		esac
9163549e21daSmrg	      done
9164549e21daSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
91651bedbe3fSmrg	      func_append oldobjs " $gentop/$newobj"
9166549e21daSmrg	      ;;
91671bedbe3fSmrg	    *) func_append oldobjs " $obj" ;;
9168549e21daSmrg	    esac
9169ba6a1819Smrg	  done
9170ba6a1819Smrg	fi
91711bedbe3fSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
91721bedbe3fSmrg	tool_oldlib=$func_to_tool_file_result
9173549e21daSmrg	eval cmds=\"$old_archive_cmds\"
9174ba6a1819Smrg
9175549e21daSmrg	func_len " $cmds"
9176549e21daSmrg	len=$func_len_result
9177549e21daSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178549e21daSmrg	  cmds=$old_archive_cmds
91791bedbe3fSmrg	elif test -n "$archiver_list_spec"; then
91801bedbe3fSmrg	  func_verbose "using command file archive linking..."
91811bedbe3fSmrg	  for obj in $oldobjs
91821bedbe3fSmrg	  do
91831bedbe3fSmrg	    func_to_tool_file "$obj"
91841bedbe3fSmrg	    $ECHO "$func_to_tool_file_result"
91851bedbe3fSmrg	  done > $output_objdir/$libname.libcmd
91861bedbe3fSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
91871bedbe3fSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
91881bedbe3fSmrg	  cmds=$old_archive_cmds
9189549e21daSmrg	else
9190549e21daSmrg	  # the command line is too long to link in one step, link in parts
9191549e21daSmrg	  func_verbose "using piecewise archive linking..."
9192549e21daSmrg	  save_RANLIB=$RANLIB
9193549e21daSmrg	  RANLIB=:
9194549e21daSmrg	  objlist=
9195549e21daSmrg	  concat_cmds=
9196549e21daSmrg	  save_oldobjs=$oldobjs
9197549e21daSmrg	  oldobjs=
9198549e21daSmrg	  # Is there a better way of finding the last object in the list?
9199549e21daSmrg	  for obj in $save_oldobjs
9200549e21daSmrg	  do
9201549e21daSmrg	    last_oldobj=$obj
9202549e21daSmrg	  done
9203549e21daSmrg	  eval test_cmds=\"$old_archive_cmds\"
9204549e21daSmrg	  func_len " $test_cmds"
9205549e21daSmrg	  len0=$func_len_result
9206549e21daSmrg	  len=$len0
9207549e21daSmrg	  for obj in $save_oldobjs
9208549e21daSmrg	  do
9209549e21daSmrg	    func_len " $obj"
9210549e21daSmrg	    func_arith $len + $func_len_result
9211549e21daSmrg	    len=$func_arith_result
9212549e21daSmrg	    func_append objlist " $obj"
9213549e21daSmrg	    if test "$len" -lt "$max_cmd_len"; then
9214549e21daSmrg	      :
9215549e21daSmrg	    else
9216549e21daSmrg	      # the above command should be used before it gets too long
9217549e21daSmrg	      oldobjs=$objlist
9218549e21daSmrg	      if test "$obj" = "$last_oldobj" ; then
9219549e21daSmrg		RANLIB=$save_RANLIB
9220549e21daSmrg	      fi
9221549e21daSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222549e21daSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223549e21daSmrg	      objlist=
9224549e21daSmrg	      len=$len0
9225549e21daSmrg	    fi
9226549e21daSmrg	  done
9227549e21daSmrg	  RANLIB=$save_RANLIB
9228549e21daSmrg	  oldobjs=$objlist
9229549e21daSmrg	  if test "X$oldobjs" = "X" ; then
9230549e21daSmrg	    eval cmds=\"\$concat_cmds\"
9231549e21daSmrg	  else
9232549e21daSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233549e21daSmrg	  fi
9234549e21daSmrg	fi
9235549e21daSmrg      fi
9236549e21daSmrg      func_execute_cmds "$cmds" 'exit $?'
9237ba6a1819Smrg    done
9238ba6a1819Smrg
9239549e21daSmrg    test -n "$generated" && \
9240549e21daSmrg      func_show_eval "${RM}r$generated"
9241ba6a1819Smrg
9242549e21daSmrg    # Now create the libtool archive.
9243549e21daSmrg    case $output in
9244549e21daSmrg    *.la)
9245549e21daSmrg      old_library=
9246549e21daSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247549e21daSmrg      func_verbose "creating $output"
9248ba6a1819Smrg
9249549e21daSmrg      # Preserve any variables that may affect compiler behavior
9250549e21daSmrg      for var in $variables_saved_for_relink; do
9251549e21daSmrg	if eval test -z \"\${$var+set}\"; then
9252549e21daSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253549e21daSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254549e21daSmrg	  relink_command="$var=; export $var; $relink_command"
9255ba6a1819Smrg	else
9256549e21daSmrg	  func_quote_for_eval "$var_value"
9257549e21daSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258ba6a1819Smrg	fi
9259549e21daSmrg      done
9260549e21daSmrg      # Quote the link command for shipping.
9261549e21daSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9262549e21daSmrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263549e21daSmrg      if test "$hardcode_automatic" = yes ; then
9264549e21daSmrg	relink_command=
9265549e21daSmrg      fi
9266ba6a1819Smrg
9267549e21daSmrg      # Only create the output if not a dry run.
9268549e21daSmrg      $opt_dry_run || {
9269549e21daSmrg	for installed in no yes; do
9270549e21daSmrg	  if test "$installed" = yes; then
9271549e21daSmrg	    if test -z "$install_libdir"; then
9272549e21daSmrg	      break
9273549e21daSmrg	    fi
9274549e21daSmrg	    output="$output_objdir/$outputname"i
9275549e21daSmrg	    # Replace all uninstalled libtool libraries with the installed ones
9276549e21daSmrg	    newdependency_libs=
9277549e21daSmrg	    for deplib in $dependency_libs; do
9278549e21daSmrg	      case $deplib in
9279549e21daSmrg	      *.la)
9280549e21daSmrg		func_basename "$deplib"
9281549e21daSmrg		name="$func_basename_result"
92821bedbe3fSmrg		func_resolve_sysroot "$deplib"
92831bedbe3fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284549e21daSmrg		test -z "$libdir" && \
9285549e21daSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
92861bedbe3fSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
92871bedbe3fSmrg		;;
92881bedbe3fSmrg	      -L*)
92891bedbe3fSmrg		func_stripname -L '' "$deplib"
92901bedbe3fSmrg		func_replace_sysroot "$func_stripname_result"
92911bedbe3fSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
92921bedbe3fSmrg		;;
92931bedbe3fSmrg	      -R*)
92941bedbe3fSmrg		func_stripname -R '' "$deplib"
92951bedbe3fSmrg		func_replace_sysroot "$func_stripname_result"
92961bedbe3fSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
9297549e21daSmrg		;;
92981bedbe3fSmrg	      *) func_append newdependency_libs " $deplib" ;;
9299549e21daSmrg	      esac
9300549e21daSmrg	    done
9301549e21daSmrg	    dependency_libs="$newdependency_libs"
9302549e21daSmrg	    newdlfiles=
9303549e21daSmrg
9304549e21daSmrg	    for lib in $dlfiles; do
9305549e21daSmrg	      case $lib in
9306549e21daSmrg	      *.la)
9307549e21daSmrg	        func_basename "$lib"
9308549e21daSmrg		name="$func_basename_result"
9309549e21daSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310549e21daSmrg		test -z "$libdir" && \
9311549e21daSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93121bedbe3fSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313549e21daSmrg		;;
93141bedbe3fSmrg	      *) func_append newdlfiles " $lib" ;;
9315549e21daSmrg	      esac
9316549e21daSmrg	    done
9317549e21daSmrg	    dlfiles="$newdlfiles"
9318549e21daSmrg	    newdlprefiles=
9319549e21daSmrg	    for lib in $dlprefiles; do
9320549e21daSmrg	      case $lib in
9321549e21daSmrg	      *.la)
9322549e21daSmrg		# Only pass preopened files to the pseudo-archive (for
9323549e21daSmrg		# eventual linking with the app. that links it) if we
9324549e21daSmrg		# didn't already link the preopened objects directly into
9325549e21daSmrg		# the library:
9326549e21daSmrg		func_basename "$lib"
9327549e21daSmrg		name="$func_basename_result"
9328549e21daSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329549e21daSmrg		test -z "$libdir" && \
9330549e21daSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93311bedbe3fSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332549e21daSmrg		;;
9333549e21daSmrg	      esac
9334549e21daSmrg	    done
9335549e21daSmrg	    dlprefiles="$newdlprefiles"
9336549e21daSmrg	  else
9337549e21daSmrg	    newdlfiles=
9338549e21daSmrg	    for lib in $dlfiles; do
9339549e21daSmrg	      case $lib in
9340549e21daSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341549e21daSmrg		*) abs=`pwd`"/$lib" ;;
9342549e21daSmrg	      esac
93431bedbe3fSmrg	      func_append newdlfiles " $abs"
9344549e21daSmrg	    done
9345549e21daSmrg	    dlfiles="$newdlfiles"
9346549e21daSmrg	    newdlprefiles=
9347549e21daSmrg	    for lib in $dlprefiles; do
9348549e21daSmrg	      case $lib in
9349549e21daSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350549e21daSmrg		*) abs=`pwd`"/$lib" ;;
9351549e21daSmrg	      esac
93521bedbe3fSmrg	      func_append newdlprefiles " $abs"
9353549e21daSmrg	    done
9354549e21daSmrg	    dlprefiles="$newdlprefiles"
9355549e21daSmrg	  fi
9356549e21daSmrg	  $RM $output
9357549e21daSmrg	  # place dlname in correct position for cygwin
9358549e21daSmrg	  # In fact, it would be nice if we could use this code for all target
9359549e21daSmrg	  # systems that can't hard-code library paths into their executables
9360549e21daSmrg	  # and that have no shared library path variable independent of PATH,
9361549e21daSmrg	  # but it turns out we can't easily determine that from inspecting
9362549e21daSmrg	  # libtool variables, so we have to hard-code the OSs to which it
9363549e21daSmrg	  # applies here; at the moment, that means platforms that use the PE
9364549e21daSmrg	  # object format with DLL files.  See the long comment at the top of
9365549e21daSmrg	  # tests/bindir.at for full details.
9366549e21daSmrg	  tdlname=$dlname
9367549e21daSmrg	  case $host,$output,$installed,$module,$dlname in
9368549e21daSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9369549e21daSmrg	      # If a -bindir argument was supplied, place the dll there.
9370549e21daSmrg	      if test "x$bindir" != x ;
9371549e21daSmrg	      then
9372549e21daSmrg		func_relative_path "$install_libdir" "$bindir"
9373549e21daSmrg		tdlname=$func_relative_path_result$dlname
9374549e21daSmrg	      else
9375549e21daSmrg		# Otherwise fall back on heuristic.
9376549e21daSmrg		tdlname=../bin/$dlname
9377549e21daSmrg	      fi
9378549e21daSmrg	      ;;
9379549e21daSmrg	  esac
9380549e21daSmrg	  $ECHO > $output "\
9381549e21daSmrg# $outputname - a libtool library file
9382549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383549e21daSmrg#
9384549e21daSmrg# Please DO NOT delete this file!
9385549e21daSmrg# It is necessary for linking the library.
9386ba6a1819Smrg
9387549e21daSmrg# The name that we can dlopen(3).
9388549e21daSmrgdlname='$tdlname'
9389ba6a1819Smrg
9390549e21daSmrg# Names of this library.
9391549e21daSmrglibrary_names='$library_names'
9392ba6a1819Smrg
9393549e21daSmrg# The name of the static archive.
9394549e21daSmrgold_library='$old_library'
9395ba6a1819Smrg
9396549e21daSmrg# Linker flags that can not go in dependency_libs.
9397549e21daSmrginherited_linker_flags='$new_inherited_linker_flags'
9398ba6a1819Smrg
9399549e21daSmrg# Libraries that this one depends upon.
9400549e21daSmrgdependency_libs='$dependency_libs'
9401ba6a1819Smrg
9402549e21daSmrg# Names of additional weak libraries provided by this library
9403549e21daSmrgweak_library_names='$weak_libs'
9404ba6a1819Smrg
9405549e21daSmrg# Version information for $libname.
9406549e21daSmrgcurrent=$current
9407549e21daSmrgage=$age
9408549e21daSmrgrevision=$revision
9409ba6a1819Smrg
9410549e21daSmrg# Is this an already installed library?
9411549e21daSmrginstalled=$installed
9412ba6a1819Smrg
9413549e21daSmrg# Should we warn about portability when linking against -modules?
9414549e21daSmrgshouldnotlink=$module
9415ba6a1819Smrg
9416549e21daSmrg# Files to dlopen/dlpreopen
9417549e21daSmrgdlopen='$dlfiles'
9418549e21daSmrgdlpreopen='$dlprefiles'
9419ba6a1819Smrg
9420549e21daSmrg# Directory that this library needs to be installed in:
9421549e21daSmrglibdir='$install_libdir'"
9422549e21daSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423549e21daSmrg	    $ECHO >> $output "\
9424549e21daSmrgrelink_command=\"$relink_command\""
9425549e21daSmrg	  fi
9426549e21daSmrg	done
9427549e21daSmrg      }
9428ba6a1819Smrg
9429549e21daSmrg      # Do a symbolic link so that the libtool archive can be found in
9430549e21daSmrg      # LD_LIBRARY_PATH before the program is installed.
9431549e21daSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432549e21daSmrg      ;;
9433549e21daSmrg    esac
9434549e21daSmrg    exit $EXIT_SUCCESS
9435549e21daSmrg}
9436ba6a1819Smrg
94371bedbe3fSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438549e21daSmrg    func_mode_link ${1+"$@"}
9439ba6a1819Smrg
9440ba6a1819Smrg
9441549e21daSmrg# func_mode_uninstall arg...
9442549e21daSmrgfunc_mode_uninstall ()
9443549e21daSmrg{
9444549e21daSmrg    $opt_debug
9445549e21daSmrg    RM="$nonopt"
9446ba6a1819Smrg    files=
9447ba6a1819Smrg    rmforce=
9448ba6a1819Smrg    exit_status=0
9449ba6a1819Smrg
9450ba6a1819Smrg    # This variable tells wrapper scripts just to set variables rather
9451ba6a1819Smrg    # than running their programs.
9452ba6a1819Smrg    libtool_install_magic="$magic"
9453ba6a1819Smrg
9454ba6a1819Smrg    for arg
9455ba6a1819Smrg    do
9456ba6a1819Smrg      case $arg in
94571bedbe3fSmrg      -f) func_append RM " $arg"; rmforce=yes ;;
94581bedbe3fSmrg      -*) func_append RM " $arg" ;;
94591bedbe3fSmrg      *) func_append files " $arg" ;;
9460ba6a1819Smrg      esac
9461ba6a1819Smrg    done
9462ba6a1819Smrg
9463549e21daSmrg    test -z "$RM" && \
9464549e21daSmrg      func_fatal_help "you must specify an RM program"
9465ba6a1819Smrg
9466ba6a1819Smrg    rmdirs=
9467ba6a1819Smrg
9468ba6a1819Smrg    for file in $files; do
9469549e21daSmrg      func_dirname "$file" "" "."
9470549e21daSmrg      dir="$func_dirname_result"
9471549e21daSmrg      if test "X$dir" = X.; then
94721bedbe3fSmrg	odir="$objdir"
9473ba6a1819Smrg      else
94741bedbe3fSmrg	odir="$dir/$objdir"
9475ba6a1819Smrg      fi
9476549e21daSmrg      func_basename "$file"
9477549e21daSmrg      name="$func_basename_result"
94781bedbe3fSmrg      test "$opt_mode" = uninstall && odir="$dir"
9479ba6a1819Smrg
94801bedbe3fSmrg      # Remember odir for removal later, being careful to avoid duplicates
94811bedbe3fSmrg      if test "$opt_mode" = clean; then
9482ba6a1819Smrg	case " $rmdirs " in
94831bedbe3fSmrg	  *" $odir "*) ;;
94841bedbe3fSmrg	  *) func_append rmdirs " $odir" ;;
9485ba6a1819Smrg	esac
9486ba6a1819Smrg      fi
9487ba6a1819Smrg
9488ba6a1819Smrg      # Don't error if the file doesn't exist and rm -f was used.
9489549e21daSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490549e21daSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491549e21daSmrg	 test -f "$file"; then
9492ba6a1819Smrg	:
9493ba6a1819Smrg      elif test -d "$file"; then
9494ba6a1819Smrg	exit_status=1
9495ba6a1819Smrg	continue
9496ba6a1819Smrg      elif test "$rmforce" = yes; then
9497ba6a1819Smrg	continue
9498ba6a1819Smrg      fi
9499ba6a1819Smrg
9500ba6a1819Smrg      rmfiles="$file"
9501ba6a1819Smrg
9502ba6a1819Smrg      case $name in
9503ba6a1819Smrg      *.la)
9504ba6a1819Smrg	# Possibly a libtool archive, so verify it.
9505549e21daSmrg	if func_lalib_p "$file"; then
9506549e21daSmrg	  func_source $dir/$name
9507ba6a1819Smrg
9508ba6a1819Smrg	  # Delete the libtool libraries and symlinks.
9509ba6a1819Smrg	  for n in $library_names; do
95101bedbe3fSmrg	    func_append rmfiles " $odir/$n"
9511ba6a1819Smrg	  done
95121bedbe3fSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9513ba6a1819Smrg
95141bedbe3fSmrg	  case "$opt_mode" in
9515ba6a1819Smrg	  clean)
95161bedbe3fSmrg	    case " $library_names " in
9517ba6a1819Smrg	    *" $dlname "*) ;;
95181bedbe3fSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9519ba6a1819Smrg	    esac
95201bedbe3fSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9521ba6a1819Smrg	    ;;
9522ba6a1819Smrg	  uninstall)
9523ba6a1819Smrg	    if test -n "$library_names"; then
9524ba6a1819Smrg	      # Do each command in the postuninstall commands.
9525549e21daSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9526ba6a1819Smrg	    fi
9527ba6a1819Smrg
9528ba6a1819Smrg	    if test -n "$old_library"; then
9529ba6a1819Smrg	      # Do each command in the old_postuninstall commands.
9530549e21daSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9531ba6a1819Smrg	    fi
9532ba6a1819Smrg	    # FIXME: should reinstall the best remaining shared library.
9533ba6a1819Smrg	    ;;
9534ba6a1819Smrg	  esac
9535ba6a1819Smrg	fi
9536ba6a1819Smrg	;;
9537ba6a1819Smrg
9538ba6a1819Smrg      *.lo)
9539ba6a1819Smrg	# Possibly a libtool object, so verify it.
9540549e21daSmrg	if func_lalib_p "$file"; then
9541ba6a1819Smrg
9542ba6a1819Smrg	  # Read the .lo file
9543549e21daSmrg	  func_source $dir/$name
9544ba6a1819Smrg
9545ba6a1819Smrg	  # Add PIC object to the list of files to remove.
9546549e21daSmrg	  if test -n "$pic_object" &&
9547549e21daSmrg	     test "$pic_object" != none; then
95481bedbe3fSmrg	    func_append rmfiles " $dir/$pic_object"
9549ba6a1819Smrg	  fi
9550ba6a1819Smrg
9551ba6a1819Smrg	  # Add non-PIC object to the list of files to remove.
9552549e21daSmrg	  if test -n "$non_pic_object" &&
9553549e21daSmrg	     test "$non_pic_object" != none; then
95541bedbe3fSmrg	    func_append rmfiles " $dir/$non_pic_object"
9555ba6a1819Smrg	  fi
9556ba6a1819Smrg	fi
9557ba6a1819Smrg	;;
9558ba6a1819Smrg
9559ba6a1819Smrg      *)
95601bedbe3fSmrg	if test "$opt_mode" = clean ; then
9561ba6a1819Smrg	  noexename=$name
9562ba6a1819Smrg	  case $file in
9563ba6a1819Smrg	  *.exe)
9564549e21daSmrg	    func_stripname '' '.exe' "$file"
9565549e21daSmrg	    file=$func_stripname_result
9566549e21daSmrg	    func_stripname '' '.exe' "$name"
9567549e21daSmrg	    noexename=$func_stripname_result
9568ba6a1819Smrg	    # $file with .exe has already been added to rmfiles,
9569ba6a1819Smrg	    # add $file without .exe
95701bedbe3fSmrg	    func_append rmfiles " $file"
9571ba6a1819Smrg	    ;;
9572ba6a1819Smrg	  esac
9573ba6a1819Smrg	  # Do a test to see if this is a libtool program.
9574549e21daSmrg	  if func_ltwrapper_p "$file"; then
9575549e21daSmrg	    if func_ltwrapper_executable_p "$file"; then
9576549e21daSmrg	      func_ltwrapper_scriptname "$file"
9577549e21daSmrg	      relink_command=
9578549e21daSmrg	      func_source $func_ltwrapper_scriptname_result
95791bedbe3fSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580549e21daSmrg	    else
9581549e21daSmrg	      relink_command=
9582549e21daSmrg	      func_source $dir/$noexename
9583549e21daSmrg	    fi
9584ba6a1819Smrg
9585ba6a1819Smrg	    # note $name still contains .exe if it was in $file originally
9586ba6a1819Smrg	    # as does the version of $file that was added into $rmfiles
95871bedbe3fSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9588ba6a1819Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
95891bedbe3fSmrg	      func_append rmfiles " $odir/lt-$name"
9590ba6a1819Smrg	    fi
9591ba6a1819Smrg	    if test "X$noexename" != "X$name" ; then
95921bedbe3fSmrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9593ba6a1819Smrg	    fi
9594ba6a1819Smrg	  fi
9595ba6a1819Smrg	fi
9596ba6a1819Smrg	;;
9597ba6a1819Smrg      esac
9598549e21daSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9599ba6a1819Smrg    done
9600ba6a1819Smrg
9601ba6a1819Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
9602ba6a1819Smrg    for dir in $rmdirs; do
9603ba6a1819Smrg      if test -d "$dir"; then
9604549e21daSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9605ba6a1819Smrg      fi
9606ba6a1819Smrg    done
9607ba6a1819Smrg
9608ba6a1819Smrg    exit $exit_status
9609549e21daSmrg}
9610ba6a1819Smrg
96111bedbe3fSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612549e21daSmrg    func_mode_uninstall ${1+"$@"}
9613ba6a1819Smrg
96141bedbe3fSmrgtest -z "$opt_mode" && {
9615549e21daSmrg  help="$generic_help"
9616549e21daSmrg  func_fatal_help "you must specify a MODE"
9617549e21daSmrg}
9618549e21daSmrg
9619549e21daSmrgtest -z "$exec_cmd" && \
96201bedbe3fSmrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9621ba6a1819Smrg
9622ba6a1819Smrgif test -n "$exec_cmd"; then
9623549e21daSmrg  eval exec "$exec_cmd"
9624ba6a1819Smrg  exit $EXIT_FAILURE
9625ba6a1819Smrgfi
9626ba6a1819Smrg
9627549e21daSmrgexit $exit_status
9628ba6a1819Smrg
9629ba6a1819Smrg
9630ba6a1819Smrg# The TAGs below are defined such that we never get into a situation
9631ba6a1819Smrg# in which we disable both kinds of libraries.  Given conflicting
9632ba6a1819Smrg# choices, we go for a static library, that is the most portable,
9633ba6a1819Smrg# since we can't tell whether shared libraries were disabled because
9634ba6a1819Smrg# the user asked for that or because the platform doesn't support
9635ba6a1819Smrg# them.  This is particularly important on AIX, because we don't
9636ba6a1819Smrg# support having both static and shared libraries enabled at the same
9637ba6a1819Smrg# time on that platform, so we default to a shared-only configuration.
9638ba6a1819Smrg# If a disable-shared tag is given, we'll fallback to a static-only
9639ba6a1819Smrg# configuration.  But we'll never go from static-only to shared-only.
9640ba6a1819Smrg
9641ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642549e21daSmrgbuild_libtool_libs=no
9643549e21daSmrgbuild_old_libs=yes
9644ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
9645ba6a1819Smrg
9646ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647549e21daSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9648ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-static
9649ba6a1819Smrg
9650ba6a1819Smrg# Local Variables:
9651ba6a1819Smrg# mode:shell-script
9652ba6a1819Smrg# sh-indentation:2
9653ba6a1819Smrg# End:
9654549e21daSmrg# vi:sw=2
9655549e21daSmrg
9656