ltmain.sh revision 74c14cd6
1e35772b2Smrg
274c14cd6Smrg# libtool (GNU libtool) 2.4.2
3e35772b2Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4e35772b2Smrg
574c14cd6Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
674c14cd6Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7e35772b2Smrg# This is free software; see the source for copying conditions.  There is NO
8e35772b2Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9e35772b2Smrg
10e35772b2Smrg# GNU Libtool is free software; you can redistribute it and/or modify
1172b676d7Smrg# it under the terms of the GNU General Public License as published by
1272b676d7Smrg# the Free Software Foundation; either version 2 of the License, or
1372b676d7Smrg# (at your option) any later version.
1472b676d7Smrg#
15e35772b2Smrg# As a special exception to the GNU General Public License,
16e35772b2Smrg# if you distribute this file as part of a program or library that
17e35772b2Smrg# is built using GNU Libtool, you may include this file under the
18e35772b2Smrg# same distribution terms that you use for the rest of that program.
19e35772b2Smrg#
20e35772b2Smrg# GNU Libtool is distributed in the hope that it will be useful, but
2172b676d7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
2272b676d7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2372b676d7Smrg# General Public License for more details.
2472b676d7Smrg#
2572b676d7Smrg# You should have received a copy of the GNU General Public License
26e35772b2Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27e35772b2Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28e35772b2Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29e35772b2Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
3072b676d7Smrg
31e35772b2Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32e35772b2Smrg#
33e35772b2Smrg# Provide generalized library-building support services.
34e35772b2Smrg#
3574c14cd6Smrg#       --config             show all configuration variables
3674c14cd6Smrg#       --debug              enable verbose shell tracing
3774c14cd6Smrg#   -n, --dry-run            display commands without modifying any files
3874c14cd6Smrg#       --features           display basic configuration information and exit
3974c14cd6Smrg#       --mode=MODE          use operation mode MODE
4074c14cd6Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
4174c14cd6Smrg#       --quiet, --silent    don't print informational messages
4274c14cd6Smrg#       --no-quiet, --no-silent
4374c14cd6Smrg#                            print informational messages (default)
4474c14cd6Smrg#       --no-warn            don't display warning messages
4574c14cd6Smrg#       --tag=TAG            use configuration variables from tag TAG
4674c14cd6Smrg#   -v, --verbose            print more informational messages than default
4774c14cd6Smrg#       --no-verbose         don't print the extra informational messages
4874c14cd6Smrg#       --version            print version information
4974c14cd6Smrg#   -h, --help, --help-all   print short, long, or detailed help message
50e35772b2Smrg#
51e35772b2Smrg# MODE must be one of the following:
52e35772b2Smrg#
5374c14cd6Smrg#         clean              remove files from the build directory
5474c14cd6Smrg#         compile            compile a source file into a libtool object
5574c14cd6Smrg#         execute            automatically set library path, then run a program
5674c14cd6Smrg#         finish             complete the installation of libtool libraries
5774c14cd6Smrg#         install            install libraries or executables
5874c14cd6Smrg#         link               create a library or an executable
5974c14cd6Smrg#         uninstall          remove libraries from an installed directory
60e35772b2Smrg#
6174c14cd6Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
6274c14cd6Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63e35772b2Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64e35772b2Smrg#
65e35772b2Smrg# When reporting a bug, please describe a test case to reproduce it and
66e35772b2Smrg# include the following information:
67e35772b2Smrg#
6874c14cd6Smrg#         host-triplet:	$host
6974c14cd6Smrg#         shell:		$SHELL
7074c14cd6Smrg#         compiler:		$LTCC
7174c14cd6Smrg#         compiler flags:		$LTCFLAGS
7274c14cd6Smrg#         linker:		$LD (gnu? $with_gnu_ld)
7374c14cd6Smrg#         $progname:	(GNU libtool) 2.4.2
7474c14cd6Smrg#         automake:	$automake_version
7574c14cd6Smrg#         autoconf:	$autoconf_version
76e35772b2Smrg#
77e35772b2Smrg# Report bugs to <bug-libtool@gnu.org>.
7874c14cd6Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
7974c14cd6Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
8072b676d7Smrg
8174c14cd6SmrgPROGRAM=libtool
8272b676d7SmrgPACKAGE=libtool
8374c14cd6SmrgVERSION=2.4.2
84e35772b2SmrgTIMESTAMP=""
8574c14cd6Smrgpackage_revision=1.3337
861fd23544Smrg
87e35772b2Smrg# Be Bourne compatible
881fd23544Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
891fd23544Smrg  emulate sh
901fd23544Smrg  NULLCMD=:
911fd23544Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
921fd23544Smrg  # is contrary to our usage.  Disable this feature.
931fd23544Smrg  alias -g '${1+"$@"}'='"$@"'
9472b676d7Smrg  setopt NO_GLOB_SUBST
951fd23544Smrgelse
961fd23544Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
9772b676d7Smrgfi
981fd23544SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
991fd23544SmrgDUALCASE=1; export DUALCASE # for MKS sh
10072b676d7Smrg
10174c14cd6Smrg# A function that is used when there is no print builtin or printf.
10274c14cd6Smrgfunc_fallback_echo ()
10374c14cd6Smrg{
10474c14cd6Smrg  eval 'cat <<_LTECHO_EOF
10574c14cd6Smrg$1
10674c14cd6Smrg_LTECHO_EOF'
10774c14cd6Smrg}
10874c14cd6Smrg
109e35772b2Smrg# NLS nuisances: We save the old values to restore during execute mode.
110e35772b2Smrglt_user_locale=
111e35772b2Smrglt_safe_locale=
1121fd23544Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1131fd23544Smrgdo
1141fd23544Smrg  eval "if test \"\${$lt_var+set}\" = set; then
115e35772b2Smrg          save_$lt_var=\$$lt_var
116e35772b2Smrg          $lt_var=C
1171fd23544Smrg	  export $lt_var
118e35772b2Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119e35772b2Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1201fd23544Smrg	fi"
1211fd23544Smrgdone
12274c14cd6SmrgLC_ALL=C
12374c14cd6SmrgLANGUAGE=C
12474c14cd6Smrgexport LANGUAGE LC_ALL
1251fd23544Smrg
126e35772b2Smrg$lt_unset CDPATH
127e35772b2Smrg
128e35772b2Smrg
12974c14cd6Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
13074c14cd6Smrg# is ksh but when the shell is invoked as "sh" and the current value of
13174c14cd6Smrg# the _XPG environment variable is not equal to 1 (one), the special
13274c14cd6Smrg# positional parameter $0, within a function call, is the name of the
13374c14cd6Smrg# function.
13474c14cd6Smrgprogpath="$0"
135e35772b2Smrg
136e35772b2Smrg
137e35772b2Smrg
138e35772b2Smrg: ${CP="cp -f"}
13974c14cd6Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140e35772b2Smrg: ${MAKE="make"}
141e35772b2Smrg: ${MKDIR="mkdir"}
142e35772b2Smrg: ${MV="mv -f"}
143e35772b2Smrg: ${RM="rm -f"}
144e35772b2Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145e35772b2Smrg: ${Xsed="$SED -e 1s/^X//"}
146e35772b2Smrg
147e35772b2Smrg# Global variables:
148e35772b2SmrgEXIT_SUCCESS=0
149e35772b2SmrgEXIT_FAILURE=1
150e35772b2SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151e35772b2SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152e35772b2Smrg
153e35772b2Smrgexit_status=$EXIT_SUCCESS
15472b676d7Smrg
15572b676d7Smrg# Make sure IFS has a sensible default
15672b676d7Smrglt_nl='
15772b676d7Smrg'
15872b676d7SmrgIFS=" 	$lt_nl"
15972b676d7Smrg
160e35772b2Smrgdirname="s,/[^/]*$,,"
161e35772b2Smrgbasename="s,^.*/,,"
162e35772b2Smrg
16374c14cd6Smrg# func_dirname file append nondir_replacement
16474c14cd6Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
16574c14cd6Smrg# otherwise set result to NONDIR_REPLACEMENT.
16674c14cd6Smrgfunc_dirname ()
16774c14cd6Smrg{
16874c14cd6Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
16974c14cd6Smrg    if test "X$func_dirname_result" = "X${1}"; then
17074c14cd6Smrg      func_dirname_result="${3}"
17174c14cd6Smrg    else
17274c14cd6Smrg      func_dirname_result="$func_dirname_result${2}"
17374c14cd6Smrg    fi
17474c14cd6Smrg} # func_dirname may be replaced by extended shell implementation
17574c14cd6Smrg
17674c14cd6Smrg
17774c14cd6Smrg# func_basename file
17874c14cd6Smrgfunc_basename ()
17974c14cd6Smrg{
18074c14cd6Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
18174c14cd6Smrg} # func_basename may be replaced by extended shell implementation
18274c14cd6Smrg
18374c14cd6Smrg
184e35772b2Smrg# func_dirname_and_basename file append nondir_replacement
185e35772b2Smrg# perform func_basename and func_dirname in a single function
186e35772b2Smrg# call:
187e35772b2Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
188e35772b2Smrg#             add APPEND to the result, otherwise set result
189e35772b2Smrg#             to NONDIR_REPLACEMENT.
190e35772b2Smrg#             value returned in "$func_dirname_result"
191e35772b2Smrg#   basename: Compute filename of FILE.
192e35772b2Smrg#             value retuned in "$func_basename_result"
193e35772b2Smrg# Implementation must be kept synchronized with func_dirname
194e35772b2Smrg# and func_basename. For efficiency, we do not delegate to
195e35772b2Smrg# those functions but instead duplicate the functionality here.
196e35772b2Smrgfunc_dirname_and_basename ()
197e35772b2Smrg{
19874c14cd6Smrg    # Extract subdirectory from the argument.
19974c14cd6Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
20074c14cd6Smrg    if test "X$func_dirname_result" = "X${1}"; then
20174c14cd6Smrg      func_dirname_result="${3}"
20274c14cd6Smrg    else
20374c14cd6Smrg      func_dirname_result="$func_dirname_result${2}"
20474c14cd6Smrg    fi
20574c14cd6Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
20674c14cd6Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
20774c14cd6Smrg
20874c14cd6Smrg
20974c14cd6Smrg# func_stripname prefix suffix name
21074c14cd6Smrg# strip PREFIX and SUFFIX off of NAME.
21174c14cd6Smrg# PREFIX and SUFFIX must not contain globbing or regex special
21274c14cd6Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
21374c14cd6Smrg# dot (in which case that matches only a dot).
21474c14cd6Smrg# func_strip_suffix prefix name
21574c14cd6Smrgfunc_stripname ()
21674c14cd6Smrg{
21774c14cd6Smrg    case ${2} in
21874c14cd6Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
21974c14cd6Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
22074c14cd6Smrg    esac
22174c14cd6Smrg} # func_stripname may be replaced by extended shell implementation
22274c14cd6Smrg
22374c14cd6Smrg
22474c14cd6Smrg# These SED scripts presuppose an absolute path with a trailing slash.
22574c14cd6Smrgpathcar='s,^/\([^/]*\).*$,\1,'
22674c14cd6Smrgpathcdr='s,^/[^/]*,,'
22774c14cd6Smrgremovedotparts=':dotsl
22874c14cd6Smrg		s@/\./@/@g
22974c14cd6Smrg		t dotsl
23074c14cd6Smrg		s,/\.$,/,'
23174c14cd6Smrgcollapseslashes='s@/\{1,\}@/@g'
23274c14cd6Smrgfinalslash='s,/*$,/,'
23374c14cd6Smrg
23474c14cd6Smrg# func_normal_abspath PATH
23574c14cd6Smrg# Remove doubled-up and trailing slashes, "." path components,
23674c14cd6Smrg# and cancel out any ".." path components in PATH after making
23774c14cd6Smrg# it an absolute path.
23874c14cd6Smrg#             value returned in "$func_normal_abspath_result"
23974c14cd6Smrgfunc_normal_abspath ()
24074c14cd6Smrg{
24174c14cd6Smrg  # Start from root dir and reassemble the path.
24274c14cd6Smrg  func_normal_abspath_result=
24374c14cd6Smrg  func_normal_abspath_tpath=$1
24474c14cd6Smrg  func_normal_abspath_altnamespace=
24574c14cd6Smrg  case $func_normal_abspath_tpath in
24674c14cd6Smrg    "")
24774c14cd6Smrg      # Empty path, that just means $cwd.
24874c14cd6Smrg      func_stripname '' '/' "`pwd`"
24974c14cd6Smrg      func_normal_abspath_result=$func_stripname_result
25074c14cd6Smrg      return
25174c14cd6Smrg    ;;
25274c14cd6Smrg    # The next three entries are used to spot a run of precisely
25374c14cd6Smrg    # two leading slashes without using negated character classes;
25474c14cd6Smrg    # we take advantage of case's first-match behaviour.
25574c14cd6Smrg    ///*)
25674c14cd6Smrg      # Unusual form of absolute path, do nothing.
25774c14cd6Smrg    ;;
25874c14cd6Smrg    //*)
25974c14cd6Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
26074c14cd6Smrg      # and for example Cygwin uses it to access remote file shares
26174c14cd6Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
26274c14cd6Smrg      func_normal_abspath_altnamespace=/
26374c14cd6Smrg    ;;
26474c14cd6Smrg    /*)
26574c14cd6Smrg      # Absolute path, do nothing.
26674c14cd6Smrg    ;;
26774c14cd6Smrg    *)
26874c14cd6Smrg      # Relative path, prepend $cwd.
26974c14cd6Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
27074c14cd6Smrg    ;;
27174c14cd6Smrg  esac
27274c14cd6Smrg  # Cancel out all the simple stuff to save iterations.  We also want
27374c14cd6Smrg  # the path to end with a slash for ease of parsing, so make sure
27474c14cd6Smrg  # there is one (and only one) here.
27574c14cd6Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
27674c14cd6Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
27774c14cd6Smrg  while :; do
27874c14cd6Smrg    # Processed it all yet?
27974c14cd6Smrg    if test "$func_normal_abspath_tpath" = / ; then
28074c14cd6Smrg      # If we ascended to the root using ".." the result may be empty now.
28174c14cd6Smrg      if test -z "$func_normal_abspath_result" ; then
28274c14cd6Smrg        func_normal_abspath_result=/
28374c14cd6Smrg      fi
28474c14cd6Smrg      break
28574c14cd6Smrg    fi
28674c14cd6Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
28774c14cd6Smrg        -e "$pathcar"`
28874c14cd6Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
28974c14cd6Smrg        -e "$pathcdr"`
29074c14cd6Smrg    # Figure out what to do with it
29174c14cd6Smrg    case $func_normal_abspath_tcomponent in
29274c14cd6Smrg      "")
29374c14cd6Smrg        # Trailing empty path component, ignore it.
29474c14cd6Smrg      ;;
29574c14cd6Smrg      ..)
29674c14cd6Smrg        # Parent dir; strip last assembled component from result.
29774c14cd6Smrg        func_dirname "$func_normal_abspath_result"
29874c14cd6Smrg        func_normal_abspath_result=$func_dirname_result
29974c14cd6Smrg      ;;
30074c14cd6Smrg      *)
30174c14cd6Smrg        # Actual path component, append it.
30274c14cd6Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
30374c14cd6Smrg      ;;
30474c14cd6Smrg    esac
30574c14cd6Smrg  done
30674c14cd6Smrg  # Restore leading double-slash if one was found on entry.
30774c14cd6Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308e35772b2Smrg}
30972b676d7Smrg
31074c14cd6Smrg# func_relative_path SRCDIR DSTDIR
31174c14cd6Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
31274c14cd6Smrg# slash if non-empty, suitable for immediately appending a filename
31374c14cd6Smrg# without needing to append a separator.
31474c14cd6Smrg#             value returned in "$func_relative_path_result"
31574c14cd6Smrgfunc_relative_path ()
31674c14cd6Smrg{
31774c14cd6Smrg  func_relative_path_result=
31874c14cd6Smrg  func_normal_abspath "$1"
31974c14cd6Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
32074c14cd6Smrg  func_normal_abspath "$2"
32174c14cd6Smrg  func_relative_path_tbindir=$func_normal_abspath_result
32274c14cd6Smrg
32374c14cd6Smrg  # Ascend the tree starting from libdir
32474c14cd6Smrg  while :; do
32574c14cd6Smrg    # check if we have found a prefix of bindir
32674c14cd6Smrg    case $func_relative_path_tbindir in
32774c14cd6Smrg      $func_relative_path_tlibdir)
32874c14cd6Smrg        # found an exact match
32974c14cd6Smrg        func_relative_path_tcancelled=
33074c14cd6Smrg        break
33174c14cd6Smrg        ;;
33274c14cd6Smrg      $func_relative_path_tlibdir*)
33374c14cd6Smrg        # found a matching prefix
33474c14cd6Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
33574c14cd6Smrg        func_relative_path_tcancelled=$func_stripname_result
33674c14cd6Smrg        if test -z "$func_relative_path_result"; then
33774c14cd6Smrg          func_relative_path_result=.
33874c14cd6Smrg        fi
33974c14cd6Smrg        break
34074c14cd6Smrg        ;;
34174c14cd6Smrg      *)
34274c14cd6Smrg        func_dirname $func_relative_path_tlibdir
34374c14cd6Smrg        func_relative_path_tlibdir=${func_dirname_result}
34474c14cd6Smrg        if test "x$func_relative_path_tlibdir" = x ; then
34574c14cd6Smrg          # Have to descend all the way to the root!
34674c14cd6Smrg          func_relative_path_result=../$func_relative_path_result
34774c14cd6Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
34874c14cd6Smrg          break
34974c14cd6Smrg        fi
35074c14cd6Smrg        func_relative_path_result=../$func_relative_path_result
35174c14cd6Smrg        ;;
35274c14cd6Smrg    esac
35374c14cd6Smrg  done
354e35772b2Smrg
35574c14cd6Smrg  # Now calculate path; take care to avoid doubling-up slashes.
35674c14cd6Smrg  func_stripname '' '/' "$func_relative_path_result"
35774c14cd6Smrg  func_relative_path_result=$func_stripname_result
35874c14cd6Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
35974c14cd6Smrg  if test "x$func_stripname_result" != x ; then
36074c14cd6Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
36174c14cd6Smrg  fi
36274c14cd6Smrg
36374c14cd6Smrg  # Normalisation. If bindir is libdir, return empty string,
36474c14cd6Smrg  # else relative path ending with a slash; either way, target
36574c14cd6Smrg  # file name can be directly appended.
36674c14cd6Smrg  if test ! -z "$func_relative_path_result"; then
36774c14cd6Smrg    func_stripname './' '' "$func_relative_path_result/"
36874c14cd6Smrg    func_relative_path_result=$func_stripname_result
36974c14cd6Smrg  fi
37074c14cd6Smrg}
371e35772b2Smrg
372e35772b2Smrg# The name of this program:
373e35772b2Smrgfunc_dirname_and_basename "$progpath"
374e35772b2Smrgprogname=$func_basename_result
375e35772b2Smrg
376e35772b2Smrg# Make sure we have an absolute path for reexecution:
377e35772b2Smrgcase $progpath in
378e35772b2Smrg  [\\/]*|[A-Za-z]:\\*) ;;
379e35772b2Smrg  *[\\/]*)
380e35772b2Smrg     progdir=$func_dirname_result
381e35772b2Smrg     progdir=`cd "$progdir" && pwd`
382e35772b2Smrg     progpath="$progdir/$progname"
383e35772b2Smrg     ;;
384e35772b2Smrg  *)
385e35772b2Smrg     save_IFS="$IFS"
38674c14cd6Smrg     IFS=${PATH_SEPARATOR-:}
387e35772b2Smrg     for progdir in $PATH; do
388e35772b2Smrg       IFS="$save_IFS"
389e35772b2Smrg       test -x "$progdir/$progname" && break
390e35772b2Smrg     done
391e35772b2Smrg     IFS="$save_IFS"
392e35772b2Smrg     test -n "$progdir" || progdir=`pwd`
393e35772b2Smrg     progpath="$progdir/$progname"
394e35772b2Smrg     ;;
395e35772b2Smrgesac
396e35772b2Smrg
397e35772b2Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
398e35772b2Smrg# metacharacters that are still active within double-quoted strings.
399e35772b2SmrgXsed="${SED}"' -e 1s/^X//'
400e35772b2Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401e35772b2Smrg
402e35772b2Smrg# Same as above, but do not quote variable references.
403e35772b2Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404e35772b2Smrg
40574c14cd6Smrg# Sed substitution that turns a string into a regex matching for the
40674c14cd6Smrg# string literally.
40774c14cd6Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
40874c14cd6Smrg
40974c14cd6Smrg# Sed substitution that converts a w32 file name or path
41074c14cd6Smrg# which contains forward slashes, into one that contains
41174c14cd6Smrg# (escaped) backslashes.  A very naive implementation.
41274c14cd6Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
41374c14cd6Smrg
414e35772b2Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
415e35772b2Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416e35772b2Smrg# in input to double_quote_subst, that '$' was protected from expansion.
417e35772b2Smrg# Since each input `\' is now two `\'s, look for any number of runs of
418e35772b2Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419e35772b2Smrgbs='\\'
420e35772b2Smrgbs2='\\\\'
421e35772b2Smrgbs4='\\\\\\\\'
422e35772b2Smrgdollar='\$'
423e35772b2Smrgsed_double_backslash="\
424e35772b2Smrg  s/$bs4/&\\
425e35772b2Smrg/g
426e35772b2Smrg  s/^$bs2$dollar/$bs&/
427e35772b2Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428e35772b2Smrg  s/\n//g"
429e35772b2Smrg
430e35772b2Smrg# Standard options:
431e35772b2Smrgopt_dry_run=false
432e35772b2Smrgopt_help=false
433e35772b2Smrgopt_quiet=false
434e35772b2Smrgopt_verbose=false
435e35772b2Smrgopt_warning=:
436e35772b2Smrg
437e35772b2Smrg# func_echo arg...
438e35772b2Smrg# Echo program name prefixed message, along with the current mode
439e35772b2Smrg# name if it has been set yet.
440e35772b2Smrgfunc_echo ()
441e35772b2Smrg{
44274c14cd6Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443e35772b2Smrg}
444e35772b2Smrg
445e35772b2Smrg# func_verbose arg...
446e35772b2Smrg# Echo program name prefixed message in verbose mode only.
447e35772b2Smrgfunc_verbose ()
448e35772b2Smrg{
449e35772b2Smrg    $opt_verbose && func_echo ${1+"$@"}
450e35772b2Smrg
451e35772b2Smrg    # A bug in bash halts the script if the last line of a function
452e35772b2Smrg    # fails when set -e is in force, so we need another command to
453e35772b2Smrg    # work around that:
454e35772b2Smrg    :
455e35772b2Smrg}
456e35772b2Smrg
45774c14cd6Smrg# func_echo_all arg...
45874c14cd6Smrg# Invoke $ECHO with all args, space-separated.
45974c14cd6Smrgfunc_echo_all ()
46074c14cd6Smrg{
46174c14cd6Smrg    $ECHO "$*"
46274c14cd6Smrg}
46374c14cd6Smrg
464e35772b2Smrg# func_error arg...
465e35772b2Smrg# Echo program name prefixed message to standard error.
466e35772b2Smrgfunc_error ()
467e35772b2Smrg{
46874c14cd6Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469e35772b2Smrg}
470e35772b2Smrg
471e35772b2Smrg# func_warning arg...
472e35772b2Smrg# Echo program name prefixed warning message to standard error.
473e35772b2Smrgfunc_warning ()
474e35772b2Smrg{
47574c14cd6Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476e35772b2Smrg
477e35772b2Smrg    # bash bug again:
478e35772b2Smrg    :
479e35772b2Smrg}
480e35772b2Smrg
481e35772b2Smrg# func_fatal_error arg...
482e35772b2Smrg# Echo program name prefixed message to standard error, and exit.
483e35772b2Smrgfunc_fatal_error ()
484e35772b2Smrg{
485e35772b2Smrg    func_error ${1+"$@"}
486e35772b2Smrg    exit $EXIT_FAILURE
487e35772b2Smrg}
488e35772b2Smrg
489e35772b2Smrg# func_fatal_help arg...
490e35772b2Smrg# Echo program name prefixed message to standard error, followed by
491e35772b2Smrg# a help hint, and exit.
492e35772b2Smrgfunc_fatal_help ()
493e35772b2Smrg{
494e35772b2Smrg    func_error ${1+"$@"}
495e35772b2Smrg    func_fatal_error "$help"
496e35772b2Smrg}
497e35772b2Smrghelp="Try \`$progname --help' for more information."  ## default
498e35772b2Smrg
499e35772b2Smrg
500e35772b2Smrg# func_grep expression filename
501e35772b2Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502e35772b2Smrgfunc_grep ()
503e35772b2Smrg{
504e35772b2Smrg    $GREP "$1" "$2" >/dev/null 2>&1
505e35772b2Smrg}
506e35772b2Smrg
507e35772b2Smrg
508e35772b2Smrg# func_mkdir_p directory-path
509e35772b2Smrg# Make sure the entire path to DIRECTORY-PATH is available.
510e35772b2Smrgfunc_mkdir_p ()
511e35772b2Smrg{
512e35772b2Smrg    my_directory_path="$1"
513e35772b2Smrg    my_dir_list=
514e35772b2Smrg
515e35772b2Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516e35772b2Smrg
517e35772b2Smrg      # Protect directory names starting with `-'
518e35772b2Smrg      case $my_directory_path in
519e35772b2Smrg        -*) my_directory_path="./$my_directory_path" ;;
520e35772b2Smrg      esac
521e35772b2Smrg
522e35772b2Smrg      # While some portion of DIR does not yet exist...
523e35772b2Smrg      while test ! -d "$my_directory_path"; do
524e35772b2Smrg        # ...make a list in topmost first order.  Use a colon delimited
525e35772b2Smrg	# list incase some portion of path contains whitespace.
526e35772b2Smrg        my_dir_list="$my_directory_path:$my_dir_list"
527e35772b2Smrg
528e35772b2Smrg        # If the last portion added has no slash in it, the list is done
529e35772b2Smrg        case $my_directory_path in */*) ;; *) break ;; esac
530e35772b2Smrg
531e35772b2Smrg        # ...otherwise throw away the child directory and loop
53274c14cd6Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533e35772b2Smrg      done
53474c14cd6Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535e35772b2Smrg
536e35772b2Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
537e35772b2Smrg      for my_dir in $my_dir_list; do
538e35772b2Smrg	IFS="$save_mkdir_p_IFS"
539e35772b2Smrg        # mkdir can fail with a `File exist' error if two processes
540e35772b2Smrg        # try to create one of the directories concurrently.  Don't
541e35772b2Smrg        # stop in that case!
542e35772b2Smrg        $MKDIR "$my_dir" 2>/dev/null || :
543e35772b2Smrg      done
544e35772b2Smrg      IFS="$save_mkdir_p_IFS"
545e35772b2Smrg
546e35772b2Smrg      # Bail out if we (or some other process) failed to create a directory.
547e35772b2Smrg      test -d "$my_directory_path" || \
548e35772b2Smrg        func_fatal_error "Failed to create \`$1'"
549e35772b2Smrg    fi
550e35772b2Smrg}
55172b676d7Smrg
55272b676d7Smrg
55372b676d7Smrg# func_mktempdir [string]
55472b676d7Smrg# Make a temporary directory that won't clash with other running
55572b676d7Smrg# libtool processes, and avoids race conditions if possible.  If
55672b676d7Smrg# given, STRING is the basename for that directory.
55772b676d7Smrgfunc_mktempdir ()
55872b676d7Smrg{
55972b676d7Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
56072b676d7Smrg
561e35772b2Smrg    if test "$opt_dry_run" = ":"; then
56272b676d7Smrg      # Return a directory name, but don't create it in dry-run mode
56372b676d7Smrg      my_tmpdir="${my_template}-$$"
56472b676d7Smrg    else
56572b676d7Smrg
56672b676d7Smrg      # If mktemp works, use that first and foremost
56772b676d7Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
56872b676d7Smrg
56972b676d7Smrg      if test ! -d "$my_tmpdir"; then
570e35772b2Smrg        # Failing that, at least try and use $RANDOM to avoid a race
571e35772b2Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
57272b676d7Smrg
573e35772b2Smrg        save_mktempdir_umask=`umask`
574e35772b2Smrg        umask 0077
575e35772b2Smrg        $MKDIR "$my_tmpdir"
576e35772b2Smrg        umask $save_mktempdir_umask
57772b676d7Smrg      fi
57872b676d7Smrg
57972b676d7Smrg      # If we're not in dry-run mode, bomb out on failure
580e35772b2Smrg      test -d "$my_tmpdir" || \
581e35772b2Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
58272b676d7Smrg    fi
58372b676d7Smrg
58474c14cd6Smrg    $ECHO "$my_tmpdir"
58572b676d7Smrg}
58672b676d7Smrg
58772b676d7Smrg
588e35772b2Smrg# func_quote_for_eval arg
589e35772b2Smrg# Aesthetically quote ARG to be evaled later.
590e35772b2Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591e35772b2Smrg# is double-quoted, suitable for a subsequent eval, whereas
592e35772b2Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593e35772b2Smrg# which are still active within double quotes backslashified.
594e35772b2Smrgfunc_quote_for_eval ()
59572b676d7Smrg{
596e35772b2Smrg    case $1 in
597e35772b2Smrg      *[\\\`\"\$]*)
59874c14cd6Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599e35772b2Smrg      *)
600e35772b2Smrg        func_quote_for_eval_unquoted_result="$1" ;;
601e35772b2Smrg    esac
602e35772b2Smrg
603e35772b2Smrg    case $func_quote_for_eval_unquoted_result in
604e35772b2Smrg      # Double-quote args containing shell metacharacters to delay
605e35772b2Smrg      # word splitting, command substitution and and variable
606e35772b2Smrg      # expansion for a subsequent eval.
607e35772b2Smrg      # Many Bourne shells cannot handle close brackets correctly
608e35772b2Smrg      # in scan sets, so we specify it separately.
609e35772b2Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610e35772b2Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611e35772b2Smrg        ;;
612e35772b2Smrg      *)
613e35772b2Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
61472b676d7Smrg    esac
61572b676d7Smrg}
61672b676d7Smrg
61772b676d7Smrg
618e35772b2Smrg# func_quote_for_expand arg
619e35772b2Smrg# Aesthetically quote ARG to be evaled later; same as above,
620e35772b2Smrg# but do not quote variable references.
621e35772b2Smrgfunc_quote_for_expand ()
62272b676d7Smrg{
623e35772b2Smrg    case $1 in
624e35772b2Smrg      *[\\\`\"]*)
62574c14cd6Smrg	my_arg=`$ECHO "$1" | $SED \
626e35772b2Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
62772b676d7Smrg      *)
628e35772b2Smrg        my_arg="$1" ;;
629e35772b2Smrg    esac
630e35772b2Smrg
631e35772b2Smrg    case $my_arg in
632e35772b2Smrg      # Double-quote args containing shell metacharacters to delay
633e35772b2Smrg      # word splitting and command substitution for a subsequent eval.
634e35772b2Smrg      # Many Bourne shells cannot handle close brackets correctly
635e35772b2Smrg      # in scan sets, so we specify it separately.
636e35772b2Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637e35772b2Smrg        my_arg="\"$my_arg\""
638e35772b2Smrg        ;;
639e35772b2Smrg    esac
640e35772b2Smrg
641e35772b2Smrg    func_quote_for_expand_result="$my_arg"
64272b676d7Smrg}
64372b676d7Smrg
64472b676d7Smrg
645e35772b2Smrg# func_show_eval cmd [fail_exp]
646e35772b2Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647e35772b2Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648e35772b2Smrg# is given, then evaluate it.
649e35772b2Smrgfunc_show_eval ()
65072b676d7Smrg{
651e35772b2Smrg    my_cmd="$1"
652e35772b2Smrg    my_fail_exp="${2-:}"
65372b676d7Smrg
654e35772b2Smrg    ${opt_silent-false} || {
655e35772b2Smrg      func_quote_for_expand "$my_cmd"
656e35772b2Smrg      eval "func_echo $func_quote_for_expand_result"
657e35772b2Smrg    }
658e35772b2Smrg
659e35772b2Smrg    if ${opt_dry_run-false}; then :; else
660e35772b2Smrg      eval "$my_cmd"
661e35772b2Smrg      my_status=$?
662e35772b2Smrg      if test "$my_status" -eq 0; then :; else
663e35772b2Smrg	eval "(exit $my_status); $my_fail_exp"
664e35772b2Smrg      fi
66572b676d7Smrg    fi
66672b676d7Smrg}
66772b676d7Smrg
668e35772b2Smrg
669e35772b2Smrg# func_show_eval_locale cmd [fail_exp]
670e35772b2Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671e35772b2Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672e35772b2Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
673e35772b2Smrgfunc_show_eval_locale ()
67472b676d7Smrg{
675e35772b2Smrg    my_cmd="$1"
676e35772b2Smrg    my_fail_exp="${2-:}"
677e35772b2Smrg
678e35772b2Smrg    ${opt_silent-false} || {
679e35772b2Smrg      func_quote_for_expand "$my_cmd"
680e35772b2Smrg      eval "func_echo $func_quote_for_expand_result"
681e35772b2Smrg    }
682e35772b2Smrg
683e35772b2Smrg    if ${opt_dry_run-false}; then :; else
684e35772b2Smrg      eval "$lt_user_locale
685e35772b2Smrg	    $my_cmd"
686e35772b2Smrg      my_status=$?
687e35772b2Smrg      eval "$lt_safe_locale"
688e35772b2Smrg      if test "$my_status" -eq 0; then :; else
689e35772b2Smrg	eval "(exit $my_status); $my_fail_exp"
690e35772b2Smrg      fi
69172b676d7Smrg    fi
692e35772b2Smrg}
69372b676d7Smrg
69474c14cd6Smrg# func_tr_sh
69574c14cd6Smrg# Turn $1 into a string suitable for a shell variable name.
69674c14cd6Smrg# Result is stored in $func_tr_sh_result.  All characters
69774c14cd6Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
69874c14cd6Smrg# if $1 begins with a digit, a '_' is prepended as well.
69974c14cd6Smrgfunc_tr_sh ()
70074c14cd6Smrg{
70174c14cd6Smrg  case $1 in
70274c14cd6Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
70374c14cd6Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
70474c14cd6Smrg    ;;
70574c14cd6Smrg  * )
70674c14cd6Smrg    func_tr_sh_result=$1
70774c14cd6Smrg    ;;
70874c14cd6Smrg  esac
70974c14cd6Smrg}
710e35772b2Smrg
711e35772b2Smrg
712e35772b2Smrg# func_version
713e35772b2Smrg# Echo version message to standard output and exit.
714e35772b2Smrgfunc_version ()
715e35772b2Smrg{
71674c14cd6Smrg    $opt_debug
71774c14cd6Smrg
71874c14cd6Smrg    $SED -n '/(C)/!b go
71974c14cd6Smrg	:more
72074c14cd6Smrg	/\./!{
72174c14cd6Smrg	  N
72274c14cd6Smrg	  s/\n# / /
72374c14cd6Smrg	  b more
72474c14cd6Smrg	}
72574c14cd6Smrg	:go
72674c14cd6Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
727e35772b2Smrg        s/^# //
728e35772b2Smrg	s/^# *$//
729e35772b2Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730e35772b2Smrg        p
731e35772b2Smrg     }' < "$progpath"
732e35772b2Smrg     exit $?
733e35772b2Smrg}
734e35772b2Smrg
735e35772b2Smrg# func_usage
736e35772b2Smrg# Echo short help message to standard output and exit.
737e35772b2Smrgfunc_usage ()
738e35772b2Smrg{
73974c14cd6Smrg    $opt_debug
74074c14cd6Smrg
74174c14cd6Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742e35772b2Smrg        s/^# //
743e35772b2Smrg	s/^# *$//
744e35772b2Smrg	s/\$progname/'$progname'/
745e35772b2Smrg	p
746e35772b2Smrg    }' < "$progpath"
74774c14cd6Smrg    echo
748e35772b2Smrg    $ECHO "run \`$progname --help | more' for full usage"
749e35772b2Smrg    exit $?
750e35772b2Smrg}
751e35772b2Smrg
75274c14cd6Smrg# func_help [NOEXIT]
75374c14cd6Smrg# Echo long help message to standard output and exit,
75474c14cd6Smrg# unless 'noexit' is passed as argument.
755e35772b2Smrgfunc_help ()
756e35772b2Smrg{
75774c14cd6Smrg    $opt_debug
75874c14cd6Smrg
759e35772b2Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
76074c14cd6Smrg	:print
761e35772b2Smrg        s/^# //
762e35772b2Smrg	s/^# *$//
763e35772b2Smrg	s*\$progname*'$progname'*
764e35772b2Smrg	s*\$host*'"$host"'*
765e35772b2Smrg	s*\$SHELL*'"$SHELL"'*
766e35772b2Smrg	s*\$LTCC*'"$LTCC"'*
767e35772b2Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768e35772b2Smrg	s*\$LD*'"$LD"'*
769e35772b2Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
77074c14cd6Smrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
77174c14cd6Smrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772e35772b2Smrg	p
77374c14cd6Smrg	d
77474c14cd6Smrg     }
77574c14cd6Smrg     /^# .* home page:/b print
77674c14cd6Smrg     /^# General help using/b print
77774c14cd6Smrg     ' < "$progpath"
77874c14cd6Smrg    ret=$?
77974c14cd6Smrg    if test -z "$1"; then
78074c14cd6Smrg      exit $ret
78174c14cd6Smrg    fi
782e35772b2Smrg}
783e35772b2Smrg
784e35772b2Smrg# func_missing_arg argname
785e35772b2Smrg# Echo program name prefixed message to standard error and set global
786e35772b2Smrg# exit_cmd.
787e35772b2Smrgfunc_missing_arg ()
788e35772b2Smrg{
78974c14cd6Smrg    $opt_debug
79074c14cd6Smrg
79174c14cd6Smrg    func_error "missing argument for $1."
792e35772b2Smrg    exit_cmd=exit
79372b676d7Smrg}
79472b676d7Smrg
79572b676d7Smrg
79674c14cd6Smrg# func_split_short_opt shortopt
79774c14cd6Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
79874c14cd6Smrg# variables after splitting SHORTOPT after the 2nd character.
79974c14cd6Smrgfunc_split_short_opt ()
80074c14cd6Smrg{
80174c14cd6Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
80274c14cd6Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
80372b676d7Smrg
80474c14cd6Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
80574c14cd6Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
80674c14cd6Smrg} # func_split_short_opt may be replaced by extended shell implementation
80774c14cd6Smrg
80874c14cd6Smrg
80974c14cd6Smrg# func_split_long_opt longopt
81074c14cd6Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
81174c14cd6Smrg# variables after splitting LONGOPT at the `=' sign.
81274c14cd6Smrgfunc_split_long_opt ()
81374c14cd6Smrg{
81474c14cd6Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
81574c14cd6Smrg    my_sed_long_arg='1s/^--[^=]*=//'
81674c14cd6Smrg
81774c14cd6Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
81874c14cd6Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
81974c14cd6Smrg} # func_split_long_opt may be replaced by extended shell implementation
82074c14cd6Smrg
82174c14cd6Smrgexit_cmd=:
822e35772b2Smrg
823e35772b2Smrg
824e35772b2Smrg
82572b676d7Smrg
82672b676d7Smrg
827e35772b2Smrgmagic="%%%MAGIC variable%%%"
828e35772b2Smrgmagic_exe="%%%MAGIC EXE variable%%%"
82972b676d7Smrg
830e35772b2Smrg# Global variables.
831e35772b2Smrgnonopt=
832e35772b2Smrgpreserve_args=
833e35772b2Smrglo2o="s/\\.lo\$/.${objext}/"
834e35772b2Smrgo2lo="s/\\.${objext}\$/.lo/"
835e35772b2Smrgextracted_archives=
836e35772b2Smrgextracted_serial=0
83772b676d7Smrg
838e35772b2Smrg# If this variable is set in any of the actions, the command in it
839e35772b2Smrg# will be execed at the end.  This prevents here-documents from being
840e35772b2Smrg# left over by shells.
841e35772b2Smrgexec_cmd=
842e35772b2Smrg
84374c14cd6Smrg# func_append var value
84474c14cd6Smrg# Append VALUE to the end of shell variable VAR.
84574c14cd6Smrgfunc_append ()
84674c14cd6Smrg{
84774c14cd6Smrg    eval "${1}=\$${1}\${2}"
84874c14cd6Smrg} # func_append may be replaced by extended shell implementation
84974c14cd6Smrg
85074c14cd6Smrg# func_append_quoted var value
85174c14cd6Smrg# Quote VALUE and append to the end of shell variable VAR, separated
85274c14cd6Smrg# by a space.
85374c14cd6Smrgfunc_append_quoted ()
85474c14cd6Smrg{
85574c14cd6Smrg    func_quote_for_eval "${2}"
85674c14cd6Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
85774c14cd6Smrg} # func_append_quoted may be replaced by extended shell implementation
85874c14cd6Smrg
85974c14cd6Smrg
86074c14cd6Smrg# func_arith arithmetic-term...
86174c14cd6Smrgfunc_arith ()
86274c14cd6Smrg{
86374c14cd6Smrg    func_arith_result=`expr "${@}"`
86474c14cd6Smrg} # func_arith may be replaced by extended shell implementation
86574c14cd6Smrg
86674c14cd6Smrg
86774c14cd6Smrg# func_len string
86874c14cd6Smrg# STRING may not start with a hyphen.
86974c14cd6Smrgfunc_len ()
87074c14cd6Smrg{
87174c14cd6Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
87274c14cd6Smrg} # func_len may be replaced by extended shell implementation
87374c14cd6Smrg
87474c14cd6Smrg
87574c14cd6Smrg# func_lo2o object
87674c14cd6Smrgfunc_lo2o ()
87774c14cd6Smrg{
87874c14cd6Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
87974c14cd6Smrg} # func_lo2o may be replaced by extended shell implementation
88074c14cd6Smrg
88174c14cd6Smrg
88274c14cd6Smrg# func_xform libobj-or-source
88374c14cd6Smrgfunc_xform ()
88474c14cd6Smrg{
88574c14cd6Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
88674c14cd6Smrg} # func_xform may be replaced by extended shell implementation
88774c14cd6Smrg
88874c14cd6Smrg
889e35772b2Smrg# func_fatal_configuration arg...
890e35772b2Smrg# Echo program name prefixed message to standard error, followed by
891e35772b2Smrg# a configuration failure hint, and exit.
892e35772b2Smrgfunc_fatal_configuration ()
893e35772b2Smrg{
894e35772b2Smrg    func_error ${1+"$@"}
895e35772b2Smrg    func_error "See the $PACKAGE documentation for more information."
896e35772b2Smrg    func_fatal_error "Fatal configuration error."
897e35772b2Smrg}
89872b676d7Smrg
8991fd23544Smrg
900e35772b2Smrg# func_config
901e35772b2Smrg# Display the configuration for all the tags in this script.
902e35772b2Smrgfunc_config ()
903e35772b2Smrg{
904e35772b2Smrg    re_begincf='^# ### BEGIN LIBTOOL'
905e35772b2Smrg    re_endcf='^# ### END LIBTOOL'
906e35772b2Smrg
907e35772b2Smrg    # Default configuration.
908e35772b2Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
90972b676d7Smrg
91072b676d7Smrg    # Now print the configurations for the tags.
91172b676d7Smrg    for tagname in $taglist; do
912e35772b2Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
91372b676d7Smrg    done
91472b676d7Smrg
915e35772b2Smrg    exit $?
916e35772b2Smrg}
91772b676d7Smrg
918e35772b2Smrg# func_features
919e35772b2Smrg# Display the features supported by this script.
920e35772b2Smrgfunc_features ()
921e35772b2Smrg{
92274c14cd6Smrg    echo "host: $host"
92372b676d7Smrg    if test "$build_libtool_libs" = yes; then
92474c14cd6Smrg      echo "enable shared libraries"
92572b676d7Smrg    else
92674c14cd6Smrg      echo "disable shared libraries"
92772b676d7Smrg    fi
92872b676d7Smrg    if test "$build_old_libs" = yes; then
92974c14cd6Smrg      echo "enable static libraries"
93072b676d7Smrg    else
93174c14cd6Smrg      echo "disable static libraries"
93272b676d7Smrg    fi
933e35772b2Smrg
93472b676d7Smrg    exit $?
935e35772b2Smrg}
93672b676d7Smrg
937e35772b2Smrg# func_enable_tag tagname
938e35772b2Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939e35772b2Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940e35772b2Smrg# variable here.
941e35772b2Smrgfunc_enable_tag ()
942e35772b2Smrg{
943e35772b2Smrg  # Global variable:
944e35772b2Smrg  tagname="$1"
94572b676d7Smrg
946e35772b2Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947e35772b2Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948e35772b2Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
94972b676d7Smrg
950e35772b2Smrg  # Validate tagname.
951e35772b2Smrg  case $tagname in
952e35772b2Smrg    *[!-_A-Za-z0-9,/]*)
953e35772b2Smrg      func_fatal_error "invalid tag name: $tagname"
954e35772b2Smrg      ;;
955e35772b2Smrg  esac
95672b676d7Smrg
957e35772b2Smrg  # Don't test for the "default" C tag, as we know it's
958e35772b2Smrg  # there but not specially marked.
959e35772b2Smrg  case $tagname in
960e35772b2Smrg    CC) ;;
961e35772b2Smrg    *)
962e35772b2Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963e35772b2Smrg	taglist="$taglist $tagname"
964e35772b2Smrg
965e35772b2Smrg	# Evaluate the configuration.  Be careful to quote the path
966e35772b2Smrg	# and the sed script, to avoid splitting on whitespace, but
967e35772b2Smrg	# also don't use non-portable quotes within backquotes within
968e35772b2Smrg	# quotes we have to do it in 2 steps:
969e35772b2Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970e35772b2Smrg	eval "$extractedcf"
971e35772b2Smrg      else
972e35772b2Smrg	func_error "ignoring unknown tag $tagname"
973e35772b2Smrg      fi
974e35772b2Smrg      ;;
975e35772b2Smrg  esac
976e35772b2Smrg}
977e35772b2Smrg
97874c14cd6Smrg# func_check_version_match
97974c14cd6Smrg# Ensure that we are using m4 macros, and libtool script from the same
98074c14cd6Smrg# release of libtool.
98174c14cd6Smrgfunc_check_version_match ()
982e35772b2Smrg{
98374c14cd6Smrg  if test "$package_revision" != "$macro_revision"; then
98474c14cd6Smrg    if test "$VERSION" != "$macro_version"; then
98574c14cd6Smrg      if test -z "$macro_version"; then
98674c14cd6Smrg        cat >&2 <<_LT_EOF
98774c14cd6Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
98874c14cd6Smrg$progname: definition of this LT_INIT comes from an older release.
98974c14cd6Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
99074c14cd6Smrg$progname: and run autoconf again.
99174c14cd6Smrg_LT_EOF
99274c14cd6Smrg      else
99374c14cd6Smrg        cat >&2 <<_LT_EOF
99474c14cd6Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
99574c14cd6Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
99674c14cd6Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
99774c14cd6Smrg$progname: and run autoconf again.
99874c14cd6Smrg_LT_EOF
99974c14cd6Smrg      fi
100074c14cd6Smrg    else
100174c14cd6Smrg      cat >&2 <<_LT_EOF
100274c14cd6Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
100374c14cd6Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
100474c14cd6Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
100574c14cd6Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
100674c14cd6Smrg_LT_EOF
100774c14cd6Smrg    fi
100874c14cd6Smrg
100974c14cd6Smrg    exit $EXIT_MISMATCH
101074c14cd6Smrg  fi
101174c14cd6Smrg}
101274c14cd6Smrg
101374c14cd6Smrg
101474c14cd6Smrg# Shorthand for --mode=foo, only valid as the first argument
101574c14cd6Smrgcase $1 in
101674c14cd6Smrgclean|clea|cle|cl)
101774c14cd6Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
101874c14cd6Smrg  ;;
101974c14cd6Smrgcompile|compil|compi|comp|com|co|c)
102074c14cd6Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
102174c14cd6Smrg  ;;
102274c14cd6Smrgexecute|execut|execu|exec|exe|ex|e)
102374c14cd6Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
102474c14cd6Smrg  ;;
102574c14cd6Smrgfinish|finis|fini|fin|fi|f)
102674c14cd6Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
102774c14cd6Smrg  ;;
102874c14cd6Smrginstall|instal|insta|inst|ins|in|i)
102974c14cd6Smrg  shift; set dummy --mode install ${1+"$@"}; shift
103074c14cd6Smrg  ;;
103174c14cd6Smrglink|lin|li|l)
103274c14cd6Smrg  shift; set dummy --mode link ${1+"$@"}; shift
103374c14cd6Smrg  ;;
103474c14cd6Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
103574c14cd6Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
103674c14cd6Smrg  ;;
103774c14cd6Smrgesac
103874c14cd6Smrg
103974c14cd6Smrg
104074c14cd6Smrg
104174c14cd6Smrg# Option defaults:
104274c14cd6Smrgopt_debug=:
104374c14cd6Smrgopt_dry_run=false
104474c14cd6Smrgopt_config=false
104574c14cd6Smrgopt_preserve_dup_deps=false
104674c14cd6Smrgopt_features=false
104774c14cd6Smrgopt_finish=false
104874c14cd6Smrgopt_help=false
104974c14cd6Smrgopt_help_all=false
105074c14cd6Smrgopt_silent=:
105174c14cd6Smrgopt_warning=:
105274c14cd6Smrgopt_verbose=:
105374c14cd6Smrgopt_silent=false
105474c14cd6Smrgopt_verbose=false
105572b676d7Smrg
105672b676d7Smrg
105774c14cd6Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
105874c14cd6Smrg# script to make things like `--version' happen as quickly as we can.
105974c14cd6Smrg{
106074c14cd6Smrg  # this just eases exit handling
106174c14cd6Smrg  while test $# -gt 0; do
1062e35772b2Smrg    opt="$1"
1063e35772b2Smrg    shift
1064e35772b2Smrg    case $opt in
106574c14cd6Smrg      --debug|-x)	opt_debug='set -x'
1066e35772b2Smrg			func_echo "enabling shell trace mode"
1067e35772b2Smrg			$opt_debug
1068e35772b2Smrg			;;
106974c14cd6Smrg      --dry-run|--dryrun|-n)
107074c14cd6Smrg			opt_dry_run=:
1071e35772b2Smrg			;;
107274c14cd6Smrg      --config)
107374c14cd6Smrg			opt_config=:
107474c14cd6Smrgfunc_config
107574c14cd6Smrg			;;
107674c14cd6Smrg      --dlopen|-dlopen)
107774c14cd6Smrg			optarg="$1"
107874c14cd6Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
107974c14cd6Smrg}$optarg"
1080e35772b2Smrg			shift
1081e35772b2Smrg			;;
1082e35772b2Smrg      --preserve-dup-deps)
108374c14cd6Smrg			opt_preserve_dup_deps=:
1084e35772b2Smrg			;;
108574c14cd6Smrg      --features)
108674c14cd6Smrg			opt_features=:
108774c14cd6Smrgfunc_features
108874c14cd6Smrg			;;
108974c14cd6Smrg      --finish)
109074c14cd6Smrg			opt_finish=:
109174c14cd6Smrgset dummy --mode finish ${1+"$@"}; shift
109274c14cd6Smrg			;;
109374c14cd6Smrg      --help)
109474c14cd6Smrg			opt_help=:
109574c14cd6Smrg			;;
109674c14cd6Smrg      --help-all)
109774c14cd6Smrg			opt_help_all=:
109874c14cd6Smrgopt_help=': help-all'
109974c14cd6Smrg			;;
110074c14cd6Smrg      --mode)
110174c14cd6Smrg			test $# = 0 && func_missing_arg $opt && break
110274c14cd6Smrg			optarg="$1"
110374c14cd6Smrg			opt_mode="$optarg"
110474c14cd6Smrgcase $optarg in
110574c14cd6Smrg  # Valid mode arguments:
110674c14cd6Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
110774c14cd6Smrg
110874c14cd6Smrg  # Catch anything else as an error
110974c14cd6Smrg  *) func_error "invalid argument for $opt"
111074c14cd6Smrg     exit_cmd=exit
111174c14cd6Smrg     break
111274c14cd6Smrg     ;;
111374c14cd6Smrgesac
111474c14cd6Smrg			shift
111574c14cd6Smrg			;;
111674c14cd6Smrg      --no-silent|--no-quiet)
1117e35772b2Smrg			opt_silent=false
111874c14cd6Smrgfunc_append preserve_args " $opt"
1119e35772b2Smrg			;;
112074c14cd6Smrg      --no-warning|--no-warn)
112174c14cd6Smrg			opt_warning=false
112274c14cd6Smrgfunc_append preserve_args " $opt"
112374c14cd6Smrg			;;
112474c14cd6Smrg      --no-verbose)
112574c14cd6Smrg			opt_verbose=false
112674c14cd6Smrgfunc_append preserve_args " $opt"
112774c14cd6Smrg			;;
112874c14cd6Smrg      --silent|--quiet)
112974c14cd6Smrg			opt_silent=:
113074c14cd6Smrgfunc_append preserve_args " $opt"
113174c14cd6Smrg        opt_verbose=false
113274c14cd6Smrg			;;
113374c14cd6Smrg      --verbose|-v)
113474c14cd6Smrg			opt_verbose=:
113574c14cd6Smrgfunc_append preserve_args " $opt"
113674c14cd6Smrgopt_silent=false
113774c14cd6Smrg			;;
113874c14cd6Smrg      --tag)
113974c14cd6Smrg			test $# = 0 && func_missing_arg $opt && break
114074c14cd6Smrg			optarg="$1"
114174c14cd6Smrg			opt_tag="$optarg"
114274c14cd6Smrgfunc_append preserve_args " $opt $optarg"
114374c14cd6Smrgfunc_enable_tag "$optarg"
1144e35772b2Smrg			shift
1145e35772b2Smrg			;;
1146e35772b2Smrg
114774c14cd6Smrg      -\?|-h)		func_usage				;;
114874c14cd6Smrg      --help)		func_help				;;
114974c14cd6Smrg      --version)	func_version				;;
115074c14cd6Smrg
1151e35772b2Smrg      # Separate optargs to long options:
115274c14cd6Smrg      --*=*)
115374c14cd6Smrg			func_split_long_opt "$opt"
115474c14cd6Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155e35772b2Smrg			shift
1156e35772b2Smrg			;;
1157e35772b2Smrg
115874c14cd6Smrg      # Separate non-argument short options:
115974c14cd6Smrg      -\?*|-h*|-n*|-v*)
116074c14cd6Smrg			func_split_short_opt "$opt"
116174c14cd6Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
116274c14cd6Smrg			shift
1163e35772b2Smrg			;;
116474c14cd6Smrg
116574c14cd6Smrg      --)		break					;;
116674c14cd6Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
116774c14cd6Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168e35772b2Smrg    esac
1169e35772b2Smrg  done
1170e35772b2Smrg
117174c14cd6Smrg  # Validate options:
117274c14cd6Smrg
117374c14cd6Smrg  # save first non-option argument
117474c14cd6Smrg  if test "$#" -gt 0; then
117574c14cd6Smrg    nonopt="$opt"
117674c14cd6Smrg    shift
117774c14cd6Smrg  fi
117874c14cd6Smrg
117974c14cd6Smrg  # preserve --debug
118074c14cd6Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181e35772b2Smrg
1182e35772b2Smrg  case $host in
1183e35772b2Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184e35772b2Smrg      # don't eliminate duplications in $postdeps and $predeps
1185e35772b2Smrg      opt_duplicate_compiler_generated_deps=:
118672b676d7Smrg      ;;
118772b676d7Smrg    *)
118874c14cd6Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189e35772b2Smrg      ;;
1190e35772b2Smrg  esac
119172b676d7Smrg
119274c14cd6Smrg  $opt_help || {
119374c14cd6Smrg    # Sanity checks first:
119474c14cd6Smrg    func_check_version_match
1195e35772b2Smrg
119674c14cd6Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
119774c14cd6Smrg      func_fatal_configuration "not configured to build any kind of library"
1198e35772b2Smrg    fi
1199e35772b2Smrg
120074c14cd6Smrg    # Darwin sucks
120174c14cd6Smrg    eval std_shrext=\"$shrext_cmds\"
1202e35772b2Smrg
120374c14cd6Smrg    # Only execute mode is allowed to have -dlopen flags.
120474c14cd6Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
120574c14cd6Smrg      func_error "unrecognized option \`-dlopen'"
120674c14cd6Smrg      $ECHO "$help" 1>&2
120774c14cd6Smrg      exit $EXIT_FAILURE
120874c14cd6Smrg    fi
120972b676d7Smrg
121074c14cd6Smrg    # Change the help message to a mode-specific one.
121174c14cd6Smrg    generic_help="$help"
121274c14cd6Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
121374c14cd6Smrg  }
1214e35772b2Smrg
1215e35772b2Smrg
121674c14cd6Smrg  # Bail if the options were screwed
121774c14cd6Smrg  $exit_cmd $EXIT_FAILURE
121874c14cd6Smrg}
1219e35772b2Smrg
1220e35772b2Smrg
122172b676d7Smrg
122272b676d7Smrg
122374c14cd6Smrg## ----------- ##
122474c14cd6Smrg##    Main.    ##
122574c14cd6Smrg## ----------- ##
122672b676d7Smrg
1227e35772b2Smrg# func_lalib_p file
1228e35772b2Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out
1230e35772b2Smrg# determined imposters.
1231e35772b2Smrgfunc_lalib_p ()
1232e35772b2Smrg{
1233e35772b2Smrg    test -f "$1" &&
1234e35772b2Smrg      $SED -e 4q "$1" 2>/dev/null \
1235e35772b2Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236e35772b2Smrg}
123772b676d7Smrg
1238e35772b2Smrg# func_lalib_unsafe_p file
1239e35772b2Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240e35772b2Smrg# This function implements the same check as func_lalib_p without
1241e35772b2Smrg# resorting to external programs.  To this end, it redirects stdin and
1242e35772b2Smrg# closes it afterwards, without saving the original file descriptor.
1243e35772b2Smrg# As a safety measure, use it only where a negative result would be
1244e35772b2Smrg# fatal anyway.  Works if `file' does not exist.
1245e35772b2Smrgfunc_lalib_unsafe_p ()
1246e35772b2Smrg{
1247e35772b2Smrg    lalib_p=no
1248e35772b2Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249e35772b2Smrg	for lalib_p_l in 1 2 3 4
1250e35772b2Smrg	do
1251e35772b2Smrg	    read lalib_p_line
1252e35772b2Smrg	    case "$lalib_p_line" in
1253e35772b2Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254e35772b2Smrg	    esac
1255e35772b2Smrg	done
1256e35772b2Smrg	exec 0<&5 5<&-
1257e35772b2Smrg    fi
1258e35772b2Smrg    test "$lalib_p" = yes
1259e35772b2Smrg}
126072b676d7Smrg
1261e35772b2Smrg# func_ltwrapper_script_p file
1262e35772b2Smrg# True iff FILE is a libtool wrapper script
1263e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out
1264e35772b2Smrg# determined imposters.
1265e35772b2Smrgfunc_ltwrapper_script_p ()
1266e35772b2Smrg{
1267e35772b2Smrg    func_lalib_p "$1"
1268e35772b2Smrg}
126972b676d7Smrg
1270e35772b2Smrg# func_ltwrapper_executable_p file
1271e35772b2Smrg# True iff FILE is a libtool wrapper executable
1272e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out
1273e35772b2Smrg# determined imposters.
1274e35772b2Smrgfunc_ltwrapper_executable_p ()
1275e35772b2Smrg{
1276e35772b2Smrg    func_ltwrapper_exec_suffix=
1277e35772b2Smrg    case $1 in
1278e35772b2Smrg    *.exe) ;;
1279e35772b2Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280e35772b2Smrg    esac
1281e35772b2Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282e35772b2Smrg}
128372b676d7Smrg
1284e35772b2Smrg# func_ltwrapper_scriptname file
1285e35772b2Smrg# Assumes file is an ltwrapper_executable
1286e35772b2Smrg# uses $file to determine the appropriate filename for a
1287e35772b2Smrg# temporary ltwrapper_script.
1288e35772b2Smrgfunc_ltwrapper_scriptname ()
1289e35772b2Smrg{
129074c14cd6Smrg    func_dirname_and_basename "$1" "" "."
129174c14cd6Smrg    func_stripname '' '.exe' "$func_basename_result"
129274c14cd6Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293e35772b2Smrg}
1294e35772b2Smrg
1295e35772b2Smrg# func_ltwrapper_p file
1296e35772b2Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1297e35772b2Smrg# This function is only a basic sanity check; it will hardly flush out
1298e35772b2Smrg# determined imposters.
1299e35772b2Smrgfunc_ltwrapper_p ()
1300e35772b2Smrg{
1301e35772b2Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302e35772b2Smrg}
1303e35772b2Smrg
1304e35772b2Smrg
1305e35772b2Smrg# func_execute_cmds commands fail_cmd
1306e35772b2Smrg# Execute tilde-delimited COMMANDS.
1307e35772b2Smrg# If FAIL_CMD is given, eval that upon failure.
1308e35772b2Smrg# FAIL_CMD may read-access the current command in variable CMD!
1309e35772b2Smrgfunc_execute_cmds ()
1310e35772b2Smrg{
1311e35772b2Smrg    $opt_debug
1312e35772b2Smrg    save_ifs=$IFS; IFS='~'
1313e35772b2Smrg    for cmd in $1; do
1314e35772b2Smrg      IFS=$save_ifs
1315e35772b2Smrg      eval cmd=\"$cmd\"
1316e35772b2Smrg      func_show_eval "$cmd" "${2-:}"
1317e35772b2Smrg    done
1318e35772b2Smrg    IFS=$save_ifs
1319e35772b2Smrg}
1320e35772b2Smrg
1321e35772b2Smrg
1322e35772b2Smrg# func_source file
1323e35772b2Smrg# Source FILE, adding directory component if necessary.
1324e35772b2Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325e35772b2Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326e35772b2Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327e35772b2Smrg# `FILE.' does not work on cygwin managed mounts.
1328e35772b2Smrgfunc_source ()
1329e35772b2Smrg{
1330e35772b2Smrg    $opt_debug
1331e35772b2Smrg    case $1 in
1332e35772b2Smrg    */* | *\\*)	. "$1" ;;
1333e35772b2Smrg    *)		. "./$1" ;;
1334e35772b2Smrg    esac
1335e35772b2Smrg}
1336e35772b2Smrg
1337e35772b2Smrg
133874c14cd6Smrg# func_resolve_sysroot PATH
133974c14cd6Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
134074c14cd6Smrg# func_resolve_sysroot_result
134174c14cd6Smrgfunc_resolve_sysroot ()
134274c14cd6Smrg{
134374c14cd6Smrg  func_resolve_sysroot_result=$1
134474c14cd6Smrg  case $func_resolve_sysroot_result in
134574c14cd6Smrg  =*)
134674c14cd6Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
134774c14cd6Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
134874c14cd6Smrg    ;;
134974c14cd6Smrg  esac
135074c14cd6Smrg}
135174c14cd6Smrg
135274c14cd6Smrg# func_replace_sysroot PATH
135374c14cd6Smrg# If PATH begins with the sysroot, replace it with = and
135474c14cd6Smrg# store the result into func_replace_sysroot_result.
135574c14cd6Smrgfunc_replace_sysroot ()
135674c14cd6Smrg{
135774c14cd6Smrg  case "$lt_sysroot:$1" in
135874c14cd6Smrg  ?*:"$lt_sysroot"*)
135974c14cd6Smrg    func_stripname "$lt_sysroot" '' "$1"
136074c14cd6Smrg    func_replace_sysroot_result="=$func_stripname_result"
136174c14cd6Smrg    ;;
136274c14cd6Smrg  *)
136374c14cd6Smrg    # Including no sysroot.
136474c14cd6Smrg    func_replace_sysroot_result=$1
136574c14cd6Smrg    ;;
136674c14cd6Smrg  esac
136774c14cd6Smrg}
136874c14cd6Smrg
1369e35772b2Smrg# func_infer_tag arg
1370e35772b2Smrg# Infer tagged configuration to use if any are available and
1371e35772b2Smrg# if one wasn't chosen via the "--tag" command line option.
1372e35772b2Smrg# Only attempt this if the compiler in the base compile
1373e35772b2Smrg# command doesn't match the default compiler.
1374e35772b2Smrg# arg is usually of the form 'gcc ...'
1375e35772b2Smrgfunc_infer_tag ()
1376e35772b2Smrg{
1377e35772b2Smrg    $opt_debug
1378e35772b2Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1379e35772b2Smrg      CC_quoted=
1380e35772b2Smrg      for arg in $CC; do
138174c14cd6Smrg	func_append_quoted CC_quoted "$arg"
1382e35772b2Smrg      done
138374c14cd6Smrg      CC_expanded=`func_echo_all $CC`
138474c14cd6Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385e35772b2Smrg      case $@ in
1386e35772b2Smrg      # Blanks in the command may have been stripped by the calling shell,
1387e35772b2Smrg      # but not from the CC environment variable when configure was run.
138874c14cd6Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
138974c14cd6Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390e35772b2Smrg      # Blanks at the start of $base_compile will cause this to fail
1391e35772b2Smrg      # if we don't check for them as well.
1392e35772b2Smrg      *)
1393e35772b2Smrg	for z in $available_tags; do
1394e35772b2Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395e35772b2Smrg	    # Evaluate the configuration.
1396e35772b2Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397e35772b2Smrg	    CC_quoted=
1398e35772b2Smrg	    for arg in $CC; do
1399e35772b2Smrg	      # Double-quote args containing other shell metacharacters.
140074c14cd6Smrg	      func_append_quoted CC_quoted "$arg"
1401e35772b2Smrg	    done
140274c14cd6Smrg	    CC_expanded=`func_echo_all $CC`
140374c14cd6Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404e35772b2Smrg	    case "$@ " in
140574c14cd6Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
140674c14cd6Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407e35772b2Smrg	      # The compiler in the base compile command matches
1408e35772b2Smrg	      # the one in the tagged configuration.
1409e35772b2Smrg	      # Assume this is the tagged configuration we want.
1410e35772b2Smrg	      tagname=$z
1411e35772b2Smrg	      break
1412e35772b2Smrg	      ;;
1413e35772b2Smrg	    esac
1414e35772b2Smrg	  fi
1415e35772b2Smrg	done
1416e35772b2Smrg	# If $tagname still isn't set, then no tagged configuration
1417e35772b2Smrg	# was found and let the user know that the "--tag" command
1418e35772b2Smrg	# line option must be used.
1419e35772b2Smrg	if test -z "$tagname"; then
1420e35772b2Smrg	  func_echo "unable to infer tagged configuration"
1421e35772b2Smrg	  func_fatal_error "specify a tag with \`--tag'"
1422e35772b2Smrg#	else
1423e35772b2Smrg#	  func_verbose "using $tagname tagged configuration"
1424e35772b2Smrg	fi
1425e35772b2Smrg	;;
1426e35772b2Smrg      esac
1427e35772b2Smrg    fi
1428e35772b2Smrg}
1429e35772b2Smrg
1430e35772b2Smrg
1431e35772b2Smrg
1432e35772b2Smrg# func_write_libtool_object output_name pic_name nonpic_name
1433e35772b2Smrg# Create a libtool object file (analogous to a ".la" file),
1434e35772b2Smrg# but don't create it if we're doing a dry run.
1435e35772b2Smrgfunc_write_libtool_object ()
1436e35772b2Smrg{
1437e35772b2Smrg    write_libobj=${1}
1438e35772b2Smrg    if test "$build_libtool_libs" = yes; then
1439e35772b2Smrg      write_lobj=\'${2}\'
1440e35772b2Smrg    else
1441e35772b2Smrg      write_lobj=none
1442e35772b2Smrg    fi
1443e35772b2Smrg
1444e35772b2Smrg    if test "$build_old_libs" = yes; then
1445e35772b2Smrg      write_oldobj=\'${3}\'
1446e35772b2Smrg    else
1447e35772b2Smrg      write_oldobj=none
1448e35772b2Smrg    fi
1449e35772b2Smrg
1450e35772b2Smrg    $opt_dry_run || {
1451e35772b2Smrg      cat >${write_libobj}T <<EOF
1452e35772b2Smrg# $write_libobj - a libtool object file
1453e35772b2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454e35772b2Smrg#
1455e35772b2Smrg# Please DO NOT delete this file!
1456e35772b2Smrg# It is necessary for linking the library.
1457e35772b2Smrg
1458e35772b2Smrg# Name of the PIC object.
1459e35772b2Smrgpic_object=$write_lobj
1460e35772b2Smrg
1461e35772b2Smrg# Name of the non-PIC object
1462e35772b2Smrgnon_pic_object=$write_oldobj
1463e35772b2Smrg
1464e35772b2SmrgEOF
1465e35772b2Smrg      $MV "${write_libobj}T" "${write_libobj}"
1466e35772b2Smrg    }
1467e35772b2Smrg}
1468e35772b2Smrg
146974c14cd6Smrg
147074c14cd6Smrg##################################################
147174c14cd6Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
147274c14cd6Smrg##################################################
147374c14cd6Smrg
147474c14cd6Smrg# func_convert_core_file_wine_to_w32 ARG
147574c14cd6Smrg# Helper function used by file name conversion functions when $build is *nix,
147674c14cd6Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
147774c14cd6Smrg# correctly configured wine environment available, with the winepath program
147874c14cd6Smrg# in $build's $PATH.
147974c14cd6Smrg#
148074c14cd6Smrg# ARG is the $build file name to be converted to w32 format.
148174c14cd6Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
148274c14cd6Smrg# be empty on error (or when ARG is empty)
148374c14cd6Smrgfunc_convert_core_file_wine_to_w32 ()
148474c14cd6Smrg{
148574c14cd6Smrg  $opt_debug
148674c14cd6Smrg  func_convert_core_file_wine_to_w32_result="$1"
148774c14cd6Smrg  if test -n "$1"; then
148874c14cd6Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
148974c14cd6Smrg    # are forced to check the contents of stdout. On the other hand, if the
149074c14cd6Smrg    # command is not found, the shell will set an exit code of 127 and print
149174c14cd6Smrg    # *an error message* to stdout. So we must check for both error code of
149274c14cd6Smrg    # zero AND non-empty stdout, which explains the odd construction:
149374c14cd6Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
149474c14cd6Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
149574c14cd6Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
149674c14cd6Smrg        $SED -e "$lt_sed_naive_backslashify"`
149774c14cd6Smrg    else
149874c14cd6Smrg      func_convert_core_file_wine_to_w32_result=
149974c14cd6Smrg    fi
150074c14cd6Smrg  fi
150174c14cd6Smrg}
150274c14cd6Smrg# end: func_convert_core_file_wine_to_w32
150374c14cd6Smrg
150474c14cd6Smrg
150574c14cd6Smrg# func_convert_core_path_wine_to_w32 ARG
150674c14cd6Smrg# Helper function used by path conversion functions when $build is *nix, and
150774c14cd6Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
150874c14cd6Smrg# configured wine environment available, with the winepath program in $build's
150974c14cd6Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
151074c14cd6Smrg#
151174c14cd6Smrg# ARG is path to be converted from $build format to win32.
151274c14cd6Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
151374c14cd6Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
151474c14cd6Smrg# are convertible, then the result may be empty.
151574c14cd6Smrgfunc_convert_core_path_wine_to_w32 ()
151674c14cd6Smrg{
151774c14cd6Smrg  $opt_debug
151874c14cd6Smrg  # unfortunately, winepath doesn't convert paths, only file names
151974c14cd6Smrg  func_convert_core_path_wine_to_w32_result=""
152074c14cd6Smrg  if test -n "$1"; then
152174c14cd6Smrg    oldIFS=$IFS
152274c14cd6Smrg    IFS=:
152374c14cd6Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
152474c14cd6Smrg      IFS=$oldIFS
152574c14cd6Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
152674c14cd6Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
152774c14cd6Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
152874c14cd6Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
152974c14cd6Smrg        else
153074c14cd6Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
153174c14cd6Smrg        fi
153274c14cd6Smrg      fi
153374c14cd6Smrg    done
153474c14cd6Smrg    IFS=$oldIFS
153574c14cd6Smrg  fi
153674c14cd6Smrg}
153774c14cd6Smrg# end: func_convert_core_path_wine_to_w32
153874c14cd6Smrg
153974c14cd6Smrg
154074c14cd6Smrg# func_cygpath ARGS...
154174c14cd6Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
154274c14cd6Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
154374c14cd6Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
154474c14cd6Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
154574c14cd6Smrg# file name or path is assumed to be in w32 format, as previously converted
154674c14cd6Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
154774c14cd6Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
154874c14cd6Smrg# Cygwin format). Returns an empty string on error.
154974c14cd6Smrg#
155074c14cd6Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
155174c14cd6Smrg# be converted.
155274c14cd6Smrg#
155374c14cd6Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
155474c14cd6Smrg# environment variable; do not put it in $PATH.
155574c14cd6Smrgfunc_cygpath ()
155674c14cd6Smrg{
155774c14cd6Smrg  $opt_debug
155874c14cd6Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
155974c14cd6Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
156074c14cd6Smrg    if test "$?" -ne 0; then
156174c14cd6Smrg      # on failure, ensure result is empty
156274c14cd6Smrg      func_cygpath_result=
156374c14cd6Smrg    fi
156474c14cd6Smrg  else
156574c14cd6Smrg    func_cygpath_result=
156674c14cd6Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
156774c14cd6Smrg  fi
156874c14cd6Smrg}
156974c14cd6Smrg#end: func_cygpath
157074c14cd6Smrg
157174c14cd6Smrg
157274c14cd6Smrg# func_convert_core_msys_to_w32 ARG
157374c14cd6Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
157474c14cd6Smrg# result in func_convert_core_msys_to_w32_result.
157574c14cd6Smrgfunc_convert_core_msys_to_w32 ()
157674c14cd6Smrg{
157774c14cd6Smrg  $opt_debug
157874c14cd6Smrg  # awkward: cmd appends spaces to result
157974c14cd6Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
158074c14cd6Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
158174c14cd6Smrg}
158274c14cd6Smrg#end: func_convert_core_msys_to_w32
158374c14cd6Smrg
158474c14cd6Smrg
158574c14cd6Smrg# func_convert_file_check ARG1 ARG2
158674c14cd6Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
158774c14cd6Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
158874c14cd6Smrg# func_to_host_file_result to ARG1).
158974c14cd6Smrgfunc_convert_file_check ()
159074c14cd6Smrg{
159174c14cd6Smrg  $opt_debug
159274c14cd6Smrg  if test -z "$2" && test -n "$1" ; then
159374c14cd6Smrg    func_error "Could not determine host file name corresponding to"
159474c14cd6Smrg    func_error "  \`$1'"
159574c14cd6Smrg    func_error "Continuing, but uninstalled executables may not work."
159674c14cd6Smrg    # Fallback:
159774c14cd6Smrg    func_to_host_file_result="$1"
159874c14cd6Smrg  fi
159974c14cd6Smrg}
160074c14cd6Smrg# end func_convert_file_check
160174c14cd6Smrg
160274c14cd6Smrg
160374c14cd6Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
160474c14cd6Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
160574c14cd6Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
160674c14cd6Smrg# func_to_host_file_result to a simplistic fallback value (see below).
160774c14cd6Smrgfunc_convert_path_check ()
160874c14cd6Smrg{
160974c14cd6Smrg  $opt_debug
161074c14cd6Smrg  if test -z "$4" && test -n "$3"; then
161174c14cd6Smrg    func_error "Could not determine the host path corresponding to"
161274c14cd6Smrg    func_error "  \`$3'"
161374c14cd6Smrg    func_error "Continuing, but uninstalled executables may not work."
161474c14cd6Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
161574c14cd6Smrg    # should not be "improved".  See libtool.info.
161674c14cd6Smrg    if test "x$1" != "x$2"; then
161774c14cd6Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
161874c14cd6Smrg      func_to_host_path_result=`echo "$3" |
161974c14cd6Smrg        $SED -e "$lt_replace_pathsep_chars"`
162074c14cd6Smrg    else
162174c14cd6Smrg      func_to_host_path_result="$3"
162274c14cd6Smrg    fi
162374c14cd6Smrg  fi
162474c14cd6Smrg}
162574c14cd6Smrg# end func_convert_path_check
162674c14cd6Smrg
162774c14cd6Smrg
162874c14cd6Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
162974c14cd6Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
163074c14cd6Smrg# and appending REPL if ORIG matches BACKPAT.
163174c14cd6Smrgfunc_convert_path_front_back_pathsep ()
163274c14cd6Smrg{
163374c14cd6Smrg  $opt_debug
163474c14cd6Smrg  case $4 in
163574c14cd6Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
163674c14cd6Smrg    ;;
163774c14cd6Smrg  esac
163874c14cd6Smrg  case $4 in
163974c14cd6Smrg  $2 ) func_append func_to_host_path_result "$3"
164074c14cd6Smrg    ;;
164174c14cd6Smrg  esac
164274c14cd6Smrg}
164374c14cd6Smrg# end func_convert_path_front_back_pathsep
164474c14cd6Smrg
164574c14cd6Smrg
164674c14cd6Smrg##################################################
164774c14cd6Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
164874c14cd6Smrg##################################################
164974c14cd6Smrg# invoked via `$to_host_file_cmd ARG'
165074c14cd6Smrg#
165174c14cd6Smrg# In each case, ARG is the path to be converted from $build to $host format.
165274c14cd6Smrg# Result will be available in $func_to_host_file_result.
165374c14cd6Smrg
165474c14cd6Smrg
165574c14cd6Smrg# func_to_host_file ARG
165674c14cd6Smrg# Converts the file name ARG from $build format to $host format. Return result
165774c14cd6Smrg# in func_to_host_file_result.
165874c14cd6Smrgfunc_to_host_file ()
165974c14cd6Smrg{
166074c14cd6Smrg  $opt_debug
166174c14cd6Smrg  $to_host_file_cmd "$1"
166274c14cd6Smrg}
166374c14cd6Smrg# end func_to_host_file
166474c14cd6Smrg
166574c14cd6Smrg
166674c14cd6Smrg# func_to_tool_file ARG LAZY
166774c14cd6Smrg# converts the file name ARG from $build format to toolchain format. Return
166874c14cd6Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
166974c14cd6Smrg# in (the comma separated) LAZY, no conversion takes place.
167074c14cd6Smrgfunc_to_tool_file ()
167174c14cd6Smrg{
167274c14cd6Smrg  $opt_debug
167374c14cd6Smrg  case ,$2, in
167474c14cd6Smrg    *,"$to_tool_file_cmd",*)
167574c14cd6Smrg      func_to_tool_file_result=$1
167674c14cd6Smrg      ;;
167774c14cd6Smrg    *)
167874c14cd6Smrg      $to_tool_file_cmd "$1"
167974c14cd6Smrg      func_to_tool_file_result=$func_to_host_file_result
168074c14cd6Smrg      ;;
168174c14cd6Smrg  esac
168274c14cd6Smrg}
168374c14cd6Smrg# end func_to_tool_file
168474c14cd6Smrg
168574c14cd6Smrg
168674c14cd6Smrg# func_convert_file_noop ARG
168774c14cd6Smrg# Copy ARG to func_to_host_file_result.
168874c14cd6Smrgfunc_convert_file_noop ()
168974c14cd6Smrg{
169074c14cd6Smrg  func_to_host_file_result="$1"
169174c14cd6Smrg}
169274c14cd6Smrg# end func_convert_file_noop
169374c14cd6Smrg
169474c14cd6Smrg
169574c14cd6Smrg# func_convert_file_msys_to_w32 ARG
169674c14cd6Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
169774c14cd6Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
169874c14cd6Smrg# func_to_host_file_result.
169974c14cd6Smrgfunc_convert_file_msys_to_w32 ()
170074c14cd6Smrg{
170174c14cd6Smrg  $opt_debug
170274c14cd6Smrg  func_to_host_file_result="$1"
170374c14cd6Smrg  if test -n "$1"; then
170474c14cd6Smrg    func_convert_core_msys_to_w32 "$1"
170574c14cd6Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
170674c14cd6Smrg  fi
170774c14cd6Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
170874c14cd6Smrg}
170974c14cd6Smrg# end func_convert_file_msys_to_w32
171074c14cd6Smrg
171174c14cd6Smrg
171274c14cd6Smrg# func_convert_file_cygwin_to_w32 ARG
171374c14cd6Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
171474c14cd6Smrg# func_to_host_file_result.
171574c14cd6Smrgfunc_convert_file_cygwin_to_w32 ()
171674c14cd6Smrg{
171774c14cd6Smrg  $opt_debug
171874c14cd6Smrg  func_to_host_file_result="$1"
171974c14cd6Smrg  if test -n "$1"; then
172074c14cd6Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
172174c14cd6Smrg    # LT_CYGPATH in this case.
172274c14cd6Smrg    func_to_host_file_result=`cygpath -m "$1"`
172374c14cd6Smrg  fi
172474c14cd6Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
172574c14cd6Smrg}
172674c14cd6Smrg# end func_convert_file_cygwin_to_w32
172774c14cd6Smrg
172874c14cd6Smrg
172974c14cd6Smrg# func_convert_file_nix_to_w32 ARG
173074c14cd6Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
173174c14cd6Smrg# and a working winepath. Returns result in func_to_host_file_result.
173274c14cd6Smrgfunc_convert_file_nix_to_w32 ()
173374c14cd6Smrg{
173474c14cd6Smrg  $opt_debug
173574c14cd6Smrg  func_to_host_file_result="$1"
173674c14cd6Smrg  if test -n "$1"; then
173774c14cd6Smrg    func_convert_core_file_wine_to_w32 "$1"
173874c14cd6Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
173974c14cd6Smrg  fi
174074c14cd6Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
174174c14cd6Smrg}
174274c14cd6Smrg# end func_convert_file_nix_to_w32
174374c14cd6Smrg
174474c14cd6Smrg
174574c14cd6Smrg# func_convert_file_msys_to_cygwin ARG
174674c14cd6Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
174774c14cd6Smrg# Returns result in func_to_host_file_result.
174874c14cd6Smrgfunc_convert_file_msys_to_cygwin ()
174974c14cd6Smrg{
175074c14cd6Smrg  $opt_debug
175174c14cd6Smrg  func_to_host_file_result="$1"
175274c14cd6Smrg  if test -n "$1"; then
175374c14cd6Smrg    func_convert_core_msys_to_w32 "$1"
175474c14cd6Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
175574c14cd6Smrg    func_to_host_file_result="$func_cygpath_result"
175674c14cd6Smrg  fi
175774c14cd6Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
175874c14cd6Smrg}
175974c14cd6Smrg# end func_convert_file_msys_to_cygwin
176074c14cd6Smrg
176174c14cd6Smrg
176274c14cd6Smrg# func_convert_file_nix_to_cygwin ARG
176374c14cd6Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
176474c14cd6Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
176574c14cd6Smrg# in func_to_host_file_result.
176674c14cd6Smrgfunc_convert_file_nix_to_cygwin ()
176774c14cd6Smrg{
176874c14cd6Smrg  $opt_debug
176974c14cd6Smrg  func_to_host_file_result="$1"
177074c14cd6Smrg  if test -n "$1"; then
177174c14cd6Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
177274c14cd6Smrg    func_convert_core_file_wine_to_w32 "$1"
177374c14cd6Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
177474c14cd6Smrg    func_to_host_file_result="$func_cygpath_result"
177574c14cd6Smrg  fi
177674c14cd6Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
177774c14cd6Smrg}
177874c14cd6Smrg# end func_convert_file_nix_to_cygwin
177974c14cd6Smrg
178074c14cd6Smrg
178174c14cd6Smrg#############################################
178274c14cd6Smrg# $build to $host PATH CONVERSION FUNCTIONS #
178374c14cd6Smrg#############################################
178474c14cd6Smrg# invoked via `$to_host_path_cmd ARG'
178574c14cd6Smrg#
178674c14cd6Smrg# In each case, ARG is the path to be converted from $build to $host format.
178774c14cd6Smrg# The result will be available in $func_to_host_path_result.
178874c14cd6Smrg#
178974c14cd6Smrg# Path separators are also converted from $build format to $host format.  If
179074c14cd6Smrg# ARG begins or ends with a path separator character, it is preserved (but
179174c14cd6Smrg# converted to $host format) on output.
179274c14cd6Smrg#
179374c14cd6Smrg# All path conversion functions are named using the following convention:
179474c14cd6Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
179574c14cd6Smrg#   path conversion function         : func_convert_path_X_to_Y ()
179674c14cd6Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
179774c14cd6Smrg# same.  If conversion functions are added for new $build/$host combinations,
179874c14cd6Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
179974c14cd6Smrg# will break.
180074c14cd6Smrg
180174c14cd6Smrg
180274c14cd6Smrg# func_init_to_host_path_cmd
180374c14cd6Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
180474c14cd6Smrg# appropriate value, based on the value of $to_host_file_cmd.
180574c14cd6Smrgto_host_path_cmd=
180674c14cd6Smrgfunc_init_to_host_path_cmd ()
180774c14cd6Smrg{
180874c14cd6Smrg  $opt_debug
180974c14cd6Smrg  if test -z "$to_host_path_cmd"; then
181074c14cd6Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
181174c14cd6Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
181274c14cd6Smrg  fi
181374c14cd6Smrg}
181474c14cd6Smrg
181574c14cd6Smrg
181674c14cd6Smrg# func_to_host_path ARG
181774c14cd6Smrg# Converts the path ARG from $build format to $host format. Return result
181874c14cd6Smrg# in func_to_host_path_result.
181974c14cd6Smrgfunc_to_host_path ()
182074c14cd6Smrg{
182174c14cd6Smrg  $opt_debug
182274c14cd6Smrg  func_init_to_host_path_cmd
182374c14cd6Smrg  $to_host_path_cmd "$1"
182474c14cd6Smrg}
182574c14cd6Smrg# end func_to_host_path
182674c14cd6Smrg
182774c14cd6Smrg
182874c14cd6Smrg# func_convert_path_noop ARG
182974c14cd6Smrg# Copy ARG to func_to_host_path_result.
183074c14cd6Smrgfunc_convert_path_noop ()
183174c14cd6Smrg{
183274c14cd6Smrg  func_to_host_path_result="$1"
183374c14cd6Smrg}
183474c14cd6Smrg# end func_convert_path_noop
183574c14cd6Smrg
183674c14cd6Smrg
183774c14cd6Smrg# func_convert_path_msys_to_w32 ARG
183874c14cd6Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
183974c14cd6Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
184074c14cd6Smrg# func_to_host_path_result.
184174c14cd6Smrgfunc_convert_path_msys_to_w32 ()
184274c14cd6Smrg{
184374c14cd6Smrg  $opt_debug
184474c14cd6Smrg  func_to_host_path_result="$1"
184574c14cd6Smrg  if test -n "$1"; then
184674c14cd6Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
184774c14cd6Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
184874c14cd6Smrg    # and winepath ignores them completely.
184974c14cd6Smrg    func_stripname : : "$1"
185074c14cd6Smrg    func_to_host_path_tmp1=$func_stripname_result
185174c14cd6Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
185274c14cd6Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
185374c14cd6Smrg    func_convert_path_check : ";" \
185474c14cd6Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
185574c14cd6Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
185674c14cd6Smrg  fi
185774c14cd6Smrg}
185874c14cd6Smrg# end func_convert_path_msys_to_w32
185974c14cd6Smrg
186074c14cd6Smrg
186174c14cd6Smrg# func_convert_path_cygwin_to_w32 ARG
186274c14cd6Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
186374c14cd6Smrg# func_to_host_file_result.
186474c14cd6Smrgfunc_convert_path_cygwin_to_w32 ()
186574c14cd6Smrg{
186674c14cd6Smrg  $opt_debug
186774c14cd6Smrg  func_to_host_path_result="$1"
186874c14cd6Smrg  if test -n "$1"; then
186974c14cd6Smrg    # See func_convert_path_msys_to_w32:
187074c14cd6Smrg    func_stripname : : "$1"
187174c14cd6Smrg    func_to_host_path_tmp1=$func_stripname_result
187274c14cd6Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
187374c14cd6Smrg    func_convert_path_check : ";" \
187474c14cd6Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
187574c14cd6Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
187674c14cd6Smrg  fi
187774c14cd6Smrg}
187874c14cd6Smrg# end func_convert_path_cygwin_to_w32
187974c14cd6Smrg
188074c14cd6Smrg
188174c14cd6Smrg# func_convert_path_nix_to_w32 ARG
188274c14cd6Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
188374c14cd6Smrg# a working winepath.  Returns result in func_to_host_file_result.
188474c14cd6Smrgfunc_convert_path_nix_to_w32 ()
188574c14cd6Smrg{
188674c14cd6Smrg  $opt_debug
188774c14cd6Smrg  func_to_host_path_result="$1"
188874c14cd6Smrg  if test -n "$1"; then
188974c14cd6Smrg    # See func_convert_path_msys_to_w32:
189074c14cd6Smrg    func_stripname : : "$1"
189174c14cd6Smrg    func_to_host_path_tmp1=$func_stripname_result
189274c14cd6Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
189374c14cd6Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
189474c14cd6Smrg    func_convert_path_check : ";" \
189574c14cd6Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
189674c14cd6Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
189774c14cd6Smrg  fi
189874c14cd6Smrg}
189974c14cd6Smrg# end func_convert_path_nix_to_w32
190074c14cd6Smrg
190174c14cd6Smrg
190274c14cd6Smrg# func_convert_path_msys_to_cygwin ARG
190374c14cd6Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
190474c14cd6Smrg# Returns result in func_to_host_file_result.
190574c14cd6Smrgfunc_convert_path_msys_to_cygwin ()
190674c14cd6Smrg{
190774c14cd6Smrg  $opt_debug
190874c14cd6Smrg  func_to_host_path_result="$1"
190974c14cd6Smrg  if test -n "$1"; then
191074c14cd6Smrg    # See func_convert_path_msys_to_w32:
191174c14cd6Smrg    func_stripname : : "$1"
191274c14cd6Smrg    func_to_host_path_tmp1=$func_stripname_result
191374c14cd6Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
191474c14cd6Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
191574c14cd6Smrg    func_to_host_path_result="$func_cygpath_result"
191674c14cd6Smrg    func_convert_path_check : : \
191774c14cd6Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
191874c14cd6Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
191974c14cd6Smrg  fi
192074c14cd6Smrg}
192174c14cd6Smrg# end func_convert_path_msys_to_cygwin
192274c14cd6Smrg
192374c14cd6Smrg
192474c14cd6Smrg# func_convert_path_nix_to_cygwin ARG
192574c14cd6Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
192674c14cd6Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
192774c14cd6Smrg# func_to_host_file_result.
192874c14cd6Smrgfunc_convert_path_nix_to_cygwin ()
192974c14cd6Smrg{
193074c14cd6Smrg  $opt_debug
193174c14cd6Smrg  func_to_host_path_result="$1"
193274c14cd6Smrg  if test -n "$1"; then
193374c14cd6Smrg    # Remove leading and trailing path separator characters from
193474c14cd6Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
193574c14cd6Smrg    # into '.;' and ';.', and winepath ignores them completely.
193674c14cd6Smrg    func_stripname : : "$1"
193774c14cd6Smrg    func_to_host_path_tmp1=$func_stripname_result
193874c14cd6Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
193974c14cd6Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
194074c14cd6Smrg    func_to_host_path_result="$func_cygpath_result"
194174c14cd6Smrg    func_convert_path_check : : \
194274c14cd6Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
194374c14cd6Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
194474c14cd6Smrg  fi
194574c14cd6Smrg}
194674c14cd6Smrg# end func_convert_path_nix_to_cygwin
194774c14cd6Smrg
194874c14cd6Smrg
1949e35772b2Smrg# func_mode_compile arg...
1950e35772b2Smrgfunc_mode_compile ()
1951e35772b2Smrg{
1952e35772b2Smrg    $opt_debug
1953e35772b2Smrg    # Get the compilation command and the source file.
1954e35772b2Smrg    base_compile=
1955e35772b2Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956e35772b2Smrg    suppress_opt=yes
1957e35772b2Smrg    suppress_output=
1958e35772b2Smrg    arg_mode=normal
1959e35772b2Smrg    libobj=
1960e35772b2Smrg    later=
1961e35772b2Smrg    pie_flag=
1962e35772b2Smrg
1963e35772b2Smrg    for arg
1964e35772b2Smrg    do
1965e35772b2Smrg      case $arg_mode in
1966e35772b2Smrg      arg  )
1967e35772b2Smrg	# do not "continue".  Instead, add this to base_compile
1968e35772b2Smrg	lastarg="$arg"
1969e35772b2Smrg	arg_mode=normal
1970e35772b2Smrg	;;
1971e35772b2Smrg
1972e35772b2Smrg      target )
1973e35772b2Smrg	libobj="$arg"
1974e35772b2Smrg	arg_mode=normal
1975e35772b2Smrg	continue
1976e35772b2Smrg	;;
1977e35772b2Smrg
1978e35772b2Smrg      normal )
1979e35772b2Smrg	# Accept any command-line options.
1980e35772b2Smrg	case $arg in
1981e35772b2Smrg	-o)
1982e35772b2Smrg	  test -n "$libobj" && \
1983e35772b2Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984e35772b2Smrg	  arg_mode=target
1985e35772b2Smrg	  continue
1986e35772b2Smrg	  ;;
1987e35772b2Smrg
1988e35772b2Smrg	-pie | -fpie | -fPIE)
198974c14cd6Smrg          func_append pie_flag " $arg"
1990e35772b2Smrg	  continue
1991e35772b2Smrg	  ;;
1992e35772b2Smrg
1993e35772b2Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
199474c14cd6Smrg	  func_append later " $arg"
1995e35772b2Smrg	  continue
1996e35772b2Smrg	  ;;
1997e35772b2Smrg
1998e35772b2Smrg	-no-suppress)
199972b676d7Smrg	  suppress_opt=no
200072b676d7Smrg	  continue
200172b676d7Smrg	  ;;
200272b676d7Smrg
200372b676d7Smrg	-Xcompiler)
200472b676d7Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
200572b676d7Smrg	  continue      #  The current "srcfile" will either be retained or
200672b676d7Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
200772b676d7Smrg
200872b676d7Smrg	-Wc,*)
2009e35772b2Smrg	  func_stripname '-Wc,' '' "$arg"
2010e35772b2Smrg	  args=$func_stripname_result
201172b676d7Smrg	  lastarg=
201272b676d7Smrg	  save_ifs="$IFS"; IFS=','
2013e35772b2Smrg	  for arg in $args; do
201472b676d7Smrg	    IFS="$save_ifs"
201574c14cd6Smrg	    func_append_quoted lastarg "$arg"
201672b676d7Smrg	  done
201772b676d7Smrg	  IFS="$save_ifs"
2018e35772b2Smrg	  func_stripname ' ' '' "$lastarg"
2019e35772b2Smrg	  lastarg=$func_stripname_result
202072b676d7Smrg
202172b676d7Smrg	  # Add the arguments to base_compile.
202274c14cd6Smrg	  func_append base_compile " $lastarg"
202372b676d7Smrg	  continue
202472b676d7Smrg	  ;;
202572b676d7Smrg
2026e35772b2Smrg	*)
202772b676d7Smrg	  # Accept the current argument as the source file.
202872b676d7Smrg	  # The previous "srcfile" becomes the current argument.
202972b676d7Smrg	  #
203072b676d7Smrg	  lastarg="$srcfile"
203172b676d7Smrg	  srcfile="$arg"
203272b676d7Smrg	  ;;
203372b676d7Smrg	esac  #  case $arg
203472b676d7Smrg	;;
203572b676d7Smrg      esac    #  case $arg_mode
203672b676d7Smrg
203772b676d7Smrg      # Aesthetically quote the previous argument.
203874c14cd6Smrg      func_append_quoted base_compile "$lastarg"
203972b676d7Smrg    done # for arg
204072b676d7Smrg
204172b676d7Smrg    case $arg_mode in
204272b676d7Smrg    arg)
2043e35772b2Smrg      func_fatal_error "you must specify an argument for -Xcompile"
204472b676d7Smrg      ;;
204572b676d7Smrg    target)
2046e35772b2Smrg      func_fatal_error "you must specify a target with \`-o'"
204772b676d7Smrg      ;;
204872b676d7Smrg    *)
204972b676d7Smrg      # Get the name of the library object.
2050e35772b2Smrg      test -z "$libobj" && {
2051e35772b2Smrg	func_basename "$srcfile"
2052e35772b2Smrg	libobj="$func_basename_result"
2053e35772b2Smrg      }
205472b676d7Smrg      ;;
205572b676d7Smrg    esac
205672b676d7Smrg
205772b676d7Smrg    # Recognize several different file suffixes.
205872b676d7Smrg    # If the user specifies -o file.o, it is replaced with file.lo
205972b676d7Smrg    case $libobj in
2060e35772b2Smrg    *.[cCFSifmso] | \
2061e35772b2Smrg    *.ada | *.adb | *.ads | *.asm | \
2062e35772b2Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
206374c14cd6Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064e35772b2Smrg      func_xform "$libobj"
2065e35772b2Smrg      libobj=$func_xform_result
2066e35772b2Smrg      ;;
206772b676d7Smrg    esac
206872b676d7Smrg
206972b676d7Smrg    case $libobj in
2070e35772b2Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
207172b676d7Smrg    *)
2072e35772b2Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
207372b676d7Smrg      ;;
207472b676d7Smrg    esac
207572b676d7Smrg
207672b676d7Smrg    func_infer_tag $base_compile
207772b676d7Smrg
207872b676d7Smrg    for arg in $later; do
207972b676d7Smrg      case $arg in
2080e35772b2Smrg      -shared)
2081e35772b2Smrg	test "$build_libtool_libs" != yes && \
2082e35772b2Smrg	  func_fatal_configuration "can not build a shared library"
2083e35772b2Smrg	build_old_libs=no
2084e35772b2Smrg	continue
2085e35772b2Smrg	;;
2086e35772b2Smrg
208772b676d7Smrg      -static)
2088e35772b2Smrg	build_libtool_libs=no
208972b676d7Smrg	build_old_libs=yes
209072b676d7Smrg	continue
209172b676d7Smrg	;;
209272b676d7Smrg
209372b676d7Smrg      -prefer-pic)
209472b676d7Smrg	pic_mode=yes
209572b676d7Smrg	continue
209672b676d7Smrg	;;
209772b676d7Smrg
209872b676d7Smrg      -prefer-non-pic)
209972b676d7Smrg	pic_mode=no
210072b676d7Smrg	continue
210172b676d7Smrg	;;
210272b676d7Smrg      esac
210372b676d7Smrg    done
210472b676d7Smrg
2105e35772b2Smrg    func_quote_for_eval "$libobj"
2106e35772b2Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107e35772b2Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108e35772b2Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109e35772b2Smrg    func_dirname_and_basename "$obj" "/" ""
2110e35772b2Smrg    objname="$func_basename_result"
2111e35772b2Smrg    xdir="$func_dirname_result"
211272b676d7Smrg    lobj=${xdir}$objdir/$objname
211372b676d7Smrg
2114e35772b2Smrg    test -z "$base_compile" && \
2115e35772b2Smrg      func_fatal_help "you must specify a compilation command"
211672b676d7Smrg
211772b676d7Smrg    # Delete any leftover library objects.
211872b676d7Smrg    if test "$build_old_libs" = yes; then
211972b676d7Smrg      removelist="$obj $lobj $libobj ${libobj}T"
212072b676d7Smrg    else
212172b676d7Smrg      removelist="$lobj $libobj ${libobj}T"
212272b676d7Smrg    fi
212372b676d7Smrg
212472b676d7Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
212572b676d7Smrg    case $host_os in
2126e35772b2Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
212772b676d7Smrg      pic_mode=default
212872b676d7Smrg      ;;
212972b676d7Smrg    esac
213072b676d7Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
213172b676d7Smrg      # non-PIC code in shared libraries is not supported
213272b676d7Smrg      pic_mode=default
213372b676d7Smrg    fi
213472b676d7Smrg
213572b676d7Smrg    # Calculate the filename of the output object if compiler does
213672b676d7Smrg    # not support -o with -c
213772b676d7Smrg    if test "$compiler_c_o" = no; then
213874c14cd6Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
213972b676d7Smrg      lockfile="$output_obj.lock"
214072b676d7Smrg    else
214172b676d7Smrg      output_obj=
214272b676d7Smrg      need_locks=no
214372b676d7Smrg      lockfile=
214472b676d7Smrg    fi
214572b676d7Smrg
214672b676d7Smrg    # Lock this critical section if it is needed
214772b676d7Smrg    # We use this script file to make the link, it avoids creating a new file
214872b676d7Smrg    if test "$need_locks" = yes; then
2149e35772b2Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150e35772b2Smrg	func_echo "Waiting for $lockfile to be removed"
215172b676d7Smrg	sleep 2
215272b676d7Smrg      done
215372b676d7Smrg    elif test "$need_locks" = warn; then
215472b676d7Smrg      if test -f "$lockfile"; then
2155e35772b2Smrg	$ECHO "\
215672b676d7Smrg*** ERROR, $lockfile exists and contains:
215772b676d7Smrg`cat $lockfile 2>/dev/null`
215872b676d7Smrg
215972b676d7SmrgThis indicates that another process is trying to use the same
216072b676d7Smrgtemporary object file, and libtool could not work around it because
216172b676d7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
216272b676d7Smrgrepeat this compilation, it may succeed, by chance, but you had better
216372b676d7Smrgavoid parallel builds (make -j) in this platform, or get a better
216472b676d7Smrgcompiler."
216572b676d7Smrg
2166e35772b2Smrg	$opt_dry_run || $RM $removelist
216772b676d7Smrg	exit $EXIT_FAILURE
216872b676d7Smrg      fi
216974c14cd6Smrg      func_append removelist " $output_obj"
2170e35772b2Smrg      $ECHO "$srcfile" > "$lockfile"
217172b676d7Smrg    fi
217272b676d7Smrg
2173e35772b2Smrg    $opt_dry_run || $RM $removelist
217474c14cd6Smrg    func_append removelist " $lockfile"
2175e35772b2Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176e35772b2Smrg
217774c14cd6Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
217874c14cd6Smrg    srcfile=$func_to_tool_file_result
2179e35772b2Smrg    func_quote_for_eval "$srcfile"
2180e35772b2Smrg    qsrcfile=$func_quote_for_eval_result
218172b676d7Smrg
218272b676d7Smrg    # Only build a PIC object if we are building libtool libraries.
218372b676d7Smrg    if test "$build_libtool_libs" = yes; then
218472b676d7Smrg      # Without this assignment, base_compile gets emptied.
218572b676d7Smrg      fbsd_hideous_sh_bug=$base_compile
218672b676d7Smrg
218772b676d7Smrg      if test "$pic_mode" != no; then
218872b676d7Smrg	command="$base_compile $qsrcfile $pic_flag"
218972b676d7Smrg      else
219072b676d7Smrg	# Don't build PIC code
219172b676d7Smrg	command="$base_compile $qsrcfile"
219272b676d7Smrg      fi
219372b676d7Smrg
2194e35772b2Smrg      func_mkdir_p "$xdir$objdir"
219572b676d7Smrg
219672b676d7Smrg      if test -z "$output_obj"; then
219772b676d7Smrg	# Place PIC objects in $objdir
219874c14cd6Smrg	func_append command " -o $lobj"
219972b676d7Smrg      fi
220072b676d7Smrg
2201e35772b2Smrg      func_show_eval_locale "$command"	\
2202e35772b2Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
220372b676d7Smrg
220472b676d7Smrg      if test "$need_locks" = warn &&
220572b676d7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206e35772b2Smrg	$ECHO "\
220772b676d7Smrg*** ERROR, $lockfile contains:
220872b676d7Smrg`cat $lockfile 2>/dev/null`
220972b676d7Smrg
221072b676d7Smrgbut it should contain:
221172b676d7Smrg$srcfile
221272b676d7Smrg
221372b676d7SmrgThis indicates that another process is trying to use the same
221472b676d7Smrgtemporary object file, and libtool could not work around it because
221572b676d7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
221672b676d7Smrgrepeat this compilation, it may succeed, by chance, but you had better
221772b676d7Smrgavoid parallel builds (make -j) in this platform, or get a better
221872b676d7Smrgcompiler."
221972b676d7Smrg
2220e35772b2Smrg	$opt_dry_run || $RM $removelist
222172b676d7Smrg	exit $EXIT_FAILURE
222272b676d7Smrg      fi
222372b676d7Smrg
222472b676d7Smrg      # Just move the object if needed, then go on to compile the next one
222572b676d7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226e35772b2Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227e35772b2Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
222872b676d7Smrg      fi
222972b676d7Smrg
223072b676d7Smrg      # Allow error messages only from the first compilation.
223172b676d7Smrg      if test "$suppress_opt" = yes; then
2232e35772b2Smrg	suppress_output=' >/dev/null 2>&1'
223372b676d7Smrg      fi
223472b676d7Smrg    fi
223572b676d7Smrg
223672b676d7Smrg    # Only build a position-dependent object if we build old libraries.
223772b676d7Smrg    if test "$build_old_libs" = yes; then
223872b676d7Smrg      if test "$pic_mode" != yes; then
223972b676d7Smrg	# Don't build PIC code
2240e35772b2Smrg	command="$base_compile $qsrcfile$pie_flag"
224172b676d7Smrg      else
224272b676d7Smrg	command="$base_compile $qsrcfile $pic_flag"
224372b676d7Smrg      fi
224472b676d7Smrg      if test "$compiler_c_o" = yes; then
224574c14cd6Smrg	func_append command " -o $obj"
224672b676d7Smrg      fi
224772b676d7Smrg
224872b676d7Smrg      # Suppress compiler output if we already did a PIC compilation.
224974c14cd6Smrg      func_append command "$suppress_output"
2250e35772b2Smrg      func_show_eval_locale "$command" \
2251e35772b2Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
225272b676d7Smrg
225372b676d7Smrg      if test "$need_locks" = warn &&
225472b676d7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255e35772b2Smrg	$ECHO "\
225672b676d7Smrg*** ERROR, $lockfile contains:
225772b676d7Smrg`cat $lockfile 2>/dev/null`
225872b676d7Smrg
225972b676d7Smrgbut it should contain:
226072b676d7Smrg$srcfile
226172b676d7Smrg
226272b676d7SmrgThis indicates that another process is trying to use the same
226372b676d7Smrgtemporary object file, and libtool could not work around it because
226472b676d7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
226572b676d7Smrgrepeat this compilation, it may succeed, by chance, but you had better
226672b676d7Smrgavoid parallel builds (make -j) in this platform, or get a better
226772b676d7Smrgcompiler."
226872b676d7Smrg
2269e35772b2Smrg	$opt_dry_run || $RM $removelist
227072b676d7Smrg	exit $EXIT_FAILURE
227172b676d7Smrg      fi
227272b676d7Smrg
227372b676d7Smrg      # Just move the object if needed
227472b676d7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275e35772b2Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276e35772b2Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
227772b676d7Smrg      fi
227872b676d7Smrg    fi
227972b676d7Smrg
2280e35772b2Smrg    $opt_dry_run || {
2281e35772b2Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
228272b676d7Smrg
2283e35772b2Smrg      # Unlock the critical section if it was locked
2284e35772b2Smrg      if test "$need_locks" != no; then
2285e35772b2Smrg	removelist=$lockfile
2286e35772b2Smrg        $RM "$lockfile"
2287e35772b2Smrg      fi
2288e35772b2Smrg    }
228972b676d7Smrg
229072b676d7Smrg    exit $EXIT_SUCCESS
2291e35772b2Smrg}
229272b676d7Smrg
2293e35772b2Smrg$opt_help || {
229474c14cd6Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295e35772b2Smrg}
229672b676d7Smrg
2297e35772b2Smrgfunc_mode_help ()
2298e35772b2Smrg{
2299e35772b2Smrg    # We need to display help for each of the modes.
230074c14cd6Smrg    case $opt_mode in
2301e35772b2Smrg      "")
2302e35772b2Smrg        # Generic help is extracted from the usage comments
2303e35772b2Smrg        # at the start of this file.
2304e35772b2Smrg        func_help
2305e35772b2Smrg        ;;
230672b676d7Smrg
2307e35772b2Smrg      clean)
2308e35772b2Smrg        $ECHO \
2309e35772b2Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
231072b676d7Smrg
2311e35772b2SmrgRemove files from the build directory.
231272b676d7Smrg
2313e35772b2SmrgRM is the name of the program to use to delete files associated with each FILE
2314e35772b2Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315e35772b2Smrgto RM.
231672b676d7Smrg
2317e35772b2SmrgIf FILE is a libtool library, object or program, all the files associated
2318e35772b2Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319e35772b2Smrg        ;;
232072b676d7Smrg
2321e35772b2Smrg      compile)
2322e35772b2Smrg      $ECHO \
2323e35772b2Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
232472b676d7Smrg
2325e35772b2SmrgCompile a source file into a libtool library object.
232672b676d7Smrg
2327e35772b2SmrgThis mode accepts the following additional options:
232872b676d7Smrg
2329e35772b2Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330e35772b2Smrg  -no-suppress      do not suppress compiler output for multiple passes
233174c14cd6Smrg  -prefer-pic       try to build PIC objects only
233274c14cd6Smrg  -prefer-non-pic   try to build non-PIC objects only
2333e35772b2Smrg  -shared           do not build a \`.o' file suitable for static linking
2334e35772b2Smrg  -static           only build a \`.o' file suitable for static linking
233574c14cd6Smrg  -Wc,FLAG          pass FLAG directly to the compiler
233672b676d7Smrg
2337e35772b2SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338e35772b2Smrgfrom the given SOURCEFILE.
233972b676d7Smrg
2340e35772b2SmrgThe output file name is determined by removing the directory component from
2341e35772b2SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342e35772b2Smrglibrary object suffix, \`.lo'."
2343e35772b2Smrg        ;;
234472b676d7Smrg
2345e35772b2Smrg      execute)
2346e35772b2Smrg        $ECHO \
2347e35772b2Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
234872b676d7Smrg
2349e35772b2SmrgAutomatically set library path, then run a program.
235072b676d7Smrg
2351e35772b2SmrgThis mode accepts the following additional options:
235272b676d7Smrg
2353e35772b2Smrg  -dlopen FILE      add the directory containing FILE to the library path
235472b676d7Smrg
2355e35772b2SmrgThis mode sets the library path environment variable according to \`-dlopen'
2356e35772b2Smrgflags.
235772b676d7Smrg
2358e35772b2SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359e35772b2Smrginto their corresponding uninstalled binary, and any of their required library
2360e35772b2Smrgdirectories are added to the library path.
236172b676d7Smrg
2362e35772b2SmrgThen, COMMAND is executed, with ARGS as arguments."
2363e35772b2Smrg        ;;
236472b676d7Smrg
2365e35772b2Smrg      finish)
2366e35772b2Smrg        $ECHO \
2367e35772b2Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
236872b676d7Smrg
2369e35772b2SmrgComplete the installation of libtool libraries.
237072b676d7Smrg
2371e35772b2SmrgEach LIBDIR is a directory that contains libtool libraries.
237272b676d7Smrg
2373e35772b2SmrgThe commands that this mode executes may require superuser privileges.  Use
2374e35772b2Smrgthe \`--dry-run' option if you just want to see what would be executed."
2375e35772b2Smrg        ;;
237672b676d7Smrg
2377e35772b2Smrg      install)
2378e35772b2Smrg        $ECHO \
2379e35772b2Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
238072b676d7Smrg
2381e35772b2SmrgInstall executables or libraries.
238272b676d7Smrg
2383e35772b2SmrgINSTALL-COMMAND is the installation command.  The first component should be
2384e35772b2Smrgeither the \`install' or \`cp' program.
238572b676d7Smrg
2386e35772b2SmrgThe following components of INSTALL-COMMAND are treated specially:
238772b676d7Smrg
238874c14cd6Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
238972b676d7Smrg
2390e35772b2SmrgThe rest of the components are interpreted as arguments to that command (only
2391e35772b2SmrgBSD-compatible install options are recognized)."
2392e35772b2Smrg        ;;
239372b676d7Smrg
2394e35772b2Smrg      link)
2395e35772b2Smrg        $ECHO \
2396e35772b2Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
239772b676d7Smrg
2398e35772b2SmrgLink object files or libraries together to form another library, or to
2399e35772b2Smrgcreate an executable program.
240072b676d7Smrg
2401e35772b2SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402e35772b2Smrga program from several object files.
240372b676d7Smrg
2404e35772b2SmrgThe following components of LINK-COMMAND are treated specially:
240572b676d7Smrg
2406e35772b2Smrg  -all-static       do not do any dynamic linking at all
2407e35772b2Smrg  -avoid-version    do not add a version suffix if possible
240874c14cd6Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
240974c14cd6Smrg                    libraries must be found in the PATH setting at runtime)
2410e35772b2Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411e35772b2Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412e35772b2Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413e35772b2Smrg  -export-symbols SYMFILE
2414e35772b2Smrg                    try to export only the symbols listed in SYMFILE
2415e35772b2Smrg  -export-symbols-regex REGEX
2416e35772b2Smrg                    try to export only the symbols matching REGEX
2417e35772b2Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2418e35772b2Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419e35772b2Smrg  -module           build a library that can dlopened
2420e35772b2Smrg  -no-fast-install  disable the fast-install mode
2421e35772b2Smrg  -no-install       link a not-installable executable
2422e35772b2Smrg  -no-undefined     declare that a library does not refer to external symbols
2423e35772b2Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424e35772b2Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425e35772b2Smrg  -precious-files-regex REGEX
2426e35772b2Smrg                    don't remove output files matching REGEX
2427e35772b2Smrg  -release RELEASE  specify package release information
2428e35772b2Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429e35772b2Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430e35772b2Smrg  -shared           only do dynamic linking of libtool libraries
2431e35772b2Smrg  -shrext SUFFIX    override the standard shared library file extension
2432e35772b2Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433e35772b2Smrg  -static-libtool-libs
2434e35772b2Smrg                    do not do any dynamic linking of libtool libraries
2435e35772b2Smrg  -version-info CURRENT[:REVISION[:AGE]]
2436e35772b2Smrg                    specify library version info [each variable defaults to 0]
2437e35772b2Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
243874c14cd6Smrg  -Wc,FLAG
243974c14cd6Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
244074c14cd6Smrg  -Wl,FLAG
244174c14cd6Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
244274c14cd6Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
244372b676d7Smrg
2444e35772b2SmrgAll other options (arguments beginning with \`-') are ignored.
244572b676d7Smrg
2446e35772b2SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447e35772b2Smrgtreated as uninstalled libtool libraries, other files are standard or library
2448e35772b2Smrgobject files.
24491fd23544Smrg
2450e35772b2SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451e35772b2Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452e35772b2Smrgrequired, except when creating a convenience library.
245372b676d7Smrg
2454e35772b2SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455e35772b2Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
245672b676d7Smrg
2457e35772b2SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458e35772b2Smrgis created, otherwise an executable program is created."
245972b676d7Smrg        ;;
246072b676d7Smrg
2461e35772b2Smrg      uninstall)
2462e35772b2Smrg        $ECHO \
2463e35772b2Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
246472b676d7Smrg
2465e35772b2SmrgRemove libraries from an installation directory.
246672b676d7Smrg
2467e35772b2SmrgRM is the name of the program to use to delete files associated with each FILE
2468e35772b2Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469e35772b2Smrgto RM.
247072b676d7Smrg
2471e35772b2SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472e35772b2SmrgOtherwise, only FILE itself is deleted using RM."
2473e35772b2Smrg        ;;
247472b676d7Smrg
2475e35772b2Smrg      *)
247674c14cd6Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477e35772b2Smrg        ;;
2478e35772b2Smrg    esac
247972b676d7Smrg
248074c14cd6Smrg    echo
2481e35772b2Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482e35772b2Smrg}
248372b676d7Smrg
248474c14cd6Smrg# Now that we've collected a possible --mode arg, show help if necessary
248574c14cd6Smrgif $opt_help; then
248674c14cd6Smrg  if test "$opt_help" = :; then
248774c14cd6Smrg    func_mode_help
248874c14cd6Smrg  else
248974c14cd6Smrg    {
249074c14cd6Smrg      func_help noexit
249174c14cd6Smrg      for opt_mode in compile link execute install finish uninstall clean; do
249274c14cd6Smrg	func_mode_help
249374c14cd6Smrg      done
249474c14cd6Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
249574c14cd6Smrg    {
249674c14cd6Smrg      func_help noexit
249774c14cd6Smrg      for opt_mode in compile link execute install finish uninstall clean; do
249874c14cd6Smrg	echo
249974c14cd6Smrg	func_mode_help
250074c14cd6Smrg      done
250174c14cd6Smrg    } |
250274c14cd6Smrg    sed '1d
250374c14cd6Smrg      /^When reporting/,/^Report/{
250474c14cd6Smrg	H
250574c14cd6Smrg	d
250674c14cd6Smrg      }
250774c14cd6Smrg      $x
250874c14cd6Smrg      /information about other modes/d
250974c14cd6Smrg      /more detailed .*MODE/d
251074c14cd6Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
251174c14cd6Smrg  fi
251274c14cd6Smrg  exit $?
251374c14cd6Smrgfi
251472b676d7Smrg
251572b676d7Smrg
2516e35772b2Smrg# func_mode_execute arg...
2517e35772b2Smrgfunc_mode_execute ()
2518e35772b2Smrg{
2519e35772b2Smrg    $opt_debug
2520e35772b2Smrg    # The first argument is the command name.
2521e35772b2Smrg    cmd="$nonopt"
2522e35772b2Smrg    test -z "$cmd" && \
2523e35772b2Smrg      func_fatal_help "you must specify a COMMAND"
252472b676d7Smrg
2525e35772b2Smrg    # Handle -dlopen flags immediately.
252674c14cd6Smrg    for file in $opt_dlopen; do
2527e35772b2Smrg      test -f "$file" \
2528e35772b2Smrg	|| func_fatal_help "\`$file' is not a file"
252972b676d7Smrg
2530e35772b2Smrg      dir=
2531e35772b2Smrg      case $file in
2532e35772b2Smrg      *.la)
253374c14cd6Smrg	func_resolve_sysroot "$file"
253474c14cd6Smrg	file=$func_resolve_sysroot_result
253574c14cd6Smrg
2536e35772b2Smrg	# Check to see that this really is a libtool archive.
2537e35772b2Smrg	func_lalib_unsafe_p "$file" \
2538e35772b2Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
253972b676d7Smrg
2540e35772b2Smrg	# Read the libtool library.
2541e35772b2Smrg	dlname=
2542e35772b2Smrg	library_names=
2543e35772b2Smrg	func_source "$file"
254472b676d7Smrg
2545e35772b2Smrg	# Skip this library if it cannot be dlopened.
2546e35772b2Smrg	if test -z "$dlname"; then
2547e35772b2Smrg	  # Warn if it was a shared library.
2548e35772b2Smrg	  test -n "$library_names" && \
2549e35772b2Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550e35772b2Smrg	  continue
2551e35772b2Smrg	fi
255272b676d7Smrg
2553e35772b2Smrg	func_dirname "$file" "" "."
2554e35772b2Smrg	dir="$func_dirname_result"
255572b676d7Smrg
2556e35772b2Smrg	if test -f "$dir/$objdir/$dlname"; then
255774c14cd6Smrg	  func_append dir "/$objdir"
2558e35772b2Smrg	else
2559e35772b2Smrg	  if test ! -f "$dir/$dlname"; then
2560e35772b2Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561e35772b2Smrg	  fi
2562e35772b2Smrg	fi
256372b676d7Smrg	;;
256472b676d7Smrg
2565e35772b2Smrg      *.lo)
2566e35772b2Smrg	# Just add the directory containing the .lo file.
2567e35772b2Smrg	func_dirname "$file" "" "."
2568e35772b2Smrg	dir="$func_dirname_result"
256972b676d7Smrg	;;
257072b676d7Smrg
2571e35772b2Smrg      *)
2572e35772b2Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
257372b676d7Smrg	continue
257472b676d7Smrg	;;
2575e35772b2Smrg      esac
257672b676d7Smrg
2577e35772b2Smrg      # Get the absolute pathname.
2578e35772b2Smrg      absdir=`cd "$dir" && pwd`
2579e35772b2Smrg      test -n "$absdir" && dir="$absdir"
258072b676d7Smrg
2581e35772b2Smrg      # Now add the directory to shlibpath_var.
2582e35772b2Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2583e35772b2Smrg	eval "$shlibpath_var=\"\$dir\""
2584e35772b2Smrg      else
2585e35772b2Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586e35772b2Smrg      fi
2587e35772b2Smrg    done
258872b676d7Smrg
2589e35772b2Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2590e35772b2Smrg    # rather than running their programs.
2591e35772b2Smrg    libtool_execute_magic="$magic"
259272b676d7Smrg
2593e35772b2Smrg    # Check if any of the arguments is a wrapper script.
2594e35772b2Smrg    args=
2595e35772b2Smrg    for file
2596e35772b2Smrg    do
2597e35772b2Smrg      case $file in
259874c14cd6Smrg      -* | *.la | *.lo ) ;;
2599e35772b2Smrg      *)
2600e35772b2Smrg	# Do a test to see if this is really a libtool program.
2601e35772b2Smrg	if func_ltwrapper_script_p "$file"; then
2602e35772b2Smrg	  func_source "$file"
2603e35772b2Smrg	  # Transform arg to wrapped name.
2604e35772b2Smrg	  file="$progdir/$program"
2605e35772b2Smrg	elif func_ltwrapper_executable_p "$file"; then
2606e35772b2Smrg	  func_ltwrapper_scriptname "$file"
2607e35772b2Smrg	  func_source "$func_ltwrapper_scriptname_result"
2608e35772b2Smrg	  # Transform arg to wrapped name.
2609e35772b2Smrg	  file="$progdir/$program"
2610e35772b2Smrg	fi
2611e35772b2Smrg	;;
2612e35772b2Smrg      esac
2613e35772b2Smrg      # Quote arguments (to preserve shell metacharacters).
261474c14cd6Smrg      func_append_quoted args "$file"
2615e35772b2Smrg    done
261672b676d7Smrg
2617e35772b2Smrg    if test "X$opt_dry_run" = Xfalse; then
2618e35772b2Smrg      if test -n "$shlibpath_var"; then
2619e35772b2Smrg	# Export the shlibpath_var.
2620e35772b2Smrg	eval "export $shlibpath_var"
2621e35772b2Smrg      fi
262272b676d7Smrg
2623e35772b2Smrg      # Restore saved environment variables
2624e35772b2Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625e35772b2Smrg      do
2626e35772b2Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627e35772b2Smrg                $lt_var=\$save_$lt_var; export $lt_var
262872b676d7Smrg	      else
2629e35772b2Smrg		$lt_unset $lt_var
2630e35772b2Smrg	      fi"
2631e35772b2Smrg      done
263272b676d7Smrg
2633e35772b2Smrg      # Now prepare to actually exec the command.
2634e35772b2Smrg      exec_cmd="\$cmd$args"
2635e35772b2Smrg    else
2636e35772b2Smrg      # Display what would be done.
2637e35772b2Smrg      if test -n "$shlibpath_var"; then
2638e35772b2Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
263974c14cd6Smrg	echo "export $shlibpath_var"
2640e35772b2Smrg      fi
2641e35772b2Smrg      $ECHO "$cmd$args"
2642e35772b2Smrg      exit $EXIT_SUCCESS
2643e35772b2Smrg    fi
2644e35772b2Smrg}
264572b676d7Smrg
264674c14cd6Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
264772b676d7Smrg
264872b676d7Smrg
2649e35772b2Smrg# func_mode_finish arg...
2650e35772b2Smrgfunc_mode_finish ()
2651e35772b2Smrg{
2652e35772b2Smrg    $opt_debug
265374c14cd6Smrg    libs=
265474c14cd6Smrg    libdirs=
2655e35772b2Smrg    admincmds=
265672b676d7Smrg
265774c14cd6Smrg    for opt in "$nonopt" ${1+"$@"}
265874c14cd6Smrg    do
265974c14cd6Smrg      if test -d "$opt"; then
266074c14cd6Smrg	func_append libdirs " $opt"
266174c14cd6Smrg
266274c14cd6Smrg      elif test -f "$opt"; then
266374c14cd6Smrg	if func_lalib_unsafe_p "$opt"; then
266474c14cd6Smrg	  func_append libs " $opt"
266574c14cd6Smrg	else
266674c14cd6Smrg	  func_warning "\`$opt' is not a valid libtool archive"
266774c14cd6Smrg	fi
266874c14cd6Smrg
266974c14cd6Smrg      else
267074c14cd6Smrg	func_fatal_error "invalid argument \`$opt'"
267174c14cd6Smrg      fi
267274c14cd6Smrg    done
267374c14cd6Smrg
267474c14cd6Smrg    if test -n "$libs"; then
267574c14cd6Smrg      if test -n "$lt_sysroot"; then
267674c14cd6Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
267774c14cd6Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
267874c14cd6Smrg      else
267974c14cd6Smrg        sysroot_cmd=
268074c14cd6Smrg      fi
268174c14cd6Smrg
268274c14cd6Smrg      # Remove sysroot references
268374c14cd6Smrg      if $opt_dry_run; then
268474c14cd6Smrg        for lib in $libs; do
268574c14cd6Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
268674c14cd6Smrg        done
268774c14cd6Smrg      else
268874c14cd6Smrg        tmpdir=`func_mktempdir`
268974c14cd6Smrg        for lib in $libs; do
269074c14cd6Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
269174c14cd6Smrg	    > $tmpdir/tmp-la
269274c14cd6Smrg	  mv -f $tmpdir/tmp-la $lib
269374c14cd6Smrg	done
269474c14cd6Smrg        ${RM}r "$tmpdir"
269574c14cd6Smrg      fi
269674c14cd6Smrg    fi
269772b676d7Smrg
269874c14cd6Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699e35772b2Smrg      for libdir in $libdirs; do
2700e35772b2Smrg	if test -n "$finish_cmds"; then
2701e35772b2Smrg	  # Do each command in the finish commands.
2702e35772b2Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703e35772b2Smrg'"$cmd"'"'
270472b676d7Smrg	fi
2705e35772b2Smrg	if test -n "$finish_eval"; then
2706e35772b2Smrg	  # Do the single finish_eval.
2707e35772b2Smrg	  eval cmds=\"$finish_eval\"
270874c14cd6Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709e35772b2Smrg       $cmds"
2710e35772b2Smrg	fi
2711e35772b2Smrg      done
2712e35772b2Smrg    fi
271372b676d7Smrg
2714e35772b2Smrg    # Exit here if they wanted silent mode.
2715e35772b2Smrg    $opt_silent && exit $EXIT_SUCCESS
271672b676d7Smrg
271774c14cd6Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
271874c14cd6Smrg      echo "----------------------------------------------------------------------"
271974c14cd6Smrg      echo "Libraries have been installed in:"
272074c14cd6Smrg      for libdir in $libdirs; do
272174c14cd6Smrg	$ECHO "   $libdir"
272274c14cd6Smrg      done
272374c14cd6Smrg      echo
272474c14cd6Smrg      echo "If you ever happen to want to link against installed libraries"
272574c14cd6Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
272674c14cd6Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
272774c14cd6Smrg      echo "flag during linking and do at least one of the following:"
272874c14cd6Smrg      if test -n "$shlibpath_var"; then
272974c14cd6Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
273074c14cd6Smrg	echo "     during execution"
273174c14cd6Smrg      fi
273274c14cd6Smrg      if test -n "$runpath_var"; then
273374c14cd6Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
273474c14cd6Smrg	echo "     during linking"
273574c14cd6Smrg      fi
273674c14cd6Smrg      if test -n "$hardcode_libdir_flag_spec"; then
273774c14cd6Smrg	libdir=LIBDIR
273874c14cd6Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739e35772b2Smrg
274074c14cd6Smrg	$ECHO "   - use the \`$flag' linker flag"
274174c14cd6Smrg      fi
274274c14cd6Smrg      if test -n "$admincmds"; then
274374c14cd6Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
274474c14cd6Smrg      fi
274574c14cd6Smrg      if test -f /etc/ld.so.conf; then
274674c14cd6Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
274774c14cd6Smrg      fi
274874c14cd6Smrg      echo
2749e35772b2Smrg
275074c14cd6Smrg      echo "See any operating system documentation about shared libraries for"
275174c14cd6Smrg      case $host in
275274c14cd6Smrg	solaris2.[6789]|solaris2.1[0-9])
275374c14cd6Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
275474c14cd6Smrg	  echo "pages."
275574c14cd6Smrg	  ;;
275674c14cd6Smrg	*)
275774c14cd6Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
275874c14cd6Smrg	  ;;
275974c14cd6Smrg      esac
276074c14cd6Smrg      echo "----------------------------------------------------------------------"
276174c14cd6Smrg    fi
2762e35772b2Smrg    exit $EXIT_SUCCESS
2763e35772b2Smrg}
2764e35772b2Smrg
276574c14cd6Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766e35772b2Smrg
2767e35772b2Smrg
2768e35772b2Smrg# func_mode_install arg...
2769e35772b2Smrgfunc_mode_install ()
2770e35772b2Smrg{
2771e35772b2Smrg    $opt_debug
2772e35772b2Smrg    # There may be an optional sh(1) argument at the beginning of
2773e35772b2Smrg    # install_prog (especially on Windows NT).
2774e35772b2Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775e35772b2Smrg       # Allow the use of GNU shtool's install command.
277674c14cd6Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777e35772b2Smrg      # Aesthetically quote it.
2778e35772b2Smrg      func_quote_for_eval "$nonopt"
2779e35772b2Smrg      install_prog="$func_quote_for_eval_result "
2780e35772b2Smrg      arg=$1
2781e35772b2Smrg      shift
2782e35772b2Smrg    else
2783e35772b2Smrg      install_prog=
2784e35772b2Smrg      arg=$nonopt
2785e35772b2Smrg    fi
2786e35772b2Smrg
2787e35772b2Smrg    # The real first argument should be the name of the installation program.
2788e35772b2Smrg    # Aesthetically quote it.
2789e35772b2Smrg    func_quote_for_eval "$arg"
279074c14cd6Smrg    func_append install_prog "$func_quote_for_eval_result"
279174c14cd6Smrg    install_shared_prog=$install_prog
279274c14cd6Smrg    case " $install_prog " in
279374c14cd6Smrg      *[\\\ /]cp\ *) install_cp=: ;;
279474c14cd6Smrg      *) install_cp=false ;;
279574c14cd6Smrg    esac
2796e35772b2Smrg
2797e35772b2Smrg    # We need to accept at least all the BSD install flags.
2798e35772b2Smrg    dest=
2799e35772b2Smrg    files=
2800e35772b2Smrg    opts=
2801e35772b2Smrg    prev=
2802e35772b2Smrg    install_type=
2803e35772b2Smrg    isdir=no
2804e35772b2Smrg    stripme=
280574c14cd6Smrg    no_mode=:
2806e35772b2Smrg    for arg
2807e35772b2Smrg    do
280874c14cd6Smrg      arg2=
2809e35772b2Smrg      if test -n "$dest"; then
281074c14cd6Smrg	func_append files " $dest"
2811e35772b2Smrg	dest=$arg
2812e35772b2Smrg	continue
2813e35772b2Smrg      fi
2814e35772b2Smrg
2815e35772b2Smrg      case $arg in
2816e35772b2Smrg      -d) isdir=yes ;;
2817e35772b2Smrg      -f)
281874c14cd6Smrg	if $install_cp; then :; else
281974c14cd6Smrg	  prev=$arg
282074c14cd6Smrg	fi
2821e35772b2Smrg	;;
2822e35772b2Smrg      -g | -m | -o)
2823e35772b2Smrg	prev=$arg
2824e35772b2Smrg	;;
2825e35772b2Smrg      -s)
2826e35772b2Smrg	stripme=" -s"
2827e35772b2Smrg	continue
2828e35772b2Smrg	;;
2829e35772b2Smrg      -*)
2830e35772b2Smrg	;;
2831e35772b2Smrg      *)
2832e35772b2Smrg	# If the previous option needed an argument, then skip it.
2833e35772b2Smrg	if test -n "$prev"; then
283474c14cd6Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
283574c14cd6Smrg	    arg2=$install_override_mode
283674c14cd6Smrg	    no_mode=false
283774c14cd6Smrg	  fi
283872b676d7Smrg	  prev=
283972b676d7Smrg	else
2840e35772b2Smrg	  dest=$arg
2841e35772b2Smrg	  continue
284272b676d7Smrg	fi
284372b676d7Smrg	;;
2844e35772b2Smrg      esac
284572b676d7Smrg
2846e35772b2Smrg      # Aesthetically quote the argument.
2847e35772b2Smrg      func_quote_for_eval "$arg"
284874c14cd6Smrg      func_append install_prog " $func_quote_for_eval_result"
284974c14cd6Smrg      if test -n "$arg2"; then
285074c14cd6Smrg	func_quote_for_eval "$arg2"
285174c14cd6Smrg      fi
285274c14cd6Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853e35772b2Smrg    done
285472b676d7Smrg
2855e35772b2Smrg    test -z "$install_prog" && \
2856e35772b2Smrg      func_fatal_help "you must specify an install program"
285772b676d7Smrg
2858e35772b2Smrg    test -n "$prev" && \
2859e35772b2Smrg      func_fatal_help "the \`$prev' option requires an argument"
286072b676d7Smrg
286174c14cd6Smrg    if test -n "$install_override_mode" && $no_mode; then
286274c14cd6Smrg      if $install_cp; then :; else
286374c14cd6Smrg	func_quote_for_eval "$install_override_mode"
286474c14cd6Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
286574c14cd6Smrg      fi
286674c14cd6Smrg    fi
286774c14cd6Smrg
2868e35772b2Smrg    if test -z "$files"; then
2869e35772b2Smrg      if test -z "$dest"; then
2870e35772b2Smrg	func_fatal_help "no file or destination specified"
2871e35772b2Smrg      else
2872e35772b2Smrg	func_fatal_help "you must specify a destination"
2873e35772b2Smrg      fi
287472b676d7Smrg    fi
287572b676d7Smrg
2876e35772b2Smrg    # Strip any trailing slash from the destination.
2877e35772b2Smrg    func_stripname '' '/' "$dest"
2878e35772b2Smrg    dest=$func_stripname_result
287972b676d7Smrg
2880e35772b2Smrg    # Check to see that the destination is a directory.
2881e35772b2Smrg    test -d "$dest" && isdir=yes
2882e35772b2Smrg    if test "$isdir" = yes; then
2883e35772b2Smrg      destdir="$dest"
2884e35772b2Smrg      destname=
288572b676d7Smrg    else
2886e35772b2Smrg      func_dirname_and_basename "$dest" "" "."
2887e35772b2Smrg      destdir="$func_dirname_result"
2888e35772b2Smrg      destname="$func_basename_result"
288972b676d7Smrg
2890e35772b2Smrg      # Not a directory, so check to see that there is only one file specified.
2891e35772b2Smrg      set dummy $files; shift
2892e35772b2Smrg      test "$#" -gt 1 && \
2893e35772b2Smrg	func_fatal_help "\`$dest' is not a directory"
289472b676d7Smrg    fi
2895e35772b2Smrg    case $destdir in
2896e35772b2Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
289772b676d7Smrg    *)
2898e35772b2Smrg      for file in $files; do
2899e35772b2Smrg	case $file in
2900e35772b2Smrg	*.lo) ;;
2901e35772b2Smrg	*)
2902e35772b2Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903e35772b2Smrg	  ;;
2904e35772b2Smrg	esac
2905e35772b2Smrg      done
290672b676d7Smrg      ;;
290772b676d7Smrg    esac
290872b676d7Smrg
2909e35772b2Smrg    # This variable tells wrapper scripts just to set variables rather
2910e35772b2Smrg    # than running their programs.
2911e35772b2Smrg    libtool_install_magic="$magic"
291272b676d7Smrg
2913e35772b2Smrg    staticlibs=
2914e35772b2Smrg    future_libdirs=
2915e35772b2Smrg    current_libdirs=
2916e35772b2Smrg    for file in $files; do
291772b676d7Smrg
2918e35772b2Smrg      # Do each installation.
2919e35772b2Smrg      case $file in
2920e35772b2Smrg      *.$libext)
2921e35772b2Smrg	# Do the static libraries later.
292274c14cd6Smrg	func_append staticlibs " $file"
2923e35772b2Smrg	;;
2924e35772b2Smrg
2925e35772b2Smrg      *.la)
292674c14cd6Smrg	func_resolve_sysroot "$file"
292774c14cd6Smrg	file=$func_resolve_sysroot_result
292874c14cd6Smrg
2929e35772b2Smrg	# Check to see that this really is a libtool archive.
2930e35772b2Smrg	func_lalib_unsafe_p "$file" \
2931e35772b2Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932e35772b2Smrg
2933e35772b2Smrg	library_names=
2934e35772b2Smrg	old_library=
2935e35772b2Smrg	relink_command=
2936e35772b2Smrg	func_source "$file"
2937e35772b2Smrg
2938e35772b2Smrg	# Add the libdir to current_libdirs if it is the destination.
2939e35772b2Smrg	if test "X$destdir" = "X$libdir"; then
2940e35772b2Smrg	  case "$current_libdirs " in
2941e35772b2Smrg	  *" $libdir "*) ;;
294274c14cd6Smrg	  *) func_append current_libdirs " $libdir" ;;
294372b676d7Smrg	  esac
2944e35772b2Smrg	else
2945e35772b2Smrg	  # Note the libdir as a future libdir.
2946e35772b2Smrg	  case "$future_libdirs " in
2947e35772b2Smrg	  *" $libdir "*) ;;
294874c14cd6Smrg	  *) func_append future_libdirs " $libdir" ;;
2949e35772b2Smrg	  esac
2950e35772b2Smrg	fi
295172b676d7Smrg
2952e35772b2Smrg	func_dirname "$file" "/" ""
2953e35772b2Smrg	dir="$func_dirname_result"
295474c14cd6Smrg	func_append dir "$objdir"
2955e35772b2Smrg
2956e35772b2Smrg	if test -n "$relink_command"; then
2957e35772b2Smrg	  # Determine the prefix the user has applied to our future dir.
295874c14cd6Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959e35772b2Smrg
2960e35772b2Smrg	  # Don't allow the user to place us outside of our expected
2961e35772b2Smrg	  # location b/c this prevents finding dependent libraries that
2962e35772b2Smrg	  # are installed to the same prefix.
2963e35772b2Smrg	  # At present, this check doesn't affect windows .dll's that
2964e35772b2Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2965e35772b2Smrg	  # but it's something to keep an eye on.
2966e35772b2Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2967e35772b2Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968e35772b2Smrg
2969e35772b2Smrg	  if test -n "$inst_prefix_dir"; then
2970e35772b2Smrg	    # Stick the inst_prefix_dir data into the link command.
297174c14cd6Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972e35772b2Smrg	  else
297374c14cd6Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974e35772b2Smrg	  fi
2975e35772b2Smrg
2976e35772b2Smrg	  func_warning "relinking \`$file'"
2977e35772b2Smrg	  func_show_eval "$relink_command" \
2978e35772b2Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979e35772b2Smrg	fi
2980e35772b2Smrg
2981e35772b2Smrg	# See the names of the shared library.
2982e35772b2Smrg	set dummy $library_names; shift
2983e35772b2Smrg	if test -n "$1"; then
2984e35772b2Smrg	  realname="$1"
2985e35772b2Smrg	  shift
2986e35772b2Smrg
2987e35772b2Smrg	  srcname="$realname"
2988e35772b2Smrg	  test -n "$relink_command" && srcname="$realname"T
2989e35772b2Smrg
2990e35772b2Smrg	  # Install the shared library and build the symlinks.
299174c14cd6Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992e35772b2Smrg	      'exit $?'
2993e35772b2Smrg	  tstripme="$stripme"
2994e35772b2Smrg	  case $host_os in
2995e35772b2Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2996e35772b2Smrg	    case $realname in
2997e35772b2Smrg	    *.dll.a)
2998e35772b2Smrg	      tstripme=""
2999e35772b2Smrg	      ;;
3000e35772b2Smrg	    esac
300172b676d7Smrg	    ;;
300272b676d7Smrg	  esac
3003e35772b2Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004e35772b2Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
300572b676d7Smrg	  fi
3006e35772b2Smrg
3007e35772b2Smrg	  if test "$#" -gt 0; then
3008e35772b2Smrg	    # Delete the old symlinks, and create new ones.
3009e35772b2Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010e35772b2Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011e35772b2Smrg	    # so we also need to try rm && ln -s.
3012e35772b2Smrg	    for linkname
3013e35772b2Smrg	    do
3014e35772b2Smrg	      test "$linkname" != "$realname" \
3015e35772b2Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
301672b676d7Smrg	    done
301772b676d7Smrg	  fi
301872b676d7Smrg
3019e35772b2Smrg	  # Do each command in the postinstall commands.
3020e35772b2Smrg	  lib="$destdir/$realname"
3021e35772b2Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
302272b676d7Smrg	fi
302372b676d7Smrg
3024e35772b2Smrg	# Install the pseudo-library for information purposes.
3025e35772b2Smrg	func_basename "$file"
3026e35772b2Smrg	name="$func_basename_result"
3027e35772b2Smrg	instname="$dir/$name"i
3028e35772b2Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
302972b676d7Smrg
3030e35772b2Smrg	# Maybe install the static library, too.
303174c14cd6Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032e35772b2Smrg	;;
303372b676d7Smrg
3034e35772b2Smrg      *.lo)
3035e35772b2Smrg	# Install (i.e. copy) a libtool object.
303672b676d7Smrg
3037e35772b2Smrg	# Figure out destination file name, if it wasn't already specified.
3038e35772b2Smrg	if test -n "$destname"; then
3039e35772b2Smrg	  destfile="$destdir/$destname"
3040e35772b2Smrg	else
3041e35772b2Smrg	  func_basename "$file"
3042e35772b2Smrg	  destfile="$func_basename_result"
3043e35772b2Smrg	  destfile="$destdir/$destfile"
304472b676d7Smrg	fi
304572b676d7Smrg
3046e35772b2Smrg	# Deduce the name of the destination old-style object file.
3047e35772b2Smrg	case $destfile in
3048e35772b2Smrg	*.lo)
3049e35772b2Smrg	  func_lo2o "$destfile"
3050e35772b2Smrg	  staticdest=$func_lo2o_result
3051e35772b2Smrg	  ;;
3052e35772b2Smrg	*.$objext)
3053e35772b2Smrg	  staticdest="$destfile"
3054e35772b2Smrg	  destfile=
3055e35772b2Smrg	  ;;
3056e35772b2Smrg	*)
3057e35772b2Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058e35772b2Smrg	  ;;
3059e35772b2Smrg	esac
306072b676d7Smrg
3061e35772b2Smrg	# Install the libtool object if requested.
3062e35772b2Smrg	test -n "$destfile" && \
3063e35772b2Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
306472b676d7Smrg
3065e35772b2Smrg	# Install the old object if enabled.
3066e35772b2Smrg	if test "$build_old_libs" = yes; then
3067e35772b2Smrg	  # Deduce the name of the old-style object file.
3068e35772b2Smrg	  func_lo2o "$file"
3069e35772b2Smrg	  staticobj=$func_lo2o_result
3070e35772b2Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
307172b676d7Smrg	fi
3072e35772b2Smrg	exit $EXIT_SUCCESS
3073e35772b2Smrg	;;
307472b676d7Smrg
3075e35772b2Smrg      *)
3076e35772b2Smrg	# Figure out destination file name, if it wasn't already specified.
3077e35772b2Smrg	if test -n "$destname"; then
3078e35772b2Smrg	  destfile="$destdir/$destname"
3079e35772b2Smrg	else
3080e35772b2Smrg	  func_basename "$file"
3081e35772b2Smrg	  destfile="$func_basename_result"
3082e35772b2Smrg	  destfile="$destdir/$destfile"
3083e35772b2Smrg	fi
308472b676d7Smrg
3085e35772b2Smrg	# If the file is missing, and there is a .exe on the end, strip it
3086e35772b2Smrg	# because it is most likely a libtool script we actually want to
3087e35772b2Smrg	# install
3088e35772b2Smrg	stripped_ext=""
3089e35772b2Smrg	case $file in
3090e35772b2Smrg	  *.exe)
3091e35772b2Smrg	    if test ! -f "$file"; then
3092e35772b2Smrg	      func_stripname '' '.exe' "$file"
3093e35772b2Smrg	      file=$func_stripname_result
3094e35772b2Smrg	      stripped_ext=".exe"
3095e35772b2Smrg	    fi
3096e35772b2Smrg	    ;;
3097e35772b2Smrg	esac
3098e35772b2Smrg
3099e35772b2Smrg	# Do a test to see if this is really a libtool program.
3100e35772b2Smrg	case $host in
3101e35772b2Smrg	*cygwin* | *mingw*)
3102e35772b2Smrg	    if func_ltwrapper_executable_p "$file"; then
3103e35772b2Smrg	      func_ltwrapper_scriptname "$file"
3104e35772b2Smrg	      wrapper=$func_ltwrapper_scriptname_result
3105e35772b2Smrg	    else
3106e35772b2Smrg	      func_stripname '' '.exe' "$file"
3107e35772b2Smrg	      wrapper=$func_stripname_result
3108e35772b2Smrg	    fi
3109e35772b2Smrg	    ;;
311072b676d7Smrg	*)
3111e35772b2Smrg	    wrapper=$file
3112e35772b2Smrg	    ;;
3113e35772b2Smrg	esac
3114e35772b2Smrg	if func_ltwrapper_script_p "$wrapper"; then
3115e35772b2Smrg	  notinst_deplibs=
3116e35772b2Smrg	  relink_command=
3117e35772b2Smrg
3118e35772b2Smrg	  func_source "$wrapper"
3119e35772b2Smrg
3120e35772b2Smrg	  # Check the variables that should have been set.
3121e35772b2Smrg	  test -z "$generated_by_libtool_version" && \
3122e35772b2Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123e35772b2Smrg
3124e35772b2Smrg	  finalize=yes
3125e35772b2Smrg	  for lib in $notinst_deplibs; do
3126e35772b2Smrg	    # Check to see that each library is installed.
3127e35772b2Smrg	    libdir=
3128e35772b2Smrg	    if test -f "$lib"; then
3129e35772b2Smrg	      func_source "$lib"
3130e35772b2Smrg	    fi
313174c14cd6Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132e35772b2Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3133e35772b2Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134e35772b2Smrg	      finalize=no
3135e35772b2Smrg	    fi
3136e35772b2Smrg	  done
3137e35772b2Smrg
3138e35772b2Smrg	  relink_command=
3139e35772b2Smrg	  func_source "$wrapper"
3140e35772b2Smrg
3141e35772b2Smrg	  outputname=
3142e35772b2Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143e35772b2Smrg	    $opt_dry_run || {
3144e35772b2Smrg	      if test "$finalize" = yes; then
3145e35772b2Smrg	        tmpdir=`func_mktempdir`
3146e35772b2Smrg		func_basename "$file$stripped_ext"
3147e35772b2Smrg		file="$func_basename_result"
3148e35772b2Smrg	        outputname="$tmpdir/$file"
3149e35772b2Smrg	        # Replace the output file specification.
315074c14cd6Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151e35772b2Smrg
3152e35772b2Smrg	        $opt_silent || {
3153e35772b2Smrg	          func_quote_for_expand "$relink_command"
3154e35772b2Smrg		  eval "func_echo $func_quote_for_expand_result"
3155e35772b2Smrg	        }
3156e35772b2Smrg	        if eval "$relink_command"; then :
3157e35772b2Smrg	          else
3158e35772b2Smrg		  func_error "error: relink \`$file' with the above command before installing it"
3159e35772b2Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160e35772b2Smrg		  continue
3161e35772b2Smrg	        fi
3162e35772b2Smrg	        file="$outputname"
3163e35772b2Smrg	      else
3164e35772b2Smrg	        func_warning "cannot relink \`$file'"
3165e35772b2Smrg	      fi
3166e35772b2Smrg	    }
3167e35772b2Smrg	  else
3168e35772b2Smrg	    # Install the binary that we compiled earlier.
316974c14cd6Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
317072b676d7Smrg	  fi
3171e35772b2Smrg	fi
3172e35772b2Smrg
3173e35772b2Smrg	# remove .exe since cygwin /usr/bin/install will append another
3174e35772b2Smrg	# one anyway
3175e35772b2Smrg	case $install_prog,$host in
3176e35772b2Smrg	*/usr/bin/install*,*cygwin*)
3177e35772b2Smrg	  case $file:$destfile in
3178e35772b2Smrg	  *.exe:*.exe)
3179e35772b2Smrg	    # this is ok
3180e35772b2Smrg	    ;;
3181e35772b2Smrg	  *.exe:*)
3182e35772b2Smrg	    destfile=$destfile.exe
3183e35772b2Smrg	    ;;
3184e35772b2Smrg	  *:*.exe)
3185e35772b2Smrg	    func_stripname '' '.exe' "$destfile"
3186e35772b2Smrg	    destfile=$func_stripname_result
3187e35772b2Smrg	    ;;
3188e35772b2Smrg	  esac
318972b676d7Smrg	  ;;
319072b676d7Smrg	esac
3191e35772b2Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192e35772b2Smrg	$opt_dry_run || if test -n "$outputname"; then
3193e35772b2Smrg	  ${RM}r "$tmpdir"
3194e35772b2Smrg	fi
3195e35772b2Smrg	;;
3196e35772b2Smrg      esac
3197e35772b2Smrg    done
319872b676d7Smrg
3199e35772b2Smrg    for file in $staticlibs; do
3200e35772b2Smrg      func_basename "$file"
3201e35772b2Smrg      name="$func_basename_result"
3202e35772b2Smrg
3203e35772b2Smrg      # Set up the ranlib parameters.
3204e35772b2Smrg      oldlib="$destdir/$name"
320574c14cd6Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
320674c14cd6Smrg      tool_oldlib=$func_to_tool_file_result
3207e35772b2Smrg
3208e35772b2Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209e35772b2Smrg
3210e35772b2Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
321174c14cd6Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212e35772b2Smrg      fi
3213e35772b2Smrg
3214e35772b2Smrg      # Do each command in the postinstall commands.
3215e35772b2Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216e35772b2Smrg    done
3217e35772b2Smrg
3218e35772b2Smrg    test -n "$future_libdirs" && \
3219e35772b2Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220e35772b2Smrg
3221e35772b2Smrg    if test -n "$current_libdirs"; then
3222e35772b2Smrg      # Maybe just do a dry run.
3223e35772b2Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224e35772b2Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225e35772b2Smrg    else
3226e35772b2Smrg      exit $EXIT_SUCCESS
3227e35772b2Smrg    fi
3228e35772b2Smrg}
3229e35772b2Smrg
323074c14cd6Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231e35772b2Smrg
3232e35772b2Smrg
3233e35772b2Smrg# func_generate_dlsyms outputname originator pic_p
3234e35772b2Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235e35772b2Smrg# a dlpreopen symbol table.
3236e35772b2Smrgfunc_generate_dlsyms ()
3237e35772b2Smrg{
3238e35772b2Smrg    $opt_debug
3239e35772b2Smrg    my_outputname="$1"
3240e35772b2Smrg    my_originator="$2"
3241e35772b2Smrg    my_pic_p="${3-no}"
3242e35772b2Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243e35772b2Smrg    my_dlsyms=
3244e35772b2Smrg
3245e35772b2Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246e35772b2Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247e35772b2Smrg	my_dlsyms="${my_outputname}S.c"
3248e35772b2Smrg      else
3249e35772b2Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3250e35772b2Smrg      fi
3251e35772b2Smrg    fi
3252e35772b2Smrg
3253e35772b2Smrg    if test -n "$my_dlsyms"; then
3254e35772b2Smrg      case $my_dlsyms in
3255e35772b2Smrg      "") ;;
3256e35772b2Smrg      *.c)
3257e35772b2Smrg	# Discover the nlist of each of the dlfiles.
3258e35772b2Smrg	nlist="$output_objdir/${my_outputname}.nm"
3259e35772b2Smrg
3260e35772b2Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261e35772b2Smrg
3262e35772b2Smrg	# Parse the name list into a source file.
3263e35772b2Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264e35772b2Smrg
3265e35772b2Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266e35772b2Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267e35772b2Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268e35772b2Smrg
3269e35772b2Smrg#ifdef __cplusplus
3270e35772b2Smrgextern \"C\" {
3271e35772b2Smrg#endif
3272e35772b2Smrg
327374c14cd6Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
327474c14cd6Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
327574c14cd6Smrg#endif
327674c14cd6Smrg
327774c14cd6Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
327874c14cd6Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
327974c14cd6Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
328074c14cd6Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
328174c14cd6Smrg# define LT_DLSYM_CONST
328274c14cd6Smrg#elif defined(__osf__)
328374c14cd6Smrg/* This system does not cope well with relocations in const data.  */
328474c14cd6Smrg# define LT_DLSYM_CONST
328574c14cd6Smrg#else
328674c14cd6Smrg# define LT_DLSYM_CONST const
328774c14cd6Smrg#endif
328874c14cd6Smrg
3289e35772b2Smrg/* External symbol declarations for the compiler. */\
3290e35772b2Smrg"
3291e35772b2Smrg
3292e35772b2Smrg	if test "$dlself" = yes; then
3293e35772b2Smrg	  func_verbose "generating symbol list for \`$output'"
3294e35772b2Smrg
3295e35772b2Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296e35772b2Smrg
3297e35772b2Smrg	  # Add our own program objects to the symbol list.
329874c14cd6Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299e35772b2Smrg	  for progfile in $progfiles; do
330074c14cd6Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
330174c14cd6Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
330274c14cd6Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303e35772b2Smrg	  done
3304e35772b2Smrg
3305e35772b2Smrg	  if test -n "$exclude_expsyms"; then
3306e35772b2Smrg	    $opt_dry_run || {
3307e35772b2Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308e35772b2Smrg	      eval '$MV "$nlist"T "$nlist"'
3309e35772b2Smrg	    }
331072b676d7Smrg	  fi
3311e35772b2Smrg
3312e35772b2Smrg	  if test -n "$export_symbols_regex"; then
3313e35772b2Smrg	    $opt_dry_run || {
3314e35772b2Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315e35772b2Smrg	      eval '$MV "$nlist"T "$nlist"'
3316e35772b2Smrg	    }
3317e35772b2Smrg	  fi
3318e35772b2Smrg
3319e35772b2Smrg	  # Prepare the list of exported symbols
3320e35772b2Smrg	  if test -z "$export_symbols"; then
3321e35772b2Smrg	    export_symbols="$output_objdir/$outputname.exp"
3322e35772b2Smrg	    $opt_dry_run || {
3323e35772b2Smrg	      $RM $export_symbols
3324e35772b2Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325e35772b2Smrg	      case $host in
3326e35772b2Smrg	      *cygwin* | *mingw* | *cegcc* )
3327e35772b2Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328e35772b2Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329e35772b2Smrg	        ;;
3330e35772b2Smrg	      esac
3331e35772b2Smrg	    }
333272b676d7Smrg	  else
3333e35772b2Smrg	    $opt_dry_run || {
3334e35772b2Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335e35772b2Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336e35772b2Smrg	      eval '$MV "$nlist"T "$nlist"'
3337e35772b2Smrg	      case $host in
333874c14cd6Smrg	        *cygwin* | *mingw* | *cegcc* )
3339e35772b2Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340e35772b2Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341e35772b2Smrg	          ;;
3342e35772b2Smrg	      esac
3343e35772b2Smrg	    }
334472b676d7Smrg	  fi
3345e35772b2Smrg	fi
334672b676d7Smrg
3347e35772b2Smrg	for dlprefile in $dlprefiles; do
3348e35772b2Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349e35772b2Smrg	  func_basename "$dlprefile"
3350e35772b2Smrg	  name="$func_basename_result"
335174c14cd6Smrg          case $host in
335274c14cd6Smrg	    *cygwin* | *mingw* | *cegcc* )
335374c14cd6Smrg	      # if an import library, we need to obtain dlname
335474c14cd6Smrg	      if func_win32_import_lib_p "$dlprefile"; then
335574c14cd6Smrg	        func_tr_sh "$dlprefile"
335674c14cd6Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
335774c14cd6Smrg	        dlprefile_dlbasename=""
335874c14cd6Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
335974c14cd6Smrg	          # Use subshell, to avoid clobbering current variable values
336074c14cd6Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
336174c14cd6Smrg	          if test -n "$dlprefile_dlname" ; then
336274c14cd6Smrg	            func_basename "$dlprefile_dlname"
336374c14cd6Smrg	            dlprefile_dlbasename="$func_basename_result"
336474c14cd6Smrg	          else
336574c14cd6Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
336674c14cd6Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
336774c14cd6Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
336874c14cd6Smrg	          fi
336974c14cd6Smrg	        fi
337074c14cd6Smrg	        $opt_dry_run || {
337174c14cd6Smrg	          if test -n "$dlprefile_dlbasename" ; then
337274c14cd6Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
337374c14cd6Smrg	          else
337474c14cd6Smrg	            func_warning "Could not compute DLL name from $name"
337574c14cd6Smrg	            eval '$ECHO ": $name " >> "$nlist"'
337674c14cd6Smrg	          fi
337774c14cd6Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
337874c14cd6Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
337974c14cd6Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
338074c14cd6Smrg	        }
338174c14cd6Smrg	      else # not an import lib
338274c14cd6Smrg	        $opt_dry_run || {
338374c14cd6Smrg	          eval '$ECHO ": $name " >> "$nlist"'
338474c14cd6Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
338574c14cd6Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
338674c14cd6Smrg	        }
338774c14cd6Smrg	      fi
338874c14cd6Smrg	    ;;
338974c14cd6Smrg	    *)
339074c14cd6Smrg	      $opt_dry_run || {
339174c14cd6Smrg	        eval '$ECHO ": $name " >> "$nlist"'
339274c14cd6Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
339374c14cd6Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
339474c14cd6Smrg	      }
339574c14cd6Smrg	    ;;
339674c14cd6Smrg          esac
3397e35772b2Smrg	done
3398e35772b2Smrg
3399e35772b2Smrg	$opt_dry_run || {
3400e35772b2Smrg	  # Make sure we have at least an empty file.
3401e35772b2Smrg	  test -f "$nlist" || : > "$nlist"
3402e35772b2Smrg
3403e35772b2Smrg	  if test -n "$exclude_expsyms"; then
3404e35772b2Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405e35772b2Smrg	    $MV "$nlist"T "$nlist"
340672b676d7Smrg	  fi
3407e35772b2Smrg
3408e35772b2Smrg	  # Try sorting and uniquifying the output.
3409e35772b2Smrg	  if $GREP -v "^: " < "$nlist" |
3410e35772b2Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411e35772b2Smrg		sort -k 3
3412e35772b2Smrg	      else
3413e35772b2Smrg		sort +2
3414e35772b2Smrg	      fi |
3415e35772b2Smrg	      uniq > "$nlist"S; then
3416e35772b2Smrg	    :
341772b676d7Smrg	  else
3418e35772b2Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
341972b676d7Smrg	  fi
342072b676d7Smrg
3421e35772b2Smrg	  if test -f "$nlist"S; then
3422e35772b2Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
342372b676d7Smrg	  else
342474c14cd6Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
342572b676d7Smrg	  fi
342672b676d7Smrg
342774c14cd6Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
342872b676d7Smrg
3429e35772b2Smrg/* The mapping between symbol names and symbols.  */
3430e35772b2Smrgtypedef struct {
3431e35772b2Smrg  const char *name;
3432e35772b2Smrg  void *address;
3433e35772b2Smrg} lt_dlsymlist;
343474c14cd6Smrgextern LT_DLSYM_CONST lt_dlsymlist
3435e35772b2Smrglt_${my_prefix}_LTX_preloaded_symbols[];
343674c14cd6SmrgLT_DLSYM_CONST lt_dlsymlist
3437e35772b2Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
3438e35772b2Smrg{\
3439e35772b2Smrg  { \"$my_originator\", (void *) 0 },"
344072b676d7Smrg
3441e35772b2Smrg	  case $need_lib_prefix in
3442e35772b2Smrg	  no)
3443e35772b2Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444e35772b2Smrg	    ;;
3445e35772b2Smrg	  *)
3446e35772b2Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447e35772b2Smrg	    ;;
3448e35772b2Smrg	  esac
344974c14cd6Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450e35772b2Smrg  {0, (void *) 0}
3451e35772b2Smrg};
345272b676d7Smrg
3453e35772b2Smrg/* This works around a problem in FreeBSD linker */
3454e35772b2Smrg#ifdef FREEBSD_WORKAROUND
3455e35772b2Smrgstatic const void *lt_preloaded_setup() {
3456e35772b2Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457e35772b2Smrg}
3458e35772b2Smrg#endif
3459e35772b2Smrg
3460e35772b2Smrg#ifdef __cplusplus
3461e35772b2Smrg}
3462e35772b2Smrg#endif\
3463e35772b2Smrg"
3464e35772b2Smrg	} # !$opt_dry_run
3465e35772b2Smrg
3466e35772b2Smrg	pic_flag_for_symtable=
3467e35772b2Smrg	case "$compile_command " in
3468e35772b2Smrg	*" -static "*) ;;
3469e35772b2Smrg	*)
3470e35772b2Smrg	  case $host in
3471e35772b2Smrg	  # compiling the symbol table file with pic_flag works around
3472e35772b2Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473e35772b2Smrg	  # linked before any other PIC object.  But we must not use
3474e35772b2Smrg	  # pic_flag when linking with -static.  The problem exists in
3475e35772b2Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
347674c14cd6Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477e35772b2Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478e35772b2Smrg	  *-*-hpux*)
3479e35772b2Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480e35772b2Smrg	  *)
3481e35772b2Smrg	    if test "X$my_pic_p" != Xno; then
3482e35772b2Smrg	      pic_flag_for_symtable=" $pic_flag"
348372b676d7Smrg	    fi
3484e35772b2Smrg	    ;;
3485e35772b2Smrg	  esac
3486e35772b2Smrg	  ;;
3487e35772b2Smrg	esac
3488e35772b2Smrg	symtab_cflags=
3489e35772b2Smrg	for arg in $LTCFLAGS; do
3490e35772b2Smrg	  case $arg in
3491e35772b2Smrg	  -pie | -fpie | -fPIE) ;;
349274c14cd6Smrg	  *) func_append symtab_cflags " $arg" ;;
3493e35772b2Smrg	  esac
3494e35772b2Smrg	done
349572b676d7Smrg
3496e35772b2Smrg	# Now compile the dynamic symbol file.
3497e35772b2Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
349872b676d7Smrg
3499e35772b2Smrg	# Clean up the generated files.
3500e35772b2Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
350172b676d7Smrg
3502e35772b2Smrg	# Transform the symbol file into the correct name.
3503e35772b2Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504e35772b2Smrg	case $host in
3505e35772b2Smrg	*cygwin* | *mingw* | *cegcc* )
3506e35772b2Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
350774c14cd6Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
350874c14cd6Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509e35772b2Smrg	  else
351074c14cd6Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351174c14cd6Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351272b676d7Smrg	  fi
3513e35772b2Smrg	  ;;
3514e35772b2Smrg	*)
351574c14cd6Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351674c14cd6Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517e35772b2Smrg	  ;;
3518e35772b2Smrg	esac
3519e35772b2Smrg	;;
3520e35772b2Smrg      *)
3521e35772b2Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522e35772b2Smrg	;;
3523e35772b2Smrg      esac
3524e35772b2Smrg    else
3525e35772b2Smrg      # We keep going just in case the user didn't refer to
3526e35772b2Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527e35772b2Smrg      # really was required.
352872b676d7Smrg
3529e35772b2Smrg      # Nullify the symbol file.
353074c14cd6Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
353174c14cd6Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532e35772b2Smrg    fi
3533e35772b2Smrg}
353472b676d7Smrg
3535e35772b2Smrg# func_win32_libid arg
3536e35772b2Smrg# return the library type of file 'arg'
3537e35772b2Smrg#
3538e35772b2Smrg# Need a lot of goo to handle *both* DLLs and import libs
3539e35772b2Smrg# Has to be a shell function in order to 'eat' the argument
3540e35772b2Smrg# that is supplied when $file_magic_command is called.
354174c14cd6Smrg# Despite the name, also deal with 64 bit binaries.
3542e35772b2Smrgfunc_win32_libid ()
3543e35772b2Smrg{
3544e35772b2Smrg  $opt_debug
3545e35772b2Smrg  win32_libid_type="unknown"
3546e35772b2Smrg  win32_fileres=`file -L $1 2>/dev/null`
3547e35772b2Smrg  case $win32_fileres in
3548e35772b2Smrg  *ar\ archive\ import\ library*) # definitely import
3549e35772b2Smrg    win32_libid_type="x86 archive import"
3550e35772b2Smrg    ;;
3551e35772b2Smrg  *ar\ archive*) # could be an import, or static
355274c14cd6Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553e35772b2Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
355474c14cd6Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
355574c14cd6Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
355674c14cd6Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557e35772b2Smrg	$SED -n -e '
3558e35772b2Smrg	    1,100{
3559e35772b2Smrg		/ I /{
3560e35772b2Smrg		    s,.*,import,
3561e35772b2Smrg		    p
3562e35772b2Smrg		    q
3563e35772b2Smrg		}
3564e35772b2Smrg	    }'`
3565e35772b2Smrg      case $win32_nmres in
3566e35772b2Smrg      import*)  win32_libid_type="x86 archive import";;
3567e35772b2Smrg      *)        win32_libid_type="x86 archive static";;
3568e35772b2Smrg      esac
3569e35772b2Smrg    fi
3570e35772b2Smrg    ;;
3571e35772b2Smrg  *DLL*)
3572e35772b2Smrg    win32_libid_type="x86 DLL"
3573e35772b2Smrg    ;;
3574e35772b2Smrg  *executable*) # but shell scripts are "executable" too...
3575e35772b2Smrg    case $win32_fileres in
3576e35772b2Smrg    *MS\ Windows\ PE\ Intel*)
3577e35772b2Smrg      win32_libid_type="x86 DLL"
3578e35772b2Smrg      ;;
3579e35772b2Smrg    esac
3580e35772b2Smrg    ;;
3581e35772b2Smrg  esac
3582e35772b2Smrg  $ECHO "$win32_libid_type"
3583e35772b2Smrg}
358472b676d7Smrg
358574c14cd6Smrg# func_cygming_dll_for_implib ARG
358674c14cd6Smrg#
358774c14cd6Smrg# Platform-specific function to extract the
358874c14cd6Smrg# name of the DLL associated with the specified
358974c14cd6Smrg# import library ARG.
359074c14cd6Smrg# Invoked by eval'ing the libtool variable
359174c14cd6Smrg#    $sharedlib_from_linklib_cmd
359274c14cd6Smrg# Result is available in the variable
359374c14cd6Smrg#    $sharedlib_from_linklib_result
359474c14cd6Smrgfunc_cygming_dll_for_implib ()
359574c14cd6Smrg{
359674c14cd6Smrg  $opt_debug
359774c14cd6Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
359874c14cd6Smrg}
359974c14cd6Smrg
360074c14cd6Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
360174c14cd6Smrg#
360274c14cd6Smrg# The is the core of a fallback implementation of a
360374c14cd6Smrg# platform-specific function to extract the name of the
360474c14cd6Smrg# DLL associated with the specified import library LIBNAME.
360574c14cd6Smrg#
360674c14cd6Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
360774c14cd6Smrg# on the platform and compiler that created the implib.
360874c14cd6Smrg#
360974c14cd6Smrg# Echos the name of the DLL associated with the
361074c14cd6Smrg# specified import library.
361174c14cd6Smrgfunc_cygming_dll_for_implib_fallback_core ()
361274c14cd6Smrg{
361374c14cd6Smrg  $opt_debug
361474c14cd6Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
361574c14cd6Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
361674c14cd6Smrg    $SED '/^Contents of section '"$match_literal"':/{
361774c14cd6Smrg      # Place marker at beginning of archive member dllname section
361874c14cd6Smrg      s/.*/====MARK====/
361974c14cd6Smrg      p
362074c14cd6Smrg      d
362174c14cd6Smrg    }
362274c14cd6Smrg    # These lines can sometimes be longer than 43 characters, but
362374c14cd6Smrg    # are always uninteresting
362474c14cd6Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
362574c14cd6Smrg    /^In archive [^:]*:/d
362674c14cd6Smrg    # Ensure marker is printed
362774c14cd6Smrg    /^====MARK====/p
362874c14cd6Smrg    # Remove all lines with less than 43 characters
362974c14cd6Smrg    /^.\{43\}/!d
363074c14cd6Smrg    # From remaining lines, remove first 43 characters
363174c14cd6Smrg    s/^.\{43\}//' |
363274c14cd6Smrg    $SED -n '
363374c14cd6Smrg      # Join marker and all lines until next marker into a single line
363474c14cd6Smrg      /^====MARK====/ b para
363574c14cd6Smrg      H
363674c14cd6Smrg      $ b para
363774c14cd6Smrg      b
363874c14cd6Smrg      :para
363974c14cd6Smrg      x
364074c14cd6Smrg      s/\n//g
364174c14cd6Smrg      # Remove the marker
364274c14cd6Smrg      s/^====MARK====//
364374c14cd6Smrg      # Remove trailing dots and whitespace
364474c14cd6Smrg      s/[\. \t]*$//
364574c14cd6Smrg      # Print
364674c14cd6Smrg      /./p' |
364774c14cd6Smrg    # we now have a list, one entry per line, of the stringified
364874c14cd6Smrg    # contents of the appropriate section of all members of the
364974c14cd6Smrg    # archive which possess that section. Heuristic: eliminate
365074c14cd6Smrg    # all those which have a first or second character that is
365174c14cd6Smrg    # a '.' (that is, objdump's representation of an unprintable
365274c14cd6Smrg    # character.) This should work for all archives with less than
365374c14cd6Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
365474c14cd6Smrg    # begins with a literal '.' or a single character followed by
365574c14cd6Smrg    # a '.'.
365674c14cd6Smrg    #
365774c14cd6Smrg    # Of those that remain, print the first one.
365874c14cd6Smrg    $SED -e '/^\./d;/^.\./d;q'
365974c14cd6Smrg}
366074c14cd6Smrg
366174c14cd6Smrg# func_cygming_gnu_implib_p ARG
366274c14cd6Smrg# This predicate returns with zero status (TRUE) if
366374c14cd6Smrg# ARG is a GNU/binutils-style import library. Returns
366474c14cd6Smrg# with nonzero status (FALSE) otherwise.
366574c14cd6Smrgfunc_cygming_gnu_implib_p ()
366674c14cd6Smrg{
366774c14cd6Smrg  $opt_debug
366874c14cd6Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
366974c14cd6Smrg  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)$'`
367074c14cd6Smrg  test -n "$func_cygming_gnu_implib_tmp"
367174c14cd6Smrg}
367274c14cd6Smrg
367374c14cd6Smrg# func_cygming_ms_implib_p ARG
367474c14cd6Smrg# This predicate returns with zero status (TRUE) if
367574c14cd6Smrg# ARG is an MS-style import library. Returns
367674c14cd6Smrg# with nonzero status (FALSE) otherwise.
367774c14cd6Smrgfunc_cygming_ms_implib_p ()
367874c14cd6Smrg{
367974c14cd6Smrg  $opt_debug
368074c14cd6Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
368174c14cd6Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
368274c14cd6Smrg  test -n "$func_cygming_ms_implib_tmp"
368374c14cd6Smrg}
368474c14cd6Smrg
368574c14cd6Smrg# func_cygming_dll_for_implib_fallback ARG
368674c14cd6Smrg# Platform-specific function to extract the
368774c14cd6Smrg# name of the DLL associated with the specified
368874c14cd6Smrg# import library ARG.
368974c14cd6Smrg#
369074c14cd6Smrg# This fallback implementation is for use when $DLLTOOL
369174c14cd6Smrg# does not support the --identify-strict option.
369274c14cd6Smrg# Invoked by eval'ing the libtool variable
369374c14cd6Smrg#    $sharedlib_from_linklib_cmd
369474c14cd6Smrg# Result is available in the variable
369574c14cd6Smrg#    $sharedlib_from_linklib_result
369674c14cd6Smrgfunc_cygming_dll_for_implib_fallback ()
369774c14cd6Smrg{
369874c14cd6Smrg  $opt_debug
369974c14cd6Smrg  if func_cygming_gnu_implib_p "$1" ; then
370074c14cd6Smrg    # binutils import library
370174c14cd6Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
370274c14cd6Smrg  elif func_cygming_ms_implib_p "$1" ; then
370374c14cd6Smrg    # ms-generated import library
370474c14cd6Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
370574c14cd6Smrg  else
370674c14cd6Smrg    # unknown
370774c14cd6Smrg    sharedlib_from_linklib_result=""
370874c14cd6Smrg  fi
370974c14cd6Smrg}
371072b676d7Smrg
371172b676d7Smrg
3712e35772b2Smrg# func_extract_an_archive dir oldlib
3713e35772b2Smrgfunc_extract_an_archive ()
3714e35772b2Smrg{
3715e35772b2Smrg    $opt_debug
3716e35772b2Smrg    f_ex_an_ar_dir="$1"; shift
3717e35772b2Smrg    f_ex_an_ar_oldlib="$1"
371874c14cd6Smrg    if test "$lock_old_archive_extraction" = yes; then
371974c14cd6Smrg      lockfile=$f_ex_an_ar_oldlib.lock
372074c14cd6Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
372174c14cd6Smrg	func_echo "Waiting for $lockfile to be removed"
372274c14cd6Smrg	sleep 2
372374c14cd6Smrg      done
372474c14cd6Smrg    fi
372574c14cd6Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
372674c14cd6Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
372774c14cd6Smrg    if test "$lock_old_archive_extraction" = yes; then
372874c14cd6Smrg      $opt_dry_run || rm -f "$lockfile"
372974c14cd6Smrg    fi
3730e35772b2Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731e35772b2Smrg     :
3732e35772b2Smrg    else
3733e35772b2Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734e35772b2Smrg    fi
3735e35772b2Smrg}
373672b676d7Smrg
373772b676d7Smrg
3738e35772b2Smrg# func_extract_archives gentop oldlib ...
3739e35772b2Smrgfunc_extract_archives ()
3740e35772b2Smrg{
3741e35772b2Smrg    $opt_debug
3742e35772b2Smrg    my_gentop="$1"; shift
3743e35772b2Smrg    my_oldlibs=${1+"$@"}
3744e35772b2Smrg    my_oldobjs=""
3745e35772b2Smrg    my_xlib=""
3746e35772b2Smrg    my_xabs=""
3747e35772b2Smrg    my_xdir=""
374872b676d7Smrg
3749e35772b2Smrg    for my_xlib in $my_oldlibs; do
3750e35772b2Smrg      # Extract the objects.
3751e35772b2Smrg      case $my_xlib in
3752e35772b2Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753e35772b2Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754e35772b2Smrg      esac
3755e35772b2Smrg      func_basename "$my_xlib"
3756e35772b2Smrg      my_xlib="$func_basename_result"
3757e35772b2Smrg      my_xlib_u=$my_xlib
3758e35772b2Smrg      while :; do
3759e35772b2Smrg        case " $extracted_archives " in
3760e35772b2Smrg	*" $my_xlib_u "*)
3761e35772b2Smrg	  func_arith $extracted_serial + 1
3762e35772b2Smrg	  extracted_serial=$func_arith_result
3763e35772b2Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764e35772b2Smrg	*) break ;;
3765e35772b2Smrg	esac
3766e35772b2Smrg      done
3767e35772b2Smrg      extracted_archives="$extracted_archives $my_xlib_u"
3768e35772b2Smrg      my_xdir="$my_gentop/$my_xlib_u"
376972b676d7Smrg
3770e35772b2Smrg      func_mkdir_p "$my_xdir"
377172b676d7Smrg
3772e35772b2Smrg      case $host in
3773e35772b2Smrg      *-darwin*)
3774e35772b2Smrg	func_verbose "Extracting $my_xabs"
3775e35772b2Smrg	# Do not bother doing anything if just a dry run
3776e35772b2Smrg	$opt_dry_run || {
3777e35772b2Smrg	  darwin_orig_dir=`pwd`
3778e35772b2Smrg	  cd $my_xdir || exit $?
3779e35772b2Smrg	  darwin_archive=$my_xabs
3780e35772b2Smrg	  darwin_curdir=`pwd`
3781e35772b2Smrg	  darwin_base_archive=`basename "$darwin_archive"`
3782e35772b2Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783e35772b2Smrg	  if test -n "$darwin_arches"; then
3784e35772b2Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785e35772b2Smrg	    darwin_arch=
3786e35772b2Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787e35772b2Smrg	    for darwin_arch in  $darwin_arches ; do
3788e35772b2Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789e35772b2Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790e35772b2Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791e35772b2Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792e35772b2Smrg	      cd "$darwin_curdir"
3793e35772b2Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794e35772b2Smrg	    done # $darwin_arches
3795e35772b2Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796e35772b2Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797e35772b2Smrg	    darwin_file=
3798e35772b2Smrg	    darwin_files=
3799e35772b2Smrg	    for darwin_file in $darwin_filelist; do
380074c14cd6Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801e35772b2Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802e35772b2Smrg	    done # $darwin_filelist
3803e35772b2Smrg	    $RM -rf unfat-$$
3804e35772b2Smrg	    cd "$darwin_orig_dir"
380572b676d7Smrg	  else
3806e35772b2Smrg	    cd $darwin_orig_dir
3807e35772b2Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808e35772b2Smrg	  fi # $darwin_arches
3809e35772b2Smrg	} # !$opt_dry_run
3810e35772b2Smrg	;;
3811e35772b2Smrg      *)
3812e35772b2Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813e35772b2Smrg	;;
3814e35772b2Smrg      esac
381574c14cd6Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816e35772b2Smrg    done
381772b676d7Smrg
3818e35772b2Smrg    func_extract_archives_result="$my_oldobjs"
3819e35772b2Smrg}
382072b676d7Smrg
382172b676d7Smrg
382274c14cd6Smrg# func_emit_wrapper [arg=no]
382374c14cd6Smrg#
382474c14cd6Smrg# Emit a libtool wrapper script on stdout.
382574c14cd6Smrg# Don't directly open a file because we may want to
382674c14cd6Smrg# incorporate the script contents within a cygwin/mingw
382774c14cd6Smrg# wrapper executable.  Must ONLY be called from within
382874c14cd6Smrg# func_mode_link because it depends on a number of variables
382974c14cd6Smrg# set therein.
3830e35772b2Smrg#
383174c14cd6Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
383274c14cd6Smrg# variable will take.  If 'yes', then the emitted script
383374c14cd6Smrg# will assume that the directory in which it is stored is
383474c14cd6Smrg# the $objdir directory.  This is a cygwin/mingw-specific
383574c14cd6Smrg# behavior.
383674c14cd6Smrgfunc_emit_wrapper ()
3837e35772b2Smrg{
383874c14cd6Smrg	func_emit_wrapper_arg1=${1-no}
383972b676d7Smrg
3840e35772b2Smrg	$ECHO "\
3841e35772b2Smrg#! $SHELL
384272b676d7Smrg
3843e35772b2Smrg# $output - temporary wrapper script for $objdir/$outputname
3844e35772b2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845e35772b2Smrg#
3846e35772b2Smrg# The $output program cannot be directly executed until all the libtool
3847e35772b2Smrg# libraries that it depends on are installed.
3848e35772b2Smrg#
3849e35772b2Smrg# This wrapper script should never be moved out of the build directory.
3850e35772b2Smrg# If it is, it will not operate correctly.
385172b676d7Smrg
3852e35772b2Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853e35772b2Smrg# metacharacters that are still active within double-quoted strings.
3854e35772b2Smrgsed_quote_subst='$sed_quote_subst'
385572b676d7Smrg
3856e35772b2Smrg# Be Bourne compatible
3857e35772b2Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858e35772b2Smrg  emulate sh
3859e35772b2Smrg  NULLCMD=:
3860e35772b2Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861e35772b2Smrg  # is contrary to our usage.  Disable this feature.
3862e35772b2Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863e35772b2Smrg  setopt NO_GLOB_SUBST
3864e35772b2Smrgelse
3865e35772b2Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866e35772b2Smrgfi
3867e35772b2SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868e35772b2SmrgDUALCASE=1; export DUALCASE # for MKS sh
386972b676d7Smrg
3870e35772b2Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871e35772b2Smrg# if CDPATH is set.
3872e35772b2Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
387372b676d7Smrg
3874e35772b2Smrgrelink_command=\"$relink_command\"
387572b676d7Smrg
3876e35772b2Smrg# This environment variable determines our operation mode.
3877e35772b2Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878e35772b2Smrg  # install mode needs the following variables:
3879e35772b2Smrg  generated_by_libtool_version='$macro_version'
3880e35772b2Smrg  notinst_deplibs='$notinst_deplibs'
3881e35772b2Smrgelse
3882e35772b2Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883e35772b2Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
388474c14cd6Smrg    file=\"\$0\""
388574c14cd6Smrg
388674c14cd6Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
388774c14cd6Smrg    $ECHO "\
388874c14cd6Smrg
388974c14cd6Smrg# A function that is used when there is no print builtin or printf.
389074c14cd6Smrgfunc_fallback_echo ()
389174c14cd6Smrg{
389274c14cd6Smrg  eval 'cat <<_LTECHO_EOF
389374c14cd6Smrg\$1
389474c14cd6Smrg_LTECHO_EOF'
389574c14cd6Smrg}
389674c14cd6Smrg    ECHO=\"$qECHO\"
389774c14cd6Smrg  fi
389874c14cd6Smrg
389974c14cd6Smrg# Very basic option parsing. These options are (a) specific to
390074c14cd6Smrg# the libtool wrapper, (b) are identical between the wrapper
390174c14cd6Smrg# /script/ and the wrapper /executable/ which is used only on
390274c14cd6Smrg# windows platforms, and (c) all begin with the string "--lt-"
390374c14cd6Smrg# (application programs are unlikely to have options which match
390474c14cd6Smrg# this pattern).
390574c14cd6Smrg#
390674c14cd6Smrg# There are only two supported options: --lt-debug and
390774c14cd6Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
390874c14cd6Smrg#
390974c14cd6Smrg# The first argument to this parsing function should be the
391074c14cd6Smrg# script's $0 value, followed by "$@".
391174c14cd6Smrglt_option_debug=
391274c14cd6Smrgfunc_parse_lt_options ()
391374c14cd6Smrg{
391474c14cd6Smrg  lt_script_arg0=\$0
391574c14cd6Smrg  shift
391674c14cd6Smrg  for lt_opt
391774c14cd6Smrg  do
391874c14cd6Smrg    case \"\$lt_opt\" in
391974c14cd6Smrg    --lt-debug) lt_option_debug=1 ;;
392074c14cd6Smrg    --lt-dump-script)
392174c14cd6Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
392274c14cd6Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
392374c14cd6Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
392474c14cd6Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
392574c14cd6Smrg        exit 0
392674c14cd6Smrg      ;;
392774c14cd6Smrg    --lt-*)
392874c14cd6Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
392974c14cd6Smrg        exit 1
393074c14cd6Smrg      ;;
393174c14cd6Smrg    esac
393274c14cd6Smrg  done
393374c14cd6Smrg
393474c14cd6Smrg  # Print the debug banner immediately:
393574c14cd6Smrg  if test -n \"\$lt_option_debug\"; then
393674c14cd6Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
393774c14cd6Smrg  fi
393874c14cd6Smrg}
393974c14cd6Smrg
394074c14cd6Smrg# Used when --lt-debug. Prints its arguments to stdout
394174c14cd6Smrg# (redirection is the responsibility of the caller)
394274c14cd6Smrgfunc_lt_dump_args ()
394374c14cd6Smrg{
394474c14cd6Smrg  lt_dump_args_N=1;
394574c14cd6Smrg  for lt_arg
394674c14cd6Smrg  do
394774c14cd6Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
394874c14cd6Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
394974c14cd6Smrg  done
395074c14cd6Smrg}
395174c14cd6Smrg
395274c14cd6Smrg# Core function for launching the target application
395374c14cd6Smrgfunc_exec_program_core ()
395474c14cd6Smrg{
3955e35772b2Smrg"
395674c14cd6Smrg  case $host in
395774c14cd6Smrg  # Backslashes separate directories on plain windows
395874c14cd6Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
395974c14cd6Smrg    $ECHO "\
396074c14cd6Smrg      if test -n \"\$lt_option_debug\"; then
396174c14cd6Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
396274c14cd6Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
396374c14cd6Smrg      fi
396474c14cd6Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
396574c14cd6Smrg"
396674c14cd6Smrg    ;;
396774c14cd6Smrg
396874c14cd6Smrg  *)
396974c14cd6Smrg    $ECHO "\
397074c14cd6Smrg      if test -n \"\$lt_option_debug\"; then
397174c14cd6Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
397274c14cd6Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
397374c14cd6Smrg      fi
397474c14cd6Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
397574c14cd6Smrg"
397674c14cd6Smrg    ;;
397774c14cd6Smrg  esac
397874c14cd6Smrg  $ECHO "\
397974c14cd6Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
398074c14cd6Smrg      exit 1
398174c14cd6Smrg}
398274c14cd6Smrg
398374c14cd6Smrg# A function to encapsulate launching the target application
398474c14cd6Smrg# Strips options in the --lt-* namespace from \$@ and
398574c14cd6Smrg# launches target application with the remaining arguments.
398674c14cd6Smrgfunc_exec_program ()
398774c14cd6Smrg{
398874c14cd6Smrg  case \" \$* \" in
398974c14cd6Smrg  *\\ --lt-*)
399074c14cd6Smrg    for lt_wr_arg
399174c14cd6Smrg    do
399274c14cd6Smrg      case \$lt_wr_arg in
399374c14cd6Smrg      --lt-*) ;;
399474c14cd6Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
399574c14cd6Smrg      esac
399674c14cd6Smrg      shift
399774c14cd6Smrg    done ;;
399874c14cd6Smrg  esac
399974c14cd6Smrg  func_exec_program_core \${1+\"\$@\"}
400074c14cd6Smrg}
400174c14cd6Smrg
400274c14cd6Smrg  # Parse options
400374c14cd6Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
400472b676d7Smrg
4005e35772b2Smrg  # Find the directory that this script lives in.
400674c14cd6Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007e35772b2Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
400872b676d7Smrg
4009e35772b2Smrg  # Follow symbolic links until we get to the real thisdir.
401074c14cd6Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011e35772b2Smrg  while test -n \"\$file\"; do
401274c14cd6Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
401372b676d7Smrg
4014e35772b2Smrg    # If there was a directory component, then change thisdir.
4015e35772b2Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4016e35772b2Smrg      case \"\$destdir\" in
4017e35772b2Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018e35772b2Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
401972b676d7Smrg      esac
4020e35772b2Smrg    fi
402172b676d7Smrg
402274c14cd6Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
402374c14cd6Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024e35772b2Smrg  done
402572b676d7Smrg
4026e35772b2Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4027e35772b2Smrg  # the cwrapper.
402874c14cd6Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029e35772b2Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030e35772b2Smrg    # special case for '.'
4031e35772b2Smrg    if test \"\$thisdir\" = \".\"; then
4032e35772b2Smrg      thisdir=\`pwd\`
4033e35772b2Smrg    fi
4034e35772b2Smrg    # remove .libs from thisdir
4035e35772b2Smrg    case \"\$thisdir\" in
403674c14cd6Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037e35772b2Smrg    $objdir )   thisdir=. ;;
4038e35772b2Smrg    esac
4039e35772b2Smrg  fi
4040e35772b2Smrg
4041e35772b2Smrg  # Try to get the absolute directory name.
4042e35772b2Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043e35772b2Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044e35772b2Smrg"
4045e35772b2Smrg
4046e35772b2Smrg	if test "$fast_install" = yes; then
4047e35772b2Smrg	  $ECHO "\
4048e35772b2Smrg  program=lt-'$outputname'$exeext
4049e35772b2Smrg  progdir=\"\$thisdir/$objdir\"
4050e35772b2Smrg
4051e35772b2Smrg  if test ! -f \"\$progdir/\$program\" ||
4052e35772b2Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053e35772b2Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054e35772b2Smrg
4055e35772b2Smrg    file=\"\$\$-\$program\"
4056e35772b2Smrg
4057e35772b2Smrg    if test ! -d \"\$progdir\"; then
4058e35772b2Smrg      $MKDIR \"\$progdir\"
4059e35772b2Smrg    else
4060e35772b2Smrg      $RM \"\$progdir/\$file\"
4061e35772b2Smrg    fi"
4062e35772b2Smrg
4063e35772b2Smrg	  $ECHO "\
4064e35772b2Smrg
4065e35772b2Smrg    # relink executable if necessary
4066e35772b2Smrg    if test -n \"\$relink_command\"; then
4067e35772b2Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068e35772b2Smrg      else
4069e35772b2Smrg	$ECHO \"\$relink_command_output\" >&2
4070e35772b2Smrg	$RM \"\$progdir/\$file\"
4071e35772b2Smrg	exit 1
407272b676d7Smrg      fi
4073e35772b2Smrg    fi
407472b676d7Smrg
4075e35772b2Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076e35772b2Smrg    { $RM \"\$progdir/\$program\";
4077e35772b2Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078e35772b2Smrg    $RM \"\$progdir/\$file\"
4079e35772b2Smrg  fi"
4080e35772b2Smrg	else
4081e35772b2Smrg	  $ECHO "\
4082e35772b2Smrg  program='$outputname'
4083e35772b2Smrg  progdir=\"\$thisdir/$objdir\"
4084e35772b2Smrg"
408572b676d7Smrg	fi
408672b676d7Smrg
4087e35772b2Smrg	$ECHO "\
408872b676d7Smrg
4089e35772b2Smrg  if test -f \"\$progdir/\$program\"; then"
409072b676d7Smrg
409174c14cd6Smrg	# fixup the dll searchpath if we need to.
409274c14cd6Smrg	#
409374c14cd6Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
409474c14cd6Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
409574c14cd6Smrg	# libraries must come first.
409674c14cd6Smrg	if test -n "$dllsearchpath"; then
409774c14cd6Smrg	  $ECHO "\
409874c14cd6Smrg    # Add the dll search path components to the executable PATH
409974c14cd6Smrg    PATH=$dllsearchpath:\$PATH
410074c14cd6Smrg"
410174c14cd6Smrg	fi
410274c14cd6Smrg
4103e35772b2Smrg	# Export our shlibpath_var if we have one.
4104e35772b2Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105e35772b2Smrg	  $ECHO "\
4106e35772b2Smrg    # Add our own library path to $shlibpath_var
4107e35772b2Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108e35772b2Smrg
4109e35772b2Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110e35772b2Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
411174c14cd6Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
411272b676d7Smrg
4113e35772b2Smrg    export $shlibpath_var
4114e35772b2Smrg"
411572b676d7Smrg	fi
411672b676d7Smrg
4117e35772b2Smrg	$ECHO "\
4118e35772b2Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119e35772b2Smrg      # Run the actual program with our arguments.
412074c14cd6Smrg      func_exec_program \${1+\"\$@\"}
4121e35772b2Smrg    fi
4122e35772b2Smrg  else
4123e35772b2Smrg    # The program doesn't exist.
4124e35772b2Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125e35772b2Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
412674c14cd6Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127e35772b2Smrg    exit 1
4128e35772b2Smrg  fi
4129e35772b2Smrgfi\
4130e35772b2Smrg"
4131e35772b2Smrg}
413272b676d7Smrg
413372b676d7Smrg
4134e35772b2Smrg# func_emit_cwrapperexe_src
4135e35772b2Smrg# emit the source code for a wrapper executable on stdout
4136e35772b2Smrg# Must ONLY be called from within func_mode_link because
4137e35772b2Smrg# it depends on a number of variable set therein.
4138e35772b2Smrgfunc_emit_cwrapperexe_src ()
4139e35772b2Smrg{
4140e35772b2Smrg	cat <<EOF
414172b676d7Smrg
4142e35772b2Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143e35772b2Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
414472b676d7Smrg
4145e35772b2Smrg   The $output program cannot be directly executed until all the libtool
4146e35772b2Smrg   libraries that it depends on are installed.
414772b676d7Smrg
4148e35772b2Smrg   This wrapper executable should never be moved out of the build directory.
4149e35772b2Smrg   If it is, it will not operate correctly.
4150e35772b2Smrg*/
4151e35772b2SmrgEOF
4152e35772b2Smrg	    cat <<"EOF"
415374c14cd6Smrg#ifdef _MSC_VER
415474c14cd6Smrg# define _CRT_SECURE_NO_DEPRECATE 1
415574c14cd6Smrg#endif
4156e35772b2Smrg#include <stdio.h>
4157e35772b2Smrg#include <stdlib.h>
4158e35772b2Smrg#ifdef _MSC_VER
4159e35772b2Smrg# include <direct.h>
4160e35772b2Smrg# include <process.h>
4161e35772b2Smrg# include <io.h>
4162e35772b2Smrg#else
4163e35772b2Smrg# include <unistd.h>
4164e35772b2Smrg# include <stdint.h>
4165e35772b2Smrg# ifdef __CYGWIN__
4166e35772b2Smrg#  include <io.h>
4167e35772b2Smrg# endif
4168e35772b2Smrg#endif
4169e35772b2Smrg#include <malloc.h>
4170e35772b2Smrg#include <stdarg.h>
4171e35772b2Smrg#include <assert.h>
4172e35772b2Smrg#include <string.h>
4173e35772b2Smrg#include <ctype.h>
4174e35772b2Smrg#include <errno.h>
4175e35772b2Smrg#include <fcntl.h>
4176e35772b2Smrg#include <sys/stat.h>
417772b676d7Smrg
417874c14cd6Smrg/* declarations of non-ANSI functions */
417974c14cd6Smrg#if defined(__MINGW32__)
418074c14cd6Smrg# ifdef __STRICT_ANSI__
418174c14cd6Smrgint _putenv (const char *);
418274c14cd6Smrg# endif
418374c14cd6Smrg#elif defined(__CYGWIN__)
418474c14cd6Smrg# ifdef __STRICT_ANSI__
418574c14cd6Smrgchar *realpath (const char *, char *);
418674c14cd6Smrgint putenv (char *);
418774c14cd6Smrgint setenv (const char *, const char *, int);
418874c14cd6Smrg# endif
418974c14cd6Smrg/* #elif defined (other platforms) ... */
419074c14cd6Smrg#endif
419174c14cd6Smrg
419274c14cd6Smrg/* portability defines, excluding path handling macros */
419374c14cd6Smrg#if defined(_MSC_VER)
419474c14cd6Smrg# define setmode _setmode
419574c14cd6Smrg# define stat    _stat
419674c14cd6Smrg# define chmod   _chmod
419774c14cd6Smrg# define getcwd  _getcwd
419874c14cd6Smrg# define putenv  _putenv
419974c14cd6Smrg# define S_IXUSR _S_IEXEC
420074c14cd6Smrg# ifndef _INTPTR_T_DEFINED
420174c14cd6Smrg#  define _INTPTR_T_DEFINED
420274c14cd6Smrg#  define intptr_t int
420374c14cd6Smrg# endif
420474c14cd6Smrg#elif defined(__MINGW32__)
420574c14cd6Smrg# define setmode _setmode
420674c14cd6Smrg# define stat    _stat
420774c14cd6Smrg# define chmod   _chmod
420874c14cd6Smrg# define getcwd  _getcwd
420974c14cd6Smrg# define putenv  _putenv
421074c14cd6Smrg#elif defined(__CYGWIN__)
421174c14cd6Smrg# define HAVE_SETENV
421274c14cd6Smrg# define FOPEN_WB "wb"
421374c14cd6Smrg/* #elif defined (other platforms) ... */
421474c14cd6Smrg#endif
421574c14cd6Smrg
4216e35772b2Smrg#if defined(PATH_MAX)
4217e35772b2Smrg# define LT_PATHMAX PATH_MAX
4218e35772b2Smrg#elif defined(MAXPATHLEN)
4219e35772b2Smrg# define LT_PATHMAX MAXPATHLEN
4220e35772b2Smrg#else
4221e35772b2Smrg# define LT_PATHMAX 1024
4222e35772b2Smrg#endif
422372b676d7Smrg
4224e35772b2Smrg#ifndef S_IXOTH
4225e35772b2Smrg# define S_IXOTH 0
4226e35772b2Smrg#endif
4227e35772b2Smrg#ifndef S_IXGRP
4228e35772b2Smrg# define S_IXGRP 0
4229e35772b2Smrg#endif
423072b676d7Smrg
423174c14cd6Smrg/* path handling portability macros */
4232e35772b2Smrg#ifndef DIR_SEPARATOR
4233e35772b2Smrg# define DIR_SEPARATOR '/'
4234e35772b2Smrg# define PATH_SEPARATOR ':'
4235e35772b2Smrg#endif
423672b676d7Smrg
4237e35772b2Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238e35772b2Smrg  defined (__OS2__)
4239e35772b2Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240e35772b2Smrg# define FOPEN_WB "wb"
4241e35772b2Smrg# ifndef DIR_SEPARATOR_2
4242e35772b2Smrg#  define DIR_SEPARATOR_2 '\\'
4243e35772b2Smrg# endif
4244e35772b2Smrg# ifndef PATH_SEPARATOR_2
4245e35772b2Smrg#  define PATH_SEPARATOR_2 ';'
4246e35772b2Smrg# endif
4247e35772b2Smrg#endif
424872b676d7Smrg
4249e35772b2Smrg#ifndef DIR_SEPARATOR_2
4250e35772b2Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251e35772b2Smrg#else /* DIR_SEPARATOR_2 */
4252e35772b2Smrg# define IS_DIR_SEPARATOR(ch) \
4253e35772b2Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254e35772b2Smrg#endif /* DIR_SEPARATOR_2 */
425572b676d7Smrg
4256e35772b2Smrg#ifndef PATH_SEPARATOR_2
4257e35772b2Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258e35772b2Smrg#else /* PATH_SEPARATOR_2 */
4259e35772b2Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260e35772b2Smrg#endif /* PATH_SEPARATOR_2 */
426172b676d7Smrg
4262e35772b2Smrg#ifndef FOPEN_WB
4263e35772b2Smrg# define FOPEN_WB "w"
4264e35772b2Smrg#endif
4265e35772b2Smrg#ifndef _O_BINARY
4266e35772b2Smrg# define _O_BINARY 0
4267e35772b2Smrg#endif
426872b676d7Smrg
4269e35772b2Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270e35772b2Smrg#define XFREE(stale) do { \
4271e35772b2Smrg  if (stale) { free ((void *) stale); stale = 0; } \
4272e35772b2Smrg} while (0)
427372b676d7Smrg
427474c14cd6Smrg#if defined(LT_DEBUGWRAPPER)
427574c14cd6Smrgstatic int lt_debug = 1;
4276e35772b2Smrg#else
427774c14cd6Smrgstatic int lt_debug = 0;
4278e35772b2Smrg#endif
427972b676d7Smrg
428074c14cd6Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
428172b676d7Smrg
4282e35772b2Smrgvoid *xmalloc (size_t num);
4283e35772b2Smrgchar *xstrdup (const char *string);
4284e35772b2Smrgconst char *base_name (const char *name);
4285e35772b2Smrgchar *find_executable (const char *wrapper);
4286e35772b2Smrgchar *chase_symlinks (const char *pathspec);
4287e35772b2Smrgint make_executable (const char *path);
4288e35772b2Smrgint check_executable (const char *path);
4289e35772b2Smrgchar *strendzap (char *str, const char *pat);
429074c14cd6Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
429174c14cd6Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
429274c14cd6Smrgstatic const char *nonnull (const char *s);
429374c14cd6Smrgstatic const char *nonempty (const char *s);
4294e35772b2Smrgvoid lt_setenv (const char *name, const char *value);
4295e35772b2Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296e35772b2Smrgvoid lt_update_exe_path (const char *name, const char *value);
4297e35772b2Smrgvoid lt_update_lib_path (const char *name, const char *value);
429874c14cd6Smrgchar **prepare_spawn (char **argv);
429974c14cd6Smrgvoid lt_dump_script (FILE *f);
4300e35772b2SmrgEOF
4301e35772b2Smrg
4302e35772b2Smrg	    cat <<EOF
430374c14cd6Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304e35772b2Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305e35772b2SmrgEOF
430672b676d7Smrg
4307e35772b2Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
430874c14cd6Smrg              func_to_host_path "$temp_rpath"
4309e35772b2Smrg	      cat <<EOF
431074c14cd6Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311e35772b2SmrgEOF
4312e35772b2Smrg	    else
4313e35772b2Smrg	      cat <<"EOF"
4314e35772b2Smrgconst char * LIB_PATH_VALUE   = "";
4315e35772b2SmrgEOF
431672b676d7Smrg	    fi
431772b676d7Smrg
4318e35772b2Smrg	    if test -n "$dllsearchpath"; then
431974c14cd6Smrg              func_to_host_path "$dllsearchpath:"
4320e35772b2Smrg	      cat <<EOF
4321e35772b2Smrgconst char * EXE_PATH_VARNAME = "PATH";
432274c14cd6Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
432372b676d7SmrgEOF
432472b676d7Smrg	    else
4325e35772b2Smrg	      cat <<"EOF"
4326e35772b2Smrgconst char * EXE_PATH_VARNAME = "";
4327e35772b2Smrgconst char * EXE_PATH_VALUE   = "";
4328e35772b2SmrgEOF
432972b676d7Smrg	    fi
4330e35772b2Smrg
4331e35772b2Smrg	    if test "$fast_install" = yes; then
4332e35772b2Smrg	      cat <<EOF
4333e35772b2Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334e35772b2SmrgEOF
433572b676d7Smrg	    else
4336e35772b2Smrg	      cat <<EOF
4337e35772b2Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338e35772b2SmrgEOF
433972b676d7Smrg	    fi
434072b676d7Smrg
434172b676d7Smrg
4342e35772b2Smrg	    cat <<"EOF"
434372b676d7Smrg
4344e35772b2Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
434572b676d7Smrg
4346e35772b2Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347e35772b2Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
434874c14cd6Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
434972b676d7Smrg
4350e35772b2Smrgint
4351e35772b2Smrgmain (int argc, char *argv[])
4352e35772b2Smrg{
4353e35772b2Smrg  char **newargz;
4354e35772b2Smrg  int  newargc;
4355e35772b2Smrg  char *tmp_pathspec;
4356e35772b2Smrg  char *actual_cwrapper_path;
4357e35772b2Smrg  char *actual_cwrapper_name;
4358e35772b2Smrg  char *target_name;
4359e35772b2Smrg  char *lt_argv_zero;
4360e35772b2Smrg  intptr_t rval = 127;
436172b676d7Smrg
4362e35772b2Smrg  int i;
436372b676d7Smrg
4364e35772b2Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
436574c14cd6Smrg  newargz = XMALLOC (char *, argc + 1);
436672b676d7Smrg
436774c14cd6Smrg  /* very simple arg parsing; don't want to rely on getopt
436874c14cd6Smrg   * also, copy all non cwrapper options to newargz, except
436974c14cd6Smrg   * argz[0], which is handled differently
437074c14cd6Smrg   */
437174c14cd6Smrg  newargc=0;
4372e35772b2Smrg  for (i = 1; i < argc; i++)
4373e35772b2Smrg    {
4374e35772b2Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375e35772b2Smrg	{
4376e35772b2SmrgEOF
4377e35772b2Smrg	    case "$host" in
4378e35772b2Smrg	      *mingw* | *cygwin* )
4379e35772b2Smrg		# make stdout use "unix" line endings
4380e35772b2Smrg		echo "          setmode(1,_O_BINARY);"
4381e35772b2Smrg		;;
4382e35772b2Smrg	      esac
438372b676d7Smrg
4384e35772b2Smrg	    cat <<"EOF"
438574c14cd6Smrg	  lt_dump_script (stdout);
4386e35772b2Smrg	  return 0;
4387e35772b2Smrg	}
438874c14cd6Smrg      if (strcmp (argv[i], debug_opt) == 0)
438974c14cd6Smrg	{
439074c14cd6Smrg          lt_debug = 1;
439174c14cd6Smrg          continue;
439274c14cd6Smrg	}
439374c14cd6Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
439474c14cd6Smrg        {
439574c14cd6Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
439674c14cd6Smrg             namespace, but it is not one of the ones we know about and
439774c14cd6Smrg             have already dealt with, above (inluding dump-script), then
439874c14cd6Smrg             report an error. Otherwise, targets might begin to believe
439974c14cd6Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
440074c14cd6Smrg             namespace. The first time any user complains about this, we'll
440174c14cd6Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
440274c14cd6Smrg             or a configure.ac-settable value.
440374c14cd6Smrg           */
440474c14cd6Smrg          lt_fatal (__FILE__, __LINE__,
440574c14cd6Smrg		    "unrecognized %s option: '%s'",
440674c14cd6Smrg                    ltwrapper_option_prefix, argv[i]);
440774c14cd6Smrg        }
440874c14cd6Smrg      /* otherwise ... */
440974c14cd6Smrg      newargz[++newargc] = xstrdup (argv[i]);
4410e35772b2Smrg    }
441174c14cd6Smrg  newargz[++newargc] = NULL;
441274c14cd6Smrg
441374c14cd6SmrgEOF
441474c14cd6Smrg	    cat <<EOF
441574c14cd6Smrg  /* The GNU banner must be the first non-error debug message */
441674c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
441774c14cd6SmrgEOF
441874c14cd6Smrg	    cat <<"EOF"
441974c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
442074c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
442172b676d7Smrg
4422e35772b2Smrg  tmp_pathspec = find_executable (argv[0]);
4423e35772b2Smrg  if (tmp_pathspec == NULL)
442474c14cd6Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
442574c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__,
442674c14cd6Smrg                  "(main) found exe (before symlink chase) at: %s\n",
442774c14cd6Smrg		  tmp_pathspec);
4428e35772b2Smrg
4429e35772b2Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
443074c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__,
443174c14cd6Smrg                  "(main) found exe (after symlink chase) at: %s\n",
443274c14cd6Smrg		  actual_cwrapper_path);
4433e35772b2Smrg  XFREE (tmp_pathspec);
4434e35772b2Smrg
443574c14cd6Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436e35772b2Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437e35772b2Smrg
4438e35772b2Smrg  /* wrapper name transforms */
4439e35772b2Smrg  strendzap (actual_cwrapper_name, ".exe");
4440e35772b2Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441e35772b2Smrg  XFREE (actual_cwrapper_name);
4442e35772b2Smrg  actual_cwrapper_name = tmp_pathspec;
4443e35772b2Smrg  tmp_pathspec = 0;
4444e35772b2Smrg
4445e35772b2Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446e35772b2Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447e35772b2Smrg  strendzap (target_name, ".exe");
4448e35772b2Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449e35772b2Smrg  XFREE (target_name);
4450e35772b2Smrg  target_name = tmp_pathspec;
4451e35772b2Smrg  tmp_pathspec = 0;
4452e35772b2Smrg
445374c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__,
445474c14cd6Smrg		  "(main) libtool target name: %s\n",
445574c14cd6Smrg		  target_name);
4456e35772b2SmrgEOF
445772b676d7Smrg
4458e35772b2Smrg	    cat <<EOF
4459e35772b2Smrg  newargz[0] =
4460e35772b2Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461e35772b2Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462e35772b2Smrg  strcpy (newargz[0], actual_cwrapper_path);
4463e35772b2Smrg  strcat (newargz[0], "$objdir");
4464e35772b2Smrg  strcat (newargz[0], "/");
4465e35772b2SmrgEOF
446672b676d7Smrg
4467e35772b2Smrg	    cat <<"EOF"
4468e35772b2Smrg  /* stop here, and copy so we don't have to do this twice */
4469e35772b2Smrg  tmp_pathspec = xstrdup (newargz[0]);
447072b676d7Smrg
4471e35772b2Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472e35772b2Smrg  strcat (newargz[0], actual_cwrapper_name);
447372b676d7Smrg
4474e35772b2Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475e35772b2Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476e35772b2Smrg  XFREE (tmp_pathspec);
4477e35772b2Smrg  tmp_pathspec = NULL;
4478e35772b2SmrgEOF
447972b676d7Smrg
4480e35772b2Smrg	    case $host_os in
4481e35772b2Smrg	      mingw*)
4482e35772b2Smrg	    cat <<"EOF"
4483e35772b2Smrg  {
4484e35772b2Smrg    char* p;
4485e35772b2Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486e35772b2Smrg      {
4487e35772b2Smrg	*p = '/';
4488e35772b2Smrg      }
4489e35772b2Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490e35772b2Smrg      {
4491e35772b2Smrg	*p = '/';
4492e35772b2Smrg      }
4493e35772b2Smrg  }
4494e35772b2SmrgEOF
4495e35772b2Smrg	    ;;
4496e35772b2Smrg	    esac
449772b676d7Smrg
4498e35772b2Smrg	    cat <<"EOF"
4499e35772b2Smrg  XFREE (target_name);
4500e35772b2Smrg  XFREE (actual_cwrapper_path);
4501e35772b2Smrg  XFREE (actual_cwrapper_name);
450272b676d7Smrg
4503e35772b2Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504e35772b2Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
450574c14cd6Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
450674c14cd6Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
450774c14cd6Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
450874c14cd6Smrg     libraries must come first. */
4509e35772b2Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
451074c14cd6Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
451172b676d7Smrg
451274c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
451374c14cd6Smrg		  nonnull (lt_argv_zero));
4514e35772b2Smrg  for (i = 0; i < newargc; i++)
4515e35772b2Smrg    {
451674c14cd6Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
451774c14cd6Smrg		      i, nonnull (newargz[i]));
4518e35772b2Smrg    }
451972b676d7Smrg
4520e35772b2SmrgEOF
452172b676d7Smrg
4522e35772b2Smrg	    case $host_os in
4523e35772b2Smrg	      mingw*)
4524e35772b2Smrg		cat <<"EOF"
4525e35772b2Smrg  /* execv doesn't actually work on mingw as expected on unix */
452674c14cd6Smrg  newargz = prepare_spawn (newargz);
4527e35772b2Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528e35772b2Smrg  if (rval == -1)
4529e35772b2Smrg    {
4530e35772b2Smrg      /* failed to start process */
453174c14cd6Smrg      lt_debugprintf (__FILE__, __LINE__,
453274c14cd6Smrg		      "(main) failed to launch target \"%s\": %s\n",
453374c14cd6Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4534e35772b2Smrg      return 127;
4535e35772b2Smrg    }
4536e35772b2Smrg  return rval;
4537e35772b2SmrgEOF
4538e35772b2Smrg		;;
4539e35772b2Smrg	      *)
4540e35772b2Smrg		cat <<"EOF"
4541e35772b2Smrg  execv (lt_argv_zero, newargz);
4542e35772b2Smrg  return rval; /* =127, but avoids unused variable warning */
4543e35772b2SmrgEOF
4544e35772b2Smrg		;;
4545e35772b2Smrg	    esac
454672b676d7Smrg
4547e35772b2Smrg	    cat <<"EOF"
4548e35772b2Smrg}
454972b676d7Smrg
4550e35772b2Smrgvoid *
4551e35772b2Smrgxmalloc (size_t num)
4552e35772b2Smrg{
4553e35772b2Smrg  void *p = (void *) malloc (num);
4554e35772b2Smrg  if (!p)
455574c14cd6Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
455672b676d7Smrg
4557e35772b2Smrg  return p;
4558e35772b2Smrg}
455972b676d7Smrg
4560e35772b2Smrgchar *
4561e35772b2Smrgxstrdup (const char *string)
4562e35772b2Smrg{
4563e35772b2Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564e35772b2Smrg			  string) : NULL;
4565e35772b2Smrg}
456672b676d7Smrg
4567e35772b2Smrgconst char *
4568e35772b2Smrgbase_name (const char *name)
4569e35772b2Smrg{
4570e35772b2Smrg  const char *base;
457172b676d7Smrg
4572e35772b2Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573e35772b2Smrg  /* Skip over the disk name in MSDOS pathnames. */
4574e35772b2Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575e35772b2Smrg    name += 2;
4576e35772b2Smrg#endif
457772b676d7Smrg
4578e35772b2Smrg  for (base = name; *name; name++)
4579e35772b2Smrg    if (IS_DIR_SEPARATOR (*name))
4580e35772b2Smrg      base = name + 1;
4581e35772b2Smrg  return base;
4582e35772b2Smrg}
458372b676d7Smrg
4584e35772b2Smrgint
4585e35772b2Smrgcheck_executable (const char *path)
4586e35772b2Smrg{
4587e35772b2Smrg  struct stat st;
458872b676d7Smrg
458974c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
459074c14cd6Smrg                  nonempty (path));
4591e35772b2Smrg  if ((!path) || (!*path))
4592e35772b2Smrg    return 0;
459372b676d7Smrg
4594e35772b2Smrg  if ((stat (path, &st) >= 0)
4595e35772b2Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596e35772b2Smrg    return 1;
4597e35772b2Smrg  else
4598e35772b2Smrg    return 0;
4599e35772b2Smrg}
460072b676d7Smrg
4601e35772b2Smrgint
4602e35772b2Smrgmake_executable (const char *path)
4603e35772b2Smrg{
4604e35772b2Smrg  int rval = 0;
4605e35772b2Smrg  struct stat st;
460672b676d7Smrg
460774c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
460874c14cd6Smrg                  nonempty (path));
4609e35772b2Smrg  if ((!path) || (!*path))
4610e35772b2Smrg    return 0;
461172b676d7Smrg
4612e35772b2Smrg  if (stat (path, &st) >= 0)
4613e35772b2Smrg    {
4614e35772b2Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615e35772b2Smrg    }
4616e35772b2Smrg  return rval;
4617e35772b2Smrg}
461872b676d7Smrg
4619e35772b2Smrg/* Searches for the full path of the wrapper.  Returns
4620e35772b2Smrg   newly allocated full path name if found, NULL otherwise
4621e35772b2Smrg   Does not chase symlinks, even on platforms that support them.
4622e35772b2Smrg*/
4623e35772b2Smrgchar *
4624e35772b2Smrgfind_executable (const char *wrapper)
4625e35772b2Smrg{
4626e35772b2Smrg  int has_slash = 0;
4627e35772b2Smrg  const char *p;
4628e35772b2Smrg  const char *p_next;
4629e35772b2Smrg  /* static buffer for getcwd */
4630e35772b2Smrg  char tmp[LT_PATHMAX + 1];
4631e35772b2Smrg  int tmp_len;
4632e35772b2Smrg  char *concat_name;
463372b676d7Smrg
463474c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
463574c14cd6Smrg                  nonempty (wrapper));
463672b676d7Smrg
4637e35772b2Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638e35772b2Smrg    return NULL;
463972b676d7Smrg
4640e35772b2Smrg  /* Absolute path? */
4641e35772b2Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642e35772b2Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643e35772b2Smrg    {
4644e35772b2Smrg      concat_name = xstrdup (wrapper);
4645e35772b2Smrg      if (check_executable (concat_name))
4646e35772b2Smrg	return concat_name;
4647e35772b2Smrg      XFREE (concat_name);
4648e35772b2Smrg    }
4649e35772b2Smrg  else
4650e35772b2Smrg    {
4651e35772b2Smrg#endif
4652e35772b2Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653e35772b2Smrg	{
4654e35772b2Smrg	  concat_name = xstrdup (wrapper);
4655e35772b2Smrg	  if (check_executable (concat_name))
4656e35772b2Smrg	    return concat_name;
4657e35772b2Smrg	  XFREE (concat_name);
4658e35772b2Smrg	}
4659e35772b2Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660e35772b2Smrg    }
4661e35772b2Smrg#endif
466272b676d7Smrg
4663e35772b2Smrg  for (p = wrapper; *p; p++)
4664e35772b2Smrg    if (*p == '/')
4665e35772b2Smrg      {
4666e35772b2Smrg	has_slash = 1;
4667e35772b2Smrg	break;
4668e35772b2Smrg      }
4669e35772b2Smrg  if (!has_slash)
4670e35772b2Smrg    {
4671e35772b2Smrg      /* no slashes; search PATH */
4672e35772b2Smrg      const char *path = getenv ("PATH");
4673e35772b2Smrg      if (path != NULL)
4674e35772b2Smrg	{
4675e35772b2Smrg	  for (p = path; *p; p = p_next)
4676e35772b2Smrg	    {
4677e35772b2Smrg	      const char *q;
4678e35772b2Smrg	      size_t p_len;
4679e35772b2Smrg	      for (q = p; *q; q++)
4680e35772b2Smrg		if (IS_PATH_SEPARATOR (*q))
4681e35772b2Smrg		  break;
4682e35772b2Smrg	      p_len = q - p;
4683e35772b2Smrg	      p_next = (*q == '\0' ? q : q + 1);
4684e35772b2Smrg	      if (p_len == 0)
4685e35772b2Smrg		{
4686e35772b2Smrg		  /* empty path: current directory */
4687e35772b2Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
468874c14cd6Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
468974c14cd6Smrg                              nonnull (strerror (errno)));
4690e35772b2Smrg		  tmp_len = strlen (tmp);
4691e35772b2Smrg		  concat_name =
4692e35772b2Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693e35772b2Smrg		  memcpy (concat_name, tmp, tmp_len);
4694e35772b2Smrg		  concat_name[tmp_len] = '/';
4695e35772b2Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696e35772b2Smrg		}
4697e35772b2Smrg	      else
4698e35772b2Smrg		{
4699e35772b2Smrg		  concat_name =
4700e35772b2Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701e35772b2Smrg		  memcpy (concat_name, p, p_len);
4702e35772b2Smrg		  concat_name[p_len] = '/';
4703e35772b2Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4704e35772b2Smrg		}
4705e35772b2Smrg	      if (check_executable (concat_name))
4706e35772b2Smrg		return concat_name;
4707e35772b2Smrg	      XFREE (concat_name);
4708e35772b2Smrg	    }
4709e35772b2Smrg	}
4710e35772b2Smrg      /* not found in PATH; assume curdir */
4711e35772b2Smrg    }
4712e35772b2Smrg  /* Relative path | not found in path: prepend cwd */
4713e35772b2Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
471474c14cd6Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
471574c14cd6Smrg              nonnull (strerror (errno)));
4716e35772b2Smrg  tmp_len = strlen (tmp);
4717e35772b2Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718e35772b2Smrg  memcpy (concat_name, tmp, tmp_len);
4719e35772b2Smrg  concat_name[tmp_len] = '/';
4720e35772b2Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
472172b676d7Smrg
4722e35772b2Smrg  if (check_executable (concat_name))
4723e35772b2Smrg    return concat_name;
4724e35772b2Smrg  XFREE (concat_name);
4725e35772b2Smrg  return NULL;
4726e35772b2Smrg}
472772b676d7Smrg
4728e35772b2Smrgchar *
4729e35772b2Smrgchase_symlinks (const char *pathspec)
4730e35772b2Smrg{
4731e35772b2Smrg#ifndef S_ISLNK
4732e35772b2Smrg  return xstrdup (pathspec);
4733e35772b2Smrg#else
4734e35772b2Smrg  char buf[LT_PATHMAX];
4735e35772b2Smrg  struct stat s;
4736e35772b2Smrg  char *tmp_pathspec = xstrdup (pathspec);
4737e35772b2Smrg  char *p;
4738e35772b2Smrg  int has_symlinks = 0;
4739e35772b2Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740e35772b2Smrg    {
474174c14cd6Smrg      lt_debugprintf (__FILE__, __LINE__,
474274c14cd6Smrg		      "checking path component for symlinks: %s\n",
474374c14cd6Smrg		      tmp_pathspec);
4744e35772b2Smrg      if (lstat (tmp_pathspec, &s) == 0)
4745e35772b2Smrg	{
4746e35772b2Smrg	  if (S_ISLNK (s.st_mode) != 0)
4747e35772b2Smrg	    {
4748e35772b2Smrg	      has_symlinks = 1;
4749e35772b2Smrg	      break;
4750e35772b2Smrg	    }
475172b676d7Smrg
4752e35772b2Smrg	  /* search backwards for last DIR_SEPARATOR */
4753e35772b2Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754e35772b2Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755e35772b2Smrg	    p--;
4756e35772b2Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757e35772b2Smrg	    {
4758e35772b2Smrg	      /* no more DIR_SEPARATORS left */
4759e35772b2Smrg	      break;
4760e35772b2Smrg	    }
4761e35772b2Smrg	  *p = '\0';
4762e35772b2Smrg	}
4763e35772b2Smrg      else
4764e35772b2Smrg	{
476574c14cd6Smrg	  lt_fatal (__FILE__, __LINE__,
476674c14cd6Smrg		    "error accessing file \"%s\": %s",
476774c14cd6Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4768e35772b2Smrg	}
4769e35772b2Smrg    }
4770e35772b2Smrg  XFREE (tmp_pathspec);
477172b676d7Smrg
4772e35772b2Smrg  if (!has_symlinks)
4773e35772b2Smrg    {
4774e35772b2Smrg      return xstrdup (pathspec);
4775e35772b2Smrg    }
477672b676d7Smrg
4777e35772b2Smrg  tmp_pathspec = realpath (pathspec, buf);
4778e35772b2Smrg  if (tmp_pathspec == 0)
4779e35772b2Smrg    {
478074c14cd6Smrg      lt_fatal (__FILE__, __LINE__,
478174c14cd6Smrg		"could not follow symlinks for %s", pathspec);
4782e35772b2Smrg    }
4783e35772b2Smrg  return xstrdup (tmp_pathspec);
4784e35772b2Smrg#endif
4785e35772b2Smrg}
478672b676d7Smrg
4787e35772b2Smrgchar *
4788e35772b2Smrgstrendzap (char *str, const char *pat)
4789e35772b2Smrg{
4790e35772b2Smrg  size_t len, patlen;
479172b676d7Smrg
4792e35772b2Smrg  assert (str != NULL);
4793e35772b2Smrg  assert (pat != NULL);
479472b676d7Smrg
4795e35772b2Smrg  len = strlen (str);
4796e35772b2Smrg  patlen = strlen (pat);
479772b676d7Smrg
4798e35772b2Smrg  if (patlen <= len)
4799e35772b2Smrg    {
4800e35772b2Smrg      str += len - patlen;
4801e35772b2Smrg      if (strcmp (str, pat) == 0)
4802e35772b2Smrg	*str = '\0';
4803e35772b2Smrg    }
4804e35772b2Smrg  return str;
4805e35772b2Smrg}
480672b676d7Smrg
480774c14cd6Smrgvoid
480874c14cd6Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
480974c14cd6Smrg{
481074c14cd6Smrg  va_list args;
481174c14cd6Smrg  if (lt_debug)
481274c14cd6Smrg    {
481374c14cd6Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
481474c14cd6Smrg      va_start (args, fmt);
481574c14cd6Smrg      (void) vfprintf (stderr, fmt, args);
481674c14cd6Smrg      va_end (args);
481774c14cd6Smrg    }
481874c14cd6Smrg}
481974c14cd6Smrg
4820e35772b2Smrgstatic void
482174c14cd6Smrglt_error_core (int exit_status, const char *file,
482274c14cd6Smrg	       int line, const char *mode,
4823e35772b2Smrg	       const char *message, va_list ap)
4824e35772b2Smrg{
482574c14cd6Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826e35772b2Smrg  vfprintf (stderr, message, ap);
4827e35772b2Smrg  fprintf (stderr, ".\n");
482872b676d7Smrg
4829e35772b2Smrg  if (exit_status >= 0)
4830e35772b2Smrg    exit (exit_status);
4831e35772b2Smrg}
483272b676d7Smrg
4833e35772b2Smrgvoid
483474c14cd6Smrglt_fatal (const char *file, int line, const char *message, ...)
4835e35772b2Smrg{
4836e35772b2Smrg  va_list ap;
4837e35772b2Smrg  va_start (ap, message);
483874c14cd6Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839e35772b2Smrg  va_end (ap);
4840e35772b2Smrg}
484172b676d7Smrg
484274c14cd6Smrgstatic const char *
484374c14cd6Smrgnonnull (const char *s)
484474c14cd6Smrg{
484574c14cd6Smrg  return s ? s : "(null)";
484674c14cd6Smrg}
484774c14cd6Smrg
484874c14cd6Smrgstatic const char *
484974c14cd6Smrgnonempty (const char *s)
485074c14cd6Smrg{
485174c14cd6Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
485274c14cd6Smrg}
485374c14cd6Smrg
4854e35772b2Smrgvoid
4855e35772b2Smrglt_setenv (const char *name, const char *value)
4856e35772b2Smrg{
485774c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__,
485874c14cd6Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
485974c14cd6Smrg                  nonnull (name), nonnull (value));
4860e35772b2Smrg  {
4861e35772b2Smrg#ifdef HAVE_SETENV
4862e35772b2Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863e35772b2Smrg    char *str = xstrdup (value);
4864e35772b2Smrg    setenv (name, str, 1);
4865e35772b2Smrg#else
4866e35772b2Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867e35772b2Smrg    char *str = XMALLOC (char, len);
4868e35772b2Smrg    sprintf (str, "%s=%s", name, value);
4869e35772b2Smrg    if (putenv (str) != EXIT_SUCCESS)
4870e35772b2Smrg      {
4871e35772b2Smrg        XFREE (str);
4872e35772b2Smrg      }
4873e35772b2Smrg#endif
4874e35772b2Smrg  }
4875e35772b2Smrg}
487672b676d7Smrg
4877e35772b2Smrgchar *
4878e35772b2Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879e35772b2Smrg{
4880e35772b2Smrg  char *new_value;
4881e35772b2Smrg  if (orig_value && *orig_value)
4882e35772b2Smrg    {
4883e35772b2Smrg      int orig_value_len = strlen (orig_value);
4884e35772b2Smrg      int add_len = strlen (add);
4885e35772b2Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886e35772b2Smrg      if (to_end)
4887e35772b2Smrg        {
4888e35772b2Smrg          strcpy (new_value, orig_value);
4889e35772b2Smrg          strcpy (new_value + orig_value_len, add);
4890e35772b2Smrg        }
4891e35772b2Smrg      else
4892e35772b2Smrg        {
4893e35772b2Smrg          strcpy (new_value, add);
4894e35772b2Smrg          strcpy (new_value + add_len, orig_value);
4895e35772b2Smrg        }
4896e35772b2Smrg    }
4897e35772b2Smrg  else
4898e35772b2Smrg    {
4899e35772b2Smrg      new_value = xstrdup (add);
4900e35772b2Smrg    }
4901e35772b2Smrg  return new_value;
4902e35772b2Smrg}
490372b676d7Smrg
4904e35772b2Smrgvoid
4905e35772b2Smrglt_update_exe_path (const char *name, const char *value)
4906e35772b2Smrg{
490774c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__,
490874c14cd6Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
490974c14cd6Smrg                  nonnull (name), nonnull (value));
491072b676d7Smrg
4911e35772b2Smrg  if (name && *name && value && *value)
4912e35772b2Smrg    {
4913e35772b2Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914e35772b2Smrg      /* some systems can't cope with a ':'-terminated path #' */
4915e35772b2Smrg      int len = strlen (new_value);
4916e35772b2Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917e35772b2Smrg        {
4918e35772b2Smrg          new_value[len-1] = '\0';
4919e35772b2Smrg        }
4920e35772b2Smrg      lt_setenv (name, new_value);
4921e35772b2Smrg      XFREE (new_value);
4922e35772b2Smrg    }
4923e35772b2Smrg}
492472b676d7Smrg
4925e35772b2Smrgvoid
4926e35772b2Smrglt_update_lib_path (const char *name, const char *value)
4927e35772b2Smrg{
492874c14cd6Smrg  lt_debugprintf (__FILE__, __LINE__,
492974c14cd6Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
493074c14cd6Smrg                  nonnull (name), nonnull (value));
493172b676d7Smrg
4932e35772b2Smrg  if (name && *name && value && *value)
4933e35772b2Smrg    {
4934e35772b2Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935e35772b2Smrg      lt_setenv (name, new_value);
4936e35772b2Smrg      XFREE (new_value);
4937e35772b2Smrg    }
4938e35772b2Smrg}
493972b676d7Smrg
494074c14cd6SmrgEOF
494174c14cd6Smrg	    case $host_os in
494274c14cd6Smrg	      mingw*)
494374c14cd6Smrg		cat <<"EOF"
494474c14cd6Smrg
494574c14cd6Smrg/* Prepares an argument vector before calling spawn().
494674c14cd6Smrg   Note that spawn() does not by itself call the command interpreter
494774c14cd6Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
494874c14cd6Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
494974c14cd6Smrg         GetVersionEx(&v);
495074c14cd6Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
495174c14cd6Smrg      }) ? "cmd.exe" : "command.com").
495274c14cd6Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
495374c14cd6Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
495474c14cd6Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
495574c14cd6Smrg   special way:
495674c14cd6Smrg   - Space and tab are interpreted as delimiters. They are not treated as
495774c14cd6Smrg     delimiters if they are surrounded by double quotes: "...".
495874c14cd6Smrg   - Unescaped double quotes are removed from the input. Their only effect is
495974c14cd6Smrg     that within double quotes, space and tab are treated like normal
496074c14cd6Smrg     characters.
496174c14cd6Smrg   - Backslashes not followed by double quotes are not special.
496274c14cd6Smrg   - But 2*n+1 backslashes followed by a double quote become
496374c14cd6Smrg     n backslashes followed by a double quote (n >= 0):
496474c14cd6Smrg       \" -> "
496574c14cd6Smrg       \\\" -> \"
496674c14cd6Smrg       \\\\\" -> \\"
496774c14cd6Smrg */
496874c14cd6Smrg#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"
496974c14cd6Smrg#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"
497074c14cd6Smrgchar **
497174c14cd6Smrgprepare_spawn (char **argv)
497274c14cd6Smrg{
497374c14cd6Smrg  size_t argc;
497474c14cd6Smrg  char **new_argv;
497574c14cd6Smrg  size_t i;
497674c14cd6Smrg
497774c14cd6Smrg  /* Count number of arguments.  */
497874c14cd6Smrg  for (argc = 0; argv[argc] != NULL; argc++)
497974c14cd6Smrg    ;
498074c14cd6Smrg
498174c14cd6Smrg  /* Allocate new argument vector.  */
498274c14cd6Smrg  new_argv = XMALLOC (char *, argc + 1);
498374c14cd6Smrg
498474c14cd6Smrg  /* Put quoted arguments into the new argument vector.  */
498574c14cd6Smrg  for (i = 0; i < argc; i++)
498674c14cd6Smrg    {
498774c14cd6Smrg      const char *string = argv[i];
498874c14cd6Smrg
498974c14cd6Smrg      if (string[0] == '\0')
499074c14cd6Smrg	new_argv[i] = xstrdup ("\"\"");
499174c14cd6Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
499274c14cd6Smrg	{
499374c14cd6Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
499474c14cd6Smrg	  size_t length;
499574c14cd6Smrg	  unsigned int backslashes;
499674c14cd6Smrg	  const char *s;
499774c14cd6Smrg	  char *quoted_string;
499874c14cd6Smrg	  char *p;
499974c14cd6Smrg
500074c14cd6Smrg	  length = 0;
500174c14cd6Smrg	  backslashes = 0;
500274c14cd6Smrg	  if (quote_around)
500374c14cd6Smrg	    length++;
500474c14cd6Smrg	  for (s = string; *s != '\0'; s++)
500574c14cd6Smrg	    {
500674c14cd6Smrg	      char c = *s;
500774c14cd6Smrg	      if (c == '"')
500874c14cd6Smrg		length += backslashes + 1;
500974c14cd6Smrg	      length++;
501074c14cd6Smrg	      if (c == '\\')
501174c14cd6Smrg		backslashes++;
501274c14cd6Smrg	      else
501374c14cd6Smrg		backslashes = 0;
501474c14cd6Smrg	    }
501574c14cd6Smrg	  if (quote_around)
501674c14cd6Smrg	    length += backslashes + 1;
501774c14cd6Smrg
501874c14cd6Smrg	  quoted_string = XMALLOC (char, length + 1);
501974c14cd6Smrg
502074c14cd6Smrg	  p = quoted_string;
502174c14cd6Smrg	  backslashes = 0;
502274c14cd6Smrg	  if (quote_around)
502374c14cd6Smrg	    *p++ = '"';
502474c14cd6Smrg	  for (s = string; *s != '\0'; s++)
502574c14cd6Smrg	    {
502674c14cd6Smrg	      char c = *s;
502774c14cd6Smrg	      if (c == '"')
502874c14cd6Smrg		{
502974c14cd6Smrg		  unsigned int j;
503074c14cd6Smrg		  for (j = backslashes + 1; j > 0; j--)
503174c14cd6Smrg		    *p++ = '\\';
503274c14cd6Smrg		}
503374c14cd6Smrg	      *p++ = c;
503474c14cd6Smrg	      if (c == '\\')
503574c14cd6Smrg		backslashes++;
503674c14cd6Smrg	      else
503774c14cd6Smrg		backslashes = 0;
503874c14cd6Smrg	    }
503974c14cd6Smrg	  if (quote_around)
504074c14cd6Smrg	    {
504174c14cd6Smrg	      unsigned int j;
504274c14cd6Smrg	      for (j = backslashes; j > 0; j--)
504374c14cd6Smrg		*p++ = '\\';
504474c14cd6Smrg	      *p++ = '"';
504574c14cd6Smrg	    }
504674c14cd6Smrg	  *p = '\0';
504774c14cd6Smrg
504874c14cd6Smrg	  new_argv[i] = quoted_string;
504974c14cd6Smrg	}
505074c14cd6Smrg      else
505174c14cd6Smrg	new_argv[i] = (char *) string;
505274c14cd6Smrg    }
505374c14cd6Smrg  new_argv[argc] = NULL;
505474c14cd6Smrg
505574c14cd6Smrg  return new_argv;
505674c14cd6Smrg}
505774c14cd6SmrgEOF
505874c14cd6Smrg		;;
505974c14cd6Smrg	    esac
506072b676d7Smrg
506174c14cd6Smrg            cat <<"EOF"
506274c14cd6Smrgvoid lt_dump_script (FILE* f)
506374c14cd6Smrg{
506474c14cd6SmrgEOF
506574c14cd6Smrg	    func_emit_wrapper yes |
506674c14cd6Smrg	      $SED -n -e '
506774c14cd6Smrgs/^\(.\{79\}\)\(..*\)/\1\
506874c14cd6Smrg\2/
506974c14cd6Smrgh
507074c14cd6Smrgs/\([\\"]\)/\\\1/g
507174c14cd6Smrgs/$/\\n/
507274c14cd6Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
507374c14cd6Smrgg
507474c14cd6SmrgD'
507574c14cd6Smrg            cat <<"EOF"
507674c14cd6Smrg}
5077e35772b2SmrgEOF
5078e35772b2Smrg}
5079e35772b2Smrg# end: func_emit_cwrapperexe_src
508072b676d7Smrg
508174c14cd6Smrg# func_win32_import_lib_p ARG
508274c14cd6Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
508374c14cd6Smrgfunc_win32_import_lib_p ()
508474c14cd6Smrg{
508574c14cd6Smrg    $opt_debug
508674c14cd6Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
508774c14cd6Smrg    *import*) : ;;
508874c14cd6Smrg    *) false ;;
508974c14cd6Smrg    esac
509074c14cd6Smrg}
509174c14cd6Smrg
5092e35772b2Smrg# func_mode_link arg...
5093e35772b2Smrgfunc_mode_link ()
5094e35772b2Smrg{
5095e35772b2Smrg    $opt_debug
5096e35772b2Smrg    case $host in
5097e35772b2Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098e35772b2Smrg      # It is impossible to link a dll without this setting, and
5099e35772b2Smrg      # we shouldn't force the makefile maintainer to figure out
5100e35772b2Smrg      # which system we are compiling for in order to pass an extra
5101e35772b2Smrg      # flag for every libtool invocation.
5102e35772b2Smrg      # allow_undefined=no
510372b676d7Smrg
5104e35772b2Smrg      # FIXME: Unfortunately, there are problems with the above when trying
5105e35772b2Smrg      # to make a dll which has undefined symbols, in which case not
5106e35772b2Smrg      # even a static library is built.  For now, we need to specify
5107e35772b2Smrg      # -no-undefined on the libtool link line when we can be certain
5108e35772b2Smrg      # that all symbols are satisfied, otherwise we get a static library.
5109e35772b2Smrg      allow_undefined=yes
5110e35772b2Smrg      ;;
5111e35772b2Smrg    *)
5112e35772b2Smrg      allow_undefined=yes
5113e35772b2Smrg      ;;
5114e35772b2Smrg    esac
5115e35772b2Smrg    libtool_args=$nonopt
5116e35772b2Smrg    base_compile="$nonopt $@"
5117e35772b2Smrg    compile_command=$nonopt
5118e35772b2Smrg    finalize_command=$nonopt
511972b676d7Smrg
5120e35772b2Smrg    compile_rpath=
5121e35772b2Smrg    finalize_rpath=
5122e35772b2Smrg    compile_shlibpath=
5123e35772b2Smrg    finalize_shlibpath=
5124e35772b2Smrg    convenience=
5125e35772b2Smrg    old_convenience=
5126e35772b2Smrg    deplibs=
5127e35772b2Smrg    old_deplibs=
5128e35772b2Smrg    compiler_flags=
5129e35772b2Smrg    linker_flags=
5130e35772b2Smrg    dllsearchpath=
5131e35772b2Smrg    lib_search_path=`pwd`
5132e35772b2Smrg    inst_prefix_dir=
5133e35772b2Smrg    new_inherited_linker_flags=
513472b676d7Smrg
5135e35772b2Smrg    avoid_version=no
513674c14cd6Smrg    bindir=
5137e35772b2Smrg    dlfiles=
5138e35772b2Smrg    dlprefiles=
5139e35772b2Smrg    dlself=no
5140e35772b2Smrg    export_dynamic=no
5141e35772b2Smrg    export_symbols=
5142e35772b2Smrg    export_symbols_regex=
5143e35772b2Smrg    generated=
5144e35772b2Smrg    libobjs=
5145e35772b2Smrg    ltlibs=
5146e35772b2Smrg    module=no
5147e35772b2Smrg    no_install=no
5148e35772b2Smrg    objs=
5149e35772b2Smrg    non_pic_objects=
5150e35772b2Smrg    precious_files_regex=
5151e35772b2Smrg    prefer_static_libs=no
5152e35772b2Smrg    preload=no
5153e35772b2Smrg    prev=
5154e35772b2Smrg    prevarg=
5155e35772b2Smrg    release=
5156e35772b2Smrg    rpath=
5157e35772b2Smrg    xrpath=
5158e35772b2Smrg    perm_rpath=
5159e35772b2Smrg    temp_rpath=
5160e35772b2Smrg    thread_safe=no
5161e35772b2Smrg    vinfo=
5162e35772b2Smrg    vinfo_number=no
5163e35772b2Smrg    weak_libs=
5164e35772b2Smrg    single_module="${wl}-single_module"
5165e35772b2Smrg    func_infer_tag $base_compile
5166e35772b2Smrg
5167e35772b2Smrg    # We need to know -static, to get the right output filenames.
5168e35772b2Smrg    for arg
5169e35772b2Smrg    do
5170e35772b2Smrg      case $arg in
5171e35772b2Smrg      -shared)
5172e35772b2Smrg	test "$build_libtool_libs" != yes && \
5173e35772b2Smrg	  func_fatal_configuration "can not build a shared library"
5174e35772b2Smrg	build_old_libs=no
5175e35772b2Smrg	break
5176e35772b2Smrg	;;
5177e35772b2Smrg      -all-static | -static | -static-libtool-libs)
5178e35772b2Smrg	case $arg in
5179e35772b2Smrg	-all-static)
5180e35772b2Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181e35772b2Smrg	    func_warning "complete static linking is impossible in this configuration"
5182e35772b2Smrg	  fi
5183e35772b2Smrg	  if test -n "$link_static_flag"; then
5184e35772b2Smrg	    dlopen_self=$dlopen_self_static
5185e35772b2Smrg	  fi
5186e35772b2Smrg	  prefer_static_libs=yes
5187e35772b2Smrg	  ;;
5188e35772b2Smrg	-static)
5189e35772b2Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190e35772b2Smrg	    dlopen_self=$dlopen_self_static
5191e35772b2Smrg	  fi
5192e35772b2Smrg	  prefer_static_libs=built
5193e35772b2Smrg	  ;;
5194e35772b2Smrg	-static-libtool-libs)
5195e35772b2Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196e35772b2Smrg	    dlopen_self=$dlopen_self_static
519772b676d7Smrg	  fi
5198e35772b2Smrg	  prefer_static_libs=yes
5199e35772b2Smrg	  ;;
5200e35772b2Smrg	esac
5201e35772b2Smrg	build_libtool_libs=no
5202e35772b2Smrg	build_old_libs=yes
5203e35772b2Smrg	break
5204e35772b2Smrg	;;
5205e35772b2Smrg      esac
5206e35772b2Smrg    done
520772b676d7Smrg
5208e35772b2Smrg    # See if our shared archives depend on static archives.
5209e35772b2Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
521072b676d7Smrg
5211e35772b2Smrg    # Go through the arguments, transforming them on the way.
5212e35772b2Smrg    while test "$#" -gt 0; do
5213e35772b2Smrg      arg="$1"
5214e35772b2Smrg      shift
5215e35772b2Smrg      func_quote_for_eval "$arg"
5216e35772b2Smrg      qarg=$func_quote_for_eval_unquoted_result
5217e35772b2Smrg      func_append libtool_args " $func_quote_for_eval_result"
521872b676d7Smrg
5219e35772b2Smrg      # If the previous option needs an argument, assign it.
5220e35772b2Smrg      if test -n "$prev"; then
5221e35772b2Smrg	case $prev in
5222e35772b2Smrg	output)
5223e35772b2Smrg	  func_append compile_command " @OUTPUT@"
5224e35772b2Smrg	  func_append finalize_command " @OUTPUT@"
5225e35772b2Smrg	  ;;
5226e35772b2Smrg	esac
522772b676d7Smrg
5228e35772b2Smrg	case $prev in
522974c14cd6Smrg	bindir)
523074c14cd6Smrg	  bindir="$arg"
523174c14cd6Smrg	  prev=
523274c14cd6Smrg	  continue
523374c14cd6Smrg	  ;;
5234e35772b2Smrg	dlfiles|dlprefiles)
5235e35772b2Smrg	  if test "$preload" = no; then
5236e35772b2Smrg	    # Add the symbol object into the linking commands.
5237e35772b2Smrg	    func_append compile_command " @SYMFILE@"
5238e35772b2Smrg	    func_append finalize_command " @SYMFILE@"
5239e35772b2Smrg	    preload=yes
5240e35772b2Smrg	  fi
5241e35772b2Smrg	  case $arg in
5242e35772b2Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5243e35772b2Smrg	  force)
5244e35772b2Smrg	    if test "$dlself" = no; then
5245e35772b2Smrg	      dlself=needless
5246e35772b2Smrg	      export_dynamic=yes
5247e35772b2Smrg	    fi
5248e35772b2Smrg	    prev=
5249e35772b2Smrg	    continue
5250e35772b2Smrg	    ;;
5251e35772b2Smrg	  self)
5252e35772b2Smrg	    if test "$prev" = dlprefiles; then
5253e35772b2Smrg	      dlself=yes
5254e35772b2Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255e35772b2Smrg	      dlself=yes
525672b676d7Smrg	    else
5257e35772b2Smrg	      dlself=needless
5258e35772b2Smrg	      export_dynamic=yes
525972b676d7Smrg	    fi
5260e35772b2Smrg	    prev=
5261e35772b2Smrg	    continue
5262e35772b2Smrg	    ;;
5263e35772b2Smrg	  *)
5264e35772b2Smrg	    if test "$prev" = dlfiles; then
526574c14cd6Smrg	      func_append dlfiles " $arg"
526672b676d7Smrg	    else
526774c14cd6Smrg	      func_append dlprefiles " $arg"
526872b676d7Smrg	    fi
5269e35772b2Smrg	    prev=
5270e35772b2Smrg	    continue
5271e35772b2Smrg	    ;;
5272e35772b2Smrg	  esac
5273e35772b2Smrg	  ;;
5274e35772b2Smrg	expsyms)
5275e35772b2Smrg	  export_symbols="$arg"
5276e35772b2Smrg	  test -f "$arg" \
5277e35772b2Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278e35772b2Smrg	  prev=
5279e35772b2Smrg	  continue
5280e35772b2Smrg	  ;;
5281e35772b2Smrg	expsyms_regex)
5282e35772b2Smrg	  export_symbols_regex="$arg"
5283e35772b2Smrg	  prev=
5284e35772b2Smrg	  continue
5285e35772b2Smrg	  ;;
5286e35772b2Smrg	framework)
528772b676d7Smrg	  case $host in
5288e35772b2Smrg	    *-*-darwin*)
5289e35772b2Smrg	      case "$deplibs " in
5290e35772b2Smrg		*" $qarg.ltframework "*) ;;
529174c14cd6Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292e35772b2Smrg		   ;;
5293e35772b2Smrg	      esac
5294e35772b2Smrg	      ;;
529572b676d7Smrg	  esac
5296e35772b2Smrg	  prev=
5297e35772b2Smrg	  continue
529872b676d7Smrg	  ;;
5299e35772b2Smrg	inst_prefix)
5300e35772b2Smrg	  inst_prefix_dir="$arg"
5301e35772b2Smrg	  prev=
5302e35772b2Smrg	  continue
530372b676d7Smrg	  ;;
5304e35772b2Smrg	objectlist)
5305e35772b2Smrg	  if test -f "$arg"; then
5306e35772b2Smrg	    save_arg=$arg
5307e35772b2Smrg	    moreargs=
5308e35772b2Smrg	    for fil in `cat "$save_arg"`
5309e35772b2Smrg	    do
531074c14cd6Smrg#	      func_append moreargs " $fil"
5311e35772b2Smrg	      arg=$fil
5312e35772b2Smrg	      # A libtool-controlled object.
531372b676d7Smrg
5314e35772b2Smrg	      # Check to see that this really is a libtool object.
5315e35772b2Smrg	      if func_lalib_unsafe_p "$arg"; then
5316e35772b2Smrg		pic_object=
5317e35772b2Smrg		non_pic_object=
531872b676d7Smrg
5319e35772b2Smrg		# Read the .lo file
5320e35772b2Smrg		func_source "$arg"
532172b676d7Smrg
5322e35772b2Smrg		if test -z "$pic_object" ||
5323e35772b2Smrg		   test -z "$non_pic_object" ||
5324e35772b2Smrg		   test "$pic_object" = none &&
5325e35772b2Smrg		   test "$non_pic_object" = none; then
5326e35772b2Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327e35772b2Smrg		fi
532872b676d7Smrg
5329e35772b2Smrg		# Extract subdirectory from the argument.
5330e35772b2Smrg		func_dirname "$arg" "/" ""
5331e35772b2Smrg		xdir="$func_dirname_result"
533272b676d7Smrg
5333e35772b2Smrg		if test "$pic_object" != none; then
5334e35772b2Smrg		  # Prepend the subdirectory the object is found in.
5335e35772b2Smrg		  pic_object="$xdir$pic_object"
533672b676d7Smrg
5337e35772b2Smrg		  if test "$prev" = dlfiles; then
5338e35772b2Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
533974c14cd6Smrg		      func_append dlfiles " $pic_object"
5340e35772b2Smrg		      prev=
5341e35772b2Smrg		      continue
5342e35772b2Smrg		    else
5343e35772b2Smrg		      # If libtool objects are unsupported, then we need to preload.
5344e35772b2Smrg		      prev=dlprefiles
5345e35772b2Smrg		    fi
5346e35772b2Smrg		  fi
534772b676d7Smrg
5348e35772b2Smrg		  # CHECK ME:  I think I busted this.  -Ossama
5349e35772b2Smrg		  if test "$prev" = dlprefiles; then
5350e35772b2Smrg		    # Preload the old-style object.
535174c14cd6Smrg		    func_append dlprefiles " $pic_object"
5352e35772b2Smrg		    prev=
5353e35772b2Smrg		  fi
535472b676d7Smrg
5355e35772b2Smrg		  # A PIC object.
5356e35772b2Smrg		  func_append libobjs " $pic_object"
5357e35772b2Smrg		  arg="$pic_object"
5358e35772b2Smrg		fi
535972b676d7Smrg
5360e35772b2Smrg		# Non-PIC object.
5361e35772b2Smrg		if test "$non_pic_object" != none; then
5362e35772b2Smrg		  # Prepend the subdirectory the object is found in.
5363e35772b2Smrg		  non_pic_object="$xdir$non_pic_object"
536472b676d7Smrg
5365e35772b2Smrg		  # A standard non-PIC object
5366e35772b2Smrg		  func_append non_pic_objects " $non_pic_object"
5367e35772b2Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368e35772b2Smrg		    arg="$non_pic_object"
5369e35772b2Smrg		  fi
5370e35772b2Smrg		else
5371e35772b2Smrg		  # If the PIC object exists, use it instead.
5372e35772b2Smrg		  # $xdir was prepended to $pic_object above.
5373e35772b2Smrg		  non_pic_object="$pic_object"
5374e35772b2Smrg		  func_append non_pic_objects " $non_pic_object"
5375e35772b2Smrg		fi
5376e35772b2Smrg	      else
5377e35772b2Smrg		# Only an error if not doing a dry-run.
5378e35772b2Smrg		if $opt_dry_run; then
5379e35772b2Smrg		  # Extract subdirectory from the argument.
5380e35772b2Smrg		  func_dirname "$arg" "/" ""
5381e35772b2Smrg		  xdir="$func_dirname_result"
5382e35772b2Smrg
5383e35772b2Smrg		  func_lo2o "$arg"
5384e35772b2Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385e35772b2Smrg		  non_pic_object=$xdir$func_lo2o_result
5386e35772b2Smrg		  func_append libobjs " $pic_object"
5387e35772b2Smrg		  func_append non_pic_objects " $non_pic_object"
5388e35772b2Smrg	        else
5389e35772b2Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390e35772b2Smrg		fi
5391e35772b2Smrg	      fi
5392e35772b2Smrg	    done
539372b676d7Smrg	  else
5394e35772b2Smrg	    func_fatal_error "link input file \`$arg' does not exist"
539572b676d7Smrg	  fi
5396e35772b2Smrg	  arg=$save_arg
5397e35772b2Smrg	  prev=
5398e35772b2Smrg	  continue
5399e35772b2Smrg	  ;;
5400e35772b2Smrg	precious_regex)
5401e35772b2Smrg	  precious_files_regex="$arg"
5402e35772b2Smrg	  prev=
5403e35772b2Smrg	  continue
5404e35772b2Smrg	  ;;
5405e35772b2Smrg	release)
5406e35772b2Smrg	  release="-$arg"
5407e35772b2Smrg	  prev=
5408e35772b2Smrg	  continue
5409e35772b2Smrg	  ;;
5410e35772b2Smrg	rpath | xrpath)
5411e35772b2Smrg	  # We need an absolute path.
5412e35772b2Smrg	  case $arg in
5413e35772b2Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414e35772b2Smrg	  *)
5415e35772b2Smrg	    func_fatal_error "only absolute run-paths are allowed"
5416e35772b2Smrg	    ;;
5417e35772b2Smrg	  esac
5418e35772b2Smrg	  if test "$prev" = rpath; then
5419e35772b2Smrg	    case "$rpath " in
5420e35772b2Smrg	    *" $arg "*) ;;
542174c14cd6Smrg	    *) func_append rpath " $arg" ;;
5422e35772b2Smrg	    esac
542372b676d7Smrg	  else
5424e35772b2Smrg	    case "$xrpath " in
5425e35772b2Smrg	    *" $arg "*) ;;
542674c14cd6Smrg	    *) func_append xrpath " $arg" ;;
5427e35772b2Smrg	    esac
542872b676d7Smrg	  fi
5429e35772b2Smrg	  prev=
5430e35772b2Smrg	  continue
5431e35772b2Smrg	  ;;
5432e35772b2Smrg	shrext)
5433e35772b2Smrg	  shrext_cmds="$arg"
5434e35772b2Smrg	  prev=
5435e35772b2Smrg	  continue
5436e35772b2Smrg	  ;;
5437e35772b2Smrg	weak)
543874c14cd6Smrg	  func_append weak_libs " $arg"
5439e35772b2Smrg	  prev=
5440e35772b2Smrg	  continue
5441e35772b2Smrg	  ;;
5442e35772b2Smrg	xcclinker)
544374c14cd6Smrg	  func_append linker_flags " $qarg"
544474c14cd6Smrg	  func_append compiler_flags " $qarg"
5445e35772b2Smrg	  prev=
5446e35772b2Smrg	  func_append compile_command " $qarg"
5447e35772b2Smrg	  func_append finalize_command " $qarg"
5448e35772b2Smrg	  continue
5449e35772b2Smrg	  ;;
5450e35772b2Smrg	xcompiler)
545174c14cd6Smrg	  func_append compiler_flags " $qarg"
5452e35772b2Smrg	  prev=
5453e35772b2Smrg	  func_append compile_command " $qarg"
5454e35772b2Smrg	  func_append finalize_command " $qarg"
5455e35772b2Smrg	  continue
5456e35772b2Smrg	  ;;
5457e35772b2Smrg	xlinker)
545874c14cd6Smrg	  func_append linker_flags " $qarg"
545974c14cd6Smrg	  func_append compiler_flags " $wl$qarg"
5460e35772b2Smrg	  prev=
5461e35772b2Smrg	  func_append compile_command " $wl$qarg"
5462e35772b2Smrg	  func_append finalize_command " $wl$qarg"
5463e35772b2Smrg	  continue
5464e35772b2Smrg	  ;;
5465e35772b2Smrg	*)
5466e35772b2Smrg	  eval "$prev=\"\$arg\""
5467e35772b2Smrg	  prev=
5468e35772b2Smrg	  continue
5469e35772b2Smrg	  ;;
547072b676d7Smrg	esac
5471e35772b2Smrg      fi # test -n "$prev"
547272b676d7Smrg
5473e35772b2Smrg      prevarg="$arg"
547472b676d7Smrg
5475e35772b2Smrg      case $arg in
5476e35772b2Smrg      -all-static)
5477e35772b2Smrg	if test -n "$link_static_flag"; then
5478e35772b2Smrg	  # See comment for -static flag below, for more details.
5479e35772b2Smrg	  func_append compile_command " $link_static_flag"
5480e35772b2Smrg	  func_append finalize_command " $link_static_flag"
5481e35772b2Smrg	fi
5482e35772b2Smrg	continue
5483e35772b2Smrg	;;
548472b676d7Smrg
5485e35772b2Smrg      -allow-undefined)
5486e35772b2Smrg	# FIXME: remove this flag sometime in the future.
5487e35772b2Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488e35772b2Smrg	;;
548972b676d7Smrg
5490e35772b2Smrg      -avoid-version)
5491e35772b2Smrg	avoid_version=yes
5492e35772b2Smrg	continue
5493e35772b2Smrg	;;
549472b676d7Smrg
549574c14cd6Smrg      -bindir)
549674c14cd6Smrg	prev=bindir
549774c14cd6Smrg	continue
549874c14cd6Smrg	;;
549974c14cd6Smrg
5500e35772b2Smrg      -dlopen)
5501e35772b2Smrg	prev=dlfiles
5502e35772b2Smrg	continue
5503e35772b2Smrg	;;
550472b676d7Smrg
5505e35772b2Smrg      -dlpreopen)
5506e35772b2Smrg	prev=dlprefiles
5507e35772b2Smrg	continue
5508e35772b2Smrg	;;
550972b676d7Smrg
5510e35772b2Smrg      -export-dynamic)
5511e35772b2Smrg	export_dynamic=yes
5512e35772b2Smrg	continue
5513e35772b2Smrg	;;
551472b676d7Smrg
5515e35772b2Smrg      -export-symbols | -export-symbols-regex)
5516e35772b2Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517e35772b2Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518e35772b2Smrg	fi
5519e35772b2Smrg	if test "X$arg" = "X-export-symbols"; then
5520e35772b2Smrg	  prev=expsyms
5521e35772b2Smrg	else
5522e35772b2Smrg	  prev=expsyms_regex
5523e35772b2Smrg	fi
5524e35772b2Smrg	continue
5525e35772b2Smrg	;;
552672b676d7Smrg
5527e35772b2Smrg      -framework)
5528e35772b2Smrg	prev=framework
5529e35772b2Smrg	continue
5530e35772b2Smrg	;;
553172b676d7Smrg
5532e35772b2Smrg      -inst-prefix-dir)
5533e35772b2Smrg	prev=inst_prefix
5534e35772b2Smrg	continue
5535e35772b2Smrg	;;
553672b676d7Smrg
5537e35772b2Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538e35772b2Smrg      # so, if we see these flags be careful not to treat them like -L
5539e35772b2Smrg      -L[A-Z][A-Z]*:*)
5540e35772b2Smrg	case $with_gcc/$host in
5541e35772b2Smrg	no/*-*-irix* | /*-*-irix*)
5542e35772b2Smrg	  func_append compile_command " $arg"
5543e35772b2Smrg	  func_append finalize_command " $arg"
5544e35772b2Smrg	  ;;
5545e35772b2Smrg	esac
5546e35772b2Smrg	continue
5547e35772b2Smrg	;;
554872b676d7Smrg
5549e35772b2Smrg      -L*)
555074c14cd6Smrg	func_stripname "-L" '' "$arg"
555174c14cd6Smrg	if test -z "$func_stripname_result"; then
5552e35772b2Smrg	  if test "$#" -gt 0; then
5553e35772b2Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554e35772b2Smrg	  else
5555e35772b2Smrg	    func_fatal_error "need path for \`-L' option"
5556e35772b2Smrg	  fi
5557e35772b2Smrg	fi
555874c14cd6Smrg	func_resolve_sysroot "$func_stripname_result"
555974c14cd6Smrg	dir=$func_resolve_sysroot_result
5560e35772b2Smrg	# We need an absolute path.
5561e35772b2Smrg	case $dir in
5562e35772b2Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563e35772b2Smrg	*)
5564e35772b2Smrg	  absdir=`cd "$dir" && pwd`
5565e35772b2Smrg	  test -z "$absdir" && \
5566e35772b2Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567e35772b2Smrg	  dir="$absdir"
5568e35772b2Smrg	  ;;
5569e35772b2Smrg	esac
5570e35772b2Smrg	case "$deplibs " in
557174c14cd6Smrg	*" -L$dir "* | *" $arg "*)
557274c14cd6Smrg	  # Will only happen for absolute or sysroot arguments
557374c14cd6Smrg	  ;;
5574e35772b2Smrg	*)
557574c14cd6Smrg	  # Preserve sysroot, but never include relative directories
557674c14cd6Smrg	  case $dir in
557774c14cd6Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
557874c14cd6Smrg	    *) func_append deplibs " -L$dir" ;;
557974c14cd6Smrg	  esac
558074c14cd6Smrg	  func_append lib_search_path " $dir"
5581e35772b2Smrg	  ;;
5582e35772b2Smrg	esac
5583e35772b2Smrg	case $host in
5584e35772b2Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
558574c14cd6Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586e35772b2Smrg	  case :$dllsearchpath: in
5587e35772b2Smrg	  *":$dir:"*) ;;
5588e35772b2Smrg	  ::) dllsearchpath=$dir;;
558974c14cd6Smrg	  *) func_append dllsearchpath ":$dir";;
5590e35772b2Smrg	  esac
5591e35772b2Smrg	  case :$dllsearchpath: in
5592e35772b2Smrg	  *":$testbindir:"*) ;;
5593e35772b2Smrg	  ::) dllsearchpath=$testbindir;;
559474c14cd6Smrg	  *) func_append dllsearchpath ":$testbindir";;
5595e35772b2Smrg	  esac
5596e35772b2Smrg	  ;;
5597e35772b2Smrg	esac
5598e35772b2Smrg	continue
5599e35772b2Smrg	;;
560072b676d7Smrg
5601e35772b2Smrg      -l*)
5602e35772b2Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603e35772b2Smrg	  case $host in
560474c14cd6Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605e35772b2Smrg	    # These systems don't actually have a C or math library (as such)
5606e35772b2Smrg	    continue
5607e35772b2Smrg	    ;;
5608e35772b2Smrg	  *-*-os2*)
5609e35772b2Smrg	    # These systems don't actually have a C library (as such)
5610e35772b2Smrg	    test "X$arg" = "X-lc" && continue
5611e35772b2Smrg	    ;;
5612e35772b2Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613e35772b2Smrg	    # Do not include libc due to us having libc/libc_r.
5614e35772b2Smrg	    test "X$arg" = "X-lc" && continue
5615e35772b2Smrg	    ;;
5616e35772b2Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617e35772b2Smrg	    # Rhapsody C and math libraries are in the System framework
561874c14cd6Smrg	    func_append deplibs " System.ltframework"
5619e35772b2Smrg	    continue
5620e35772b2Smrg	    ;;
5621e35772b2Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622e35772b2Smrg	    # Causes problems with __ctype
5623e35772b2Smrg	    test "X$arg" = "X-lc" && continue
5624e35772b2Smrg	    ;;
5625e35772b2Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626e35772b2Smrg	    # Compiler inserts libc in the correct place for threads to work
5627e35772b2Smrg	    test "X$arg" = "X-lc" && continue
5628e35772b2Smrg	    ;;
5629e35772b2Smrg	  esac
5630e35772b2Smrg	elif test "X$arg" = "X-lc_r"; then
5631e35772b2Smrg	 case $host in
5632e35772b2Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633e35772b2Smrg	   # Do not include libc_r directly, use -pthread flag.
5634e35772b2Smrg	   continue
5635e35772b2Smrg	   ;;
5636e35772b2Smrg	 esac
5637e35772b2Smrg	fi
563874c14cd6Smrg	func_append deplibs " $arg"
5639e35772b2Smrg	continue
5640e35772b2Smrg	;;
564172b676d7Smrg
5642e35772b2Smrg      -module)
5643e35772b2Smrg	module=yes
5644e35772b2Smrg	continue
5645e35772b2Smrg	;;
564672b676d7Smrg
5647e35772b2Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648e35772b2Smrg      # classes, name mangling, and exception handling.
5649e35772b2Smrg      # Darwin uses the -arch flag to determine output architecture.
565074c14cd6Smrg      -model|-arch|-isysroot|--sysroot)
565174c14cd6Smrg	func_append compiler_flags " $arg"
5652e35772b2Smrg	func_append compile_command " $arg"
5653e35772b2Smrg	func_append finalize_command " $arg"
5654e35772b2Smrg	prev=xcompiler
5655e35772b2Smrg	continue
5656e35772b2Smrg	;;
565772b676d7Smrg
565874c14cd6Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
565974c14cd6Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
566074c14cd6Smrg	func_append compiler_flags " $arg"
5661e35772b2Smrg	func_append compile_command " $arg"
5662e35772b2Smrg	func_append finalize_command " $arg"
5663e35772b2Smrg	case "$new_inherited_linker_flags " in
5664e35772b2Smrg	    *" $arg "*) ;;
566574c14cd6Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666e35772b2Smrg	esac
5667e35772b2Smrg	continue
5668e35772b2Smrg	;;
566972b676d7Smrg
5670e35772b2Smrg      -multi_module)
5671e35772b2Smrg	single_module="${wl}-multi_module"
5672e35772b2Smrg	continue
5673e35772b2Smrg	;;
567472b676d7Smrg
5675e35772b2Smrg      -no-fast-install)
5676e35772b2Smrg	fast_install=no
5677e35772b2Smrg	continue
5678e35772b2Smrg	;;
567972b676d7Smrg
5680e35772b2Smrg      -no-install)
5681e35772b2Smrg	case $host in
5682e35772b2Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683e35772b2Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5684e35772b2Smrg	  # and Darwin in order for the loader to find any dlls it needs.
5685e35772b2Smrg	  func_warning "\`-no-install' is ignored for $host"
5686e35772b2Smrg	  func_warning "assuming \`-no-fast-install' instead"
5687e35772b2Smrg	  fast_install=no
5688e35772b2Smrg	  ;;
5689e35772b2Smrg	*) no_install=yes ;;
5690e35772b2Smrg	esac
5691e35772b2Smrg	continue
5692e35772b2Smrg	;;
569372b676d7Smrg
5694e35772b2Smrg      -no-undefined)
5695e35772b2Smrg	allow_undefined=no
5696e35772b2Smrg	continue
5697e35772b2Smrg	;;
569872b676d7Smrg
5699e35772b2Smrg      -objectlist)
5700e35772b2Smrg	prev=objectlist
5701e35772b2Smrg	continue
5702e35772b2Smrg	;;
570372b676d7Smrg
5704e35772b2Smrg      -o) prev=output ;;
570572b676d7Smrg
5706e35772b2Smrg      -precious-files-regex)
5707e35772b2Smrg	prev=precious_regex
5708e35772b2Smrg	continue
5709e35772b2Smrg	;;
571072b676d7Smrg
5711e35772b2Smrg      -release)
5712e35772b2Smrg	prev=release
5713e35772b2Smrg	continue
5714e35772b2Smrg	;;
571572b676d7Smrg
5716e35772b2Smrg      -rpath)
5717e35772b2Smrg	prev=rpath
5718e35772b2Smrg	continue
5719e35772b2Smrg	;;
572072b676d7Smrg
5721e35772b2Smrg      -R)
5722e35772b2Smrg	prev=xrpath
5723e35772b2Smrg	continue
5724e35772b2Smrg	;;
572572b676d7Smrg
5726e35772b2Smrg      -R*)
5727e35772b2Smrg	func_stripname '-R' '' "$arg"
5728e35772b2Smrg	dir=$func_stripname_result
5729e35772b2Smrg	# We need an absolute path.
5730e35772b2Smrg	case $dir in
5731e35772b2Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
573274c14cd6Smrg	=*)
573374c14cd6Smrg	  func_stripname '=' '' "$dir"
573474c14cd6Smrg	  dir=$lt_sysroot$func_stripname_result
573574c14cd6Smrg	  ;;
5736e35772b2Smrg	*)
5737e35772b2Smrg	  func_fatal_error "only absolute run-paths are allowed"
5738e35772b2Smrg	  ;;
5739e35772b2Smrg	esac
5740e35772b2Smrg	case "$xrpath " in
5741e35772b2Smrg	*" $dir "*) ;;
574274c14cd6Smrg	*) func_append xrpath " $dir" ;;
5743e35772b2Smrg	esac
5744e35772b2Smrg	continue
5745e35772b2Smrg	;;
574672b676d7Smrg
5747e35772b2Smrg      -shared)
5748e35772b2Smrg	# The effects of -shared are defined in a previous loop.
5749e35772b2Smrg	continue
5750e35772b2Smrg	;;
575172b676d7Smrg
5752e35772b2Smrg      -shrext)
5753e35772b2Smrg	prev=shrext
5754e35772b2Smrg	continue
5755e35772b2Smrg	;;
575672b676d7Smrg
5757e35772b2Smrg      -static | -static-libtool-libs)
5758e35772b2Smrg	# The effects of -static are defined in a previous loop.
5759e35772b2Smrg	# We used to do the same as -all-static on platforms that
5760e35772b2Smrg	# didn't have a PIC flag, but the assumption that the effects
5761e35772b2Smrg	# would be equivalent was wrong.  It would break on at least
5762e35772b2Smrg	# Digital Unix and AIX.
5763e35772b2Smrg	continue
5764e35772b2Smrg	;;
576572b676d7Smrg
5766e35772b2Smrg      -thread-safe)
5767e35772b2Smrg	thread_safe=yes
5768e35772b2Smrg	continue
5769e35772b2Smrg	;;
577072b676d7Smrg
5771e35772b2Smrg      -version-info)
5772e35772b2Smrg	prev=vinfo
5773e35772b2Smrg	continue
5774e35772b2Smrg	;;
577572b676d7Smrg
5776e35772b2Smrg      -version-number)
5777e35772b2Smrg	prev=vinfo
5778e35772b2Smrg	vinfo_number=yes
5779e35772b2Smrg	continue
5780e35772b2Smrg	;;
578172b676d7Smrg
5782e35772b2Smrg      -weak)
5783e35772b2Smrg        prev=weak
5784e35772b2Smrg	continue
5785e35772b2Smrg	;;
578672b676d7Smrg
5787e35772b2Smrg      -Wc,*)
5788e35772b2Smrg	func_stripname '-Wc,' '' "$arg"
5789e35772b2Smrg	args=$func_stripname_result
5790e35772b2Smrg	arg=
5791e35772b2Smrg	save_ifs="$IFS"; IFS=','
5792e35772b2Smrg	for flag in $args; do
5793e35772b2Smrg	  IFS="$save_ifs"
5794e35772b2Smrg          func_quote_for_eval "$flag"
579574c14cd6Smrg	  func_append arg " $func_quote_for_eval_result"
579674c14cd6Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797e35772b2Smrg	done
5798e35772b2Smrg	IFS="$save_ifs"
5799e35772b2Smrg	func_stripname ' ' '' "$arg"
5800e35772b2Smrg	arg=$func_stripname_result
5801e35772b2Smrg	;;
580272b676d7Smrg
5803e35772b2Smrg      -Wl,*)
5804e35772b2Smrg	func_stripname '-Wl,' '' "$arg"
5805e35772b2Smrg	args=$func_stripname_result
5806e35772b2Smrg	arg=
5807e35772b2Smrg	save_ifs="$IFS"; IFS=','
5808e35772b2Smrg	for flag in $args; do
5809e35772b2Smrg	  IFS="$save_ifs"
5810e35772b2Smrg          func_quote_for_eval "$flag"
581174c14cd6Smrg	  func_append arg " $wl$func_quote_for_eval_result"
581274c14cd6Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
581374c14cd6Smrg	  func_append linker_flags " $func_quote_for_eval_result"
5814e35772b2Smrg	done
5815e35772b2Smrg	IFS="$save_ifs"
5816e35772b2Smrg	func_stripname ' ' '' "$arg"
5817e35772b2Smrg	arg=$func_stripname_result
5818e35772b2Smrg	;;
581972b676d7Smrg
5820e35772b2Smrg      -Xcompiler)
5821e35772b2Smrg	prev=xcompiler
5822e35772b2Smrg	continue
5823e35772b2Smrg	;;
582472b676d7Smrg
5825e35772b2Smrg      -Xlinker)
5826e35772b2Smrg	prev=xlinker
5827e35772b2Smrg	continue
5828e35772b2Smrg	;;
582972b676d7Smrg
5830e35772b2Smrg      -XCClinker)
5831e35772b2Smrg	prev=xcclinker
5832e35772b2Smrg	continue
5833e35772b2Smrg	;;
583472b676d7Smrg
5835e35772b2Smrg      # -msg_* for osf cc
5836e35772b2Smrg      -msg_*)
5837e35772b2Smrg	func_quote_for_eval "$arg"
5838e35772b2Smrg	arg="$func_quote_for_eval_result"
5839e35772b2Smrg	;;
584072b676d7Smrg
584174c14cd6Smrg      # Flags to be passed through unchanged, with rationale:
584274c14cd6Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
584374c14cd6Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
584474c14cd6Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
584574c14cd6Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
584674c14cd6Smrg      # -q*                  compiler args for the IBM compiler
584774c14cd6Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
584874c14cd6Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
584974c14cd6Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
585074c14cd6Smrg      # @file                GCC response files
585174c14cd6Smrg      # -tp=*                Portland pgcc target processor selection
585274c14cd6Smrg      # --sysroot=*          for sysroot support
585374c14cd6Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854e35772b2Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
585574c14cd6Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
585674c14cd6Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857e35772b2Smrg        func_quote_for_eval "$arg"
5858e35772b2Smrg	arg="$func_quote_for_eval_result"
5859e35772b2Smrg        func_append compile_command " $arg"
5860e35772b2Smrg        func_append finalize_command " $arg"
586174c14cd6Smrg        func_append compiler_flags " $arg"
5862e35772b2Smrg        continue
5863e35772b2Smrg        ;;
586472b676d7Smrg
5865e35772b2Smrg      # Some other compiler flag.
5866e35772b2Smrg      -* | +*)
5867e35772b2Smrg        func_quote_for_eval "$arg"
5868e35772b2Smrg	arg="$func_quote_for_eval_result"
5869e35772b2Smrg	;;
587072b676d7Smrg
5871e35772b2Smrg      *.$objext)
5872e35772b2Smrg	# A standard object.
587374c14cd6Smrg	func_append objs " $arg"
5874e35772b2Smrg	;;
587572b676d7Smrg
5876e35772b2Smrg      *.lo)
5877e35772b2Smrg	# A libtool-controlled object.
587872b676d7Smrg
5879e35772b2Smrg	# Check to see that this really is a libtool object.
5880e35772b2Smrg	if func_lalib_unsafe_p "$arg"; then
5881e35772b2Smrg	  pic_object=
5882e35772b2Smrg	  non_pic_object=
588372b676d7Smrg
5884e35772b2Smrg	  # Read the .lo file
5885e35772b2Smrg	  func_source "$arg"
588672b676d7Smrg
5887e35772b2Smrg	  if test -z "$pic_object" ||
5888e35772b2Smrg	     test -z "$non_pic_object" ||
5889e35772b2Smrg	     test "$pic_object" = none &&
5890e35772b2Smrg	     test "$non_pic_object" = none; then
5891e35772b2Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892e35772b2Smrg	  fi
589372b676d7Smrg
5894e35772b2Smrg	  # Extract subdirectory from the argument.
5895e35772b2Smrg	  func_dirname "$arg" "/" ""
5896e35772b2Smrg	  xdir="$func_dirname_result"
58971fd23544Smrg
5898e35772b2Smrg	  if test "$pic_object" != none; then
5899e35772b2Smrg	    # Prepend the subdirectory the object is found in.
5900e35772b2Smrg	    pic_object="$xdir$pic_object"
590172b676d7Smrg
5902e35772b2Smrg	    if test "$prev" = dlfiles; then
5903e35772b2Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
590474c14cd6Smrg		func_append dlfiles " $pic_object"
5905e35772b2Smrg		prev=
5906e35772b2Smrg		continue
5907e35772b2Smrg	      else
5908e35772b2Smrg		# If libtool objects are unsupported, then we need to preload.
5909e35772b2Smrg		prev=dlprefiles
5910e35772b2Smrg	      fi
5911e35772b2Smrg	    fi
591272b676d7Smrg
5913e35772b2Smrg	    # CHECK ME:  I think I busted this.  -Ossama
5914e35772b2Smrg	    if test "$prev" = dlprefiles; then
5915e35772b2Smrg	      # Preload the old-style object.
591674c14cd6Smrg	      func_append dlprefiles " $pic_object"
5917e35772b2Smrg	      prev=
5918e35772b2Smrg	    fi
591972b676d7Smrg
5920e35772b2Smrg	    # A PIC object.
5921e35772b2Smrg	    func_append libobjs " $pic_object"
5922e35772b2Smrg	    arg="$pic_object"
5923e35772b2Smrg	  fi
592472b676d7Smrg
5925e35772b2Smrg	  # Non-PIC object.
5926e35772b2Smrg	  if test "$non_pic_object" != none; then
5927e35772b2Smrg	    # Prepend the subdirectory the object is found in.
5928e35772b2Smrg	    non_pic_object="$xdir$non_pic_object"
592972b676d7Smrg
5930e35772b2Smrg	    # A standard non-PIC object
5931e35772b2Smrg	    func_append non_pic_objects " $non_pic_object"
5932e35772b2Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933e35772b2Smrg	      arg="$non_pic_object"
5934e35772b2Smrg	    fi
5935e35772b2Smrg	  else
5936e35772b2Smrg	    # If the PIC object exists, use it instead.
5937e35772b2Smrg	    # $xdir was prepended to $pic_object above.
5938e35772b2Smrg	    non_pic_object="$pic_object"
5939e35772b2Smrg	    func_append non_pic_objects " $non_pic_object"
5940e35772b2Smrg	  fi
5941e35772b2Smrg	else
5942e35772b2Smrg	  # Only an error if not doing a dry-run.
5943e35772b2Smrg	  if $opt_dry_run; then
5944e35772b2Smrg	    # Extract subdirectory from the argument.
5945e35772b2Smrg	    func_dirname "$arg" "/" ""
5946e35772b2Smrg	    xdir="$func_dirname_result"
5947e35772b2Smrg
5948e35772b2Smrg	    func_lo2o "$arg"
5949e35772b2Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950e35772b2Smrg	    non_pic_object=$xdir$func_lo2o_result
5951e35772b2Smrg	    func_append libobjs " $pic_object"
5952e35772b2Smrg	    func_append non_pic_objects " $non_pic_object"
5953e35772b2Smrg	  else
5954e35772b2Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955e35772b2Smrg	  fi
5956e35772b2Smrg	fi
5957e35772b2Smrg	;;
595872b676d7Smrg
5959e35772b2Smrg      *.$libext)
5960e35772b2Smrg	# An archive.
596174c14cd6Smrg	func_append deplibs " $arg"
596274c14cd6Smrg	func_append old_deplibs " $arg"
5963e35772b2Smrg	continue
5964e35772b2Smrg	;;
5965e35772b2Smrg
5966e35772b2Smrg      *.la)
5967e35772b2Smrg	# A libtool-controlled library.
5968e35772b2Smrg
596974c14cd6Smrg	func_resolve_sysroot "$arg"
5970e35772b2Smrg	if test "$prev" = dlfiles; then
5971e35772b2Smrg	  # This library was specified with -dlopen.
597274c14cd6Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973e35772b2Smrg	  prev=
5974e35772b2Smrg	elif test "$prev" = dlprefiles; then
5975e35772b2Smrg	  # The library was specified with -dlpreopen.
597674c14cd6Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977e35772b2Smrg	  prev=
5978e35772b2Smrg	else
597974c14cd6Smrg	  func_append deplibs " $func_resolve_sysroot_result"
5980e35772b2Smrg	fi
5981e35772b2Smrg	continue
5982e35772b2Smrg	;;
5983e35772b2Smrg
5984e35772b2Smrg      # Some other compiler argument.
5985e35772b2Smrg      *)
5986e35772b2Smrg	# Unknown arguments in both finalize_command and compile_command need
5987e35772b2Smrg	# to be aesthetically quoted because they are evaled later.
5988e35772b2Smrg	func_quote_for_eval "$arg"
5989e35772b2Smrg	arg="$func_quote_for_eval_result"
5990e35772b2Smrg	;;
5991e35772b2Smrg      esac # arg
5992e35772b2Smrg
5993e35772b2Smrg      # Now actually substitute the argument into the commands.
5994e35772b2Smrg      if test -n "$arg"; then
5995e35772b2Smrg	func_append compile_command " $arg"
5996e35772b2Smrg	func_append finalize_command " $arg"
5997e35772b2Smrg      fi
5998e35772b2Smrg    done # argument parsing loop
5999e35772b2Smrg
6000e35772b2Smrg    test -n "$prev" && \
6001e35772b2Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002e35772b2Smrg
6003e35772b2Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004e35772b2Smrg      eval arg=\"$export_dynamic_flag_spec\"
6005e35772b2Smrg      func_append compile_command " $arg"
6006e35772b2Smrg      func_append finalize_command " $arg"
6007e35772b2Smrg    fi
6008e35772b2Smrg
6009e35772b2Smrg    oldlibs=
6010e35772b2Smrg    # calculate the name of the file, without its directory
6011e35772b2Smrg    func_basename "$output"
6012e35772b2Smrg    outputname="$func_basename_result"
6013e35772b2Smrg    libobjs_save="$libobjs"
6014e35772b2Smrg
6015e35772b2Smrg    if test -n "$shlibpath_var"; then
6016e35772b2Smrg      # get the directories listed in $shlibpath_var
601774c14cd6Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018e35772b2Smrg    else
6019e35772b2Smrg      shlib_search_path=
6020e35772b2Smrg    fi
6021e35772b2Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022e35772b2Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023e35772b2Smrg
6024e35772b2Smrg    func_dirname "$output" "/" ""
6025e35772b2Smrg    output_objdir="$func_dirname_result$objdir"
602674c14cd6Smrg    func_to_tool_file "$output_objdir/"
602774c14cd6Smrg    tool_output_objdir=$func_to_tool_file_result
6028e35772b2Smrg    # Create the object directory.
6029e35772b2Smrg    func_mkdir_p "$output_objdir"
6030e35772b2Smrg
6031e35772b2Smrg    # Determine the type of output
6032e35772b2Smrg    case $output in
6033e35772b2Smrg    "")
6034e35772b2Smrg      func_fatal_help "you must specify an output file"
6035e35772b2Smrg      ;;
6036e35772b2Smrg    *.$libext) linkmode=oldlib ;;
6037e35772b2Smrg    *.lo | *.$objext) linkmode=obj ;;
6038e35772b2Smrg    *.la) linkmode=lib ;;
6039e35772b2Smrg    *) linkmode=prog ;; # Anything else should be a program.
6040e35772b2Smrg    esac
6041e35772b2Smrg
6042e35772b2Smrg    specialdeplibs=
6043e35772b2Smrg
6044e35772b2Smrg    libs=
6045e35772b2Smrg    # Find all interdependent deplibs by searching for libraries
6046e35772b2Smrg    # that are linked more than once (e.g. -la -lb -la)
6047e35772b2Smrg    for deplib in $deplibs; do
604874c14cd6Smrg      if $opt_preserve_dup_deps ; then
6049e35772b2Smrg	case "$libs " in
605074c14cd6Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051e35772b2Smrg	esac
6052e35772b2Smrg      fi
605374c14cd6Smrg      func_append libs " $deplib"
6054e35772b2Smrg    done
6055e35772b2Smrg
6056e35772b2Smrg    if test "$linkmode" = lib; then
6057e35772b2Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058e35772b2Smrg
6059e35772b2Smrg      # Compute libraries that are listed more than once in $predeps
6060e35772b2Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061e35772b2Smrg      # not to be eliminated).
6062e35772b2Smrg      pre_post_deps=
6063e35772b2Smrg      if $opt_duplicate_compiler_generated_deps; then
6064e35772b2Smrg	for pre_post_dep in $predeps $postdeps; do
6065e35772b2Smrg	  case "$pre_post_deps " in
606674c14cd6Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067e35772b2Smrg	  esac
606874c14cd6Smrg	  func_append pre_post_deps " $pre_post_dep"
6069e35772b2Smrg	done
6070e35772b2Smrg      fi
6071e35772b2Smrg      pre_post_deps=
6072e35772b2Smrg    fi
6073e35772b2Smrg
6074e35772b2Smrg    deplibs=
6075e35772b2Smrg    newdependency_libs=
6076e35772b2Smrg    newlib_search_path=
6077e35772b2Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078e35772b2Smrg    notinst_deplibs= # not-installed libtool libraries
6079e35772b2Smrg    notinst_path= # paths that contain not-installed libtool libraries
6080e35772b2Smrg
6081e35772b2Smrg    case $linkmode in
6082e35772b2Smrg    lib)
6083e35772b2Smrg	passes="conv dlpreopen link"
6084e35772b2Smrg	for file in $dlfiles $dlprefiles; do
6085e35772b2Smrg	  case $file in
6086e35772b2Smrg	  *.la) ;;
6087e35772b2Smrg	  *)
6088e35772b2Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089e35772b2Smrg	    ;;
6090e35772b2Smrg	  esac
6091e35772b2Smrg	done
6092e35772b2Smrg	;;
6093e35772b2Smrg    prog)
6094e35772b2Smrg	compile_deplibs=
6095e35772b2Smrg	finalize_deplibs=
6096e35772b2Smrg	alldeplibs=no
6097e35772b2Smrg	newdlfiles=
6098e35772b2Smrg	newdlprefiles=
6099e35772b2Smrg	passes="conv scan dlopen dlpreopen link"
6100e35772b2Smrg	;;
6101e35772b2Smrg    *)  passes="conv"
6102e35772b2Smrg	;;
6103e35772b2Smrg    esac
6104e35772b2Smrg
6105e35772b2Smrg    for pass in $passes; do
6106e35772b2Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107e35772b2Smrg      # so that -L comes before libs that need it for instance...
6108e35772b2Smrg      if test "$linkmode,$pass" = "lib,link"; then
6109e35772b2Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110e35772b2Smrg	##        order, and fix it there properly
6111e35772b2Smrg        tmp_deplibs=
6112e35772b2Smrg	for deplib in $deplibs; do
6113e35772b2Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114e35772b2Smrg	done
6115e35772b2Smrg	deplibs="$tmp_deplibs"
6116e35772b2Smrg      fi
6117e35772b2Smrg
6118e35772b2Smrg      if test "$linkmode,$pass" = "lib,link" ||
6119e35772b2Smrg	 test "$linkmode,$pass" = "prog,scan"; then
6120e35772b2Smrg	libs="$deplibs"
6121e35772b2Smrg	deplibs=
6122e35772b2Smrg      fi
6123e35772b2Smrg      if test "$linkmode" = prog; then
6124e35772b2Smrg	case $pass in
6125e35772b2Smrg	dlopen) libs="$dlfiles" ;;
6126e35772b2Smrg	dlpreopen) libs="$dlprefiles" ;;
6127e35772b2Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128e35772b2Smrg	esac
6129e35772b2Smrg      fi
6130e35772b2Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131e35772b2Smrg	# Collect and forward deplibs of preopened libtool libs
6132e35772b2Smrg	for lib in $dlprefiles; do
6133e35772b2Smrg	  # Ignore non-libtool-libs
6134e35772b2Smrg	  dependency_libs=
613574c14cd6Smrg	  func_resolve_sysroot "$lib"
6136e35772b2Smrg	  case $lib in
613774c14cd6Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138e35772b2Smrg	  esac
6139e35772b2Smrg
6140e35772b2Smrg	  # Collect preopened libtool deplibs, except any this library
6141e35772b2Smrg	  # has declared as weak libs
6142e35772b2Smrg	  for deplib in $dependency_libs; do
614374c14cd6Smrg	    func_basename "$deplib"
614474c14cd6Smrg            deplib_base=$func_basename_result
6145e35772b2Smrg	    case " $weak_libs " in
6146e35772b2Smrg	    *" $deplib_base "*) ;;
614774c14cd6Smrg	    *) func_append deplibs " $deplib" ;;
6148e35772b2Smrg	    esac
6149e35772b2Smrg	  done
6150e35772b2Smrg	done
6151e35772b2Smrg	libs="$dlprefiles"
6152e35772b2Smrg      fi
6153e35772b2Smrg      if test "$pass" = dlopen; then
6154e35772b2Smrg	# Collect dlpreopened libraries
6155e35772b2Smrg	save_deplibs="$deplibs"
6156e35772b2Smrg	deplibs=
6157e35772b2Smrg      fi
6158e35772b2Smrg
6159e35772b2Smrg      for deplib in $libs; do
6160e35772b2Smrg	lib=
6161e35772b2Smrg	found=no
6162e35772b2Smrg	case $deplib in
616374c14cd6Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
616474c14cd6Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165e35772b2Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6166e35772b2Smrg	    compile_deplibs="$deplib $compile_deplibs"
6167e35772b2Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168e35772b2Smrg	  else
616974c14cd6Smrg	    func_append compiler_flags " $deplib"
6170e35772b2Smrg	    if test "$linkmode" = lib ; then
6171e35772b2Smrg		case "$new_inherited_linker_flags " in
6172e35772b2Smrg		    *" $deplib "*) ;;
617374c14cd6Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174e35772b2Smrg		esac
6175e35772b2Smrg	    fi
6176e35772b2Smrg	  fi
6177e35772b2Smrg	  continue
6178e35772b2Smrg	  ;;
6179e35772b2Smrg	-l*)
6180e35772b2Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181e35772b2Smrg	    func_warning "\`-l' is ignored for archives/objects"
6182e35772b2Smrg	    continue
6183e35772b2Smrg	  fi
6184e35772b2Smrg	  func_stripname '-l' '' "$deplib"
6185e35772b2Smrg	  name=$func_stripname_result
6186e35772b2Smrg	  if test "$linkmode" = lib; then
6187e35772b2Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188e35772b2Smrg	  else
6189e35772b2Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190e35772b2Smrg	  fi
6191e35772b2Smrg	  for searchdir in $searchdirs; do
6192e35772b2Smrg	    for search_ext in .la $std_shrext .so .a; do
6193e35772b2Smrg	      # Search the libtool library
6194e35772b2Smrg	      lib="$searchdir/lib${name}${search_ext}"
6195e35772b2Smrg	      if test -f "$lib"; then
6196e35772b2Smrg		if test "$search_ext" = ".la"; then
6197e35772b2Smrg		  found=yes
6198e35772b2Smrg		else
6199e35772b2Smrg		  found=no
6200e35772b2Smrg		fi
6201e35772b2Smrg		break 2
6202e35772b2Smrg	      fi
6203e35772b2Smrg	    done
6204e35772b2Smrg	  done
6205e35772b2Smrg	  if test "$found" != yes; then
6206e35772b2Smrg	    # deplib doesn't seem to be a libtool library
6207e35772b2Smrg	    if test "$linkmode,$pass" = "prog,link"; then
6208e35772b2Smrg	      compile_deplibs="$deplib $compile_deplibs"
6209e35772b2Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6210e35772b2Smrg	    else
6211e35772b2Smrg	      deplibs="$deplib $deplibs"
6212e35772b2Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213e35772b2Smrg	    fi
6214e35772b2Smrg	    continue
6215e35772b2Smrg	  else # deplib is a libtool library
6216e35772b2Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217e35772b2Smrg	    # We need to do some special things here, and not later.
6218e35772b2Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219e35772b2Smrg	      case " $predeps $postdeps " in
6220e35772b2Smrg	      *" $deplib "*)
6221e35772b2Smrg		if func_lalib_p "$lib"; then
6222e35772b2Smrg		  library_names=
6223e35772b2Smrg		  old_library=
6224e35772b2Smrg		  func_source "$lib"
6225e35772b2Smrg		  for l in $old_library $library_names; do
6226e35772b2Smrg		    ll="$l"
6227e35772b2Smrg		  done
6228e35772b2Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6229e35772b2Smrg		    found=no
6230e35772b2Smrg		    func_dirname "$lib" "" "."
6231e35772b2Smrg		    ladir="$func_dirname_result"
6232e35772b2Smrg		    lib=$ladir/$old_library
6233e35772b2Smrg		    if test "$linkmode,$pass" = "prog,link"; then
6234e35772b2Smrg		      compile_deplibs="$deplib $compile_deplibs"
6235e35772b2Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236e35772b2Smrg		    else
6237e35772b2Smrg		      deplibs="$deplib $deplibs"
6238e35772b2Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239e35772b2Smrg		    fi
6240e35772b2Smrg		    continue
6241e35772b2Smrg		  fi
6242e35772b2Smrg		fi
6243e35772b2Smrg		;;
6244e35772b2Smrg	      *) ;;
6245e35772b2Smrg	      esac
6246e35772b2Smrg	    fi
6247e35772b2Smrg	  fi
6248e35772b2Smrg	  ;; # -l
6249e35772b2Smrg	*.ltframework)
6250e35772b2Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6251e35772b2Smrg	    compile_deplibs="$deplib $compile_deplibs"
6252e35772b2Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253e35772b2Smrg	  else
6254e35772b2Smrg	    deplibs="$deplib $deplibs"
6255e35772b2Smrg	    if test "$linkmode" = lib ; then
6256e35772b2Smrg		case "$new_inherited_linker_flags " in
6257e35772b2Smrg		    *" $deplib "*) ;;
625874c14cd6Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259e35772b2Smrg		esac
6260e35772b2Smrg	    fi
6261e35772b2Smrg	  fi
6262e35772b2Smrg	  continue
6263e35772b2Smrg	  ;;
6264e35772b2Smrg	-L*)
6265e35772b2Smrg	  case $linkmode in
6266e35772b2Smrg	  lib)
6267e35772b2Smrg	    deplibs="$deplib $deplibs"
6268e35772b2Smrg	    test "$pass" = conv && continue
6269e35772b2Smrg	    newdependency_libs="$deplib $newdependency_libs"
6270e35772b2Smrg	    func_stripname '-L' '' "$deplib"
627174c14cd6Smrg	    func_resolve_sysroot "$func_stripname_result"
627274c14cd6Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273e35772b2Smrg	    ;;
6274e35772b2Smrg	  prog)
6275e35772b2Smrg	    if test "$pass" = conv; then
6276e35772b2Smrg	      deplibs="$deplib $deplibs"
6277e35772b2Smrg	      continue
6278e35772b2Smrg	    fi
6279e35772b2Smrg	    if test "$pass" = scan; then
6280e35772b2Smrg	      deplibs="$deplib $deplibs"
6281e35772b2Smrg	    else
6282e35772b2Smrg	      compile_deplibs="$deplib $compile_deplibs"
6283e35772b2Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284e35772b2Smrg	    fi
6285e35772b2Smrg	    func_stripname '-L' '' "$deplib"
628674c14cd6Smrg	    func_resolve_sysroot "$func_stripname_result"
628774c14cd6Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288e35772b2Smrg	    ;;
6289e35772b2Smrg	  *)
6290e35772b2Smrg	    func_warning "\`-L' is ignored for archives/objects"
6291e35772b2Smrg	    ;;
6292e35772b2Smrg	  esac # linkmode
6293e35772b2Smrg	  continue
6294e35772b2Smrg	  ;; # -L
6295e35772b2Smrg	-R*)
6296e35772b2Smrg	  if test "$pass" = link; then
6297e35772b2Smrg	    func_stripname '-R' '' "$deplib"
629874c14cd6Smrg	    func_resolve_sysroot "$func_stripname_result"
629974c14cd6Smrg	    dir=$func_resolve_sysroot_result
6300e35772b2Smrg	    # Make sure the xrpath contains only unique directories.
6301e35772b2Smrg	    case "$xrpath " in
6302e35772b2Smrg	    *" $dir "*) ;;
630374c14cd6Smrg	    *) func_append xrpath " $dir" ;;
6304e35772b2Smrg	    esac
6305e35772b2Smrg	  fi
6306e35772b2Smrg	  deplibs="$deplib $deplibs"
6307e35772b2Smrg	  continue
6308e35772b2Smrg	  ;;
630974c14cd6Smrg	*.la)
631074c14cd6Smrg	  func_resolve_sysroot "$deplib"
631174c14cd6Smrg	  lib=$func_resolve_sysroot_result
631274c14cd6Smrg	  ;;
6313e35772b2Smrg	*.$libext)
6314e35772b2Smrg	  if test "$pass" = conv; then
6315e35772b2Smrg	    deplibs="$deplib $deplibs"
6316e35772b2Smrg	    continue
6317e35772b2Smrg	  fi
6318e35772b2Smrg	  case $linkmode in
6319e35772b2Smrg	  lib)
6320e35772b2Smrg	    # Linking convenience modules into shared libraries is allowed,
6321e35772b2Smrg	    # but linking other static libraries is non-portable.
6322e35772b2Smrg	    case " $dlpreconveniencelibs " in
6323e35772b2Smrg	    *" $deplib "*) ;;
6324e35772b2Smrg	    *)
6325e35772b2Smrg	      valid_a_lib=no
6326e35772b2Smrg	      case $deplibs_check_method in
6327e35772b2Smrg		match_pattern*)
6328e35772b2Smrg		  set dummy $deplibs_check_method; shift
6329e35772b2Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
633074c14cd6Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331e35772b2Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332e35772b2Smrg		    valid_a_lib=yes
6333e35772b2Smrg		  fi
6334e35772b2Smrg		;;
6335e35772b2Smrg		pass_all)
6336e35772b2Smrg		  valid_a_lib=yes
6337e35772b2Smrg		;;
6338e35772b2Smrg	      esac
6339e35772b2Smrg	      if test "$valid_a_lib" != yes; then
634074c14cd6Smrg		echo
6341e35772b2Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
634274c14cd6Smrg		echo "*** I have the capability to make that library automatically link in when"
634374c14cd6Smrg		echo "*** you link to this library.  But I can only do this if you have a"
634474c14cd6Smrg		echo "*** shared version of the library, which you do not appear to have"
634574c14cd6Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
634674c14cd6Smrg		echo "*** that it is just a static archive that I should not use here."
6347e35772b2Smrg	      else
634874c14cd6Smrg		echo
6349e35772b2Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
6350e35772b2Smrg		$ECHO "*** static library $deplib is not portable!"
6351e35772b2Smrg		deplibs="$deplib $deplibs"
6352e35772b2Smrg	      fi
6353e35772b2Smrg	      ;;
6354e35772b2Smrg	    esac
6355e35772b2Smrg	    continue
6356e35772b2Smrg	    ;;
6357e35772b2Smrg	  prog)
6358e35772b2Smrg	    if test "$pass" != link; then
6359e35772b2Smrg	      deplibs="$deplib $deplibs"
6360e35772b2Smrg	    else
6361e35772b2Smrg	      compile_deplibs="$deplib $compile_deplibs"
6362e35772b2Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363e35772b2Smrg	    fi
6364e35772b2Smrg	    continue
6365e35772b2Smrg	    ;;
6366e35772b2Smrg	  esac # linkmode
6367e35772b2Smrg	  ;; # *.$libext
6368e35772b2Smrg	*.lo | *.$objext)
6369e35772b2Smrg	  if test "$pass" = conv; then
6370e35772b2Smrg	    deplibs="$deplib $deplibs"
6371e35772b2Smrg	  elif test "$linkmode" = prog; then
6372e35772b2Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373e35772b2Smrg	      # If there is no dlopen support or we're linking statically,
6374e35772b2Smrg	      # we need to preload.
637574c14cd6Smrg	      func_append newdlprefiles " $deplib"
6376e35772b2Smrg	      compile_deplibs="$deplib $compile_deplibs"
6377e35772b2Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378e35772b2Smrg	    else
637974c14cd6Smrg	      func_append newdlfiles " $deplib"
6380e35772b2Smrg	    fi
6381e35772b2Smrg	  fi
6382e35772b2Smrg	  continue
6383e35772b2Smrg	  ;;
6384e35772b2Smrg	%DEPLIBS%)
6385e35772b2Smrg	  alldeplibs=yes
6386e35772b2Smrg	  continue
6387e35772b2Smrg	  ;;
6388e35772b2Smrg	esac # case $deplib
6389e35772b2Smrg
6390e35772b2Smrg	if test "$found" = yes || test -f "$lib"; then :
6391e35772b2Smrg	else
6392e35772b2Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393e35772b2Smrg	fi
6394e35772b2Smrg
6395e35772b2Smrg	# Check to see that this really is a libtool archive.
6396e35772b2Smrg	func_lalib_unsafe_p "$lib" \
6397e35772b2Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398e35772b2Smrg
6399e35772b2Smrg	func_dirname "$lib" "" "."
6400e35772b2Smrg	ladir="$func_dirname_result"
6401e35772b2Smrg
6402e35772b2Smrg	dlname=
6403e35772b2Smrg	dlopen=
6404e35772b2Smrg	dlpreopen=
6405e35772b2Smrg	libdir=
6406e35772b2Smrg	library_names=
6407e35772b2Smrg	old_library=
6408e35772b2Smrg	inherited_linker_flags=
6409e35772b2Smrg	# If the library was installed with an old release of libtool,
6410e35772b2Smrg	# it will not redefine variables installed, or shouldnotlink
6411e35772b2Smrg	installed=yes
6412e35772b2Smrg	shouldnotlink=no
6413e35772b2Smrg	avoidtemprpath=
6414e35772b2Smrg
6415e35772b2Smrg
6416e35772b2Smrg	# Read the .la file
6417e35772b2Smrg	func_source "$lib"
6418e35772b2Smrg
6419e35772b2Smrg	# Convert "-framework foo" to "foo.ltframework"
6420e35772b2Smrg	if test -n "$inherited_linker_flags"; then
642174c14cd6Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422e35772b2Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423e35772b2Smrg	    case " $new_inherited_linker_flags " in
6424e35772b2Smrg	      *" $tmp_inherited_linker_flag "*) ;;
642574c14cd6Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426e35772b2Smrg	    esac
6427e35772b2Smrg	  done
6428e35772b2Smrg	fi
642974c14cd6Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430e35772b2Smrg	if test "$linkmode,$pass" = "lib,link" ||
6431e35772b2Smrg	   test "$linkmode,$pass" = "prog,scan" ||
6432e35772b2Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
643374c14cd6Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
643474c14cd6Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435e35772b2Smrg	fi
6436e35772b2Smrg
6437e35772b2Smrg	if test "$pass" = conv; then
6438e35772b2Smrg	  # Only check for convenience libraries
6439e35772b2Smrg	  deplibs="$lib $deplibs"
6440e35772b2Smrg	  if test -z "$libdir"; then
6441e35772b2Smrg	    if test -z "$old_library"; then
6442e35772b2Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443e35772b2Smrg	    fi
6444e35772b2Smrg	    # It is a libtool convenience library, so add in its objects.
644574c14cd6Smrg	    func_append convenience " $ladir/$objdir/$old_library"
644674c14cd6Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6447e35772b2Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448e35772b2Smrg	    func_fatal_error "\`$lib' is not a convenience library"
6449e35772b2Smrg	  fi
6450e35772b2Smrg	  tmp_libs=
6451e35772b2Smrg	  for deplib in $dependency_libs; do
6452e35772b2Smrg	    deplibs="$deplib $deplibs"
645374c14cd6Smrg	    if $opt_preserve_dup_deps ; then
6454e35772b2Smrg	      case "$tmp_libs " in
645574c14cd6Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456e35772b2Smrg	      esac
6457e35772b2Smrg	    fi
645874c14cd6Smrg	    func_append tmp_libs " $deplib"
6459e35772b2Smrg	  done
6460e35772b2Smrg	  continue
6461e35772b2Smrg	fi # $pass = conv
6462e35772b2Smrg
6463e35772b2Smrg
6464e35772b2Smrg	# Get the name of the library we link against.
6465e35772b2Smrg	linklib=
646674c14cd6Smrg	if test -n "$old_library" &&
646774c14cd6Smrg	   { test "$prefer_static_libs" = yes ||
646874c14cd6Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
646974c14cd6Smrg	  linklib=$old_library
647074c14cd6Smrg	else
647174c14cd6Smrg	  for l in $old_library $library_names; do
647274c14cd6Smrg	    linklib="$l"
647374c14cd6Smrg	  done
647474c14cd6Smrg	fi
6475e35772b2Smrg	if test -z "$linklib"; then
6476e35772b2Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477e35772b2Smrg	fi
6478e35772b2Smrg
6479e35772b2Smrg	# This library was specified with -dlopen.
6480e35772b2Smrg	if test "$pass" = dlopen; then
6481e35772b2Smrg	  if test -z "$libdir"; then
6482e35772b2Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483e35772b2Smrg	  fi
6484e35772b2Smrg	  if test -z "$dlname" ||
6485e35772b2Smrg	     test "$dlopen_support" != yes ||
6486e35772b2Smrg	     test "$build_libtool_libs" = no; then
6487e35772b2Smrg	    # If there is no dlname, no dlopen support or we're linking
6488e35772b2Smrg	    # statically, we need to preload.  We also need to preload any
6489e35772b2Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490e35772b2Smrg	    # bomb out in the load deplibs phase.
649174c14cd6Smrg	    func_append dlprefiles " $lib $dependency_libs"
6492e35772b2Smrg	  else
649374c14cd6Smrg	    func_append newdlfiles " $lib"
6494e35772b2Smrg	  fi
6495e35772b2Smrg	  continue
6496e35772b2Smrg	fi # $pass = dlopen
6497e35772b2Smrg
6498e35772b2Smrg	# We need an absolute path.
6499e35772b2Smrg	case $ladir in
6500e35772b2Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501e35772b2Smrg	*)
6502e35772b2Smrg	  abs_ladir=`cd "$ladir" && pwd`
6503e35772b2Smrg	  if test -z "$abs_ladir"; then
6504e35772b2Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505e35772b2Smrg	    func_warning "passing it literally to the linker, although it might fail"
6506e35772b2Smrg	    abs_ladir="$ladir"
6507e35772b2Smrg	  fi
6508e35772b2Smrg	  ;;
6509e35772b2Smrg	esac
6510e35772b2Smrg	func_basename "$lib"
6511e35772b2Smrg	laname="$func_basename_result"
6512e35772b2Smrg
6513e35772b2Smrg	# Find the relevant object directory and library name.
6514e35772b2Smrg	if test "X$installed" = Xyes; then
651574c14cd6Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516e35772b2Smrg	    func_warning "library \`$lib' was moved."
6517e35772b2Smrg	    dir="$ladir"
6518e35772b2Smrg	    absdir="$abs_ladir"
6519e35772b2Smrg	    libdir="$abs_ladir"
6520e35772b2Smrg	  else
652174c14cd6Smrg	    dir="$lt_sysroot$libdir"
652274c14cd6Smrg	    absdir="$lt_sysroot$libdir"
6523e35772b2Smrg	  fi
6524e35772b2Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525e35772b2Smrg	else
6526e35772b2Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527e35772b2Smrg	    dir="$ladir"
6528e35772b2Smrg	    absdir="$abs_ladir"
6529e35772b2Smrg	    # Remove this search path later
653074c14cd6Smrg	    func_append notinst_path " $abs_ladir"
6531e35772b2Smrg	  else
6532e35772b2Smrg	    dir="$ladir/$objdir"
6533e35772b2Smrg	    absdir="$abs_ladir/$objdir"
6534e35772b2Smrg	    # Remove this search path later
653574c14cd6Smrg	    func_append notinst_path " $abs_ladir"
6536e35772b2Smrg	  fi
6537e35772b2Smrg	fi # $installed = yes
6538e35772b2Smrg	func_stripname 'lib' '.la' "$laname"
6539e35772b2Smrg	name=$func_stripname_result
6540e35772b2Smrg
6541e35772b2Smrg	# This library was specified with -dlpreopen.
6542e35772b2Smrg	if test "$pass" = dlpreopen; then
6543e35772b2Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6544e35772b2Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545e35772b2Smrg	  fi
654674c14cd6Smrg	  case "$host" in
654774c14cd6Smrg	    # special handling for platforms with PE-DLLs.
654874c14cd6Smrg	    *cygwin* | *mingw* | *cegcc* )
654974c14cd6Smrg	      # Linker will automatically link against shared library if both
655074c14cd6Smrg	      # static and shared are present.  Therefore, ensure we extract
655174c14cd6Smrg	      # symbols from the import library if a shared library is present
655274c14cd6Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
655374c14cd6Smrg	      # this by putting the import library name into $newdlprefiles.
655474c14cd6Smrg	      # We recover the dlopen module name by 'saving' the la file
655574c14cd6Smrg	      # name in a special purpose variable, and (later) extracting the
655674c14cd6Smrg	      # dlname from the la file.
655774c14cd6Smrg	      if test -n "$dlname"; then
655874c14cd6Smrg	        func_tr_sh "$dir/$linklib"
655974c14cd6Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
656074c14cd6Smrg	        func_append newdlprefiles " $dir/$linklib"
656174c14cd6Smrg	      else
656274c14cd6Smrg	        func_append newdlprefiles " $dir/$old_library"
656374c14cd6Smrg	        # Keep a list of preopened convenience libraries to check
656474c14cd6Smrg	        # that they are being used correctly in the link pass.
656574c14cd6Smrg	        test -z "$libdir" && \
656674c14cd6Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
656774c14cd6Smrg	      fi
656874c14cd6Smrg	    ;;
656974c14cd6Smrg	    * )
657074c14cd6Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
657174c14cd6Smrg	      # are required to link).
657274c14cd6Smrg	      if test -n "$old_library"; then
657374c14cd6Smrg	        func_append newdlprefiles " $dir/$old_library"
657474c14cd6Smrg	        # Keep a list of preopened convenience libraries to check
657574c14cd6Smrg	        # that they are being used correctly in the link pass.
657674c14cd6Smrg	        test -z "$libdir" && \
657774c14cd6Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
657874c14cd6Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
657974c14cd6Smrg	      elif test -n "$dlname"; then
658074c14cd6Smrg	        func_append newdlprefiles " $dir/$dlname"
658174c14cd6Smrg	      else
658274c14cd6Smrg	        func_append newdlprefiles " $dir/$linklib"
658374c14cd6Smrg	      fi
658474c14cd6Smrg	    ;;
658574c14cd6Smrg	  esac
6586e35772b2Smrg	fi # $pass = dlpreopen
6587e35772b2Smrg
6588e35772b2Smrg	if test -z "$libdir"; then
6589e35772b2Smrg	  # Link the convenience library
6590e35772b2Smrg	  if test "$linkmode" = lib; then
6591e35772b2Smrg	    deplibs="$dir/$old_library $deplibs"
6592e35772b2Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593e35772b2Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594e35772b2Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595e35772b2Smrg	  else
6596e35772b2Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597e35772b2Smrg	  fi
6598e35772b2Smrg	  continue
6599e35772b2Smrg	fi
6600e35772b2Smrg
6601e35772b2Smrg
6602e35772b2Smrg	if test "$linkmode" = prog && test "$pass" != link; then
660374c14cd6Smrg	  func_append newlib_search_path " $ladir"
6604e35772b2Smrg	  deplibs="$lib $deplibs"
6605e35772b2Smrg
6606e35772b2Smrg	  linkalldeplibs=no
6607e35772b2Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608e35772b2Smrg	     test "$build_libtool_libs" = no; then
6609e35772b2Smrg	    linkalldeplibs=yes
6610e35772b2Smrg	  fi
6611e35772b2Smrg
6612e35772b2Smrg	  tmp_libs=
6613e35772b2Smrg	  for deplib in $dependency_libs; do
6614e35772b2Smrg	    case $deplib in
6615e35772b2Smrg	    -L*) func_stripname '-L' '' "$deplib"
661674c14cd6Smrg	         func_resolve_sysroot "$func_stripname_result"
661774c14cd6Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618e35772b2Smrg		 ;;
6619e35772b2Smrg	    esac
6620e35772b2Smrg	    # Need to link against all dependency_libs?
6621e35772b2Smrg	    if test "$linkalldeplibs" = yes; then
6622e35772b2Smrg	      deplibs="$deplib $deplibs"
6623e35772b2Smrg	    else
6624e35772b2Smrg	      # Need to hardcode shared library paths
6625e35772b2Smrg	      # or/and link against static libraries
6626e35772b2Smrg	      newdependency_libs="$deplib $newdependency_libs"
6627e35772b2Smrg	    fi
662874c14cd6Smrg	    if $opt_preserve_dup_deps ; then
6629e35772b2Smrg	      case "$tmp_libs " in
663074c14cd6Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631e35772b2Smrg	      esac
6632e35772b2Smrg	    fi
663374c14cd6Smrg	    func_append tmp_libs " $deplib"
6634e35772b2Smrg	  done # for deplib
6635e35772b2Smrg	  continue
6636e35772b2Smrg	fi # $linkmode = prog...
6637e35772b2Smrg
6638e35772b2Smrg	if test "$linkmode,$pass" = "prog,link"; then
6639e35772b2Smrg	  if test -n "$library_names" &&
6640e35772b2Smrg	     { { test "$prefer_static_libs" = no ||
6641e35772b2Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642e35772b2Smrg	       test -z "$old_library"; }; then
6643e35772b2Smrg	    # We need to hardcode the library path
6644e35772b2Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645e35772b2Smrg	      # Make sure the rpath contains only unique directories.
6646e35772b2Smrg	      case "$temp_rpath:" in
6647e35772b2Smrg	      *"$absdir:"*) ;;
664874c14cd6Smrg	      *) func_append temp_rpath "$absdir:" ;;
6649e35772b2Smrg	      esac
6650e35772b2Smrg	    fi
6651e35772b2Smrg
6652e35772b2Smrg	    # Hardcode the library path.
6653e35772b2Smrg	    # Skip directories that are in the system default run-time
6654e35772b2Smrg	    # search path.
6655e35772b2Smrg	    case " $sys_lib_dlsearch_path " in
6656e35772b2Smrg	    *" $absdir "*) ;;
6657e35772b2Smrg	    *)
6658e35772b2Smrg	      case "$compile_rpath " in
6659e35772b2Smrg	      *" $absdir "*) ;;
666074c14cd6Smrg	      *) func_append compile_rpath " $absdir" ;;
6661e35772b2Smrg	      esac
6662e35772b2Smrg	      ;;
6663e35772b2Smrg	    esac
6664e35772b2Smrg	    case " $sys_lib_dlsearch_path " in
6665e35772b2Smrg	    *" $libdir "*) ;;
6666e35772b2Smrg	    *)
6667e35772b2Smrg	      case "$finalize_rpath " in
6668e35772b2Smrg	      *" $libdir "*) ;;
666974c14cd6Smrg	      *) func_append finalize_rpath " $libdir" ;;
6670e35772b2Smrg	      esac
6671e35772b2Smrg	      ;;
6672e35772b2Smrg	    esac
6673e35772b2Smrg	  fi # $linkmode,$pass = prog,link...
6674e35772b2Smrg
6675e35772b2Smrg	  if test "$alldeplibs" = yes &&
6676e35772b2Smrg	     { test "$deplibs_check_method" = pass_all ||
6677e35772b2Smrg	       { test "$build_libtool_libs" = yes &&
6678e35772b2Smrg		 test -n "$library_names"; }; }; then
6679e35772b2Smrg	    # We only need to search for static libraries
6680e35772b2Smrg	    continue
6681e35772b2Smrg	  fi
6682e35772b2Smrg	fi
6683e35772b2Smrg
6684e35772b2Smrg	link_static=no # Whether the deplib will be linked statically
6685e35772b2Smrg	use_static_libs=$prefer_static_libs
6686e35772b2Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687e35772b2Smrg	  use_static_libs=no
6688e35772b2Smrg	fi
6689e35772b2Smrg	if test -n "$library_names" &&
6690e35772b2Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691e35772b2Smrg	  case $host in
6692e35772b2Smrg	  *cygwin* | *mingw* | *cegcc*)
6693e35772b2Smrg	      # No point in relinking DLLs because paths are not encoded
669474c14cd6Smrg	      func_append notinst_deplibs " $lib"
6695e35772b2Smrg	      need_relink=no
6696e35772b2Smrg	    ;;
6697e35772b2Smrg	  *)
6698e35772b2Smrg	    if test "$installed" = no; then
669974c14cd6Smrg	      func_append notinst_deplibs " $lib"
6700e35772b2Smrg	      need_relink=yes
6701e35772b2Smrg	    fi
6702e35772b2Smrg	    ;;
6703e35772b2Smrg	  esac
6704e35772b2Smrg	  # This is a shared library
6705e35772b2Smrg
6706e35772b2Smrg	  # Warn about portability, can't link against -module's on some
6707e35772b2Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6708e35772b2Smrg	  dlopenmodule=""
6709e35772b2Smrg	  for dlpremoduletest in $dlprefiles; do
6710e35772b2Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
6711e35772b2Smrg	      dlopenmodule="$dlpremoduletest"
6712e35772b2Smrg	      break
6713e35772b2Smrg	    fi
6714e35772b2Smrg	  done
6715e35772b2Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
671674c14cd6Smrg	    echo
6717e35772b2Smrg	    if test "$linkmode" = prog; then
6718e35772b2Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719e35772b2Smrg	    else
6720e35772b2Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721e35772b2Smrg	    fi
6722e35772b2Smrg	    $ECHO "*** $linklib is not portable!"
6723e35772b2Smrg	  fi
6724e35772b2Smrg	  if test "$linkmode" = lib &&
6725e35772b2Smrg	     test "$hardcode_into_libs" = yes; then
6726e35772b2Smrg	    # Hardcode the library path.
6727e35772b2Smrg	    # Skip directories that are in the system default run-time
6728e35772b2Smrg	    # search path.
6729e35772b2Smrg	    case " $sys_lib_dlsearch_path " in
6730e35772b2Smrg	    *" $absdir "*) ;;
6731e35772b2Smrg	    *)
6732e35772b2Smrg	      case "$compile_rpath " in
6733e35772b2Smrg	      *" $absdir "*) ;;
673474c14cd6Smrg	      *) func_append compile_rpath " $absdir" ;;
6735e35772b2Smrg	      esac
6736e35772b2Smrg	      ;;
6737e35772b2Smrg	    esac
6738e35772b2Smrg	    case " $sys_lib_dlsearch_path " in
6739e35772b2Smrg	    *" $libdir "*) ;;
6740e35772b2Smrg	    *)
6741e35772b2Smrg	      case "$finalize_rpath " in
6742e35772b2Smrg	      *" $libdir "*) ;;
674374c14cd6Smrg	      *) func_append finalize_rpath " $libdir" ;;
6744e35772b2Smrg	      esac
6745e35772b2Smrg	      ;;
6746e35772b2Smrg	    esac
6747e35772b2Smrg	  fi
6748e35772b2Smrg
6749e35772b2Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750e35772b2Smrg	    # figure out the soname
6751e35772b2Smrg	    set dummy $library_names
6752e35772b2Smrg	    shift
6753e35772b2Smrg	    realname="$1"
6754e35772b2Smrg	    shift
6755e35772b2Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756e35772b2Smrg	    # use dlname if we got it. it's perfectly good, no?
6757e35772b2Smrg	    if test -n "$dlname"; then
6758e35772b2Smrg	      soname="$dlname"
6759e35772b2Smrg	    elif test -n "$soname_spec"; then
6760e35772b2Smrg	      # bleh windows
6761e35772b2Smrg	      case $host in
6762e35772b2Smrg	      *cygwin* | mingw* | *cegcc*)
6763e35772b2Smrg	        func_arith $current - $age
6764e35772b2Smrg		major=$func_arith_result
6765e35772b2Smrg		versuffix="-$major"
6766e35772b2Smrg		;;
6767e35772b2Smrg	      esac
6768e35772b2Smrg	      eval soname=\"$soname_spec\"
6769e35772b2Smrg	    else
6770e35772b2Smrg	      soname="$realname"
6771e35772b2Smrg	    fi
6772e35772b2Smrg
6773e35772b2Smrg	    # Make a new name for the extract_expsyms_cmds to use
6774e35772b2Smrg	    soroot="$soname"
6775e35772b2Smrg	    func_basename "$soroot"
6776e35772b2Smrg	    soname="$func_basename_result"
6777e35772b2Smrg	    func_stripname 'lib' '.dll' "$soname"
6778e35772b2Smrg	    newlib=libimp-$func_stripname_result.a
6779e35772b2Smrg
6780e35772b2Smrg	    # If the library has no export list, then create one now
6781e35772b2Smrg	    if test -f "$output_objdir/$soname-def"; then :
6782e35772b2Smrg	    else
6783e35772b2Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784e35772b2Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785e35772b2Smrg	    fi
6786e35772b2Smrg
6787e35772b2Smrg	    # Create $newlib
6788e35772b2Smrg	    if test -f "$output_objdir/$newlib"; then :; else
6789e35772b2Smrg	      func_verbose "generating import library for \`$soname'"
6790e35772b2Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791e35772b2Smrg	    fi
6792e35772b2Smrg	    # make sure the library variables are pointing to the new library
6793e35772b2Smrg	    dir=$output_objdir
6794e35772b2Smrg	    linklib=$newlib
6795e35772b2Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796e35772b2Smrg
679774c14cd6Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798e35772b2Smrg	    add_shlibpath=
6799e35772b2Smrg	    add_dir=
6800e35772b2Smrg	    add=
6801e35772b2Smrg	    lib_linked=yes
6802e35772b2Smrg	    case $hardcode_action in
6803e35772b2Smrg	    immediate | unsupported)
6804e35772b2Smrg	      if test "$hardcode_direct" = no; then
6805e35772b2Smrg		add="$dir/$linklib"
6806e35772b2Smrg		case $host in
6807e35772b2Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808e35772b2Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809e35772b2Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810e35772b2Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811e35772b2Smrg		  *-*-darwin* )
6812e35772b2Smrg		    # if the lib is a (non-dlopened) module then we can not
6813e35772b2Smrg		    # link against it, someone is ignoring the earlier warnings
6814e35772b2Smrg		    if /usr/bin/file -L $add 2> /dev/null |
6815e35772b2Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816e35772b2Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6817e35772b2Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818e35772b2Smrg			if test -z "$old_library" ; then
681974c14cd6Smrg			  echo
682074c14cd6Smrg			  echo "*** And there doesn't seem to be a static archive available"
682174c14cd6Smrg			  echo "*** The link will probably fail, sorry"
6822e35772b2Smrg			else
6823e35772b2Smrg			  add="$dir/$old_library"
6824e35772b2Smrg			fi
6825e35772b2Smrg		      elif test -n "$old_library"; then
6826e35772b2Smrg			add="$dir/$old_library"
6827e35772b2Smrg		      fi
6828e35772b2Smrg		    fi
6829e35772b2Smrg		esac
6830e35772b2Smrg	      elif test "$hardcode_minus_L" = no; then
6831e35772b2Smrg		case $host in
6832e35772b2Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833e35772b2Smrg		esac
6834e35772b2Smrg		add_dir="-L$dir"
6835e35772b2Smrg		add="-l$name"
6836e35772b2Smrg	      elif test "$hardcode_shlibpath_var" = no; then
6837e35772b2Smrg		add_shlibpath="$dir"
6838e35772b2Smrg		add="-l$name"
6839e35772b2Smrg	      else
6840e35772b2Smrg		lib_linked=no
6841e35772b2Smrg	      fi
6842e35772b2Smrg	      ;;
6843e35772b2Smrg	    relink)
6844e35772b2Smrg	      if test "$hardcode_direct" = yes &&
6845e35772b2Smrg	         test "$hardcode_direct_absolute" = no; then
6846e35772b2Smrg		add="$dir/$linklib"
6847e35772b2Smrg	      elif test "$hardcode_minus_L" = yes; then
684874c14cd6Smrg		add_dir="-L$absdir"
6849e35772b2Smrg		# Try looking first in the location we're being installed to.
6850e35772b2Smrg		if test -n "$inst_prefix_dir"; then
6851e35772b2Smrg		  case $libdir in
6852e35772b2Smrg		    [\\/]*)
685374c14cd6Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854e35772b2Smrg		      ;;
6855e35772b2Smrg		  esac
6856e35772b2Smrg		fi
6857e35772b2Smrg		add="-l$name"
6858e35772b2Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
6859e35772b2Smrg		add_shlibpath="$dir"
6860e35772b2Smrg		add="-l$name"
6861e35772b2Smrg	      else
6862e35772b2Smrg		lib_linked=no
6863e35772b2Smrg	      fi
6864e35772b2Smrg	      ;;
6865e35772b2Smrg	    *) lib_linked=no ;;
6866e35772b2Smrg	    esac
6867e35772b2Smrg
6868e35772b2Smrg	    if test "$lib_linked" != yes; then
6869e35772b2Smrg	      func_fatal_configuration "unsupported hardcode properties"
6870e35772b2Smrg	    fi
6871e35772b2Smrg
6872e35772b2Smrg	    if test -n "$add_shlibpath"; then
6873e35772b2Smrg	      case :$compile_shlibpath: in
6874e35772b2Smrg	      *":$add_shlibpath:"*) ;;
687574c14cd6Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876e35772b2Smrg	      esac
6877e35772b2Smrg	    fi
6878e35772b2Smrg	    if test "$linkmode" = prog; then
6879e35772b2Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880e35772b2Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881e35772b2Smrg	    else
6882e35772b2Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883e35772b2Smrg	      test -n "$add" && deplibs="$add $deplibs"
6884e35772b2Smrg	      if test "$hardcode_direct" != yes &&
6885e35772b2Smrg		 test "$hardcode_minus_L" != yes &&
6886e35772b2Smrg		 test "$hardcode_shlibpath_var" = yes; then
6887e35772b2Smrg		case :$finalize_shlibpath: in
6888e35772b2Smrg		*":$libdir:"*) ;;
688974c14cd6Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890e35772b2Smrg		esac
6891e35772b2Smrg	      fi
6892e35772b2Smrg	    fi
6893e35772b2Smrg	  fi
6894e35772b2Smrg
689574c14cd6Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896e35772b2Smrg	    add_shlibpath=
6897e35772b2Smrg	    add_dir=
6898e35772b2Smrg	    add=
6899e35772b2Smrg	    # Finalize command for both is simple: just hardcode it.
6900e35772b2Smrg	    if test "$hardcode_direct" = yes &&
6901e35772b2Smrg	       test "$hardcode_direct_absolute" = no; then
6902e35772b2Smrg	      add="$libdir/$linklib"
6903e35772b2Smrg	    elif test "$hardcode_minus_L" = yes; then
6904e35772b2Smrg	      add_dir="-L$libdir"
6905e35772b2Smrg	      add="-l$name"
6906e35772b2Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907e35772b2Smrg	      case :$finalize_shlibpath: in
6908e35772b2Smrg	      *":$libdir:"*) ;;
690974c14cd6Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910e35772b2Smrg	      esac
6911e35772b2Smrg	      add="-l$name"
6912e35772b2Smrg	    elif test "$hardcode_automatic" = yes; then
6913e35772b2Smrg	      if test -n "$inst_prefix_dir" &&
6914e35772b2Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915e35772b2Smrg		add="$inst_prefix_dir$libdir/$linklib"
6916e35772b2Smrg	      else
6917e35772b2Smrg		add="$libdir/$linklib"
6918e35772b2Smrg	      fi
6919e35772b2Smrg	    else
6920e35772b2Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
6921e35772b2Smrg	      add_dir="-L$libdir"
6922e35772b2Smrg	      # Try looking first in the location we're being installed to.
6923e35772b2Smrg	      if test -n "$inst_prefix_dir"; then
6924e35772b2Smrg		case $libdir in
6925e35772b2Smrg		  [\\/]*)
692674c14cd6Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927e35772b2Smrg		    ;;
6928e35772b2Smrg		esac
6929e35772b2Smrg	      fi
6930e35772b2Smrg	      add="-l$name"
6931e35772b2Smrg	    fi
6932e35772b2Smrg
6933e35772b2Smrg	    if test "$linkmode" = prog; then
6934e35772b2Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935e35772b2Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936e35772b2Smrg	    else
6937e35772b2Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938e35772b2Smrg	      test -n "$add" && deplibs="$add $deplibs"
6939e35772b2Smrg	    fi
6940e35772b2Smrg	  fi
6941e35772b2Smrg	elif test "$linkmode" = prog; then
6942e35772b2Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943e35772b2Smrg	  # is not unsupported.  This is valid on all known static and
6944e35772b2Smrg	  # shared platforms.
6945e35772b2Smrg	  if test "$hardcode_direct" != unsupported; then
6946e35772b2Smrg	    test -n "$old_library" && linklib="$old_library"
6947e35772b2Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948e35772b2Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949e35772b2Smrg	  else
6950e35772b2Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951e35772b2Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952e35772b2Smrg	  fi
6953e35772b2Smrg	elif test "$build_libtool_libs" = yes; then
6954e35772b2Smrg	  # Not a shared library
6955e35772b2Smrg	  if test "$deplibs_check_method" != pass_all; then
6956e35772b2Smrg	    # We're trying link a shared library against a static one
6957e35772b2Smrg	    # but the system doesn't support it.
6958e35772b2Smrg
6959e35772b2Smrg	    # Just print a warning and add the library to dependency_libs so
6960e35772b2Smrg	    # that the program can be linked against the static library.
696174c14cd6Smrg	    echo
6962e35772b2Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
696374c14cd6Smrg	    echo "*** I have the capability to make that library automatically link in when"
696474c14cd6Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
696574c14cd6Smrg	    echo "*** shared version of the library, which you do not appear to have."
6966e35772b2Smrg	    if test "$module" = yes; then
696774c14cd6Smrg	      echo "*** But as you try to build a module library, libtool will still create "
696874c14cd6Smrg	      echo "*** a static module, that should work as long as the dlopening application"
696974c14cd6Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970e35772b2Smrg	      if test -z "$global_symbol_pipe"; then
697174c14cd6Smrg		echo
697274c14cd6Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
697374c14cd6Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
697474c14cd6Smrg		echo "*** not find such a program.  So, this module is probably useless."
697574c14cd6Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976e35772b2Smrg	      fi
6977e35772b2Smrg	      if test "$build_old_libs" = no; then
6978e35772b2Smrg		build_libtool_libs=module
6979e35772b2Smrg		build_old_libs=yes
6980e35772b2Smrg	      else
6981e35772b2Smrg		build_libtool_libs=no
6982e35772b2Smrg	      fi
6983e35772b2Smrg	    fi
6984e35772b2Smrg	  else
6985e35772b2Smrg	    deplibs="$dir/$old_library $deplibs"
6986e35772b2Smrg	    link_static=yes
6987e35772b2Smrg	  fi
6988e35772b2Smrg	fi # link shared/static library?
6989e35772b2Smrg
6990e35772b2Smrg	if test "$linkmode" = lib; then
6991e35772b2Smrg	  if test -n "$dependency_libs" &&
6992e35772b2Smrg	     { test "$hardcode_into_libs" != yes ||
6993e35772b2Smrg	       test "$build_old_libs" = yes ||
6994e35772b2Smrg	       test "$link_static" = yes; }; then
6995e35772b2Smrg	    # Extract -R from dependency_libs
6996e35772b2Smrg	    temp_deplibs=
6997e35772b2Smrg	    for libdir in $dependency_libs; do
6998e35772b2Smrg	      case $libdir in
6999e35772b2Smrg	      -R*) func_stripname '-R' '' "$libdir"
7000e35772b2Smrg	           temp_xrpath=$func_stripname_result
7001e35772b2Smrg		   case " $xrpath " in
7002e35772b2Smrg		   *" $temp_xrpath "*) ;;
700374c14cd6Smrg		   *) func_append xrpath " $temp_xrpath";;
7004e35772b2Smrg		   esac;;
700574c14cd6Smrg	      *) func_append temp_deplibs " $libdir";;
7006e35772b2Smrg	      esac
7007e35772b2Smrg	    done
7008e35772b2Smrg	    dependency_libs="$temp_deplibs"
7009e35772b2Smrg	  fi
7010e35772b2Smrg
701174c14cd6Smrg	  func_append newlib_search_path " $absdir"
7012e35772b2Smrg	  # Link against this library
7013e35772b2Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014e35772b2Smrg	  # ... and its dependency_libs
7015e35772b2Smrg	  tmp_libs=
7016e35772b2Smrg	  for deplib in $dependency_libs; do
7017e35772b2Smrg	    newdependency_libs="$deplib $newdependency_libs"
701874c14cd6Smrg	    case $deplib in
701974c14cd6Smrg              -L*) func_stripname '-L' '' "$deplib"
702074c14cd6Smrg                   func_resolve_sysroot "$func_stripname_result";;
702174c14cd6Smrg              *) func_resolve_sysroot "$deplib" ;;
702274c14cd6Smrg            esac
702374c14cd6Smrg	    if $opt_preserve_dup_deps ; then
7024e35772b2Smrg	      case "$tmp_libs " in
702574c14cd6Smrg	      *" $func_resolve_sysroot_result "*)
702674c14cd6Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027e35772b2Smrg	      esac
7028e35772b2Smrg	    fi
702974c14cd6Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030e35772b2Smrg	  done
7031e35772b2Smrg
7032e35772b2Smrg	  if test "$link_all_deplibs" != no; then
7033e35772b2Smrg	    # Add the search paths of all dependency libraries
7034e35772b2Smrg	    for deplib in $dependency_libs; do
703574c14cd6Smrg	      path=
7036e35772b2Smrg	      case $deplib in
7037e35772b2Smrg	      -L*) path="$deplib" ;;
7038e35772b2Smrg	      *.la)
703974c14cd6Smrg	        func_resolve_sysroot "$deplib"
704074c14cd6Smrg	        deplib=$func_resolve_sysroot_result
7041e35772b2Smrg	        func_dirname "$deplib" "" "."
704274c14cd6Smrg		dir=$func_dirname_result
7043e35772b2Smrg		# We need an absolute path.
7044e35772b2Smrg		case $dir in
7045e35772b2Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046e35772b2Smrg		*)
7047e35772b2Smrg		  absdir=`cd "$dir" && pwd`
7048e35772b2Smrg		  if test -z "$absdir"; then
7049e35772b2Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7050e35772b2Smrg		    absdir="$dir"
7051e35772b2Smrg		  fi
7052e35772b2Smrg		  ;;
7053e35772b2Smrg		esac
7054e35772b2Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055e35772b2Smrg		case $host in
7056e35772b2Smrg		*-*-darwin*)
7057e35772b2Smrg		  depdepl=
7058e35772b2Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059e35772b2Smrg		  if test -n "$deplibrary_names" ; then
7060e35772b2Smrg		    for tmp in $deplibrary_names ; do
7061e35772b2Smrg		      depdepl=$tmp
7062e35772b2Smrg		    done
7063e35772b2Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7064e35772b2Smrg		      depdepl="$absdir/$objdir/$depdepl"
7065e35772b2Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066e35772b2Smrg                      if test -z "$darwin_install_name"; then
7067e35772b2Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068e35772b2Smrg                      fi
706974c14cd6Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
707074c14cd6Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071e35772b2Smrg		      path=
7072e35772b2Smrg		    fi
7073e35772b2Smrg		  fi
7074e35772b2Smrg		  ;;
7075e35772b2Smrg		*)
7076e35772b2Smrg		  path="-L$absdir/$objdir"
7077e35772b2Smrg		  ;;
7078e35772b2Smrg		esac
7079e35772b2Smrg		else
7080e35772b2Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081e35772b2Smrg		  test -z "$libdir" && \
7082e35772b2Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083e35772b2Smrg		  test "$absdir" != "$libdir" && \
7084e35772b2Smrg		    func_warning "\`$deplib' seems to be moved"
7085e35772b2Smrg
7086e35772b2Smrg		  path="-L$absdir"
7087e35772b2Smrg		fi
7088e35772b2Smrg		;;
7089e35772b2Smrg	      esac
7090e35772b2Smrg	      case " $deplibs " in
7091e35772b2Smrg	      *" $path "*) ;;
7092e35772b2Smrg	      *) deplibs="$path $deplibs" ;;
7093e35772b2Smrg	      esac
7094e35772b2Smrg	    done
7095e35772b2Smrg	  fi # link_all_deplibs != no
7096e35772b2Smrg	fi # linkmode = lib
7097e35772b2Smrg      done # for deplib in $libs
7098e35772b2Smrg      if test "$pass" = link; then
7099e35772b2Smrg	if test "$linkmode" = "prog"; then
7100e35772b2Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101e35772b2Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102e35772b2Smrg	else
710374c14cd6Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104e35772b2Smrg	fi
7105e35772b2Smrg      fi
7106e35772b2Smrg      dependency_libs="$newdependency_libs"
7107e35772b2Smrg      if test "$pass" = dlpreopen; then
7108e35772b2Smrg	# Link the dlpreopened libraries before other libraries
7109e35772b2Smrg	for deplib in $save_deplibs; do
7110e35772b2Smrg	  deplibs="$deplib $deplibs"
7111e35772b2Smrg	done
7112e35772b2Smrg      fi
7113e35772b2Smrg      if test "$pass" != dlopen; then
7114e35772b2Smrg	if test "$pass" != conv; then
7115e35772b2Smrg	  # Make sure lib_search_path contains only unique directories.
7116e35772b2Smrg	  lib_search_path=
7117e35772b2Smrg	  for dir in $newlib_search_path; do
7118e35772b2Smrg	    case "$lib_search_path " in
7119e35772b2Smrg	    *" $dir "*) ;;
712074c14cd6Smrg	    *) func_append lib_search_path " $dir" ;;
7121e35772b2Smrg	    esac
7122e35772b2Smrg	  done
7123e35772b2Smrg	  newlib_search_path=
7124e35772b2Smrg	fi
7125e35772b2Smrg
7126e35772b2Smrg	if test "$linkmode,$pass" != "prog,link"; then
7127e35772b2Smrg	  vars="deplibs"
7128e35772b2Smrg	else
7129e35772b2Smrg	  vars="compile_deplibs finalize_deplibs"
7130e35772b2Smrg	fi
7131e35772b2Smrg	for var in $vars dependency_libs; do
7132e35772b2Smrg	  # Add libraries to $var in reverse order
7133e35772b2Smrg	  eval tmp_libs=\"\$$var\"
7134e35772b2Smrg	  new_libs=
7135e35772b2Smrg	  for deplib in $tmp_libs; do
7136e35772b2Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7137e35772b2Smrg	    #        that some nasty dependency loop isn't accidentally
7138e35772b2Smrg	    #        broken:
7139e35772b2Smrg	    #new_libs="$deplib $new_libs"
7140e35772b2Smrg	    # Pragmatically, this seems to cause very few problems in
7141e35772b2Smrg	    # practice:
7142e35772b2Smrg	    case $deplib in
7143e35772b2Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7144e35772b2Smrg	    -R*) ;;
7145e35772b2Smrg	    *)
7146e35772b2Smrg	      # And here is the reason: when a library appears more
7147e35772b2Smrg	      # than once as an explicit dependence of a library, or
7148e35772b2Smrg	      # is implicitly linked in more than once by the
7149e35772b2Smrg	      # compiler, it is considered special, and multiple
7150e35772b2Smrg	      # occurrences thereof are not removed.  Compare this
7151e35772b2Smrg	      # with having the same library being listed as a
7152e35772b2Smrg	      # dependency of multiple other libraries: in this case,
7153e35772b2Smrg	      # we know (pedantically, we assume) the library does not
7154e35772b2Smrg	      # need to be listed more than once, so we keep only the
7155e35772b2Smrg	      # last copy.  This is not always right, but it is rare
7156e35772b2Smrg	      # enough that we require users that really mean to play
7157e35772b2Smrg	      # such unportable linking tricks to link the library
7158e35772b2Smrg	      # using -Wl,-lname, so that libtool does not consider it
7159e35772b2Smrg	      # for duplicate removal.
7160e35772b2Smrg	      case " $specialdeplibs " in
7161e35772b2Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162e35772b2Smrg	      *)
7163e35772b2Smrg		case " $new_libs " in
7164e35772b2Smrg		*" $deplib "*) ;;
7165e35772b2Smrg		*) new_libs="$deplib $new_libs" ;;
7166e35772b2Smrg		esac
7167e35772b2Smrg		;;
7168e35772b2Smrg	      esac
7169e35772b2Smrg	      ;;
7170e35772b2Smrg	    esac
7171e35772b2Smrg	  done
7172e35772b2Smrg	  tmp_libs=
7173e35772b2Smrg	  for deplib in $new_libs; do
7174e35772b2Smrg	    case $deplib in
7175e35772b2Smrg	    -L*)
7176e35772b2Smrg	      case " $tmp_libs " in
7177e35772b2Smrg	      *" $deplib "*) ;;
717874c14cd6Smrg	      *) func_append tmp_libs " $deplib" ;;
7179e35772b2Smrg	      esac
7180e35772b2Smrg	      ;;
718174c14cd6Smrg	    *) func_append tmp_libs " $deplib" ;;
7182e35772b2Smrg	    esac
7183e35772b2Smrg	  done
7184e35772b2Smrg	  eval $var=\"$tmp_libs\"
7185e35772b2Smrg	done # for var
7186e35772b2Smrg      fi
7187e35772b2Smrg      # Last step: remove runtime libs from dependency_libs
7188e35772b2Smrg      # (they stay in deplibs)
7189e35772b2Smrg      tmp_libs=
7190e35772b2Smrg      for i in $dependency_libs ; do
7191e35772b2Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192e35772b2Smrg	*" $i "*)
7193e35772b2Smrg	  i=""
7194e35772b2Smrg	  ;;
7195e35772b2Smrg	esac
7196e35772b2Smrg	if test -n "$i" ; then
719774c14cd6Smrg	  func_append tmp_libs " $i"
7198e35772b2Smrg	fi
7199e35772b2Smrg      done
7200e35772b2Smrg      dependency_libs=$tmp_libs
7201e35772b2Smrg    done # for pass
7202e35772b2Smrg    if test "$linkmode" = prog; then
7203e35772b2Smrg      dlfiles="$newdlfiles"
7204e35772b2Smrg    fi
7205e35772b2Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206e35772b2Smrg      dlprefiles="$newdlprefiles"
7207e35772b2Smrg    fi
7208e35772b2Smrg
7209e35772b2Smrg    case $linkmode in
7210e35772b2Smrg    oldlib)
7211e35772b2Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212e35772b2Smrg	func_warning "\`-dlopen' is ignored for archives"
7213e35772b2Smrg      fi
7214e35772b2Smrg
7215e35772b2Smrg      case " $deplibs" in
7216e35772b2Smrg      *\ -l* | *\ -L*)
7217e35772b2Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218e35772b2Smrg      esac
7219e35772b2Smrg
7220e35772b2Smrg      test -n "$rpath" && \
7221e35772b2Smrg	func_warning "\`-rpath' is ignored for archives"
7222e35772b2Smrg
7223e35772b2Smrg      test -n "$xrpath" && \
7224e35772b2Smrg	func_warning "\`-R' is ignored for archives"
7225e35772b2Smrg
7226e35772b2Smrg      test -n "$vinfo" && \
7227e35772b2Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228e35772b2Smrg
7229e35772b2Smrg      test -n "$release" && \
7230e35772b2Smrg	func_warning "\`-release' is ignored for archives"
7231e35772b2Smrg
7232e35772b2Smrg      test -n "$export_symbols$export_symbols_regex" && \
7233e35772b2Smrg	func_warning "\`-export-symbols' is ignored for archives"
7234e35772b2Smrg
7235e35772b2Smrg      # Now set the variables for building old libraries.
7236e35772b2Smrg      build_libtool_libs=no
7237e35772b2Smrg      oldlibs="$output"
723874c14cd6Smrg      func_append objs "$old_deplibs"
7239e35772b2Smrg      ;;
7240e35772b2Smrg
7241e35772b2Smrg    lib)
7242e35772b2Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243e35772b2Smrg      case $outputname in
7244e35772b2Smrg      lib*)
7245e35772b2Smrg	func_stripname 'lib' '.la' "$outputname"
7246e35772b2Smrg	name=$func_stripname_result
7247e35772b2Smrg	eval shared_ext=\"$shrext_cmds\"
7248e35772b2Smrg	eval libname=\"$libname_spec\"
7249e35772b2Smrg	;;
7250e35772b2Smrg      *)
7251e35772b2Smrg	test "$module" = no && \
7252e35772b2Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253e35772b2Smrg
7254e35772b2Smrg	if test "$need_lib_prefix" != no; then
7255e35772b2Smrg	  # Add the "lib" prefix for modules if required
7256e35772b2Smrg	  func_stripname '' '.la' "$outputname"
7257e35772b2Smrg	  name=$func_stripname_result
7258e35772b2Smrg	  eval shared_ext=\"$shrext_cmds\"
7259e35772b2Smrg	  eval libname=\"$libname_spec\"
7260e35772b2Smrg	else
7261e35772b2Smrg	  func_stripname '' '.la' "$outputname"
7262e35772b2Smrg	  libname=$func_stripname_result
7263e35772b2Smrg	fi
7264e35772b2Smrg	;;
7265e35772b2Smrg      esac
7266e35772b2Smrg
7267e35772b2Smrg      if test -n "$objs"; then
7268e35772b2Smrg	if test "$deplibs_check_method" != pass_all; then
7269e35772b2Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270e35772b2Smrg	else
727174c14cd6Smrg	  echo
7272e35772b2Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273e35772b2Smrg	  $ECHO "*** objects $objs is not portable!"
727474c14cd6Smrg	  func_append libobjs " $objs"
7275e35772b2Smrg	fi
7276e35772b2Smrg      fi
7277e35772b2Smrg
7278e35772b2Smrg      test "$dlself" != no && \
7279e35772b2Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280e35772b2Smrg
7281e35772b2Smrg      set dummy $rpath
7282e35772b2Smrg      shift
7283e35772b2Smrg      test "$#" -gt 1 && \
7284e35772b2Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285e35772b2Smrg
7286e35772b2Smrg      install_libdir="$1"
7287e35772b2Smrg
7288e35772b2Smrg      oldlibs=
7289e35772b2Smrg      if test -z "$rpath"; then
7290e35772b2Smrg	if test "$build_libtool_libs" = yes; then
7291e35772b2Smrg	  # Building a libtool convenience library.
7292e35772b2Smrg	  # Some compilers have problems with a `.al' extension so
7293e35772b2Smrg	  # convenience libraries should have the same extension an
7294e35772b2Smrg	  # archive normally would.
7295e35772b2Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296e35772b2Smrg	  build_libtool_libs=convenience
7297e35772b2Smrg	  build_old_libs=yes
7298e35772b2Smrg	fi
7299e35772b2Smrg
7300e35772b2Smrg	test -n "$vinfo" && \
7301e35772b2Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302e35772b2Smrg
7303e35772b2Smrg	test -n "$release" && \
7304e35772b2Smrg	  func_warning "\`-release' is ignored for convenience libraries"
7305e35772b2Smrg      else
7306e35772b2Smrg
7307e35772b2Smrg	# Parse the version information argument.
7308e35772b2Smrg	save_ifs="$IFS"; IFS=':'
7309e35772b2Smrg	set dummy $vinfo 0 0 0
7310e35772b2Smrg	shift
7311e35772b2Smrg	IFS="$save_ifs"
7312e35772b2Smrg
7313e35772b2Smrg	test -n "$7" && \
7314e35772b2Smrg	  func_fatal_help "too many parameters to \`-version-info'"
7315e35772b2Smrg
7316e35772b2Smrg	# convert absolute version numbers to libtool ages
7317e35772b2Smrg	# this retains compatibility with .la files and attempts
7318e35772b2Smrg	# to make the code below a bit more comprehensible
7319e35772b2Smrg
7320e35772b2Smrg	case $vinfo_number in
7321e35772b2Smrg	yes)
7322e35772b2Smrg	  number_major="$1"
7323e35772b2Smrg	  number_minor="$2"
7324e35772b2Smrg	  number_revision="$3"
7325e35772b2Smrg	  #
7326e35772b2Smrg	  # There are really only two kinds -- those that
7327e35772b2Smrg	  # use the current revision as the major version
7328e35772b2Smrg	  # and those that subtract age and use age as
7329e35772b2Smrg	  # a minor version.  But, then there is irix
7330e35772b2Smrg	  # which has an extra 1 added just for fun
7331e35772b2Smrg	  #
7332e35772b2Smrg	  case $version_type in
733374c14cd6Smrg	  # correct linux to gnu/linux during the next big refactor
7334e35772b2Smrg	  darwin|linux|osf|windows|none)
7335e35772b2Smrg	    func_arith $number_major + $number_minor
7336e35772b2Smrg	    current=$func_arith_result
7337e35772b2Smrg	    age="$number_minor"
7338e35772b2Smrg	    revision="$number_revision"
7339e35772b2Smrg	    ;;
734074c14cd6Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7341e35772b2Smrg	    current="$number_major"
7342e35772b2Smrg	    revision="$number_minor"
7343e35772b2Smrg	    age="0"
7344e35772b2Smrg	    ;;
7345e35772b2Smrg	  irix|nonstopux)
7346e35772b2Smrg	    func_arith $number_major + $number_minor
7347e35772b2Smrg	    current=$func_arith_result
7348e35772b2Smrg	    age="$number_minor"
7349e35772b2Smrg	    revision="$number_minor"
7350e35772b2Smrg	    lt_irix_increment=no
7351e35772b2Smrg	    ;;
7352e35772b2Smrg	  esac
7353e35772b2Smrg	  ;;
7354e35772b2Smrg	no)
7355e35772b2Smrg	  current="$1"
7356e35772b2Smrg	  revision="$2"
7357e35772b2Smrg	  age="$3"
7358e35772b2Smrg	  ;;
7359e35772b2Smrg	esac
7360e35772b2Smrg
7361e35772b2Smrg	# Check that each of the things are valid numbers.
7362e35772b2Smrg	case $current in
7363e35772b2Smrg	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]) ;;
7364e35772b2Smrg	*)
7365e35772b2Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366e35772b2Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367e35772b2Smrg	  ;;
7368e35772b2Smrg	esac
7369e35772b2Smrg
7370e35772b2Smrg	case $revision in
7371e35772b2Smrg	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]) ;;
7372e35772b2Smrg	*)
7373e35772b2Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374e35772b2Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375e35772b2Smrg	  ;;
7376e35772b2Smrg	esac
7377e35772b2Smrg
7378e35772b2Smrg	case $age in
7379e35772b2Smrg	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]) ;;
7380e35772b2Smrg	*)
7381e35772b2Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
7382e35772b2Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383e35772b2Smrg	  ;;
7384e35772b2Smrg	esac
7385e35772b2Smrg
7386e35772b2Smrg	if test "$age" -gt "$current"; then
7387e35772b2Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388e35772b2Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389e35772b2Smrg	fi
7390e35772b2Smrg
7391e35772b2Smrg	# Calculate the version variables.
7392e35772b2Smrg	major=
7393e35772b2Smrg	versuffix=
7394e35772b2Smrg	verstring=
7395e35772b2Smrg	case $version_type in
7396e35772b2Smrg	none) ;;
7397e35772b2Smrg
7398e35772b2Smrg	darwin)
7399e35772b2Smrg	  # Like Linux, but with the current version available in
7400e35772b2Smrg	  # verstring for coding it into the library header
7401e35772b2Smrg	  func_arith $current - $age
7402e35772b2Smrg	  major=.$func_arith_result
7403e35772b2Smrg	  versuffix="$major.$age.$revision"
7404e35772b2Smrg	  # Darwin ld doesn't like 0 for these options...
7405e35772b2Smrg	  func_arith $current + 1
7406e35772b2Smrg	  minor_current=$func_arith_result
7407e35772b2Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408e35772b2Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409e35772b2Smrg	  ;;
7410e35772b2Smrg
7411e35772b2Smrg	freebsd-aout)
7412e35772b2Smrg	  major=".$current"
7413e35772b2Smrg	  versuffix=".$current.$revision";
7414e35772b2Smrg	  ;;
7415e35772b2Smrg
7416e35772b2Smrg	freebsd-elf)
7417e35772b2Smrg	  major=".$current"
7418e35772b2Smrg	  versuffix=".$current"
7419e35772b2Smrg	  ;;
7420e35772b2Smrg
7421e35772b2Smrg	irix | nonstopux)
7422e35772b2Smrg	  if test "X$lt_irix_increment" = "Xno"; then
7423e35772b2Smrg	    func_arith $current - $age
7424e35772b2Smrg	  else
7425e35772b2Smrg	    func_arith $current - $age + 1
7426e35772b2Smrg	  fi
7427e35772b2Smrg	  major=$func_arith_result
7428e35772b2Smrg
7429e35772b2Smrg	  case $version_type in
7430e35772b2Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7431e35772b2Smrg	    *)         verstring_prefix=sgi ;;
7432e35772b2Smrg	  esac
7433e35772b2Smrg	  verstring="$verstring_prefix$major.$revision"
7434e35772b2Smrg
7435e35772b2Smrg	  # Add in all the interfaces that we are compatible with.
7436e35772b2Smrg	  loop=$revision
7437e35772b2Smrg	  while test "$loop" -ne 0; do
7438e35772b2Smrg	    func_arith $revision - $loop
7439e35772b2Smrg	    iface=$func_arith_result
7440e35772b2Smrg	    func_arith $loop - 1
7441e35772b2Smrg	    loop=$func_arith_result
7442e35772b2Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443e35772b2Smrg	  done
7444e35772b2Smrg
7445e35772b2Smrg	  # Before this point, $major must not contain `.'.
7446e35772b2Smrg	  major=.$major
7447e35772b2Smrg	  versuffix="$major.$revision"
7448e35772b2Smrg	  ;;
7449e35772b2Smrg
745074c14cd6Smrg	linux) # correct to gnu/linux during the next big refactor
7451e35772b2Smrg	  func_arith $current - $age
7452e35772b2Smrg	  major=.$func_arith_result
7453e35772b2Smrg	  versuffix="$major.$age.$revision"
7454e35772b2Smrg	  ;;
7455e35772b2Smrg
7456e35772b2Smrg	osf)
7457e35772b2Smrg	  func_arith $current - $age
7458e35772b2Smrg	  major=.$func_arith_result
7459e35772b2Smrg	  versuffix=".$current.$age.$revision"
7460e35772b2Smrg	  verstring="$current.$age.$revision"
7461e35772b2Smrg
7462e35772b2Smrg	  # Add in all the interfaces that we are compatible with.
7463e35772b2Smrg	  loop=$age
7464e35772b2Smrg	  while test "$loop" -ne 0; do
7465e35772b2Smrg	    func_arith $current - $loop
7466e35772b2Smrg	    iface=$func_arith_result
7467e35772b2Smrg	    func_arith $loop - 1
7468e35772b2Smrg	    loop=$func_arith_result
7469e35772b2Smrg	    verstring="$verstring:${iface}.0"
7470e35772b2Smrg	  done
7471e35772b2Smrg
7472e35772b2Smrg	  # Make executables depend on our current version.
747374c14cd6Smrg	  func_append verstring ":${current}.0"
7474e35772b2Smrg	  ;;
7475e35772b2Smrg
7476e35772b2Smrg	qnx)
7477e35772b2Smrg	  major=".$current"
7478e35772b2Smrg	  versuffix=".$current"
7479e35772b2Smrg	  ;;
7480e35772b2Smrg
7481e35772b2Smrg	sunos)
7482e35772b2Smrg	  major=".$current"
7483e35772b2Smrg	  versuffix=".$current.$revision"
7484e35772b2Smrg	  ;;
7485e35772b2Smrg
7486e35772b2Smrg	windows)
7487e35772b2Smrg	  # Use '-' rather than '.', since we only want one
7488e35772b2Smrg	  # extension on DOS 8.3 filesystems.
7489e35772b2Smrg	  func_arith $current - $age
7490e35772b2Smrg	  major=$func_arith_result
7491e35772b2Smrg	  versuffix="-$major"
7492e35772b2Smrg	  ;;
7493e35772b2Smrg
7494e35772b2Smrg	*)
7495e35772b2Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496e35772b2Smrg	  ;;
7497e35772b2Smrg	esac
7498e35772b2Smrg
7499e35772b2Smrg	# Clear the version info if we defaulted, and they specified a release.
7500e35772b2Smrg	if test -z "$vinfo" && test -n "$release"; then
7501e35772b2Smrg	  major=
7502e35772b2Smrg	  case $version_type in
7503e35772b2Smrg	  darwin)
7504e35772b2Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505e35772b2Smrg	    # problems, so we reset it completely
7506e35772b2Smrg	    verstring=
7507e35772b2Smrg	    ;;
7508e35772b2Smrg	  *)
7509e35772b2Smrg	    verstring="0.0"
7510e35772b2Smrg	    ;;
7511e35772b2Smrg	  esac
7512e35772b2Smrg	  if test "$need_version" = no; then
7513e35772b2Smrg	    versuffix=
7514e35772b2Smrg	  else
7515e35772b2Smrg	    versuffix=".0.0"
7516e35772b2Smrg	  fi
7517e35772b2Smrg	fi
7518e35772b2Smrg
7519e35772b2Smrg	# Remove version info from name if versioning should be avoided
7520e35772b2Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521e35772b2Smrg	  major=
7522e35772b2Smrg	  versuffix=
7523e35772b2Smrg	  verstring=""
7524e35772b2Smrg	fi
7525e35772b2Smrg
7526e35772b2Smrg	# Check to see if the archive will have undefined symbols.
7527e35772b2Smrg	if test "$allow_undefined" = yes; then
7528e35772b2Smrg	  if test "$allow_undefined_flag" = unsupported; then
7529e35772b2Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7530e35772b2Smrg	    build_libtool_libs=no
7531e35772b2Smrg	    build_old_libs=yes
7532e35772b2Smrg	  fi
7533e35772b2Smrg	else
7534e35772b2Smrg	  # Don't allow undefined symbols.
7535e35772b2Smrg	  allow_undefined_flag="$no_undefined_flag"
7536e35772b2Smrg	fi
7537e35772b2Smrg
7538e35772b2Smrg      fi
7539e35772b2Smrg
7540e35772b2Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
754174c14cd6Smrg      func_append libobjs " $symfileobj"
7542e35772b2Smrg      test "X$libobjs" = "X " && libobjs=
7543e35772b2Smrg
754474c14cd6Smrg      if test "$opt_mode" != relink; then
7545e35772b2Smrg	# Remove our outputs, but don't remove object files since they
7546e35772b2Smrg	# may have been created when compiling PIC objects.
7547e35772b2Smrg	removelist=
7548e35772b2Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549e35772b2Smrg	for p in $tempremovelist; do
7550e35772b2Smrg	  case $p in
7551e35772b2Smrg	    *.$objext | *.gcno)
7552e35772b2Smrg	       ;;
7553e35772b2Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554e35772b2Smrg	       if test "X$precious_files_regex" != "X"; then
7555e35772b2Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556e35772b2Smrg		 then
7557e35772b2Smrg		   continue
7558e35772b2Smrg		 fi
7559e35772b2Smrg	       fi
756074c14cd6Smrg	       func_append removelist " $p"
7561e35772b2Smrg	       ;;
7562e35772b2Smrg	    *) ;;
7563e35772b2Smrg	  esac
7564e35772b2Smrg	done
7565e35772b2Smrg	test -n "$removelist" && \
7566e35772b2Smrg	  func_show_eval "${RM}r \$removelist"
7567e35772b2Smrg      fi
7568e35772b2Smrg
7569e35772b2Smrg      # Now set the variables for building old libraries.
7570e35772b2Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
757174c14cd6Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572e35772b2Smrg
7573e35772b2Smrg	# Transform .lo files to .o files.
757474c14cd6Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575e35772b2Smrg      fi
7576e35772b2Smrg
7577e35772b2Smrg      # Eliminate all temporary directories.
7578e35772b2Smrg      #for path in $notinst_path; do
757974c14cd6Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
758074c14cd6Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
758174c14cd6Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582e35772b2Smrg      #done
7583e35772b2Smrg
7584e35772b2Smrg      if test -n "$xrpath"; then
7585e35772b2Smrg	# If the user specified any rpath flags, then add them.
7586e35772b2Smrg	temp_xrpath=
7587e35772b2Smrg	for libdir in $xrpath; do
758874c14cd6Smrg	  func_replace_sysroot "$libdir"
758974c14cd6Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590e35772b2Smrg	  case "$finalize_rpath " in
7591e35772b2Smrg	  *" $libdir "*) ;;
759274c14cd6Smrg	  *) func_append finalize_rpath " $libdir" ;;
7593e35772b2Smrg	  esac
7594e35772b2Smrg	done
7595e35772b2Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596e35772b2Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597e35772b2Smrg	fi
7598e35772b2Smrg      fi
7599e35772b2Smrg
7600e35772b2Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601e35772b2Smrg      old_dlfiles="$dlfiles"
7602e35772b2Smrg      dlfiles=
7603e35772b2Smrg      for lib in $old_dlfiles; do
7604e35772b2Smrg	case " $dlprefiles $dlfiles " in
7605e35772b2Smrg	*" $lib "*) ;;
760674c14cd6Smrg	*) func_append dlfiles " $lib" ;;
7607e35772b2Smrg	esac
7608e35772b2Smrg      done
7609e35772b2Smrg
7610e35772b2Smrg      # Make sure dlprefiles contains only unique files
7611e35772b2Smrg      old_dlprefiles="$dlprefiles"
7612e35772b2Smrg      dlprefiles=
7613e35772b2Smrg      for lib in $old_dlprefiles; do
7614e35772b2Smrg	case "$dlprefiles " in
7615e35772b2Smrg	*" $lib "*) ;;
761674c14cd6Smrg	*) func_append dlprefiles " $lib" ;;
7617e35772b2Smrg	esac
7618e35772b2Smrg      done
7619e35772b2Smrg
7620e35772b2Smrg      if test "$build_libtool_libs" = yes; then
7621e35772b2Smrg	if test -n "$rpath"; then
7622e35772b2Smrg	  case $host in
762374c14cd6Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624e35772b2Smrg	    # these systems don't actually have a c library (as such)!
7625e35772b2Smrg	    ;;
7626e35772b2Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627e35772b2Smrg	    # Rhapsody C library is in the System framework
762874c14cd6Smrg	    func_append deplibs " System.ltframework"
7629e35772b2Smrg	    ;;
7630e35772b2Smrg	  *-*-netbsd*)
7631e35772b2Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7632e35772b2Smrg	    ;;
7633e35772b2Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634e35772b2Smrg	    # Do not include libc due to us having libc/libc_r.
7635e35772b2Smrg	    ;;
7636e35772b2Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637e35772b2Smrg	    # Causes problems with __ctype
7638e35772b2Smrg	    ;;
7639e35772b2Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640e35772b2Smrg	    # Compiler inserts libc in the correct place for threads to work
7641e35772b2Smrg	    ;;
7642e35772b2Smrg	  *)
7643e35772b2Smrg	    # Add libc to deplibs on all other systems if necessary.
7644e35772b2Smrg	    if test "$build_libtool_need_lc" = "yes"; then
764574c14cd6Smrg	      func_append deplibs " -lc"
7646e35772b2Smrg	    fi
7647e35772b2Smrg	    ;;
7648e35772b2Smrg	  esac
7649e35772b2Smrg	fi
7650e35772b2Smrg
7651e35772b2Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7652e35772b2Smrg	name_save=$name
7653e35772b2Smrg	libname_save=$libname
7654e35772b2Smrg	release_save=$release
7655e35772b2Smrg	versuffix_save=$versuffix
7656e35772b2Smrg	major_save=$major
7657e35772b2Smrg	# I'm not sure if I'm treating the release correctly.  I think
7658e35772b2Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659e35772b2Smrg	# add it in twice.  Is that correct?
7660e35772b2Smrg	release=""
7661e35772b2Smrg	versuffix=""
7662e35772b2Smrg	major=""
7663e35772b2Smrg	newdeplibs=
7664e35772b2Smrg	droppeddeps=no
7665e35772b2Smrg	case $deplibs_check_method in
7666e35772b2Smrg	pass_all)
7667e35772b2Smrg	  # Don't check for shared/static.  Everything works.
7668e35772b2Smrg	  # This might be a little naive.  We might want to check
7669e35772b2Smrg	  # whether the library exists or not.  But this is on
7670e35772b2Smrg	  # osf3 & osf4 and I'm not really sure... Just
7671e35772b2Smrg	  # implementing what was already the behavior.
7672e35772b2Smrg	  newdeplibs=$deplibs
7673e35772b2Smrg	  ;;
7674e35772b2Smrg	test_compile)
7675e35772b2Smrg	  # This code stresses the "libraries are programs" paradigm to its
7676e35772b2Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677e35772b2Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7678e35772b2Smrg	  # whether they linked in statically or dynamically with ldd.
7679e35772b2Smrg	  $opt_dry_run || $RM conftest.c
7680e35772b2Smrg	  cat > conftest.c <<EOF
7681e35772b2Smrg	  int main() { return 0; }
7682e35772b2SmrgEOF
7683e35772b2Smrg	  $opt_dry_run || $RM conftest
7684e35772b2Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685e35772b2Smrg	    ldd_output=`ldd conftest`
7686e35772b2Smrg	    for i in $deplibs; do
7687e35772b2Smrg	      case $i in
7688e35772b2Smrg	      -l*)
7689e35772b2Smrg		func_stripname -l '' "$i"
7690e35772b2Smrg		name=$func_stripname_result
7691e35772b2Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692e35772b2Smrg		  case " $predeps $postdeps " in
7693e35772b2Smrg		  *" $i "*)
769474c14cd6Smrg		    func_append newdeplibs " $i"
7695e35772b2Smrg		    i=""
7696e35772b2Smrg		    ;;
7697e35772b2Smrg		  esac
7698e35772b2Smrg		fi
7699e35772b2Smrg		if test -n "$i" ; then
7700e35772b2Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701e35772b2Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702e35772b2Smrg		  set dummy $deplib_matches; shift
7703e35772b2Smrg		  deplib_match=$1
7704e35772b2Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
770574c14cd6Smrg		    func_append newdeplibs " $i"
7706e35772b2Smrg		  else
7707e35772b2Smrg		    droppeddeps=yes
770874c14cd6Smrg		    echo
7709e35772b2Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
771074c14cd6Smrg		    echo "*** I have the capability to make that library automatically link in when"
771174c14cd6Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
771274c14cd6Smrg		    echo "*** shared version of the library, which I believe you do not have"
771374c14cd6Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
771474c14cd6Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715e35772b2Smrg		  fi
7716e35772b2Smrg		fi
7717e35772b2Smrg		;;
7718e35772b2Smrg	      *)
771974c14cd6Smrg		func_append newdeplibs " $i"
7720e35772b2Smrg		;;
7721e35772b2Smrg	      esac
7722e35772b2Smrg	    done
7723e35772b2Smrg	  else
7724e35772b2Smrg	    # Error occurred in the first compile.  Let's try to salvage
7725e35772b2Smrg	    # the situation: Compile a separate program for each library.
7726e35772b2Smrg	    for i in $deplibs; do
7727e35772b2Smrg	      case $i in
7728e35772b2Smrg	      -l*)
7729e35772b2Smrg		func_stripname -l '' "$i"
7730e35772b2Smrg		name=$func_stripname_result
7731e35772b2Smrg		$opt_dry_run || $RM conftest
7732e35772b2Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733e35772b2Smrg		  ldd_output=`ldd conftest`
7734e35772b2Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735e35772b2Smrg		    case " $predeps $postdeps " in
7736e35772b2Smrg		    *" $i "*)
773774c14cd6Smrg		      func_append newdeplibs " $i"
7738e35772b2Smrg		      i=""
7739e35772b2Smrg		      ;;
7740e35772b2Smrg		    esac
7741e35772b2Smrg		  fi
7742e35772b2Smrg		  if test -n "$i" ; then
7743e35772b2Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744e35772b2Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745e35772b2Smrg		    set dummy $deplib_matches; shift
7746e35772b2Smrg		    deplib_match=$1
7747e35772b2Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
774874c14cd6Smrg		      func_append newdeplibs " $i"
7749e35772b2Smrg		    else
7750e35772b2Smrg		      droppeddeps=yes
775174c14cd6Smrg		      echo
7752e35772b2Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
775374c14cd6Smrg		      echo "*** I have the capability to make that library automatically link in when"
775474c14cd6Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
775574c14cd6Smrg		      echo "*** shared version of the library, which you do not appear to have"
775674c14cd6Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
775774c14cd6Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758e35772b2Smrg		    fi
7759e35772b2Smrg		  fi
7760e35772b2Smrg		else
7761e35772b2Smrg		  droppeddeps=yes
776274c14cd6Smrg		  echo
7763e35772b2Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
776474c14cd6Smrg		  echo "*** make it link in!  You will probably need to install it or some"
776574c14cd6Smrg		  echo "*** library that it depends on before this library will be fully"
776674c14cd6Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7767e35772b2Smrg		fi
7768e35772b2Smrg		;;
7769e35772b2Smrg	      *)
777074c14cd6Smrg		func_append newdeplibs " $i"
7771e35772b2Smrg		;;
7772e35772b2Smrg	      esac
7773e35772b2Smrg	    done
7774e35772b2Smrg	  fi
7775e35772b2Smrg	  ;;
7776e35772b2Smrg	file_magic*)
7777e35772b2Smrg	  set dummy $deplibs_check_method; shift
7778e35772b2Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779e35772b2Smrg	  for a_deplib in $deplibs; do
7780e35772b2Smrg	    case $a_deplib in
7781e35772b2Smrg	    -l*)
7782e35772b2Smrg	      func_stripname -l '' "$a_deplib"
7783e35772b2Smrg	      name=$func_stripname_result
7784e35772b2Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785e35772b2Smrg		case " $predeps $postdeps " in
7786e35772b2Smrg		*" $a_deplib "*)
778774c14cd6Smrg		  func_append newdeplibs " $a_deplib"
7788e35772b2Smrg		  a_deplib=""
7789e35772b2Smrg		  ;;
7790e35772b2Smrg		esac
7791e35772b2Smrg	      fi
7792e35772b2Smrg	      if test -n "$a_deplib" ; then
7793e35772b2Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
779474c14cd6Smrg		if test -n "$file_magic_glob"; then
779574c14cd6Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
779674c14cd6Smrg		else
779774c14cd6Smrg		  libnameglob=$libname
779874c14cd6Smrg		fi
779974c14cd6Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800e35772b2Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
780174c14cd6Smrg		  if test "$want_nocaseglob" = yes; then
780274c14cd6Smrg		    shopt -s nocaseglob
780374c14cd6Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
780474c14cd6Smrg		    $nocaseglob
780574c14cd6Smrg		  else
780674c14cd6Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
780774c14cd6Smrg		  fi
7808e35772b2Smrg		  for potent_lib in $potential_libs; do
7809e35772b2Smrg		      # Follow soft links.
7810e35772b2Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811e35772b2Smrg			 $GREP " -> " >/dev/null; then
7812e35772b2Smrg			continue
7813e35772b2Smrg		      fi
7814e35772b2Smrg		      # The statement above tries to avoid entering an
7815e35772b2Smrg		      # endless loop below, in case of cyclic links.
7816e35772b2Smrg		      # We might still enter an endless loop, since a link
7817e35772b2Smrg		      # loop can be closed while we follow links,
7818e35772b2Smrg		      # but so what?
7819e35772b2Smrg		      potlib="$potent_lib"
7820e35772b2Smrg		      while test -h "$potlib" 2>/dev/null; do
7821e35772b2Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822e35772b2Smrg			case $potliblink in
7823e35772b2Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
782474c14cd6Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825e35772b2Smrg			esac
7826e35772b2Smrg		      done
7827e35772b2Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828e35772b2Smrg			 $SED -e 10q |
7829e35772b2Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
783074c14cd6Smrg			func_append newdeplibs " $a_deplib"
7831e35772b2Smrg			a_deplib=""
7832e35772b2Smrg			break 2
7833e35772b2Smrg		      fi
7834e35772b2Smrg		  done
7835e35772b2Smrg		done
7836e35772b2Smrg	      fi
7837e35772b2Smrg	      if test -n "$a_deplib" ; then
7838e35772b2Smrg		droppeddeps=yes
783974c14cd6Smrg		echo
7840e35772b2Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
784174c14cd6Smrg		echo "*** I have the capability to make that library automatically link in when"
784274c14cd6Smrg		echo "*** you link to this library.  But I can only do this if you have a"
784374c14cd6Smrg		echo "*** shared version of the library, which you do not appear to have"
784474c14cd6Smrg		echo "*** because I did check the linker path looking for a file starting"
7845e35772b2Smrg		if test -z "$potlib" ; then
7846e35772b2Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847e35772b2Smrg		else
7848e35772b2Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849e35772b2Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850e35772b2Smrg		fi
7851e35772b2Smrg	      fi
7852e35772b2Smrg	      ;;
7853e35772b2Smrg	    *)
7854e35772b2Smrg	      # Add a -L argument.
785574c14cd6Smrg	      func_append newdeplibs " $a_deplib"
7856e35772b2Smrg	      ;;
7857e35772b2Smrg	    esac
7858e35772b2Smrg	  done # Gone through all deplibs.
7859e35772b2Smrg	  ;;
7860e35772b2Smrg	match_pattern*)
7861e35772b2Smrg	  set dummy $deplibs_check_method; shift
7862e35772b2Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863e35772b2Smrg	  for a_deplib in $deplibs; do
7864e35772b2Smrg	    case $a_deplib in
7865e35772b2Smrg	    -l*)
7866e35772b2Smrg	      func_stripname -l '' "$a_deplib"
7867e35772b2Smrg	      name=$func_stripname_result
7868e35772b2Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869e35772b2Smrg		case " $predeps $postdeps " in
7870e35772b2Smrg		*" $a_deplib "*)
787174c14cd6Smrg		  func_append newdeplibs " $a_deplib"
7872e35772b2Smrg		  a_deplib=""
7873e35772b2Smrg		  ;;
7874e35772b2Smrg		esac
7875e35772b2Smrg	      fi
7876e35772b2Smrg	      if test -n "$a_deplib" ; then
7877e35772b2Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878e35772b2Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879e35772b2Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880e35772b2Smrg		  for potent_lib in $potential_libs; do
7881e35772b2Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
788274c14cd6Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883e35772b2Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
788474c14cd6Smrg		      func_append newdeplibs " $a_deplib"
7885e35772b2Smrg		      a_deplib=""
7886e35772b2Smrg		      break 2
7887e35772b2Smrg		    fi
7888e35772b2Smrg		  done
7889e35772b2Smrg		done
7890e35772b2Smrg	      fi
7891e35772b2Smrg	      if test -n "$a_deplib" ; then
7892e35772b2Smrg		droppeddeps=yes
789374c14cd6Smrg		echo
7894e35772b2Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
789574c14cd6Smrg		echo "*** I have the capability to make that library automatically link in when"
789674c14cd6Smrg		echo "*** you link to this library.  But I can only do this if you have a"
789774c14cd6Smrg		echo "*** shared version of the library, which you do not appear to have"
789874c14cd6Smrg		echo "*** because I did check the linker path looking for a file starting"
7899e35772b2Smrg		if test -z "$potlib" ; then
7900e35772b2Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901e35772b2Smrg		else
7902e35772b2Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903e35772b2Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904e35772b2Smrg		fi
7905e35772b2Smrg	      fi
7906e35772b2Smrg	      ;;
7907e35772b2Smrg	    *)
7908e35772b2Smrg	      # Add a -L argument.
790974c14cd6Smrg	      func_append newdeplibs " $a_deplib"
7910e35772b2Smrg	      ;;
7911e35772b2Smrg	    esac
7912e35772b2Smrg	  done # Gone through all deplibs.
7913e35772b2Smrg	  ;;
7914e35772b2Smrg	none | unknown | *)
7915e35772b2Smrg	  newdeplibs=""
791674c14cd6Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917e35772b2Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918e35772b2Smrg	    for i in $predeps $postdeps ; do
7919e35772b2Smrg	      # can't use Xsed below, because $i might contain '/'
792074c14cd6Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921e35772b2Smrg	    done
7922e35772b2Smrg	  fi
792374c14cd6Smrg	  case $tmp_deplibs in
792474c14cd6Smrg	  *[!\	\ ]*)
792574c14cd6Smrg	    echo
7926e35772b2Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
792774c14cd6Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928e35772b2Smrg	    else
792974c14cd6Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930e35772b2Smrg	    fi
793174c14cd6Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7932e35772b2Smrg	    droppeddeps=yes
793374c14cd6Smrg	    ;;
793474c14cd6Smrg	  esac
7935e35772b2Smrg	  ;;
7936e35772b2Smrg	esac
7937e35772b2Smrg	versuffix=$versuffix_save
7938e35772b2Smrg	major=$major_save
7939e35772b2Smrg	release=$release_save
7940e35772b2Smrg	libname=$libname_save
7941e35772b2Smrg	name=$name_save
7942e35772b2Smrg
7943e35772b2Smrg	case $host in
7944e35772b2Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7945e35772b2Smrg	  # On Rhapsody replace the C library with the System framework
794674c14cd6Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947e35772b2Smrg	  ;;
7948e35772b2Smrg	esac
7949e35772b2Smrg
7950e35772b2Smrg	if test "$droppeddeps" = yes; then
7951e35772b2Smrg	  if test "$module" = yes; then
795274c14cd6Smrg	    echo
795374c14cd6Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954e35772b2Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
795574c14cd6Smrg	    echo "*** a static module, that should work as long as the dlopening"
795674c14cd6Smrg	    echo "*** application is linked with the -dlopen flag."
7957e35772b2Smrg	    if test -z "$global_symbol_pipe"; then
795874c14cd6Smrg	      echo
795974c14cd6Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
796074c14cd6Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
796174c14cd6Smrg	      echo "*** not find such a program.  So, this module is probably useless."
796274c14cd6Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963e35772b2Smrg	    fi
7964e35772b2Smrg	    if test "$build_old_libs" = no; then
7965e35772b2Smrg	      oldlibs="$output_objdir/$libname.$libext"
7966e35772b2Smrg	      build_libtool_libs=module
7967e35772b2Smrg	      build_old_libs=yes
7968e35772b2Smrg	    else
7969e35772b2Smrg	      build_libtool_libs=no
7970e35772b2Smrg	    fi
7971e35772b2Smrg	  else
797274c14cd6Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
797374c14cd6Smrg	    echo "*** automatically added whenever a program is linked with this library"
797474c14cd6Smrg	    echo "*** or is declared to -dlopen it."
7975e35772b2Smrg
7976e35772b2Smrg	    if test "$allow_undefined" = no; then
797774c14cd6Smrg	      echo
797874c14cd6Smrg	      echo "*** Since this library must not contain undefined symbols,"
797974c14cd6Smrg	      echo "*** because either the platform does not support them or"
798074c14cd6Smrg	      echo "*** it was explicitly requested with -no-undefined,"
798174c14cd6Smrg	      echo "*** libtool will only create a static version of it."
7982e35772b2Smrg	      if test "$build_old_libs" = no; then
7983e35772b2Smrg		oldlibs="$output_objdir/$libname.$libext"
7984e35772b2Smrg		build_libtool_libs=module
7985e35772b2Smrg		build_old_libs=yes
7986e35772b2Smrg	      else
7987e35772b2Smrg		build_libtool_libs=no
7988e35772b2Smrg	      fi
7989e35772b2Smrg	    fi
7990e35772b2Smrg	  fi
7991e35772b2Smrg	fi
7992e35772b2Smrg	# Done checking deplibs!
7993e35772b2Smrg	deplibs=$newdeplibs
7994e35772b2Smrg      fi
7995e35772b2Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996e35772b2Smrg      case $host in
7997e35772b2Smrg	*-*-darwin*)
799874c14cd6Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
799974c14cd6Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
800074c14cd6Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001e35772b2Smrg	  ;;
8002e35772b2Smrg      esac
8003e35772b2Smrg
8004e35772b2Smrg      # move library search paths that coincide with paths to not yet
8005e35772b2Smrg      # installed libraries to the beginning of the library search list
8006e35772b2Smrg      new_libs=
8007e35772b2Smrg      for path in $notinst_path; do
8008e35772b2Smrg	case " $new_libs " in
8009e35772b2Smrg	*" -L$path/$objdir "*) ;;
8010e35772b2Smrg	*)
8011e35772b2Smrg	  case " $deplibs " in
8012e35772b2Smrg	  *" -L$path/$objdir "*)
801374c14cd6Smrg	    func_append new_libs " -L$path/$objdir" ;;
8014e35772b2Smrg	  esac
8015e35772b2Smrg	  ;;
8016e35772b2Smrg	esac
8017e35772b2Smrg      done
8018e35772b2Smrg      for deplib in $deplibs; do
8019e35772b2Smrg	case $deplib in
8020e35772b2Smrg	-L*)
8021e35772b2Smrg	  case " $new_libs " in
8022e35772b2Smrg	  *" $deplib "*) ;;
802374c14cd6Smrg	  *) func_append new_libs " $deplib" ;;
8024e35772b2Smrg	  esac
8025e35772b2Smrg	  ;;
802674c14cd6Smrg	*) func_append new_libs " $deplib" ;;
8027e35772b2Smrg	esac
8028e35772b2Smrg      done
8029e35772b2Smrg      deplibs="$new_libs"
8030e35772b2Smrg
8031e35772b2Smrg      # All the library-specific variables (install_libdir is set above).
8032e35772b2Smrg      library_names=
8033e35772b2Smrg      old_library=
8034e35772b2Smrg      dlname=
8035e35772b2Smrg
8036e35772b2Smrg      # Test again, we may have decided not to build it any more
8037e35772b2Smrg      if test "$build_libtool_libs" = yes; then
803874c14cd6Smrg	# Remove ${wl} instances when linking with ld.
803974c14cd6Smrg	# FIXME: should test the right _cmds variable.
804074c14cd6Smrg	case $archive_cmds in
804174c14cd6Smrg	  *\$LD\ *) wl= ;;
804274c14cd6Smrg        esac
8043e35772b2Smrg	if test "$hardcode_into_libs" = yes; then
8044e35772b2Smrg	  # Hardcode the library paths
8045e35772b2Smrg	  hardcode_libdirs=
8046e35772b2Smrg	  dep_rpath=
8047e35772b2Smrg	  rpath="$finalize_rpath"
804874c14cd6Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049e35772b2Smrg	  for libdir in $rpath; do
8050e35772b2Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051e35772b2Smrg	      if test -n "$hardcode_libdir_separator"; then
805274c14cd6Smrg		func_replace_sysroot "$libdir"
805374c14cd6Smrg		libdir=$func_replace_sysroot_result
8054e35772b2Smrg		if test -z "$hardcode_libdirs"; then
8055e35772b2Smrg		  hardcode_libdirs="$libdir"
8056e35772b2Smrg		else
8057e35772b2Smrg		  # Just accumulate the unique libdirs.
8058e35772b2Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059e35772b2Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060e35772b2Smrg		    ;;
8061e35772b2Smrg		  *)
806274c14cd6Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063e35772b2Smrg		    ;;
8064e35772b2Smrg		  esac
8065e35772b2Smrg		fi
8066e35772b2Smrg	      else
8067e35772b2Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
806874c14cd6Smrg		func_append dep_rpath " $flag"
8069e35772b2Smrg	      fi
8070e35772b2Smrg	    elif test -n "$runpath_var"; then
8071e35772b2Smrg	      case "$perm_rpath " in
8072e35772b2Smrg	      *" $libdir "*) ;;
807374c14cd6Smrg	      *) func_append perm_rpath " $libdir" ;;
8074e35772b2Smrg	      esac
8075e35772b2Smrg	    fi
8076e35772b2Smrg	  done
8077e35772b2Smrg	  # Substitute the hardcoded libdirs into the rpath.
8078e35772b2Smrg	  if test -n "$hardcode_libdir_separator" &&
8079e35772b2Smrg	     test -n "$hardcode_libdirs"; then
8080e35772b2Smrg	    libdir="$hardcode_libdirs"
808174c14cd6Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082e35772b2Smrg	  fi
8083e35772b2Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084e35772b2Smrg	    # We should set the runpath_var.
8085e35772b2Smrg	    rpath=
8086e35772b2Smrg	    for dir in $perm_rpath; do
808774c14cd6Smrg	      func_append rpath "$dir:"
8088e35772b2Smrg	    done
8089e35772b2Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090e35772b2Smrg	  fi
8091e35772b2Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092e35772b2Smrg	fi
809372b676d7Smrg
8094e35772b2Smrg	shlibpath="$finalize_shlibpath"
809574c14cd6Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096e35772b2Smrg	if test -n "$shlibpath"; then
8097e35772b2Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098e35772b2Smrg	fi
809972b676d7Smrg
8100e35772b2Smrg	# Get the real and link names of the library.
8101e35772b2Smrg	eval shared_ext=\"$shrext_cmds\"
8102e35772b2Smrg	eval library_names=\"$library_names_spec\"
8103e35772b2Smrg	set dummy $library_names
8104e35772b2Smrg	shift
8105e35772b2Smrg	realname="$1"
8106e35772b2Smrg	shift
810772b676d7Smrg
8108e35772b2Smrg	if test -n "$soname_spec"; then
8109e35772b2Smrg	  eval soname=\"$soname_spec\"
8110e35772b2Smrg	else
8111e35772b2Smrg	  soname="$realname"
8112e35772b2Smrg	fi
8113e35772b2Smrg	if test -z "$dlname"; then
8114e35772b2Smrg	  dlname=$soname
8115e35772b2Smrg	fi
811672b676d7Smrg
8117e35772b2Smrg	lib="$output_objdir/$realname"
8118e35772b2Smrg	linknames=
8119e35772b2Smrg	for link
8120e35772b2Smrg	do
812174c14cd6Smrg	  func_append linknames " $link"
8122e35772b2Smrg	done
812372b676d7Smrg
8124e35772b2Smrg	# Use standard objects if they are pic
812574c14cd6Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126e35772b2Smrg	test "X$libobjs" = "X " && libobjs=
812772b676d7Smrg
8128e35772b2Smrg	delfiles=
8129e35772b2Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130e35772b2Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131e35772b2Smrg	  export_symbols="$output_objdir/$libname.uexp"
813274c14cd6Smrg	  func_append delfiles " $export_symbols"
8133e35772b2Smrg	fi
813472b676d7Smrg
8135e35772b2Smrg	orig_export_symbols=
8136e35772b2Smrg	case $host_os in
8137e35772b2Smrg	cygwin* | mingw* | cegcc*)
8138e35772b2Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139e35772b2Smrg	    # exporting using user supplied symfile
8140e35772b2Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141e35772b2Smrg	      # and it's NOT already a .def file. Must figure out
8142e35772b2Smrg	      # which of the given symbols are data symbols and tag
8143e35772b2Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8144e35772b2Smrg	      # export_symbols gets reassigned inside the "prepare
8145e35772b2Smrg	      # the list of exported symbols" if statement, so the
8146e35772b2Smrg	      # include_expsyms logic still works.
8147e35772b2Smrg	      orig_export_symbols="$export_symbols"
8148e35772b2Smrg	      export_symbols=
8149e35772b2Smrg	      always_export_symbols=yes
8150e35772b2Smrg	    fi
8151e35772b2Smrg	  fi
8152e35772b2Smrg	  ;;
8153e35772b2Smrg	esac
815472b676d7Smrg
8155e35772b2Smrg	# Prepare the list of exported symbols
8156e35772b2Smrg	if test -z "$export_symbols"; then
8157e35772b2Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158e35772b2Smrg	    func_verbose "generating symbol list for \`$libname.la'"
8159e35772b2Smrg	    export_symbols="$output_objdir/$libname.exp"
8160e35772b2Smrg	    $opt_dry_run || $RM $export_symbols
8161e35772b2Smrg	    cmds=$export_symbols_cmds
8162e35772b2Smrg	    save_ifs="$IFS"; IFS='~'
816374c14cd6Smrg	    for cmd1 in $cmds; do
8164e35772b2Smrg	      IFS="$save_ifs"
816574c14cd6Smrg	      # Take the normal branch if the nm_file_list_spec branch
816674c14cd6Smrg	      # doesn't work or if tool conversion is not needed.
816774c14cd6Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
816874c14cd6Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
816974c14cd6Smrg		  try_normal_branch=yes
817074c14cd6Smrg		  eval cmd=\"$cmd1\"
817174c14cd6Smrg		  func_len " $cmd"
817274c14cd6Smrg		  len=$func_len_result
817374c14cd6Smrg		  ;;
817474c14cd6Smrg		*)
817574c14cd6Smrg		  try_normal_branch=no
817674c14cd6Smrg		  ;;
817774c14cd6Smrg	      esac
817874c14cd6Smrg	      if test "$try_normal_branch" = yes \
817974c14cd6Smrg		 && { test "$len" -lt "$max_cmd_len" \
818074c14cd6Smrg		      || test "$max_cmd_len" -le -1; }
818174c14cd6Smrg	      then
818274c14cd6Smrg		func_show_eval "$cmd" 'exit $?'
818374c14cd6Smrg		skipped_export=false
818474c14cd6Smrg	      elif test -n "$nm_file_list_spec"; then
818574c14cd6Smrg		func_basename "$output"
818674c14cd6Smrg		output_la=$func_basename_result
818774c14cd6Smrg		save_libobjs=$libobjs
818874c14cd6Smrg		save_output=$output
818974c14cd6Smrg		output=${output_objdir}/${output_la}.nm
819074c14cd6Smrg		func_to_tool_file "$output"
819174c14cd6Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
819274c14cd6Smrg		func_append delfiles " $output"
819374c14cd6Smrg		func_verbose "creating $NM input file list: $output"
819474c14cd6Smrg		for obj in $save_libobjs; do
819574c14cd6Smrg		  func_to_tool_file "$obj"
819674c14cd6Smrg		  $ECHO "$func_to_tool_file_result"
819774c14cd6Smrg		done > "$output"
819874c14cd6Smrg		eval cmd=\"$cmd1\"
8199e35772b2Smrg		func_show_eval "$cmd" 'exit $?'
820074c14cd6Smrg		output=$save_output
820174c14cd6Smrg		libobjs=$save_libobjs
8202e35772b2Smrg		skipped_export=false
8203e35772b2Smrg	      else
8204e35772b2Smrg		# The command line is too long to execute in one step.
8205e35772b2Smrg		func_verbose "using reloadable object file for export list..."
8206e35772b2Smrg		skipped_export=:
8207e35772b2Smrg		# Break out early, otherwise skipped_export may be
8208e35772b2Smrg		# set to false by a later but shorter cmd.
8209e35772b2Smrg		break
8210e35772b2Smrg	      fi
8211e35772b2Smrg	    done
8212e35772b2Smrg	    IFS="$save_ifs"
8213e35772b2Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214e35772b2Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215e35772b2Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216e35772b2Smrg	    fi
8217e35772b2Smrg	  fi
821872b676d7Smrg	fi
821972b676d7Smrg
8220e35772b2Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221e35772b2Smrg	  tmp_export_symbols="$export_symbols"
8222e35772b2Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
822374c14cd6Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224e35772b2Smrg	fi
822572b676d7Smrg
8226e35772b2Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227e35772b2Smrg	  # The given exports_symbols file has to be filtered, so filter it.
8228e35772b2Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229e35772b2Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230e35772b2Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231e35772b2Smrg	  # though. Also, the filter scales superlinearly with the number of
8232e35772b2Smrg	  # global variables. join(1) would be nice here, but unfortunately
8233e35772b2Smrg	  # isn't a blessed tool.
8234e35772b2Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
823574c14cd6Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236e35772b2Smrg	  export_symbols=$output_objdir/$libname.def
8237e35772b2Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238e35772b2Smrg	fi
823972b676d7Smrg
8240e35772b2Smrg	tmp_deplibs=
8241e35772b2Smrg	for test_deplib in $deplibs; do
8242e35772b2Smrg	  case " $convenience " in
8243e35772b2Smrg	  *" $test_deplib "*) ;;
8244e35772b2Smrg	  *)
824574c14cd6Smrg	    func_append tmp_deplibs " $test_deplib"
8246e35772b2Smrg	    ;;
8247e35772b2Smrg	  esac
8248e35772b2Smrg	done
8249e35772b2Smrg	deplibs="$tmp_deplibs"
825072b676d7Smrg
8251e35772b2Smrg	if test -n "$convenience"; then
8252e35772b2Smrg	  if test -n "$whole_archive_flag_spec" &&
8253e35772b2Smrg	    test "$compiler_needs_object" = yes &&
8254e35772b2Smrg	    test -z "$libobjs"; then
8255e35772b2Smrg	    # extract the archives, so we have objects to list.
8256e35772b2Smrg	    # TODO: could optimize this to just extract one archive.
8257e35772b2Smrg	    whole_archive_flag_spec=
8258e35772b2Smrg	  fi
8259e35772b2Smrg	  if test -n "$whole_archive_flag_spec"; then
8260e35772b2Smrg	    save_libobjs=$libobjs
8261e35772b2Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262e35772b2Smrg	    test "X$libobjs" = "X " && libobjs=
8263e35772b2Smrg	  else
8264e35772b2Smrg	    gentop="$output_objdir/${outputname}x"
826574c14cd6Smrg	    func_append generated " $gentop"
826672b676d7Smrg
8267e35772b2Smrg	    func_extract_archives $gentop $convenience
826874c14cd6Smrg	    func_append libobjs " $func_extract_archives_result"
8269e35772b2Smrg	    test "X$libobjs" = "X " && libobjs=
8270e35772b2Smrg	  fi
827172b676d7Smrg	fi
827272b676d7Smrg
8273e35772b2Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274e35772b2Smrg	  eval flag=\"$thread_safe_flag_spec\"
827574c14cd6Smrg	  func_append linker_flags " $flag"
827672b676d7Smrg	fi
827772b676d7Smrg
8278e35772b2Smrg	# Make a backup of the uninstalled library when relinking
827974c14cd6Smrg	if test "$opt_mode" = relink; then
8280e35772b2Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281e35772b2Smrg	fi
828272b676d7Smrg
8283e35772b2Smrg	# Do each of the archive commands.
8284e35772b2Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285e35772b2Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286e35772b2Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8287e35772b2Smrg	    cmds=$module_expsym_cmds
8288e35772b2Smrg	  else
8289e35772b2Smrg	    eval test_cmds=\"$module_cmds\"
8290e35772b2Smrg	    cmds=$module_cmds
8291e35772b2Smrg	  fi
829272b676d7Smrg	else
8293e35772b2Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294e35772b2Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295e35772b2Smrg	    cmds=$archive_expsym_cmds
8296e35772b2Smrg	  else
8297e35772b2Smrg	    eval test_cmds=\"$archive_cmds\"
8298e35772b2Smrg	    cmds=$archive_cmds
8299e35772b2Smrg	  fi
830072b676d7Smrg	fi
830172b676d7Smrg
8302e35772b2Smrg	if test "X$skipped_export" != "X:" &&
8303e35772b2Smrg	   func_len " $test_cmds" &&
8304e35772b2Smrg	   len=$func_len_result &&
8305e35772b2Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306e35772b2Smrg	  :
8307e35772b2Smrg	else
8308e35772b2Smrg	  # The command line is too long to link in one step, link piecewise
8309e35772b2Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310e35772b2Smrg	  # script.
831172b676d7Smrg
8312e35772b2Smrg	  # Save the value of $output and $libobjs because we want to
8313e35772b2Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8314e35772b2Smrg	  # want to use save_libobjs as it was before
8315e35772b2Smrg	  # whole_archive_flag_spec was expanded, because we can't
8316e35772b2Smrg	  # assume the linker understands whole_archive_flag_spec.
8317e35772b2Smrg	  # This may have to be revisited, in case too many
8318e35772b2Smrg	  # convenience libraries get linked in and end up exceeding
8319e35772b2Smrg	  # the spec.
8320e35772b2Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321e35772b2Smrg	    save_libobjs=$libobjs
8322e35772b2Smrg	  fi
8323e35772b2Smrg	  save_output=$output
832474c14cd6Smrg	  func_basename "$output"
832574c14cd6Smrg	  output_la=$func_basename_result
832672b676d7Smrg
8327e35772b2Smrg	  # Clear the reloadable object creation command queue and
8328e35772b2Smrg	  # initialize k to one.
8329e35772b2Smrg	  test_cmds=
8330e35772b2Smrg	  concat_cmds=
8331e35772b2Smrg	  objlist=
8332e35772b2Smrg	  last_robj=
8333e35772b2Smrg	  k=1
8334e35772b2Smrg
8335e35772b2Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336e35772b2Smrg	    output=${output_objdir}/${output_la}.lnkscript
8337e35772b2Smrg	    func_verbose "creating GNU ld script: $output"
833874c14cd6Smrg	    echo 'INPUT (' > $output
8339e35772b2Smrg	    for obj in $save_libobjs
834072b676d7Smrg	    do
834174c14cd6Smrg	      func_to_tool_file "$obj"
834274c14cd6Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8343e35772b2Smrg	    done
834474c14cd6Smrg	    echo ')' >> $output
834574c14cd6Smrg	    func_append delfiles " $output"
834674c14cd6Smrg	    func_to_tool_file "$output"
834774c14cd6Smrg	    output=$func_to_tool_file_result
8348e35772b2Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349e35772b2Smrg	    output=${output_objdir}/${output_la}.lnk
8350e35772b2Smrg	    func_verbose "creating linker input file list: $output"
8351e35772b2Smrg	    : > $output
8352e35772b2Smrg	    set x $save_libobjs
8353e35772b2Smrg	    shift
8354e35772b2Smrg	    firstobj=
8355e35772b2Smrg	    if test "$compiler_needs_object" = yes; then
8356e35772b2Smrg	      firstobj="$1 "
8357e35772b2Smrg	      shift
8358e35772b2Smrg	    fi
8359e35772b2Smrg	    for obj
8360e35772b2Smrg	    do
836174c14cd6Smrg	      func_to_tool_file "$obj"
836274c14cd6Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8363e35772b2Smrg	    done
836474c14cd6Smrg	    func_append delfiles " $output"
836574c14cd6Smrg	    func_to_tool_file "$output"
836674c14cd6Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367e35772b2Smrg	  else
8368e35772b2Smrg	    if test -n "$save_libobjs"; then
8369e35772b2Smrg	      func_verbose "creating reloadable object files..."
8370e35772b2Smrg	      output=$output_objdir/$output_la-${k}.$objext
8371e35772b2Smrg	      eval test_cmds=\"$reload_cmds\"
8372e35772b2Smrg	      func_len " $test_cmds"
8373e35772b2Smrg	      len0=$func_len_result
8374e35772b2Smrg	      len=$len0
8375e35772b2Smrg
8376e35772b2Smrg	      # Loop over the list of objects to be linked.
8377e35772b2Smrg	      for obj in $save_libobjs
8378e35772b2Smrg	      do
8379e35772b2Smrg		func_len " $obj"
8380e35772b2Smrg		func_arith $len + $func_len_result
8381e35772b2Smrg		len=$func_arith_result
8382e35772b2Smrg		if test "X$objlist" = X ||
8383e35772b2Smrg		   test "$len" -lt "$max_cmd_len"; then
8384e35772b2Smrg		  func_append objlist " $obj"
8385e35772b2Smrg		else
8386e35772b2Smrg		  # The command $test_cmds is almost too long, add a
8387e35772b2Smrg		  # command to the queue.
8388e35772b2Smrg		  if test "$k" -eq 1 ; then
8389e35772b2Smrg		    # The first file doesn't have a previous command to add.
839074c14cd6Smrg		    reload_objs=$objlist
839174c14cd6Smrg		    eval concat_cmds=\"$reload_cmds\"
8392e35772b2Smrg		  else
8393e35772b2Smrg		    # All subsequent reloadable object files will link in
8394e35772b2Smrg		    # the last one created.
839574c14cd6Smrg		    reload_objs="$objlist $last_robj"
839674c14cd6Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397e35772b2Smrg		  fi
8398e35772b2Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399e35772b2Smrg		  func_arith $k + 1
8400e35772b2Smrg		  k=$func_arith_result
8401e35772b2Smrg		  output=$output_objdir/$output_la-${k}.$objext
840274c14cd6Smrg		  objlist=" $obj"
8403e35772b2Smrg		  func_len " $last_robj"
8404e35772b2Smrg		  func_arith $len0 + $func_len_result
8405e35772b2Smrg		  len=$func_arith_result
8406e35772b2Smrg		fi
8407e35772b2Smrg	      done
8408e35772b2Smrg	      # Handle the remaining objects by creating one last
8409e35772b2Smrg	      # reloadable object file.  All subsequent reloadable object
8410e35772b2Smrg	      # files will link in the last one created.
8411e35772b2Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
841274c14cd6Smrg	      reload_objs="$objlist $last_robj"
841374c14cd6Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414e35772b2Smrg	      if test -n "$last_robj"; then
8415e35772b2Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416e35772b2Smrg	      fi
841774c14cd6Smrg	      func_append delfiles " $output"
841872b676d7Smrg
8419e35772b2Smrg	    else
8420e35772b2Smrg	      output=
8421e35772b2Smrg	    fi
842272b676d7Smrg
8423e35772b2Smrg	    if ${skipped_export-false}; then
8424e35772b2Smrg	      func_verbose "generating symbol list for \`$libname.la'"
8425e35772b2Smrg	      export_symbols="$output_objdir/$libname.exp"
8426e35772b2Smrg	      $opt_dry_run || $RM $export_symbols
8427e35772b2Smrg	      libobjs=$output
8428e35772b2Smrg	      # Append the command to create the export file.
8429e35772b2Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430e35772b2Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431e35772b2Smrg	      if test -n "$last_robj"; then
8432e35772b2Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433e35772b2Smrg	      fi
843472b676d7Smrg	    fi
843572b676d7Smrg
8436e35772b2Smrg	    test -n "$save_libobjs" &&
8437e35772b2Smrg	      func_verbose "creating a temporary reloadable object file: $output"
843872b676d7Smrg
8439e35772b2Smrg	    # Loop through the commands generated above and execute them.
8440e35772b2Smrg	    save_ifs="$IFS"; IFS='~'
8441e35772b2Smrg	    for cmd in $concat_cmds; do
8442e35772b2Smrg	      IFS="$save_ifs"
8443e35772b2Smrg	      $opt_silent || {
8444e35772b2Smrg		  func_quote_for_expand "$cmd"
8445e35772b2Smrg		  eval "func_echo $func_quote_for_expand_result"
8446e35772b2Smrg	      }
8447e35772b2Smrg	      $opt_dry_run || eval "$cmd" || {
8448e35772b2Smrg		lt_exit=$?
8449e35772b2Smrg
8450e35772b2Smrg		# Restore the uninstalled library and exit
845174c14cd6Smrg		if test "$opt_mode" = relink; then
8452e35772b2Smrg		  ( cd "$output_objdir" && \
8453e35772b2Smrg		    $RM "${realname}T" && \
8454e35772b2Smrg		    $MV "${realname}U" "$realname" )
8455e35772b2Smrg		fi
845672b676d7Smrg
8457e35772b2Smrg		exit $lt_exit
8458e35772b2Smrg	      }
8459e35772b2Smrg	    done
8460e35772b2Smrg	    IFS="$save_ifs"
846172b676d7Smrg
8462e35772b2Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463e35772b2Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464e35772b2Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
846572b676d7Smrg	    fi
846672b676d7Smrg	  fi
846772b676d7Smrg
8468e35772b2Smrg          if ${skipped_export-false}; then
8469e35772b2Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470e35772b2Smrg	      tmp_export_symbols="$export_symbols"
8471e35772b2Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
847274c14cd6Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473e35772b2Smrg	    fi
847472b676d7Smrg
8475e35772b2Smrg	    if test -n "$orig_export_symbols"; then
8476e35772b2Smrg	      # The given exports_symbols file has to be filtered, so filter it.
8477e35772b2Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478e35772b2Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479e35772b2Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480e35772b2Smrg	      # though. Also, the filter scales superlinearly with the number of
8481e35772b2Smrg	      # global variables. join(1) would be nice here, but unfortunately
8482e35772b2Smrg	      # isn't a blessed tool.
8483e35772b2Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
848474c14cd6Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485e35772b2Smrg	      export_symbols=$output_objdir/$libname.def
8486e35772b2Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487e35772b2Smrg	    fi
8488e35772b2Smrg	  fi
848972b676d7Smrg
8490e35772b2Smrg	  libobjs=$output
8491e35772b2Smrg	  # Restore the value of output.
8492e35772b2Smrg	  output=$save_output
849372b676d7Smrg
8494e35772b2Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495e35772b2Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496e35772b2Smrg	    test "X$libobjs" = "X " && libobjs=
8497e35772b2Smrg	  fi
8498e35772b2Smrg	  # Expand the library linking commands again to reset the
8499e35772b2Smrg	  # value of $libobjs for piecewise linking.
850072b676d7Smrg
8501e35772b2Smrg	  # Do each of the archive commands.
8502e35772b2Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503e35772b2Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504e35772b2Smrg	      cmds=$module_expsym_cmds
8505e35772b2Smrg	    else
8506e35772b2Smrg	      cmds=$module_cmds
850772b676d7Smrg	    fi
850872b676d7Smrg	  else
8509e35772b2Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510e35772b2Smrg	      cmds=$archive_expsym_cmds
8511e35772b2Smrg	    else
8512e35772b2Smrg	      cmds=$archive_cmds
8513e35772b2Smrg	    fi
851472b676d7Smrg	  fi
8515e35772b2Smrg	fi
851672b676d7Smrg
8517e35772b2Smrg	if test -n "$delfiles"; then
8518e35772b2Smrg	  # Append the command to remove temporary files to $cmds.
8519e35772b2Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520e35772b2Smrg	fi
852172b676d7Smrg
8522e35772b2Smrg	# Add any objects from preloaded convenience libraries
8523e35772b2Smrg	if test -n "$dlprefiles"; then
8524e35772b2Smrg	  gentop="$output_objdir/${outputname}x"
852574c14cd6Smrg	  func_append generated " $gentop"
852672b676d7Smrg
8527e35772b2Smrg	  func_extract_archives $gentop $dlprefiles
852874c14cd6Smrg	  func_append libobjs " $func_extract_archives_result"
8529e35772b2Smrg	  test "X$libobjs" = "X " && libobjs=
8530e35772b2Smrg	fi
853172b676d7Smrg
8532e35772b2Smrg	save_ifs="$IFS"; IFS='~'
8533e35772b2Smrg	for cmd in $cmds; do
8534e35772b2Smrg	  IFS="$save_ifs"
8535e35772b2Smrg	  eval cmd=\"$cmd\"
8536e35772b2Smrg	  $opt_silent || {
8537e35772b2Smrg	    func_quote_for_expand "$cmd"
8538e35772b2Smrg	    eval "func_echo $func_quote_for_expand_result"
8539e35772b2Smrg	  }
8540e35772b2Smrg	  $opt_dry_run || eval "$cmd" || {
8541e35772b2Smrg	    lt_exit=$?
854272b676d7Smrg
8543e35772b2Smrg	    # Restore the uninstalled library and exit
854474c14cd6Smrg	    if test "$opt_mode" = relink; then
8545e35772b2Smrg	      ( cd "$output_objdir" && \
8546e35772b2Smrg	        $RM "${realname}T" && \
8547e35772b2Smrg		$MV "${realname}U" "$realname" )
8548e35772b2Smrg	    fi
854972b676d7Smrg
8550e35772b2Smrg	    exit $lt_exit
8551e35772b2Smrg	  }
8552e35772b2Smrg	done
8553e35772b2Smrg	IFS="$save_ifs"
855472b676d7Smrg
8555e35772b2Smrg	# Restore the uninstalled library and exit
855674c14cd6Smrg	if test "$opt_mode" = relink; then
8557e35772b2Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
855872b676d7Smrg
8559e35772b2Smrg	  if test -n "$convenience"; then
8560e35772b2Smrg	    if test -z "$whole_archive_flag_spec"; then
8561e35772b2Smrg	      func_show_eval '${RM}r "$gentop"'
8562e35772b2Smrg	    fi
8563e35772b2Smrg	  fi
856472b676d7Smrg
8565e35772b2Smrg	  exit $EXIT_SUCCESS
8566e35772b2Smrg	fi
8567e35772b2Smrg
8568e35772b2Smrg	# Create links to the real library.
8569e35772b2Smrg	for linkname in $linknames; do
8570e35772b2Smrg	  if test "$realname" != "$linkname"; then
8571e35772b2Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
857272b676d7Smrg	  fi
857372b676d7Smrg	done
857472b676d7Smrg
8575e35772b2Smrg	# If -module or -export-dynamic was specified, set the dlname.
8576e35772b2Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577e35772b2Smrg	  # On all known operating systems, these are identical.
8578e35772b2Smrg	  dlname="$soname"
8579e35772b2Smrg	fi
8580e35772b2Smrg      fi
858172b676d7Smrg      ;;
858272b676d7Smrg
8583e35772b2Smrg    obj)
8584e35772b2Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585e35772b2Smrg	func_warning "\`-dlopen' is ignored for objects"
8586e35772b2Smrg      fi
858772b676d7Smrg
8588e35772b2Smrg      case " $deplibs" in
8589e35772b2Smrg      *\ -l* | *\ -L*)
8590e35772b2Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
859172b676d7Smrg      esac
859272b676d7Smrg
8593e35772b2Smrg      test -n "$rpath" && \
8594e35772b2Smrg	func_warning "\`-rpath' is ignored for objects"
8595e35772b2Smrg
8596e35772b2Smrg      test -n "$xrpath" && \
8597e35772b2Smrg	func_warning "\`-R' is ignored for objects"
859872b676d7Smrg
8599e35772b2Smrg      test -n "$vinfo" && \
8600e35772b2Smrg	func_warning "\`-version-info' is ignored for objects"
860172b676d7Smrg
8602e35772b2Smrg      test -n "$release" && \
8603e35772b2Smrg	func_warning "\`-release' is ignored for objects"
8604e35772b2Smrg
8605e35772b2Smrg      case $output in
8606e35772b2Smrg      *.lo)
8607e35772b2Smrg	test -n "$objs$old_deplibs" && \
8608e35772b2Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609e35772b2Smrg
8610e35772b2Smrg	libobj=$output
8611e35772b2Smrg	func_lo2o "$libobj"
8612e35772b2Smrg	obj=$func_lo2o_result
861372b676d7Smrg	;;
861472b676d7Smrg      *)
8615e35772b2Smrg	libobj=
8616e35772b2Smrg	obj="$output"
861772b676d7Smrg	;;
861872b676d7Smrg      esac
861972b676d7Smrg
8620e35772b2Smrg      # Delete the old objects.
8621e35772b2Smrg      $opt_dry_run || $RM $obj $libobj
862272b676d7Smrg
8623e35772b2Smrg      # Objects from convenience libraries.  This assumes
8624e35772b2Smrg      # single-version convenience libraries.  Whenever we create
8625e35772b2Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626e35772b2Smrg      # the extraction.
8627e35772b2Smrg      reload_conv_objs=
8628e35772b2Smrg      gentop=
8629e35772b2Smrg      # reload_cmds runs $LD directly, so let us get rid of
8630e35772b2Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8631e35772b2Smrg      # turning comma into space..
8632e35772b2Smrg      wl=
863372b676d7Smrg
8634e35772b2Smrg      if test -n "$convenience"; then
8635e35772b2Smrg	if test -n "$whole_archive_flag_spec"; then
8636e35772b2Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
863774c14cd6Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638e35772b2Smrg	else
8639e35772b2Smrg	  gentop="$output_objdir/${obj}x"
864074c14cd6Smrg	  func_append generated " $gentop"
864172b676d7Smrg
8642e35772b2Smrg	  func_extract_archives $gentop $convenience
8643e35772b2Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644e35772b2Smrg	fi
864572b676d7Smrg      fi
864672b676d7Smrg
864774c14cd6Smrg      # If we're not building shared, we need to use non_pic_objs
864874c14cd6Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
864974c14cd6Smrg
8650e35772b2Smrg      # Create the old-style object.
865174c14cd6Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
865272b676d7Smrg
8653e35772b2Smrg      output="$obj"
8654e35772b2Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
865572b676d7Smrg
8656e35772b2Smrg      # Exit if we aren't doing a library object file.
8657e35772b2Smrg      if test -z "$libobj"; then
8658e35772b2Smrg	if test -n "$gentop"; then
8659e35772b2Smrg	  func_show_eval '${RM}r "$gentop"'
8660e35772b2Smrg	fi
8661e35772b2Smrg
8662e35772b2Smrg	exit $EXIT_SUCCESS
866372b676d7Smrg      fi
8664e35772b2Smrg
8665e35772b2Smrg      if test "$build_libtool_libs" != yes; then
8666e35772b2Smrg	if test -n "$gentop"; then
8667e35772b2Smrg	  func_show_eval '${RM}r "$gentop"'
8668e35772b2Smrg	fi
8669e35772b2Smrg
8670e35772b2Smrg	# Create an invalid libtool object if no PIC, so that we don't
8671e35772b2Smrg	# accidentally link it into a program.
8672e35772b2Smrg	# $show "echo timestamp > $libobj"
8673e35772b2Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674e35772b2Smrg	exit $EXIT_SUCCESS
8675e35772b2Smrg      fi
8676e35772b2Smrg
8677e35772b2Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678e35772b2Smrg	# Only do commands if we really have different PIC objects.
8679e35772b2Smrg	reload_objs="$libobjs $reload_conv_objs"
8680e35772b2Smrg	output="$libobj"
8681e35772b2Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682e35772b2Smrg      fi
8683e35772b2Smrg
8684e35772b2Smrg      if test -n "$gentop"; then
8685e35772b2Smrg	func_show_eval '${RM}r "$gentop"'
8686e35772b2Smrg      fi
8687e35772b2Smrg
8688e35772b2Smrg      exit $EXIT_SUCCESS
868972b676d7Smrg      ;;
869072b676d7Smrg
8691e35772b2Smrg    prog)
8692e35772b2Smrg      case $host in
8693e35772b2Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8694e35772b2Smrg	          output=$func_stripname_result.exe;;
8695e35772b2Smrg      esac
8696e35772b2Smrg      test -n "$vinfo" && \
8697e35772b2Smrg	func_warning "\`-version-info' is ignored for programs"
869872b676d7Smrg
8699e35772b2Smrg      test -n "$release" && \
8700e35772b2Smrg	func_warning "\`-release' is ignored for programs"
870172b676d7Smrg
8702e35772b2Smrg      test "$preload" = yes \
8703e35772b2Smrg        && test "$dlopen_support" = unknown \
8704e35772b2Smrg	&& test "$dlopen_self" = unknown \
8705e35772b2Smrg	&& test "$dlopen_self_static" = unknown && \
8706e35772b2Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707e35772b2Smrg
8708e35772b2Smrg      case $host in
8709e35772b2Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8710e35772b2Smrg	# On Rhapsody replace the C library is the System framework
871174c14cd6Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
871274c14cd6Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
871372b676d7Smrg	;;
8714e35772b2Smrg      esac
871572b676d7Smrg
8716e35772b2Smrg      case $host in
8717e35772b2Smrg      *-*-darwin*)
8718e35772b2Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8719e35772b2Smrg	# But is supposedly fixed on 10.4 or later (yay!).
8720e35772b2Smrg	if test "$tagname" = CXX ; then
8721e35772b2Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722e35772b2Smrg	    10.[0123])
872374c14cd6Smrg	      func_append compile_command " ${wl}-bind_at_load"
872474c14cd6Smrg	      func_append finalize_command " ${wl}-bind_at_load"
8725e35772b2Smrg	    ;;
8726e35772b2Smrg	  esac
872772b676d7Smrg	fi
8728e35772b2Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
872974c14cd6Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
873074c14cd6Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731e35772b2Smrg	;;
8732e35772b2Smrg      esac
873372b676d7Smrg
873472b676d7Smrg
8735e35772b2Smrg      # move library search paths that coincide with paths to not yet
8736e35772b2Smrg      # installed libraries to the beginning of the library search list
8737e35772b2Smrg      new_libs=
8738e35772b2Smrg      for path in $notinst_path; do
8739e35772b2Smrg	case " $new_libs " in
8740e35772b2Smrg	*" -L$path/$objdir "*) ;;
8741e35772b2Smrg	*)
8742e35772b2Smrg	  case " $compile_deplibs " in
8743e35772b2Smrg	  *" -L$path/$objdir "*)
874474c14cd6Smrg	    func_append new_libs " -L$path/$objdir" ;;
874572b676d7Smrg	  esac
8746e35772b2Smrg	  ;;
8747e35772b2Smrg	esac
8748e35772b2Smrg      done
8749e35772b2Smrg      for deplib in $compile_deplibs; do
8750e35772b2Smrg	case $deplib in
8751e35772b2Smrg	-L*)
8752e35772b2Smrg	  case " $new_libs " in
8753e35772b2Smrg	  *" $deplib "*) ;;
875474c14cd6Smrg	  *) func_append new_libs " $deplib" ;;
875572b676d7Smrg	  esac
8756e35772b2Smrg	  ;;
875774c14cd6Smrg	*) func_append new_libs " $deplib" ;;
8758e35772b2Smrg	esac
8759e35772b2Smrg      done
8760e35772b2Smrg      compile_deplibs="$new_libs"
876172b676d7Smrg
876272b676d7Smrg
876374c14cd6Smrg      func_append compile_command " $compile_deplibs"
876474c14cd6Smrg      func_append finalize_command " $finalize_deplibs"
876572b676d7Smrg
8766e35772b2Smrg      if test -n "$rpath$xrpath"; then
8767e35772b2Smrg	# If the user specified any rpath flags, then add them.
8768e35772b2Smrg	for libdir in $rpath $xrpath; do
8769e35772b2Smrg	  # This is the magic to use -rpath.
8770e35772b2Smrg	  case "$finalize_rpath " in
8771e35772b2Smrg	  *" $libdir "*) ;;
877274c14cd6Smrg	  *) func_append finalize_rpath " $libdir" ;;
8773e35772b2Smrg	  esac
8774e35772b2Smrg	done
8775e35772b2Smrg      fi
877672b676d7Smrg
8777e35772b2Smrg      # Now hardcode the library paths
8778e35772b2Smrg      rpath=
8779e35772b2Smrg      hardcode_libdirs=
8780e35772b2Smrg      for libdir in $compile_rpath $finalize_rpath; do
8781e35772b2Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8782e35772b2Smrg	  if test -n "$hardcode_libdir_separator"; then
8783e35772b2Smrg	    if test -z "$hardcode_libdirs"; then
8784e35772b2Smrg	      hardcode_libdirs="$libdir"
8785e35772b2Smrg	    else
8786e35772b2Smrg	      # Just accumulate the unique libdirs.
8787e35772b2Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788e35772b2Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789e35772b2Smrg		;;
8790e35772b2Smrg	      *)
879174c14cd6Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792e35772b2Smrg		;;
8793e35772b2Smrg	      esac
8794e35772b2Smrg	    fi
879572b676d7Smrg	  else
8796e35772b2Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
879774c14cd6Smrg	    func_append rpath " $flag"
879872b676d7Smrg	  fi
8799e35772b2Smrg	elif test -n "$runpath_var"; then
8800e35772b2Smrg	  case "$perm_rpath " in
8801e35772b2Smrg	  *" $libdir "*) ;;
880274c14cd6Smrg	  *) func_append perm_rpath " $libdir" ;;
8803e35772b2Smrg	  esac
8804e35772b2Smrg	fi
8805e35772b2Smrg	case $host in
8806e35772b2Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807e35772b2Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808e35772b2Smrg	  case :$dllsearchpath: in
8809e35772b2Smrg	  *":$libdir:"*) ;;
8810e35772b2Smrg	  ::) dllsearchpath=$libdir;;
881174c14cd6Smrg	  *) func_append dllsearchpath ":$libdir";;
8812e35772b2Smrg	  esac
8813e35772b2Smrg	  case :$dllsearchpath: in
8814e35772b2Smrg	  *":$testbindir:"*) ;;
8815e35772b2Smrg	  ::) dllsearchpath=$testbindir;;
881674c14cd6Smrg	  *) func_append dllsearchpath ":$testbindir";;
8817e35772b2Smrg	  esac
8818e35772b2Smrg	  ;;
8819e35772b2Smrg	esac
8820e35772b2Smrg      done
8821e35772b2Smrg      # Substitute the hardcoded libdirs into the rpath.
8822e35772b2Smrg      if test -n "$hardcode_libdir_separator" &&
8823e35772b2Smrg	 test -n "$hardcode_libdirs"; then
8824e35772b2Smrg	libdir="$hardcode_libdirs"
8825e35772b2Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826e35772b2Smrg      fi
8827e35772b2Smrg      compile_rpath="$rpath"
882872b676d7Smrg
8829e35772b2Smrg      rpath=
8830e35772b2Smrg      hardcode_libdirs=
8831e35772b2Smrg      for libdir in $finalize_rpath; do
8832e35772b2Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8833e35772b2Smrg	  if test -n "$hardcode_libdir_separator"; then
8834e35772b2Smrg	    if test -z "$hardcode_libdirs"; then
8835e35772b2Smrg	      hardcode_libdirs="$libdir"
8836e35772b2Smrg	    else
8837e35772b2Smrg	      # Just accumulate the unique libdirs.
8838e35772b2Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839e35772b2Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840e35772b2Smrg		;;
8841e35772b2Smrg	      *)
884274c14cd6Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843e35772b2Smrg		;;
8844e35772b2Smrg	      esac
8845e35772b2Smrg	    fi
884672b676d7Smrg	  else
8847e35772b2Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
884874c14cd6Smrg	    func_append rpath " $flag"
884972b676d7Smrg	  fi
8850e35772b2Smrg	elif test -n "$runpath_var"; then
8851e35772b2Smrg	  case "$finalize_perm_rpath " in
8852e35772b2Smrg	  *" $libdir "*) ;;
885374c14cd6Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8854e35772b2Smrg	  esac
885572b676d7Smrg	fi
8856e35772b2Smrg      done
8857e35772b2Smrg      # Substitute the hardcoded libdirs into the rpath.
8858e35772b2Smrg      if test -n "$hardcode_libdir_separator" &&
8859e35772b2Smrg	 test -n "$hardcode_libdirs"; then
8860e35772b2Smrg	libdir="$hardcode_libdirs"
8861e35772b2Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862e35772b2Smrg      fi
8863e35772b2Smrg      finalize_rpath="$rpath"
886472b676d7Smrg
8865e35772b2Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866e35772b2Smrg	# Transform all the library objects into standard objects.
886774c14cd6Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
886874c14cd6Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869e35772b2Smrg      fi
887072b676d7Smrg
8871e35772b2Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
887272b676d7Smrg
8873e35772b2Smrg      # template prelinking step
8874e35772b2Smrg      if test -n "$prelink_cmds"; then
8875e35772b2Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876e35772b2Smrg      fi
887772b676d7Smrg
8878e35772b2Smrg      wrappers_required=yes
8879e35772b2Smrg      case $host in
888074c14cd6Smrg      *cegcc* | *mingw32ce*)
888174c14cd6Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
888274c14cd6Smrg        wrappers_required=no
888374c14cd6Smrg        ;;
8884e35772b2Smrg      *cygwin* | *mingw* )
8885e35772b2Smrg        if test "$build_libtool_libs" != yes; then
8886e35772b2Smrg          wrappers_required=no
8887e35772b2Smrg        fi
8888e35772b2Smrg        ;;
8889e35772b2Smrg      *)
8890e35772b2Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891e35772b2Smrg          wrappers_required=no
8892e35772b2Smrg        fi
8893e35772b2Smrg        ;;
8894e35772b2Smrg      esac
8895e35772b2Smrg      if test "$wrappers_required" = no; then
8896e35772b2Smrg	# Replace the output file specification.
889774c14cd6Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898e35772b2Smrg	link_command="$compile_command$compile_rpath"
889972b676d7Smrg
8900e35772b2Smrg	# We have no uninstalled library dependencies, so finalize right now.
8901e35772b2Smrg	exit_status=0
8902e35772b2Smrg	func_show_eval "$link_command" 'exit_status=$?'
890372b676d7Smrg
890474c14cd6Smrg	if test -n "$postlink_cmds"; then
890574c14cd6Smrg	  func_to_tool_file "$output"
890674c14cd6Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
890774c14cd6Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
890874c14cd6Smrg	fi
890974c14cd6Smrg
8910e35772b2Smrg	# Delete the generated files.
8911e35772b2Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912e35772b2Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
891372b676d7Smrg	fi
891472b676d7Smrg
8915e35772b2Smrg	exit $exit_status
8916e35772b2Smrg      fi
891772b676d7Smrg
8918e35772b2Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919e35772b2Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920e35772b2Smrg      fi
8921e35772b2Smrg      if test -n "$finalize_shlibpath"; then
8922e35772b2Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923e35772b2Smrg      fi
892472b676d7Smrg
8925e35772b2Smrg      compile_var=
8926e35772b2Smrg      finalize_var=
8927e35772b2Smrg      if test -n "$runpath_var"; then
8928e35772b2Smrg	if test -n "$perm_rpath"; then
8929e35772b2Smrg	  # We should set the runpath_var.
8930e35772b2Smrg	  rpath=
8931e35772b2Smrg	  for dir in $perm_rpath; do
893274c14cd6Smrg	    func_append rpath "$dir:"
8933e35772b2Smrg	  done
8934e35772b2Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
893572b676d7Smrg	fi
8936e35772b2Smrg	if test -n "$finalize_perm_rpath"; then
8937e35772b2Smrg	  # We should set the runpath_var.
8938e35772b2Smrg	  rpath=
8939e35772b2Smrg	  for dir in $finalize_perm_rpath; do
894074c14cd6Smrg	    func_append rpath "$dir:"
8941e35772b2Smrg	  done
8942e35772b2Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
894372b676d7Smrg	fi
8944e35772b2Smrg      fi
894572b676d7Smrg
8946e35772b2Smrg      if test "$no_install" = yes; then
8947e35772b2Smrg	# We don't need to create a wrapper script.
8948e35772b2Smrg	link_command="$compile_var$compile_command$compile_rpath"
8949e35772b2Smrg	# Replace the output file specification.
895074c14cd6Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951e35772b2Smrg	# Delete the old output file.
8952e35772b2Smrg	$opt_dry_run || $RM $output
8953e35772b2Smrg	# Link the executable and exit
8954e35772b2Smrg	func_show_eval "$link_command" 'exit $?'
895574c14cd6Smrg
895674c14cd6Smrg	if test -n "$postlink_cmds"; then
895774c14cd6Smrg	  func_to_tool_file "$output"
895874c14cd6Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
895974c14cd6Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
896074c14cd6Smrg	fi
896174c14cd6Smrg
896272b676d7Smrg	exit $EXIT_SUCCESS
8963e35772b2Smrg      fi
896472b676d7Smrg
8965e35772b2Smrg      if test "$hardcode_action" = relink; then
8966e35772b2Smrg	# Fast installation is not supported
8967e35772b2Smrg	link_command="$compile_var$compile_command$compile_rpath"
8968e35772b2Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969e35772b2Smrg
8970e35772b2Smrg	func_warning "this platform does not like uninstalled shared libraries"
8971e35772b2Smrg	func_warning "\`$output' will be relinked during installation"
8972e35772b2Smrg      else
8973e35772b2Smrg	if test "$fast_install" != no; then
8974e35772b2Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8975e35772b2Smrg	  if test "$fast_install" = yes; then
897674c14cd6Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977e35772b2Smrg	  else
8978e35772b2Smrg	    # fast_install is set to needless
8979e35772b2Smrg	    relink_command=
8980e35772b2Smrg	  fi
898172b676d7Smrg	else
8982e35772b2Smrg	  link_command="$compile_var$compile_command$compile_rpath"
8983e35772b2Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
898472b676d7Smrg	fi
8985e35772b2Smrg      fi
898672b676d7Smrg
8987e35772b2Smrg      # Replace the output file specification.
898874c14cd6Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
898972b676d7Smrg
8990e35772b2Smrg      # Delete the old output files.
8991e35772b2Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
899272b676d7Smrg
8993e35772b2Smrg      func_show_eval "$link_command" 'exit $?'
899472b676d7Smrg
899574c14cd6Smrg      if test -n "$postlink_cmds"; then
899674c14cd6Smrg	func_to_tool_file "$output_objdir/$outputname"
899774c14cd6Smrg	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'`
899874c14cd6Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
899974c14cd6Smrg      fi
900074c14cd6Smrg
9001e35772b2Smrg      # Now create the wrapper script.
9002e35772b2Smrg      func_verbose "creating $output"
900372b676d7Smrg
9004e35772b2Smrg      # Quote the relink command for shipping.
9005e35772b2Smrg      if test -n "$relink_command"; then
9006e35772b2Smrg	# Preserve any variables that may affect compiler behavior
9007e35772b2Smrg	for var in $variables_saved_for_relink; do
9008e35772b2Smrg	  if eval test -z \"\${$var+set}\"; then
9009e35772b2Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010e35772b2Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011e35772b2Smrg	    relink_command="$var=; export $var; $relink_command"
901272b676d7Smrg	  else
9013e35772b2Smrg	    func_quote_for_eval "$var_value"
9014e35772b2Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
901572b676d7Smrg	  fi
9016e35772b2Smrg	done
9017e35772b2Smrg	relink_command="(cd `pwd`; $relink_command)"
901874c14cd6Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019e35772b2Smrg      fi
9020e35772b2Smrg
9021e35772b2Smrg      # Only actually do things if not in dry run mode.
9022e35772b2Smrg      $opt_dry_run || {
9023e35772b2Smrg	# win32 will think the script is a binary if it has
9024e35772b2Smrg	# a .exe suffix, so we strip it off here.
9025e35772b2Smrg	case $output in
9026e35772b2Smrg	  *.exe) func_stripname '' '.exe' "$output"
9027e35772b2Smrg	         output=$func_stripname_result ;;
9028e35772b2Smrg	esac
9029e35772b2Smrg	# test for cygwin because mv fails w/o .exe extensions
9030e35772b2Smrg	case $host in
9031e35772b2Smrg	  *cygwin*)
9032e35772b2Smrg	    exeext=.exe
9033e35772b2Smrg	    func_stripname '' '.exe' "$outputname"
9034e35772b2Smrg	    outputname=$func_stripname_result ;;
9035e35772b2Smrg	  *) exeext= ;;
903672b676d7Smrg	esac
9037e35772b2Smrg	case $host in
9038e35772b2Smrg	  *cygwin* | *mingw* )
9039e35772b2Smrg	    func_dirname_and_basename "$output" "" "."
9040e35772b2Smrg	    output_name=$func_basename_result
9041e35772b2Smrg	    output_path=$func_dirname_result
9042e35772b2Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043e35772b2Smrg	    cwrapper="$output_path/$output_name.exe"
9044e35772b2Smrg	    $RM $cwrappersource $cwrapper
9045e35772b2Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046e35772b2Smrg
9047e35772b2Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9048e35772b2Smrg
9049e35772b2Smrg	    # The wrapper executable is built using the $host compiler,
9050e35772b2Smrg	    # because it contains $host paths and files. If cross-
9051e35772b2Smrg	    # compiling, it, like the target executable, must be
9052e35772b2Smrg	    # executed on the $host or under an emulation environment.
9053e35772b2Smrg	    $opt_dry_run || {
9054e35772b2Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055e35772b2Smrg	      $STRIP $cwrapper
9056e35772b2Smrg	    }
905772b676d7Smrg
9058e35772b2Smrg	    # Now, create the wrapper script for func_source use:
9059e35772b2Smrg	    func_ltwrapper_scriptname $cwrapper
9060e35772b2Smrg	    $RM $func_ltwrapper_scriptname_result
9061e35772b2Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062e35772b2Smrg	    $opt_dry_run || {
9063e35772b2Smrg	      # note: this script will not be executed, so do not chmod.
9064e35772b2Smrg	      if test "x$build" = "x$host" ; then
9065e35772b2Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066e35772b2Smrg	      else
9067e35772b2Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068e35772b2Smrg	      fi
9069e35772b2Smrg	    }
9070e35772b2Smrg	  ;;
9071e35772b2Smrg	  * )
9072e35772b2Smrg	    $RM $output
9073e35772b2Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
907472b676d7Smrg
9075e35772b2Smrg	    func_emit_wrapper no > $output
9076e35772b2Smrg	    chmod +x $output
9077e35772b2Smrg	  ;;
9078e35772b2Smrg	esac
9079e35772b2Smrg      }
9080e35772b2Smrg      exit $EXIT_SUCCESS
9081e35772b2Smrg      ;;
9082e35772b2Smrg    esac
908372b676d7Smrg
9084e35772b2Smrg    # See if we need to build an old-fashioned archive.
9085e35772b2Smrg    for oldlib in $oldlibs; do
908672b676d7Smrg
9087e35772b2Smrg      if test "$build_libtool_libs" = convenience; then
9088e35772b2Smrg	oldobjs="$libobjs_save $symfileobj"
9089e35772b2Smrg	addlibs="$convenience"
9090e35772b2Smrg	build_libtool_libs=no
9091e35772b2Smrg      else
9092e35772b2Smrg	if test "$build_libtool_libs" = module; then
9093e35772b2Smrg	  oldobjs="$libobjs_save"
9094e35772b2Smrg	  build_libtool_libs=no
9095e35772b2Smrg	else
9096e35772b2Smrg	  oldobjs="$old_deplibs $non_pic_objects"
9097e35772b2Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
909874c14cd6Smrg	    func_append oldobjs " $symfileobj"
9099e35772b2Smrg	  fi
9100e35772b2Smrg	fi
9101e35772b2Smrg	addlibs="$old_convenience"
910272b676d7Smrg      fi
910372b676d7Smrg
9104e35772b2Smrg      if test -n "$addlibs"; then
9105e35772b2Smrg	gentop="$output_objdir/${outputname}x"
910674c14cd6Smrg	func_append generated " $gentop"
910772b676d7Smrg
9108e35772b2Smrg	func_extract_archives $gentop $addlibs
910974c14cd6Smrg	func_append oldobjs " $func_extract_archives_result"
9110e35772b2Smrg      fi
911172b676d7Smrg
9112e35772b2Smrg      # Do each command in the archive commands.
9113e35772b2Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114e35772b2Smrg	cmds=$old_archive_from_new_cmds
9115e35772b2Smrg      else
911672b676d7Smrg
9117e35772b2Smrg	# Add any objects from preloaded convenience libraries
9118e35772b2Smrg	if test -n "$dlprefiles"; then
9119e35772b2Smrg	  gentop="$output_objdir/${outputname}x"
912074c14cd6Smrg	  func_append generated " $gentop"
912172b676d7Smrg
9122e35772b2Smrg	  func_extract_archives $gentop $dlprefiles
912374c14cd6Smrg	  func_append oldobjs " $func_extract_archives_result"
9124e35772b2Smrg	fi
912572b676d7Smrg
9126e35772b2Smrg	# POSIX demands no paths to be encoded in archives.  We have
9127e35772b2Smrg	# to avoid creating archives with duplicate basenames if we
9128e35772b2Smrg	# might have to extract them afterwards, e.g., when creating a
9129e35772b2Smrg	# static archive out of a convenience library, or when linking
9130e35772b2Smrg	# the entirety of a libtool archive into another (currently
9131e35772b2Smrg	# not supported by libtool).
9132e35772b2Smrg	if (for obj in $oldobjs
9133e35772b2Smrg	    do
9134e35772b2Smrg	      func_basename "$obj"
9135e35772b2Smrg	      $ECHO "$func_basename_result"
9136e35772b2Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137e35772b2Smrg	  :
9138e35772b2Smrg	else
913974c14cd6Smrg	  echo "copying selected object files to avoid basename conflicts..."
9140e35772b2Smrg	  gentop="$output_objdir/${outputname}x"
914174c14cd6Smrg	  func_append generated " $gentop"
9142e35772b2Smrg	  func_mkdir_p "$gentop"
9143e35772b2Smrg	  save_oldobjs=$oldobjs
9144e35772b2Smrg	  oldobjs=
9145e35772b2Smrg	  counter=1
9146e35772b2Smrg	  for obj in $save_oldobjs
9147e35772b2Smrg	  do
9148e35772b2Smrg	    func_basename "$obj"
9149e35772b2Smrg	    objbase="$func_basename_result"
9150e35772b2Smrg	    case " $oldobjs " in
9151e35772b2Smrg	    " ") oldobjs=$obj ;;
9152e35772b2Smrg	    *[\ /]"$objbase "*)
9153e35772b2Smrg	      while :; do
9154e35772b2Smrg		# Make sure we don't pick an alternate name that also
9155e35772b2Smrg		# overlaps.
9156e35772b2Smrg		newobj=lt$counter-$objbase
9157e35772b2Smrg		func_arith $counter + 1
9158e35772b2Smrg		counter=$func_arith_result
9159e35772b2Smrg		case " $oldobjs " in
9160e35772b2Smrg		*[\ /]"$newobj "*) ;;
9161e35772b2Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162e35772b2Smrg		esac
9163e35772b2Smrg	      done
9164e35772b2Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
916574c14cd6Smrg	      func_append oldobjs " $gentop/$newobj"
9166e35772b2Smrg	      ;;
916774c14cd6Smrg	    *) func_append oldobjs " $obj" ;;
9168e35772b2Smrg	    esac
916972b676d7Smrg	  done
917072b676d7Smrg	fi
917174c14cd6Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
917274c14cd6Smrg	tool_oldlib=$func_to_tool_file_result
9173e35772b2Smrg	eval cmds=\"$old_archive_cmds\"
917472b676d7Smrg
9175e35772b2Smrg	func_len " $cmds"
9176e35772b2Smrg	len=$func_len_result
9177e35772b2Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178e35772b2Smrg	  cmds=$old_archive_cmds
917974c14cd6Smrg	elif test -n "$archiver_list_spec"; then
918074c14cd6Smrg	  func_verbose "using command file archive linking..."
918174c14cd6Smrg	  for obj in $oldobjs
918274c14cd6Smrg	  do
918374c14cd6Smrg	    func_to_tool_file "$obj"
918474c14cd6Smrg	    $ECHO "$func_to_tool_file_result"
918574c14cd6Smrg	  done > $output_objdir/$libname.libcmd
918674c14cd6Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
918774c14cd6Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
918874c14cd6Smrg	  cmds=$old_archive_cmds
9189e35772b2Smrg	else
9190e35772b2Smrg	  # the command line is too long to link in one step, link in parts
9191e35772b2Smrg	  func_verbose "using piecewise archive linking..."
9192e35772b2Smrg	  save_RANLIB=$RANLIB
9193e35772b2Smrg	  RANLIB=:
9194e35772b2Smrg	  objlist=
9195e35772b2Smrg	  concat_cmds=
9196e35772b2Smrg	  save_oldobjs=$oldobjs
9197e35772b2Smrg	  oldobjs=
9198e35772b2Smrg	  # Is there a better way of finding the last object in the list?
9199e35772b2Smrg	  for obj in $save_oldobjs
9200e35772b2Smrg	  do
9201e35772b2Smrg	    last_oldobj=$obj
9202e35772b2Smrg	  done
9203e35772b2Smrg	  eval test_cmds=\"$old_archive_cmds\"
9204e35772b2Smrg	  func_len " $test_cmds"
9205e35772b2Smrg	  len0=$func_len_result
9206e35772b2Smrg	  len=$len0
9207e35772b2Smrg	  for obj in $save_oldobjs
9208e35772b2Smrg	  do
9209e35772b2Smrg	    func_len " $obj"
9210e35772b2Smrg	    func_arith $len + $func_len_result
9211e35772b2Smrg	    len=$func_arith_result
9212e35772b2Smrg	    func_append objlist " $obj"
9213e35772b2Smrg	    if test "$len" -lt "$max_cmd_len"; then
9214e35772b2Smrg	      :
9215e35772b2Smrg	    else
9216e35772b2Smrg	      # the above command should be used before it gets too long
9217e35772b2Smrg	      oldobjs=$objlist
9218e35772b2Smrg	      if test "$obj" = "$last_oldobj" ; then
9219e35772b2Smrg		RANLIB=$save_RANLIB
9220e35772b2Smrg	      fi
9221e35772b2Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222e35772b2Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223e35772b2Smrg	      objlist=
9224e35772b2Smrg	      len=$len0
9225e35772b2Smrg	    fi
9226e35772b2Smrg	  done
9227e35772b2Smrg	  RANLIB=$save_RANLIB
9228e35772b2Smrg	  oldobjs=$objlist
9229e35772b2Smrg	  if test "X$oldobjs" = "X" ; then
9230e35772b2Smrg	    eval cmds=\"\$concat_cmds\"
9231e35772b2Smrg	  else
9232e35772b2Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233e35772b2Smrg	  fi
9234e35772b2Smrg	fi
9235e35772b2Smrg      fi
9236e35772b2Smrg      func_execute_cmds "$cmds" 'exit $?'
923772b676d7Smrg    done
923872b676d7Smrg
9239e35772b2Smrg    test -n "$generated" && \
9240e35772b2Smrg      func_show_eval "${RM}r$generated"
924172b676d7Smrg
9242e35772b2Smrg    # Now create the libtool archive.
9243e35772b2Smrg    case $output in
9244e35772b2Smrg    *.la)
9245e35772b2Smrg      old_library=
9246e35772b2Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247e35772b2Smrg      func_verbose "creating $output"
924872b676d7Smrg
9249e35772b2Smrg      # Preserve any variables that may affect compiler behavior
9250e35772b2Smrg      for var in $variables_saved_for_relink; do
9251e35772b2Smrg	if eval test -z \"\${$var+set}\"; then
9252e35772b2Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253e35772b2Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254e35772b2Smrg	  relink_command="$var=; export $var; $relink_command"
925572b676d7Smrg	else
9256e35772b2Smrg	  func_quote_for_eval "$var_value"
9257e35772b2Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
925872b676d7Smrg	fi
9259e35772b2Smrg      done
9260e35772b2Smrg      # Quote the link command for shipping.
9261e35772b2Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
926274c14cd6Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263e35772b2Smrg      if test "$hardcode_automatic" = yes ; then
9264e35772b2Smrg	relink_command=
9265e35772b2Smrg      fi
926672b676d7Smrg
9267e35772b2Smrg      # Only create the output if not a dry run.
9268e35772b2Smrg      $opt_dry_run || {
9269e35772b2Smrg	for installed in no yes; do
9270e35772b2Smrg	  if test "$installed" = yes; then
9271e35772b2Smrg	    if test -z "$install_libdir"; then
9272e35772b2Smrg	      break
9273e35772b2Smrg	    fi
9274e35772b2Smrg	    output="$output_objdir/$outputname"i
9275e35772b2Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9276e35772b2Smrg	    newdependency_libs=
9277e35772b2Smrg	    for deplib in $dependency_libs; do
9278e35772b2Smrg	      case $deplib in
9279e35772b2Smrg	      *.la)
9280e35772b2Smrg		func_basename "$deplib"
9281e35772b2Smrg		name="$func_basename_result"
928274c14cd6Smrg		func_resolve_sysroot "$deplib"
928374c14cd6Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284e35772b2Smrg		test -z "$libdir" && \
9285e35772b2Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
928674c14cd6Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
928774c14cd6Smrg		;;
928874c14cd6Smrg	      -L*)
928974c14cd6Smrg		func_stripname -L '' "$deplib"
929074c14cd6Smrg		func_replace_sysroot "$func_stripname_result"
929174c14cd6Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292e35772b2Smrg		;;
929374c14cd6Smrg	      -R*)
929474c14cd6Smrg		func_stripname -R '' "$deplib"
929574c14cd6Smrg		func_replace_sysroot "$func_stripname_result"
929674c14cd6Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
929774c14cd6Smrg		;;
929874c14cd6Smrg	      *) func_append newdependency_libs " $deplib" ;;
9299e35772b2Smrg	      esac
9300e35772b2Smrg	    done
9301e35772b2Smrg	    dependency_libs="$newdependency_libs"
9302e35772b2Smrg	    newdlfiles=
9303e35772b2Smrg
9304e35772b2Smrg	    for lib in $dlfiles; do
9305e35772b2Smrg	      case $lib in
9306e35772b2Smrg	      *.la)
9307e35772b2Smrg	        func_basename "$lib"
9308e35772b2Smrg		name="$func_basename_result"
9309e35772b2Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310e35772b2Smrg		test -z "$libdir" && \
9311e35772b2Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
931274c14cd6Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313e35772b2Smrg		;;
931474c14cd6Smrg	      *) func_append newdlfiles " $lib" ;;
9315e35772b2Smrg	      esac
9316e35772b2Smrg	    done
9317e35772b2Smrg	    dlfiles="$newdlfiles"
9318e35772b2Smrg	    newdlprefiles=
9319e35772b2Smrg	    for lib in $dlprefiles; do
9320e35772b2Smrg	      case $lib in
9321e35772b2Smrg	      *.la)
9322e35772b2Smrg		# Only pass preopened files to the pseudo-archive (for
9323e35772b2Smrg		# eventual linking with the app. that links it) if we
9324e35772b2Smrg		# didn't already link the preopened objects directly into
9325e35772b2Smrg		# the library:
9326e35772b2Smrg		func_basename "$lib"
9327e35772b2Smrg		name="$func_basename_result"
9328e35772b2Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329e35772b2Smrg		test -z "$libdir" && \
9330e35772b2Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
933174c14cd6Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332e35772b2Smrg		;;
9333e35772b2Smrg	      esac
9334e35772b2Smrg	    done
9335e35772b2Smrg	    dlprefiles="$newdlprefiles"
9336e35772b2Smrg	  else
9337e35772b2Smrg	    newdlfiles=
9338e35772b2Smrg	    for lib in $dlfiles; do
9339e35772b2Smrg	      case $lib in
9340e35772b2Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341e35772b2Smrg		*) abs=`pwd`"/$lib" ;;
9342e35772b2Smrg	      esac
934374c14cd6Smrg	      func_append newdlfiles " $abs"
9344e35772b2Smrg	    done
9345e35772b2Smrg	    dlfiles="$newdlfiles"
9346e35772b2Smrg	    newdlprefiles=
9347e35772b2Smrg	    for lib in $dlprefiles; do
9348e35772b2Smrg	      case $lib in
9349e35772b2Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350e35772b2Smrg		*) abs=`pwd`"/$lib" ;;
9351e35772b2Smrg	      esac
935274c14cd6Smrg	      func_append newdlprefiles " $abs"
9353e35772b2Smrg	    done
9354e35772b2Smrg	    dlprefiles="$newdlprefiles"
9355e35772b2Smrg	  fi
9356e35772b2Smrg	  $RM $output
9357e35772b2Smrg	  # place dlname in correct position for cygwin
935874c14cd6Smrg	  # In fact, it would be nice if we could use this code for all target
935974c14cd6Smrg	  # systems that can't hard-code library paths into their executables
936074c14cd6Smrg	  # and that have no shared library path variable independent of PATH,
936174c14cd6Smrg	  # but it turns out we can't easily determine that from inspecting
936274c14cd6Smrg	  # libtool variables, so we have to hard-code the OSs to which it
936374c14cd6Smrg	  # applies here; at the moment, that means platforms that use the PE
936474c14cd6Smrg	  # object format with DLL files.  See the long comment at the top of
936574c14cd6Smrg	  # tests/bindir.at for full details.
9366e35772b2Smrg	  tdlname=$dlname
9367e35772b2Smrg	  case $host,$output,$installed,$module,$dlname in
936874c14cd6Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
936974c14cd6Smrg	      # If a -bindir argument was supplied, place the dll there.
937074c14cd6Smrg	      if test "x$bindir" != x ;
937174c14cd6Smrg	      then
937274c14cd6Smrg		func_relative_path "$install_libdir" "$bindir"
937374c14cd6Smrg		tdlname=$func_relative_path_result$dlname
937474c14cd6Smrg	      else
937574c14cd6Smrg		# Otherwise fall back on heuristic.
937674c14cd6Smrg		tdlname=../bin/$dlname
937774c14cd6Smrg	      fi
937874c14cd6Smrg	      ;;
9379e35772b2Smrg	  esac
9380e35772b2Smrg	  $ECHO > $output "\
9381e35772b2Smrg# $outputname - a libtool library file
9382e35772b2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383e35772b2Smrg#
9384e35772b2Smrg# Please DO NOT delete this file!
9385e35772b2Smrg# It is necessary for linking the library.
938672b676d7Smrg
9387e35772b2Smrg# The name that we can dlopen(3).
9388e35772b2Smrgdlname='$tdlname'
938972b676d7Smrg
9390e35772b2Smrg# Names of this library.
9391e35772b2Smrglibrary_names='$library_names'
939272b676d7Smrg
9393e35772b2Smrg# The name of the static archive.
9394e35772b2Smrgold_library='$old_library'
939572b676d7Smrg
9396e35772b2Smrg# Linker flags that can not go in dependency_libs.
9397e35772b2Smrginherited_linker_flags='$new_inherited_linker_flags'
939872b676d7Smrg
9399e35772b2Smrg# Libraries that this one depends upon.
9400e35772b2Smrgdependency_libs='$dependency_libs'
940172b676d7Smrg
9402e35772b2Smrg# Names of additional weak libraries provided by this library
9403e35772b2Smrgweak_library_names='$weak_libs'
940472b676d7Smrg
9405e35772b2Smrg# Version information for $libname.
9406e35772b2Smrgcurrent=$current
9407e35772b2Smrgage=$age
9408e35772b2Smrgrevision=$revision
940972b676d7Smrg
9410e35772b2Smrg# Is this an already installed library?
9411e35772b2Smrginstalled=$installed
941272b676d7Smrg
9413e35772b2Smrg# Should we warn about portability when linking against -modules?
9414e35772b2Smrgshouldnotlink=$module
941572b676d7Smrg
9416e35772b2Smrg# Files to dlopen/dlpreopen
9417e35772b2Smrgdlopen='$dlfiles'
9418e35772b2Smrgdlpreopen='$dlprefiles'
941972b676d7Smrg
9420e35772b2Smrg# Directory that this library needs to be installed in:
9421e35772b2Smrglibdir='$install_libdir'"
9422e35772b2Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423e35772b2Smrg	    $ECHO >> $output "\
9424e35772b2Smrgrelink_command=\"$relink_command\""
9425e35772b2Smrg	  fi
9426e35772b2Smrg	done
9427e35772b2Smrg      }
942872b676d7Smrg
9429e35772b2Smrg      # Do a symbolic link so that the libtool archive can be found in
9430e35772b2Smrg      # LD_LIBRARY_PATH before the program is installed.
9431e35772b2Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432e35772b2Smrg      ;;
9433e35772b2Smrg    esac
9434e35772b2Smrg    exit $EXIT_SUCCESS
9435e35772b2Smrg}
943672b676d7Smrg
943774c14cd6Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438e35772b2Smrg    func_mode_link ${1+"$@"}
943972b676d7Smrg
944072b676d7Smrg
9441e35772b2Smrg# func_mode_uninstall arg...
9442e35772b2Smrgfunc_mode_uninstall ()
9443e35772b2Smrg{
9444e35772b2Smrg    $opt_debug
9445e35772b2Smrg    RM="$nonopt"
944672b676d7Smrg    files=
944772b676d7Smrg    rmforce=
944872b676d7Smrg    exit_status=0
944972b676d7Smrg
945072b676d7Smrg    # This variable tells wrapper scripts just to set variables rather
945172b676d7Smrg    # than running their programs.
945272b676d7Smrg    libtool_install_magic="$magic"
945372b676d7Smrg
945472b676d7Smrg    for arg
945572b676d7Smrg    do
945672b676d7Smrg      case $arg in
945774c14cd6Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
945874c14cd6Smrg      -*) func_append RM " $arg" ;;
945974c14cd6Smrg      *) func_append files " $arg" ;;
946072b676d7Smrg      esac
946172b676d7Smrg    done
946272b676d7Smrg
9463e35772b2Smrg    test -z "$RM" && \
9464e35772b2Smrg      func_fatal_help "you must specify an RM program"
946572b676d7Smrg
946672b676d7Smrg    rmdirs=
946772b676d7Smrg
946872b676d7Smrg    for file in $files; do
9469e35772b2Smrg      func_dirname "$file" "" "."
9470e35772b2Smrg      dir="$func_dirname_result"
9471e35772b2Smrg      if test "X$dir" = X.; then
947274c14cd6Smrg	odir="$objdir"
947372b676d7Smrg      else
947474c14cd6Smrg	odir="$dir/$objdir"
947572b676d7Smrg      fi
9476e35772b2Smrg      func_basename "$file"
9477e35772b2Smrg      name="$func_basename_result"
947874c14cd6Smrg      test "$opt_mode" = uninstall && odir="$dir"
947972b676d7Smrg
948074c14cd6Smrg      # Remember odir for removal later, being careful to avoid duplicates
948174c14cd6Smrg      if test "$opt_mode" = clean; then
948272b676d7Smrg	case " $rmdirs " in
948374c14cd6Smrg	  *" $odir "*) ;;
948474c14cd6Smrg	  *) func_append rmdirs " $odir" ;;
948572b676d7Smrg	esac
948672b676d7Smrg      fi
948772b676d7Smrg
948872b676d7Smrg      # Don't error if the file doesn't exist and rm -f was used.
9489e35772b2Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490e35772b2Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491e35772b2Smrg	 test -f "$file"; then
949272b676d7Smrg	:
949372b676d7Smrg      elif test -d "$file"; then
949472b676d7Smrg	exit_status=1
949572b676d7Smrg	continue
949672b676d7Smrg      elif test "$rmforce" = yes; then
949772b676d7Smrg	continue
949872b676d7Smrg      fi
949972b676d7Smrg
950072b676d7Smrg      rmfiles="$file"
950172b676d7Smrg
950272b676d7Smrg      case $name in
950372b676d7Smrg      *.la)
950472b676d7Smrg	# Possibly a libtool archive, so verify it.
9505e35772b2Smrg	if func_lalib_p "$file"; then
9506e35772b2Smrg	  func_source $dir/$name
950772b676d7Smrg
950872b676d7Smrg	  # Delete the libtool libraries and symlinks.
950972b676d7Smrg	  for n in $library_names; do
951074c14cd6Smrg	    func_append rmfiles " $odir/$n"
951172b676d7Smrg	  done
951274c14cd6Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
951372b676d7Smrg
951474c14cd6Smrg	  case "$opt_mode" in
951572b676d7Smrg	  clean)
951674c14cd6Smrg	    case " $library_names " in
951772b676d7Smrg	    *" $dlname "*) ;;
951874c14cd6Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
951972b676d7Smrg	    esac
952074c14cd6Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
952172b676d7Smrg	    ;;
952272b676d7Smrg	  uninstall)
952372b676d7Smrg	    if test -n "$library_names"; then
952472b676d7Smrg	      # Do each command in the postuninstall commands.
9525e35772b2Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
952672b676d7Smrg	    fi
952772b676d7Smrg
952872b676d7Smrg	    if test -n "$old_library"; then
952972b676d7Smrg	      # Do each command in the old_postuninstall commands.
9530e35772b2Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
953172b676d7Smrg	    fi
953272b676d7Smrg	    # FIXME: should reinstall the best remaining shared library.
953372b676d7Smrg	    ;;
953472b676d7Smrg	  esac
953572b676d7Smrg	fi
953672b676d7Smrg	;;
953772b676d7Smrg
953872b676d7Smrg      *.lo)
953972b676d7Smrg	# Possibly a libtool object, so verify it.
9540e35772b2Smrg	if func_lalib_p "$file"; then
954172b676d7Smrg
954272b676d7Smrg	  # Read the .lo file
9543e35772b2Smrg	  func_source $dir/$name
954472b676d7Smrg
954572b676d7Smrg	  # Add PIC object to the list of files to remove.
9546e35772b2Smrg	  if test -n "$pic_object" &&
9547e35772b2Smrg	     test "$pic_object" != none; then
954874c14cd6Smrg	    func_append rmfiles " $dir/$pic_object"
954972b676d7Smrg	  fi
955072b676d7Smrg
955172b676d7Smrg	  # Add non-PIC object to the list of files to remove.
9552e35772b2Smrg	  if test -n "$non_pic_object" &&
9553e35772b2Smrg	     test "$non_pic_object" != none; then
955474c14cd6Smrg	    func_append rmfiles " $dir/$non_pic_object"
955572b676d7Smrg	  fi
955672b676d7Smrg	fi
955772b676d7Smrg	;;
955872b676d7Smrg
955972b676d7Smrg      *)
956074c14cd6Smrg	if test "$opt_mode" = clean ; then
956172b676d7Smrg	  noexename=$name
956272b676d7Smrg	  case $file in
956372b676d7Smrg	  *.exe)
9564e35772b2Smrg	    func_stripname '' '.exe' "$file"
9565e35772b2Smrg	    file=$func_stripname_result
9566e35772b2Smrg	    func_stripname '' '.exe' "$name"
9567e35772b2Smrg	    noexename=$func_stripname_result
956872b676d7Smrg	    # $file with .exe has already been added to rmfiles,
956972b676d7Smrg	    # add $file without .exe
957074c14cd6Smrg	    func_append rmfiles " $file"
957172b676d7Smrg	    ;;
957272b676d7Smrg	  esac
957372b676d7Smrg	  # Do a test to see if this is a libtool program.
9574e35772b2Smrg	  if func_ltwrapper_p "$file"; then
9575e35772b2Smrg	    if func_ltwrapper_executable_p "$file"; then
9576e35772b2Smrg	      func_ltwrapper_scriptname "$file"
9577e35772b2Smrg	      relink_command=
9578e35772b2Smrg	      func_source $func_ltwrapper_scriptname_result
957974c14cd6Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580e35772b2Smrg	    else
9581e35772b2Smrg	      relink_command=
9582e35772b2Smrg	      func_source $dir/$noexename
9583e35772b2Smrg	    fi
958472b676d7Smrg
958572b676d7Smrg	    # note $name still contains .exe if it was in $file originally
958672b676d7Smrg	    # as does the version of $file that was added into $rmfiles
958774c14cd6Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
958872b676d7Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
958974c14cd6Smrg	      func_append rmfiles " $odir/lt-$name"
959072b676d7Smrg	    fi
959172b676d7Smrg	    if test "X$noexename" != "X$name" ; then
959274c14cd6Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
959372b676d7Smrg	    fi
959472b676d7Smrg	  fi
959572b676d7Smrg	fi
959672b676d7Smrg	;;
959772b676d7Smrg      esac
9598e35772b2Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
959972b676d7Smrg    done
960072b676d7Smrg
960172b676d7Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
960272b676d7Smrg    for dir in $rmdirs; do
960372b676d7Smrg      if test -d "$dir"; then
9604e35772b2Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
960572b676d7Smrg      fi
960672b676d7Smrg    done
960772b676d7Smrg
960872b676d7Smrg    exit $exit_status
9609e35772b2Smrg}
961072b676d7Smrg
961174c14cd6Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612e35772b2Smrg    func_mode_uninstall ${1+"$@"}
961372b676d7Smrg
961474c14cd6Smrgtest -z "$opt_mode" && {
9615e35772b2Smrg  help="$generic_help"
9616e35772b2Smrg  func_fatal_help "you must specify a MODE"
9617e35772b2Smrg}
9618e35772b2Smrg
9619e35772b2Smrgtest -z "$exec_cmd" && \
962074c14cd6Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
962172b676d7Smrg
962272b676d7Smrgif test -n "$exec_cmd"; then
9623e35772b2Smrg  eval exec "$exec_cmd"
962472b676d7Smrg  exit $EXIT_FAILURE
962572b676d7Smrgfi
962672b676d7Smrg
9627e35772b2Smrgexit $exit_status
962872b676d7Smrg
962972b676d7Smrg
963072b676d7Smrg# The TAGs below are defined such that we never get into a situation
963172b676d7Smrg# in which we disable both kinds of libraries.  Given conflicting
963272b676d7Smrg# choices, we go for a static library, that is the most portable,
963372b676d7Smrg# since we can't tell whether shared libraries were disabled because
963472b676d7Smrg# the user asked for that or because the platform doesn't support
963572b676d7Smrg# them.  This is particularly important on AIX, because we don't
963672b676d7Smrg# support having both static and shared libraries enabled at the same
963772b676d7Smrg# time on that platform, so we default to a shared-only configuration.
963872b676d7Smrg# If a disable-shared tag is given, we'll fallback to a static-only
963972b676d7Smrg# configuration.  But we'll never go from static-only to shared-only.
964072b676d7Smrg
964172b676d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642e35772b2Smrgbuild_libtool_libs=no
9643e35772b2Smrgbuild_old_libs=yes
964472b676d7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
964572b676d7Smrg
964672b676d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647e35772b2Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
964872b676d7Smrg# ### END LIBTOOL TAG CONFIG: disable-static
964972b676d7Smrg
965072b676d7Smrg# Local Variables:
965172b676d7Smrg# mode:shell-script
965272b676d7Smrg# sh-indentation:2
965372b676d7Smrg# End:
9654e35772b2Smrg# vi:sw=2
9655e35772b2Smrg
9656