ltmain.sh revision 97cf2ee2
16e7d3316Smrg
297cf2ee2Smrg# libtool (GNU libtool) 2.4
36e7d3316Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
46e7d3316Smrg
52e2dd055Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
66e7d3316Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
76e7d3316Smrg# This is free software; see the source for copying conditions.  There is NO
86e7d3316Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
96e7d3316Smrg
106e7d3316Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11a966c04fSmrg# it under the terms of the GNU General Public License as published by
12a966c04fSmrg# the Free Software Foundation; either version 2 of the License, or
13a966c04fSmrg# (at your option) any later version.
14a966c04fSmrg#
156e7d3316Smrg# As a special exception to the GNU General Public License,
166e7d3316Smrg# if you distribute this file as part of a program or library that
176e7d3316Smrg# is built using GNU Libtool, you may include this file under the
186e7d3316Smrg# same distribution terms that you use for the rest of that program.
196e7d3316Smrg#
206e7d3316Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21a966c04fSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22a966c04fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23a966c04fSmrg# General Public License for more details.
24a966c04fSmrg#
25a966c04fSmrg# You should have received a copy of the GNU General Public License
266e7d3316Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
276e7d3316Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
286e7d3316Smrg# or obtained by writing to the Free Software Foundation, Inc.,
296e7d3316Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30a966c04fSmrg
316e7d3316Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
326e7d3316Smrg#
336e7d3316Smrg# Provide generalized library-building support services.
346e7d3316Smrg#
356e7d3316Smrg#       --config             show all configuration variables
366e7d3316Smrg#       --debug              enable verbose shell tracing
376e7d3316Smrg#   -n, --dry-run            display commands without modifying any files
386e7d3316Smrg#       --features           display basic configuration information and exit
396e7d3316Smrg#       --mode=MODE          use operation mode MODE
406e7d3316Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
416e7d3316Smrg#       --quiet, --silent    don't print informational messages
426e7d3316Smrg#       --no-quiet, --no-silent
436e7d3316Smrg#                            print informational messages (default)
446e7d3316Smrg#       --tag=TAG            use configuration variables from tag TAG
456e7d3316Smrg#   -v, --verbose            print more informational messages than default
466e7d3316Smrg#       --no-verbose         don't print the extra informational messages
476e7d3316Smrg#       --version            print version information
486e7d3316Smrg#   -h, --help, --help-all   print short, long, or detailed help message
496e7d3316Smrg#
506e7d3316Smrg# MODE must be one of the following:
516e7d3316Smrg#
526e7d3316Smrg#         clean              remove files from the build directory
536e7d3316Smrg#         compile            compile a source file into a libtool object
546e7d3316Smrg#         execute            automatically set library path, then run a program
556e7d3316Smrg#         finish             complete the installation of libtool libraries
566e7d3316Smrg#         install            install libraries or executables
576e7d3316Smrg#         link               create a library or an executable
586e7d3316Smrg#         uninstall          remove libraries from an installed directory
596e7d3316Smrg#
606e7d3316Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
616e7d3316Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
626e7d3316Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
636e7d3316Smrg#
646e7d3316Smrg# When reporting a bug, please describe a test case to reproduce it and
656e7d3316Smrg# include the following information:
666e7d3316Smrg#
676e7d3316Smrg#         host-triplet:	$host
686e7d3316Smrg#         shell:		$SHELL
696e7d3316Smrg#         compiler:		$LTCC
706e7d3316Smrg#         compiler flags:		$LTCFLAGS
716e7d3316Smrg#         linker:		$LD (gnu? $with_gnu_ld)
7297cf2ee2Smrg#         $progname:	(GNU libtool) 2.4
736e7d3316Smrg#         automake:	$automake_version
746e7d3316Smrg#         autoconf:	$autoconf_version
756e7d3316Smrg#
766e7d3316Smrg# Report bugs to <bug-libtool@gnu.org>.
7797cf2ee2Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
7897cf2ee2Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
79a966c04fSmrg
806e7d3316SmrgPROGRAM=libtool
81a966c04fSmrgPACKAGE=libtool
8297cf2ee2SmrgVERSION=2.4
836e7d3316SmrgTIMESTAMP=""
8497cf2ee2Smrgpackage_revision=1.3293
852e2dd055Smrg
866e7d3316Smrg# Be Bourne compatible
872e2dd055Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
882e2dd055Smrg  emulate sh
892e2dd055Smrg  NULLCMD=:
902e2dd055Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
912e2dd055Smrg  # is contrary to our usage.  Disable this feature.
922e2dd055Smrg  alias -g '${1+"$@"}'='"$@"'
93a966c04fSmrg  setopt NO_GLOB_SUBST
942e2dd055Smrgelse
952e2dd055Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
96a966c04fSmrgfi
972e2dd055SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
982e2dd055SmrgDUALCASE=1; export DUALCASE # for MKS sh
99a966c04fSmrg
1006e7d3316Smrg# A function that is used when there is no print builtin or printf.
1016e7d3316Smrgfunc_fallback_echo ()
1026e7d3316Smrg{
1036e7d3316Smrg  eval 'cat <<_LTECHO_EOF
1046e7d3316Smrg$1
1056e7d3316Smrg_LTECHO_EOF'
1066e7d3316Smrg}
107a966c04fSmrg
1086e7d3316Smrg# NLS nuisances: We save the old values to restore during execute mode.
1096e7d3316Smrglt_user_locale=
1106e7d3316Smrglt_safe_locale=
1112e2dd055Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1122e2dd055Smrgdo
1132e2dd055Smrg  eval "if test \"\${$lt_var+set}\" = set; then
1146e7d3316Smrg          save_$lt_var=\$$lt_var
1156e7d3316Smrg          $lt_var=C
1162e2dd055Smrg	  export $lt_var
1176e7d3316Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
1186e7d3316Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1192e2dd055Smrg	fi"
1202e2dd055Smrgdone
1216e7d3316SmrgLC_ALL=C
1226e7d3316SmrgLANGUAGE=C
1236e7d3316Smrgexport LANGUAGE LC_ALL
1242e2dd055Smrg
1256e7d3316Smrg$lt_unset CDPATH
1266e7d3316Smrg
1276e7d3316Smrg
1286e7d3316Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1296e7d3316Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1306e7d3316Smrg# the _XPG environment variable is not equal to 1 (one), the special
1316e7d3316Smrg# positional parameter $0, within a function call, is the name of the
1326e7d3316Smrg# function.
1336e7d3316Smrgprogpath="$0"
1346e7d3316Smrg
1356e7d3316Smrg
1366e7d3316Smrg
1376e7d3316Smrg: ${CP="cp -f"}
1386e7d3316Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
1396e7d3316Smrg: ${EGREP="grep -E"}
1406e7d3316Smrg: ${FGREP="grep -F"}
1416e7d3316Smrg: ${GREP="grep"}
1426e7d3316Smrg: ${LN_S="ln -s"}
1436e7d3316Smrg: ${MAKE="make"}
1446e7d3316Smrg: ${MKDIR="mkdir"}
1456e7d3316Smrg: ${MV="mv -f"}
1466e7d3316Smrg: ${RM="rm -f"}
1476e7d3316Smrg: ${SED="sed"}
1486e7d3316Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
1496e7d3316Smrg: ${Xsed="$SED -e 1s/^X//"}
1506e7d3316Smrg
1516e7d3316Smrg# Global variables:
1526e7d3316SmrgEXIT_SUCCESS=0
1536e7d3316SmrgEXIT_FAILURE=1
1546e7d3316SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
1556e7d3316SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
1566e7d3316Smrg
1576e7d3316Smrgexit_status=$EXIT_SUCCESS
158a966c04fSmrg
159a966c04fSmrg# Make sure IFS has a sensible default
160a966c04fSmrglt_nl='
161a966c04fSmrg'
162a966c04fSmrgIFS=" 	$lt_nl"
163a966c04fSmrg
1646e7d3316Smrgdirname="s,/[^/]*$,,"
1656e7d3316Smrgbasename="s,^.*/,,"
1666e7d3316Smrg
16797cf2ee2Smrg# func_dirname file append nondir_replacement
16897cf2ee2Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
16997cf2ee2Smrg# otherwise set result to NONDIR_REPLACEMENT.
17097cf2ee2Smrgfunc_dirname ()
17197cf2ee2Smrg{
17297cf2ee2Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
17397cf2ee2Smrg    if test "X$func_dirname_result" = "X${1}"; then
17497cf2ee2Smrg      func_dirname_result="${3}"
17597cf2ee2Smrg    else
17697cf2ee2Smrg      func_dirname_result="$func_dirname_result${2}"
17797cf2ee2Smrg    fi
17897cf2ee2Smrg} # func_dirname may be replaced by extended shell implementation
17997cf2ee2Smrg
18097cf2ee2Smrg
18197cf2ee2Smrg# func_basename file
18297cf2ee2Smrgfunc_basename ()
18397cf2ee2Smrg{
18497cf2ee2Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
18597cf2ee2Smrg} # func_basename may be replaced by extended shell implementation
18697cf2ee2Smrg
18797cf2ee2Smrg
1886e7d3316Smrg# func_dirname_and_basename file append nondir_replacement
1896e7d3316Smrg# perform func_basename and func_dirname in a single function
1906e7d3316Smrg# call:
1916e7d3316Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
1926e7d3316Smrg#             add APPEND to the result, otherwise set result
1936e7d3316Smrg#             to NONDIR_REPLACEMENT.
1946e7d3316Smrg#             value returned in "$func_dirname_result"
1956e7d3316Smrg#   basename: Compute filename of FILE.
1966e7d3316Smrg#             value retuned in "$func_basename_result"
1976e7d3316Smrg# Implementation must be kept synchronized with func_dirname
1986e7d3316Smrg# and func_basename. For efficiency, we do not delegate to
1996e7d3316Smrg# those functions but instead duplicate the functionality here.
2006e7d3316Smrgfunc_dirname_and_basename ()
2016e7d3316Smrg{
20297cf2ee2Smrg    # Extract subdirectory from the argument.
20397cf2ee2Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
20497cf2ee2Smrg    if test "X$func_dirname_result" = "X${1}"; then
20597cf2ee2Smrg      func_dirname_result="${3}"
20697cf2ee2Smrg    else
20797cf2ee2Smrg      func_dirname_result="$func_dirname_result${2}"
20897cf2ee2Smrg    fi
20997cf2ee2Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
21097cf2ee2Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
21197cf2ee2Smrg
21297cf2ee2Smrg
21397cf2ee2Smrg# func_stripname prefix suffix name
21497cf2ee2Smrg# strip PREFIX and SUFFIX off of NAME.
21597cf2ee2Smrg# PREFIX and SUFFIX must not contain globbing or regex special
21697cf2ee2Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
21797cf2ee2Smrg# dot (in which case that matches only a dot).
21897cf2ee2Smrg# func_strip_suffix prefix name
21997cf2ee2Smrgfunc_stripname ()
22097cf2ee2Smrg{
22197cf2ee2Smrg    case ${2} in
22297cf2ee2Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
22397cf2ee2Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
22497cf2ee2Smrg    esac
22597cf2ee2Smrg} # func_stripname may be replaced by extended shell implementation
226a966c04fSmrg
2276e7d3316Smrg
2286e7d3316Smrg# These SED scripts presuppose an absolute path with a trailing slash.
2296e7d3316Smrgpathcar='s,^/\([^/]*\).*$,\1,'
2306e7d3316Smrgpathcdr='s,^/[^/]*,,'
2316e7d3316Smrgremovedotparts=':dotsl
2326e7d3316Smrg		s@/\./@/@g
2336e7d3316Smrg		t dotsl
2346e7d3316Smrg		s,/\.$,/,'
2356e7d3316Smrgcollapseslashes='s@/\{1,\}@/@g'
2366e7d3316Smrgfinalslash='s,/*$,/,'
2376e7d3316Smrg
2386e7d3316Smrg# func_normal_abspath PATH
2396e7d3316Smrg# Remove doubled-up and trailing slashes, "." path components,
2406e7d3316Smrg# and cancel out any ".." path components in PATH after making
2416e7d3316Smrg# it an absolute path.
2426e7d3316Smrg#             value returned in "$func_normal_abspath_result"
2436e7d3316Smrgfunc_normal_abspath ()
2446e7d3316Smrg{
2456e7d3316Smrg  # Start from root dir and reassemble the path.
2466e7d3316Smrg  func_normal_abspath_result=
2476e7d3316Smrg  func_normal_abspath_tpath=$1
2486e7d3316Smrg  func_normal_abspath_altnamespace=
2496e7d3316Smrg  case $func_normal_abspath_tpath in
2506e7d3316Smrg    "")
2516e7d3316Smrg      # Empty path, that just means $cwd.
2526e7d3316Smrg      func_stripname '' '/' "`pwd`"
2536e7d3316Smrg      func_normal_abspath_result=$func_stripname_result
2546e7d3316Smrg      return
2556e7d3316Smrg    ;;
2566e7d3316Smrg    # The next three entries are used to spot a run of precisely
2576e7d3316Smrg    # two leading slashes without using negated character classes;
2586e7d3316Smrg    # we take advantage of case's first-match behaviour.
2596e7d3316Smrg    ///*)
2606e7d3316Smrg      # Unusual form of absolute path, do nothing.
2616e7d3316Smrg    ;;
2626e7d3316Smrg    //*)
2636e7d3316Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2646e7d3316Smrg      # and for example Cygwin uses it to access remote file shares
2656e7d3316Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2666e7d3316Smrg      func_normal_abspath_altnamespace=/
2676e7d3316Smrg    ;;
2686e7d3316Smrg    /*)
2696e7d3316Smrg      # Absolute path, do nothing.
2706e7d3316Smrg    ;;
2716e7d3316Smrg    *)
2726e7d3316Smrg      # Relative path, prepend $cwd.
2736e7d3316Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2746e7d3316Smrg    ;;
2756e7d3316Smrg  esac
2766e7d3316Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2776e7d3316Smrg  # the path to end with a slash for ease of parsing, so make sure
2786e7d3316Smrg  # there is one (and only one) here.
2796e7d3316Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2806e7d3316Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2816e7d3316Smrg  while :; do
2826e7d3316Smrg    # Processed it all yet?
2836e7d3316Smrg    if test "$func_normal_abspath_tpath" = / ; then
2846e7d3316Smrg      # If we ascended to the root using ".." the result may be empty now.
2856e7d3316Smrg      if test -z "$func_normal_abspath_result" ; then
2866e7d3316Smrg        func_normal_abspath_result=/
2876e7d3316Smrg      fi
2886e7d3316Smrg      break
2896e7d3316Smrg    fi
2906e7d3316Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2916e7d3316Smrg        -e "$pathcar"`
2926e7d3316Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2936e7d3316Smrg        -e "$pathcdr"`
2946e7d3316Smrg    # Figure out what to do with it
2956e7d3316Smrg    case $func_normal_abspath_tcomponent in
2966e7d3316Smrg      "")
2976e7d3316Smrg        # Trailing empty path component, ignore it.
2986e7d3316Smrg      ;;
2996e7d3316Smrg      ..)
3006e7d3316Smrg        # Parent dir; strip last assembled component from result.
3016e7d3316Smrg        func_dirname "$func_normal_abspath_result"
3026e7d3316Smrg        func_normal_abspath_result=$func_dirname_result
3036e7d3316Smrg      ;;
3046e7d3316Smrg      *)
3056e7d3316Smrg        # Actual path component, append it.
3066e7d3316Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3076e7d3316Smrg      ;;
3086e7d3316Smrg    esac
3096e7d3316Smrg  done
3106e7d3316Smrg  # Restore leading double-slash if one was found on entry.
3116e7d3316Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
3126e7d3316Smrg}
3136e7d3316Smrg
3146e7d3316Smrg# func_relative_path SRCDIR DSTDIR
3156e7d3316Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3166e7d3316Smrg# slash if non-empty, suitable for immediately appending a filename
3176e7d3316Smrg# without needing to append a separator.
3186e7d3316Smrg#             value returned in "$func_relative_path_result"
3196e7d3316Smrgfunc_relative_path ()
3206e7d3316Smrg{
3216e7d3316Smrg  func_relative_path_result=
3226e7d3316Smrg  func_normal_abspath "$1"
3236e7d3316Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
3246e7d3316Smrg  func_normal_abspath "$2"
3256e7d3316Smrg  func_relative_path_tbindir=$func_normal_abspath_result
3266e7d3316Smrg
3276e7d3316Smrg  # Ascend the tree starting from libdir
3286e7d3316Smrg  while :; do
3296e7d3316Smrg    # check if we have found a prefix of bindir
3306e7d3316Smrg    case $func_relative_path_tbindir in
3316e7d3316Smrg      $func_relative_path_tlibdir)
3326e7d3316Smrg        # found an exact match
3336e7d3316Smrg        func_relative_path_tcancelled=
3346e7d3316Smrg        break
3356e7d3316Smrg        ;;
3366e7d3316Smrg      $func_relative_path_tlibdir*)
3376e7d3316Smrg        # found a matching prefix
3386e7d3316Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3396e7d3316Smrg        func_relative_path_tcancelled=$func_stripname_result
3406e7d3316Smrg        if test -z "$func_relative_path_result"; then
3416e7d3316Smrg          func_relative_path_result=.
3426e7d3316Smrg        fi
3436e7d3316Smrg        break
3446e7d3316Smrg        ;;
3456e7d3316Smrg      *)
3466e7d3316Smrg        func_dirname $func_relative_path_tlibdir
3476e7d3316Smrg        func_relative_path_tlibdir=${func_dirname_result}
3486e7d3316Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3496e7d3316Smrg          # Have to descend all the way to the root!
3506e7d3316Smrg          func_relative_path_result=../$func_relative_path_result
3516e7d3316Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3526e7d3316Smrg          break
3536e7d3316Smrg        fi
3546e7d3316Smrg        func_relative_path_result=../$func_relative_path_result
3556e7d3316Smrg        ;;
3566e7d3316Smrg    esac
3576e7d3316Smrg  done
3586e7d3316Smrg
3596e7d3316Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3606e7d3316Smrg  func_stripname '' '/' "$func_relative_path_result"
3616e7d3316Smrg  func_relative_path_result=$func_stripname_result
3626e7d3316Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3636e7d3316Smrg  if test "x$func_stripname_result" != x ; then
3646e7d3316Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3656e7d3316Smrg  fi
3666e7d3316Smrg
3676e7d3316Smrg  # Normalisation. If bindir is libdir, return empty string,
3686e7d3316Smrg  # else relative path ending with a slash; either way, target
3696e7d3316Smrg  # file name can be directly appended.
3706e7d3316Smrg  if test ! -z "$func_relative_path_result"; then
3716e7d3316Smrg    func_stripname './' '' "$func_relative_path_result/"
3726e7d3316Smrg    func_relative_path_result=$func_stripname_result
3736e7d3316Smrg  fi
3746e7d3316Smrg}
3756e7d3316Smrg
3766e7d3316Smrg# The name of this program:
3776e7d3316Smrgfunc_dirname_and_basename "$progpath"
3786e7d3316Smrgprogname=$func_basename_result
3796e7d3316Smrg
3806e7d3316Smrg# Make sure we have an absolute path for reexecution:
3816e7d3316Smrgcase $progpath in
3826e7d3316Smrg  [\\/]*|[A-Za-z]:\\*) ;;
3836e7d3316Smrg  *[\\/]*)
3846e7d3316Smrg     progdir=$func_dirname_result
3856e7d3316Smrg     progdir=`cd "$progdir" && pwd`
3866e7d3316Smrg     progpath="$progdir/$progname"
3876e7d3316Smrg     ;;
3886e7d3316Smrg  *)
3896e7d3316Smrg     save_IFS="$IFS"
3906e7d3316Smrg     IFS=:
3916e7d3316Smrg     for progdir in $PATH; do
3926e7d3316Smrg       IFS="$save_IFS"
3936e7d3316Smrg       test -x "$progdir/$progname" && break
3946e7d3316Smrg     done
3956e7d3316Smrg     IFS="$save_IFS"
3966e7d3316Smrg     test -n "$progdir" || progdir=`pwd`
3976e7d3316Smrg     progpath="$progdir/$progname"
3986e7d3316Smrg     ;;
3996e7d3316Smrgesac
4006e7d3316Smrg
4016e7d3316Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
4026e7d3316Smrg# metacharacters that are still active within double-quoted strings.
4036e7d3316SmrgXsed="${SED}"' -e 1s/^X//'
4046e7d3316Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
4056e7d3316Smrg
4066e7d3316Smrg# Same as above, but do not quote variable references.
4076e7d3316Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
4086e7d3316Smrg
40997cf2ee2Smrg# Sed substitution that turns a string into a regex matching for the
41097cf2ee2Smrg# string literally.
41197cf2ee2Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
41297cf2ee2Smrg
41397cf2ee2Smrg# Sed substitution that converts a w32 file name or path
41497cf2ee2Smrg# which contains forward slashes, into one that contains
41597cf2ee2Smrg# (escaped) backslashes.  A very naive implementation.
41697cf2ee2Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
41797cf2ee2Smrg
4186e7d3316Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
4196e7d3316Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
4206e7d3316Smrg# in input to double_quote_subst, that '$' was protected from expansion.
4216e7d3316Smrg# Since each input `\' is now two `\'s, look for any number of runs of
4226e7d3316Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
4236e7d3316Smrgbs='\\'
4246e7d3316Smrgbs2='\\\\'
4256e7d3316Smrgbs4='\\\\\\\\'
4266e7d3316Smrgdollar='\$'
4276e7d3316Smrgsed_double_backslash="\
4286e7d3316Smrg  s/$bs4/&\\
4296e7d3316Smrg/g
4306e7d3316Smrg  s/^$bs2$dollar/$bs&/
4316e7d3316Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
4326e7d3316Smrg  s/\n//g"
4336e7d3316Smrg
4346e7d3316Smrg# Standard options:
4356e7d3316Smrgopt_dry_run=false
4366e7d3316Smrgopt_help=false
4376e7d3316Smrgopt_quiet=false
4386e7d3316Smrgopt_verbose=false
4396e7d3316Smrgopt_warning=:
4406e7d3316Smrg
4416e7d3316Smrg# func_echo arg...
4426e7d3316Smrg# Echo program name prefixed message, along with the current mode
4436e7d3316Smrg# name if it has been set yet.
4446e7d3316Smrgfunc_echo ()
4456e7d3316Smrg{
44697cf2ee2Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
4476e7d3316Smrg}
4486e7d3316Smrg
4496e7d3316Smrg# func_verbose arg...
4506e7d3316Smrg# Echo program name prefixed message in verbose mode only.
4516e7d3316Smrgfunc_verbose ()
4526e7d3316Smrg{
4536e7d3316Smrg    $opt_verbose && func_echo ${1+"$@"}
4546e7d3316Smrg
4556e7d3316Smrg    # A bug in bash halts the script if the last line of a function
4566e7d3316Smrg    # fails when set -e is in force, so we need another command to
4576e7d3316Smrg    # work around that:
4586e7d3316Smrg    :
4596e7d3316Smrg}
4606e7d3316Smrg
4616e7d3316Smrg# func_echo_all arg...
4626e7d3316Smrg# Invoke $ECHO with all args, space-separated.
4636e7d3316Smrgfunc_echo_all ()
4646e7d3316Smrg{
4656e7d3316Smrg    $ECHO "$*"
4666e7d3316Smrg}
4676e7d3316Smrg
4686e7d3316Smrg# func_error arg...
4696e7d3316Smrg# Echo program name prefixed message to standard error.
4706e7d3316Smrgfunc_error ()
4716e7d3316Smrg{
47297cf2ee2Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
4736e7d3316Smrg}
4746e7d3316Smrg
4756e7d3316Smrg# func_warning arg...
4766e7d3316Smrg# Echo program name prefixed warning message to standard error.
4776e7d3316Smrgfunc_warning ()
4786e7d3316Smrg{
47997cf2ee2Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
4806e7d3316Smrg
4816e7d3316Smrg    # bash bug again:
4826e7d3316Smrg    :
4836e7d3316Smrg}
4846e7d3316Smrg
4856e7d3316Smrg# func_fatal_error arg...
4866e7d3316Smrg# Echo program name prefixed message to standard error, and exit.
4876e7d3316Smrgfunc_fatal_error ()
4886e7d3316Smrg{
4896e7d3316Smrg    func_error ${1+"$@"}
4906e7d3316Smrg    exit $EXIT_FAILURE
4916e7d3316Smrg}
4926e7d3316Smrg
4936e7d3316Smrg# func_fatal_help arg...
4946e7d3316Smrg# Echo program name prefixed message to standard error, followed by
4956e7d3316Smrg# a help hint, and exit.
4966e7d3316Smrgfunc_fatal_help ()
4976e7d3316Smrg{
4986e7d3316Smrg    func_error ${1+"$@"}
4996e7d3316Smrg    func_fatal_error "$help"
5006e7d3316Smrg}
5016e7d3316Smrghelp="Try \`$progname --help' for more information."  ## default
5026e7d3316Smrg
5036e7d3316Smrg
5046e7d3316Smrg# func_grep expression filename
5056e7d3316Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
5066e7d3316Smrgfunc_grep ()
5076e7d3316Smrg{
5086e7d3316Smrg    $GREP "$1" "$2" >/dev/null 2>&1
5096e7d3316Smrg}
5106e7d3316Smrg
5116e7d3316Smrg
5126e7d3316Smrg# func_mkdir_p directory-path
5136e7d3316Smrg# Make sure the entire path to DIRECTORY-PATH is available.
5146e7d3316Smrgfunc_mkdir_p ()
5156e7d3316Smrg{
5166e7d3316Smrg    my_directory_path="$1"
5176e7d3316Smrg    my_dir_list=
5186e7d3316Smrg
5196e7d3316Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
5206e7d3316Smrg
5216e7d3316Smrg      # Protect directory names starting with `-'
5226e7d3316Smrg      case $my_directory_path in
5236e7d3316Smrg        -*) my_directory_path="./$my_directory_path" ;;
5246e7d3316Smrg      esac
5256e7d3316Smrg
5266e7d3316Smrg      # While some portion of DIR does not yet exist...
5276e7d3316Smrg      while test ! -d "$my_directory_path"; do
5286e7d3316Smrg        # ...make a list in topmost first order.  Use a colon delimited
5296e7d3316Smrg	# list incase some portion of path contains whitespace.
5306e7d3316Smrg        my_dir_list="$my_directory_path:$my_dir_list"
5316e7d3316Smrg
5326e7d3316Smrg        # If the last portion added has no slash in it, the list is done
5336e7d3316Smrg        case $my_directory_path in */*) ;; *) break ;; esac
5346e7d3316Smrg
5356e7d3316Smrg        # ...otherwise throw away the child directory and loop
5366e7d3316Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
5376e7d3316Smrg      done
5386e7d3316Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
5396e7d3316Smrg
5406e7d3316Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
5416e7d3316Smrg      for my_dir in $my_dir_list; do
5426e7d3316Smrg	IFS="$save_mkdir_p_IFS"
5436e7d3316Smrg        # mkdir can fail with a `File exist' error if two processes
5446e7d3316Smrg        # try to create one of the directories concurrently.  Don't
5456e7d3316Smrg        # stop in that case!
5466e7d3316Smrg        $MKDIR "$my_dir" 2>/dev/null || :
5476e7d3316Smrg      done
5486e7d3316Smrg      IFS="$save_mkdir_p_IFS"
5496e7d3316Smrg
5506e7d3316Smrg      # Bail out if we (or some other process) failed to create a directory.
5516e7d3316Smrg      test -d "$my_directory_path" || \
5526e7d3316Smrg        func_fatal_error "Failed to create \`$1'"
5536e7d3316Smrg    fi
5546e7d3316Smrg}
555a966c04fSmrg
556a966c04fSmrg
557a966c04fSmrg# func_mktempdir [string]
558a966c04fSmrg# Make a temporary directory that won't clash with other running
559a966c04fSmrg# libtool processes, and avoids race conditions if possible.  If
560a966c04fSmrg# given, STRING is the basename for that directory.
561a966c04fSmrgfunc_mktempdir ()
562a966c04fSmrg{
563a966c04fSmrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
564a966c04fSmrg
5656e7d3316Smrg    if test "$opt_dry_run" = ":"; then
566a966c04fSmrg      # Return a directory name, but don't create it in dry-run mode
567a966c04fSmrg      my_tmpdir="${my_template}-$$"
568a966c04fSmrg    else
569a966c04fSmrg
570a966c04fSmrg      # If mktemp works, use that first and foremost
571a966c04fSmrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
572a966c04fSmrg
573a966c04fSmrg      if test ! -d "$my_tmpdir"; then
5746e7d3316Smrg        # Failing that, at least try and use $RANDOM to avoid a race
5756e7d3316Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
576a966c04fSmrg
5776e7d3316Smrg        save_mktempdir_umask=`umask`
5786e7d3316Smrg        umask 0077
5796e7d3316Smrg        $MKDIR "$my_tmpdir"
5806e7d3316Smrg        umask $save_mktempdir_umask
581a966c04fSmrg      fi
582a966c04fSmrg
583a966c04fSmrg      # If we're not in dry-run mode, bomb out on failure
5846e7d3316Smrg      test -d "$my_tmpdir" || \
5856e7d3316Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
586a966c04fSmrg    fi
587a966c04fSmrg
5886e7d3316Smrg    $ECHO "$my_tmpdir"
589a966c04fSmrg}
590a966c04fSmrg
591a966c04fSmrg
5926e7d3316Smrg# func_quote_for_eval arg
5936e7d3316Smrg# Aesthetically quote ARG to be evaled later.
5946e7d3316Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
5956e7d3316Smrg# is double-quoted, suitable for a subsequent eval, whereas
5966e7d3316Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
5976e7d3316Smrg# which are still active within double quotes backslashified.
5986e7d3316Smrgfunc_quote_for_eval ()
599a966c04fSmrg{
6006e7d3316Smrg    case $1 in
6016e7d3316Smrg      *[\\\`\"\$]*)
6026e7d3316Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
6036e7d3316Smrg      *)
6046e7d3316Smrg        func_quote_for_eval_unquoted_result="$1" ;;
6056e7d3316Smrg    esac
6066e7d3316Smrg
6076e7d3316Smrg    case $func_quote_for_eval_unquoted_result in
6086e7d3316Smrg      # Double-quote args containing shell metacharacters to delay
6096e7d3316Smrg      # word splitting, command substitution and and variable
6106e7d3316Smrg      # expansion for a subsequent eval.
6116e7d3316Smrg      # Many Bourne shells cannot handle close brackets correctly
6126e7d3316Smrg      # in scan sets, so we specify it separately.
6136e7d3316Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6146e7d3316Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
6156e7d3316Smrg        ;;
6166e7d3316Smrg      *)
6176e7d3316Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
618a966c04fSmrg    esac
619a966c04fSmrg}
620a966c04fSmrg
621a966c04fSmrg
6226e7d3316Smrg# func_quote_for_expand arg
6236e7d3316Smrg# Aesthetically quote ARG to be evaled later; same as above,
6246e7d3316Smrg# but do not quote variable references.
6256e7d3316Smrgfunc_quote_for_expand ()
626a966c04fSmrg{
6276e7d3316Smrg    case $1 in
6286e7d3316Smrg      *[\\\`\"]*)
6296e7d3316Smrg	my_arg=`$ECHO "$1" | $SED \
6306e7d3316Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
631a966c04fSmrg      *)
6326e7d3316Smrg        my_arg="$1" ;;
6336e7d3316Smrg    esac
6346e7d3316Smrg
6356e7d3316Smrg    case $my_arg in
6366e7d3316Smrg      # Double-quote args containing shell metacharacters to delay
6376e7d3316Smrg      # word splitting and command substitution for a subsequent eval.
6386e7d3316Smrg      # Many Bourne shells cannot handle close brackets correctly
6396e7d3316Smrg      # in scan sets, so we specify it separately.
6406e7d3316Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6416e7d3316Smrg        my_arg="\"$my_arg\""
6426e7d3316Smrg        ;;
6436e7d3316Smrg    esac
6446e7d3316Smrg
6456e7d3316Smrg    func_quote_for_expand_result="$my_arg"
646a966c04fSmrg}
647a966c04fSmrg
648a966c04fSmrg
6496e7d3316Smrg# func_show_eval cmd [fail_exp]
6506e7d3316Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6516e7d3316Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6526e7d3316Smrg# is given, then evaluate it.
6536e7d3316Smrgfunc_show_eval ()
654a966c04fSmrg{
6556e7d3316Smrg    my_cmd="$1"
6566e7d3316Smrg    my_fail_exp="${2-:}"
657a966c04fSmrg
6586e7d3316Smrg    ${opt_silent-false} || {
6596e7d3316Smrg      func_quote_for_expand "$my_cmd"
6606e7d3316Smrg      eval "func_echo $func_quote_for_expand_result"
6616e7d3316Smrg    }
6626e7d3316Smrg
6636e7d3316Smrg    if ${opt_dry_run-false}; then :; else
6646e7d3316Smrg      eval "$my_cmd"
6656e7d3316Smrg      my_status=$?
6666e7d3316Smrg      if test "$my_status" -eq 0; then :; else
6676e7d3316Smrg	eval "(exit $my_status); $my_fail_exp"
6686e7d3316Smrg      fi
669a966c04fSmrg    fi
670a966c04fSmrg}
671a966c04fSmrg
6726e7d3316Smrg
6736e7d3316Smrg# func_show_eval_locale cmd [fail_exp]
6746e7d3316Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6756e7d3316Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6766e7d3316Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
6776e7d3316Smrgfunc_show_eval_locale ()
678a966c04fSmrg{
6796e7d3316Smrg    my_cmd="$1"
6806e7d3316Smrg    my_fail_exp="${2-:}"
681a966c04fSmrg
6826e7d3316Smrg    ${opt_silent-false} || {
6836e7d3316Smrg      func_quote_for_expand "$my_cmd"
6846e7d3316Smrg      eval "func_echo $func_quote_for_expand_result"
6856e7d3316Smrg    }
686a966c04fSmrg
6876e7d3316Smrg    if ${opt_dry_run-false}; then :; else
6886e7d3316Smrg      eval "$lt_user_locale
6896e7d3316Smrg	    $my_cmd"
6906e7d3316Smrg      my_status=$?
6916e7d3316Smrg      eval "$lt_safe_locale"
6926e7d3316Smrg      if test "$my_status" -eq 0; then :; else
6936e7d3316Smrg	eval "(exit $my_status); $my_fail_exp"
694a966c04fSmrg      fi
6956e7d3316Smrg    fi
696a966c04fSmrg}
697a966c04fSmrg
69897cf2ee2Smrg# func_tr_sh
69997cf2ee2Smrg# Turn $1 into a string suitable for a shell variable name.
70097cf2ee2Smrg# Result is stored in $func_tr_sh_result.  All characters
70197cf2ee2Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
70297cf2ee2Smrg# if $1 begins with a digit, a '_' is prepended as well.
70397cf2ee2Smrgfunc_tr_sh ()
70497cf2ee2Smrg{
70597cf2ee2Smrg  case $1 in
70697cf2ee2Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
70797cf2ee2Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
70897cf2ee2Smrg    ;;
70997cf2ee2Smrg  * )
71097cf2ee2Smrg    func_tr_sh_result=$1
71197cf2ee2Smrg    ;;
71297cf2ee2Smrg  esac
71397cf2ee2Smrg}
71497cf2ee2Smrg
715a966c04fSmrg
7166e7d3316Smrg# func_version
7176e7d3316Smrg# Echo version message to standard output and exit.
7186e7d3316Smrgfunc_version ()
7196e7d3316Smrg{
72097cf2ee2Smrg    $opt_debug
72197cf2ee2Smrg
7226e7d3316Smrg    $SED -n '/(C)/!b go
7236e7d3316Smrg	:more
7246e7d3316Smrg	/\./!{
7256e7d3316Smrg	  N
7266e7d3316Smrg	  s/\n# / /
7276e7d3316Smrg	  b more
7286e7d3316Smrg	}
7296e7d3316Smrg	:go
7306e7d3316Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
7316e7d3316Smrg        s/^# //
7326e7d3316Smrg	s/^# *$//
7336e7d3316Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
7346e7d3316Smrg        p
7356e7d3316Smrg     }' < "$progpath"
7366e7d3316Smrg     exit $?
7376e7d3316Smrg}
738a966c04fSmrg
7396e7d3316Smrg# func_usage
7406e7d3316Smrg# Echo short help message to standard output and exit.
7416e7d3316Smrgfunc_usage ()
7426e7d3316Smrg{
74397cf2ee2Smrg    $opt_debug
74497cf2ee2Smrg
7456e7d3316Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
7466e7d3316Smrg        s/^# //
7476e7d3316Smrg	s/^# *$//
7486e7d3316Smrg	s/\$progname/'$progname'/
7496e7d3316Smrg	p
7506e7d3316Smrg    }' < "$progpath"
7516e7d3316Smrg    echo
7526e7d3316Smrg    $ECHO "run \`$progname --help | more' for full usage"
7536e7d3316Smrg    exit $?
7546e7d3316Smrg}
755a966c04fSmrg
7566e7d3316Smrg# func_help [NOEXIT]
7576e7d3316Smrg# Echo long help message to standard output and exit,
7586e7d3316Smrg# unless 'noexit' is passed as argument.
7596e7d3316Smrgfunc_help ()
7606e7d3316Smrg{
76197cf2ee2Smrg    $opt_debug
76297cf2ee2Smrg
7636e7d3316Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
76497cf2ee2Smrg	:print
7656e7d3316Smrg        s/^# //
7666e7d3316Smrg	s/^# *$//
7676e7d3316Smrg	s*\$progname*'$progname'*
7686e7d3316Smrg	s*\$host*'"$host"'*
7696e7d3316Smrg	s*\$SHELL*'"$SHELL"'*
7706e7d3316Smrg	s*\$LTCC*'"$LTCC"'*
7716e7d3316Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
7726e7d3316Smrg	s*\$LD*'"$LD"'*
7736e7d3316Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7746e7d3316Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
7756e7d3316Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
7766e7d3316Smrg	p
77797cf2ee2Smrg	d
77897cf2ee2Smrg     }
77997cf2ee2Smrg     /^# .* home page:/b print
78097cf2ee2Smrg     /^# General help using/b print
78197cf2ee2Smrg     ' < "$progpath"
7826e7d3316Smrg    ret=$?
7836e7d3316Smrg    if test -z "$1"; then
7846e7d3316Smrg      exit $ret
7856e7d3316Smrg    fi
7866e7d3316Smrg}
787a966c04fSmrg
7886e7d3316Smrg# func_missing_arg argname
7896e7d3316Smrg# Echo program name prefixed message to standard error and set global
7906e7d3316Smrg# exit_cmd.
7916e7d3316Smrgfunc_missing_arg ()
7926e7d3316Smrg{
79397cf2ee2Smrg    $opt_debug
79497cf2ee2Smrg
7956e7d3316Smrg    func_error "missing argument for $1."
7966e7d3316Smrg    exit_cmd=exit
7976e7d3316Smrg}
798a966c04fSmrg
799a966c04fSmrg
80097cf2ee2Smrg# func_split_short_opt shortopt
80197cf2ee2Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
80297cf2ee2Smrg# variables after splitting SHORTOPT after the 2nd character.
80397cf2ee2Smrgfunc_split_short_opt ()
80497cf2ee2Smrg{
80597cf2ee2Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
80697cf2ee2Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
80797cf2ee2Smrg
80897cf2ee2Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
80997cf2ee2Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
81097cf2ee2Smrg} # func_split_short_opt may be replaced by extended shell implementation
81197cf2ee2Smrg
81297cf2ee2Smrg
81397cf2ee2Smrg# func_split_long_opt longopt
81497cf2ee2Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
81597cf2ee2Smrg# variables after splitting LONGOPT at the `=' sign.
81697cf2ee2Smrgfunc_split_long_opt ()
81797cf2ee2Smrg{
81897cf2ee2Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
81997cf2ee2Smrg    my_sed_long_arg='1s/^--[^=]*=//'
82097cf2ee2Smrg
82197cf2ee2Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
82297cf2ee2Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
82397cf2ee2Smrg} # func_split_long_opt may be replaced by extended shell implementation
82497cf2ee2Smrg
82597cf2ee2Smrgexit_cmd=:
826a966c04fSmrg
827a966c04fSmrg
8282e2dd055Smrg
829a966c04fSmrg
8306e7d3316Smrg
8316e7d3316Smrgmagic="%%%MAGIC variable%%%"
8326e7d3316Smrgmagic_exe="%%%MAGIC EXE variable%%%"
8336e7d3316Smrg
8346e7d3316Smrg# Global variables.
8356e7d3316Smrgnonopt=
8366e7d3316Smrgpreserve_args=
8376e7d3316Smrglo2o="s/\\.lo\$/.${objext}/"
8386e7d3316Smrgo2lo="s/\\.${objext}\$/.lo/"
8396e7d3316Smrgextracted_archives=
8406e7d3316Smrgextracted_serial=0
8416e7d3316Smrg
8426e7d3316Smrg# If this variable is set in any of the actions, the command in it
8436e7d3316Smrg# will be execed at the end.  This prevents here-documents from being
8446e7d3316Smrg# left over by shells.
8456e7d3316Smrgexec_cmd=
8466e7d3316Smrg
84797cf2ee2Smrg# func_append var value
84897cf2ee2Smrg# Append VALUE to the end of shell variable VAR.
84997cf2ee2Smrgfunc_append ()
85097cf2ee2Smrg{
85197cf2ee2Smrg    eval "${1}=\$${1}\${2}"
85297cf2ee2Smrg} # func_append may be replaced by extended shell implementation
85397cf2ee2Smrg
85497cf2ee2Smrg# func_append_quoted var value
85597cf2ee2Smrg# Quote VALUE and append to the end of shell variable VAR, separated
85697cf2ee2Smrg# by a space.
85797cf2ee2Smrgfunc_append_quoted ()
85897cf2ee2Smrg{
85997cf2ee2Smrg    func_quote_for_eval "${2}"
86097cf2ee2Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
86197cf2ee2Smrg} # func_append_quoted may be replaced by extended shell implementation
86297cf2ee2Smrg
86397cf2ee2Smrg
86497cf2ee2Smrg# func_arith arithmetic-term...
86597cf2ee2Smrgfunc_arith ()
86697cf2ee2Smrg{
86797cf2ee2Smrg    func_arith_result=`expr "${@}"`
86897cf2ee2Smrg} # func_arith may be replaced by extended shell implementation
86997cf2ee2Smrg
87097cf2ee2Smrg
87197cf2ee2Smrg# func_len string
87297cf2ee2Smrg# STRING may not start with a hyphen.
87397cf2ee2Smrgfunc_len ()
87497cf2ee2Smrg{
87597cf2ee2Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
87697cf2ee2Smrg} # func_len may be replaced by extended shell implementation
87797cf2ee2Smrg
87897cf2ee2Smrg
87997cf2ee2Smrg# func_lo2o object
88097cf2ee2Smrgfunc_lo2o ()
88197cf2ee2Smrg{
88297cf2ee2Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
88397cf2ee2Smrg} # func_lo2o may be replaced by extended shell implementation
88497cf2ee2Smrg
88597cf2ee2Smrg
88697cf2ee2Smrg# func_xform libobj-or-source
88797cf2ee2Smrgfunc_xform ()
88897cf2ee2Smrg{
88997cf2ee2Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
89097cf2ee2Smrg} # func_xform may be replaced by extended shell implementation
89197cf2ee2Smrg
89297cf2ee2Smrg
8936e7d3316Smrg# func_fatal_configuration arg...
8946e7d3316Smrg# Echo program name prefixed message to standard error, followed by
8956e7d3316Smrg# a configuration failure hint, and exit.
8966e7d3316Smrgfunc_fatal_configuration ()
8976e7d3316Smrg{
8986e7d3316Smrg    func_error ${1+"$@"}
8996e7d3316Smrg    func_error "See the $PACKAGE documentation for more information."
9006e7d3316Smrg    func_fatal_error "Fatal configuration error."
9016e7d3316Smrg}
9026e7d3316Smrg
9036e7d3316Smrg
9046e7d3316Smrg# func_config
9056e7d3316Smrg# Display the configuration for all the tags in this script.
9066e7d3316Smrgfunc_config ()
9076e7d3316Smrg{
9086e7d3316Smrg    re_begincf='^# ### BEGIN LIBTOOL'
9096e7d3316Smrg    re_endcf='^# ### END LIBTOOL'
9106e7d3316Smrg
9116e7d3316Smrg    # Default configuration.
9126e7d3316Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
9136e7d3316Smrg
914a966c04fSmrg    # Now print the configurations for the tags.
915a966c04fSmrg    for tagname in $taglist; do
9166e7d3316Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
917a966c04fSmrg    done
918a966c04fSmrg
9196e7d3316Smrg    exit $?
9206e7d3316Smrg}
921a966c04fSmrg
9226e7d3316Smrg# func_features
9236e7d3316Smrg# Display the features supported by this script.
9246e7d3316Smrgfunc_features ()
9256e7d3316Smrg{
9266e7d3316Smrg    echo "host: $host"
927a966c04fSmrg    if test "$build_libtool_libs" = yes; then
9286e7d3316Smrg      echo "enable shared libraries"
929a966c04fSmrg    else
9306e7d3316Smrg      echo "disable shared libraries"
931a966c04fSmrg    fi
932a966c04fSmrg    if test "$build_old_libs" = yes; then
9336e7d3316Smrg      echo "enable static libraries"
934a966c04fSmrg    else
9356e7d3316Smrg      echo "disable static libraries"
936a966c04fSmrg    fi
9376e7d3316Smrg
938a966c04fSmrg    exit $?
9396e7d3316Smrg}
940a966c04fSmrg
9416e7d3316Smrg# func_enable_tag tagname
9426e7d3316Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
9436e7d3316Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
9446e7d3316Smrg# variable here.
9456e7d3316Smrgfunc_enable_tag ()
9466e7d3316Smrg{
9476e7d3316Smrg  # Global variable:
9486e7d3316Smrg  tagname="$1"
949a966c04fSmrg
9506e7d3316Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
9516e7d3316Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
9526e7d3316Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
953a966c04fSmrg
9546e7d3316Smrg  # Validate tagname.
9556e7d3316Smrg  case $tagname in
9566e7d3316Smrg    *[!-_A-Za-z0-9,/]*)
9576e7d3316Smrg      func_fatal_error "invalid tag name: $tagname"
9586e7d3316Smrg      ;;
9596e7d3316Smrg  esac
960a966c04fSmrg
9616e7d3316Smrg  # Don't test for the "default" C tag, as we know it's
9626e7d3316Smrg  # there but not specially marked.
9636e7d3316Smrg  case $tagname in
9646e7d3316Smrg    CC) ;;
9656e7d3316Smrg    *)
9666e7d3316Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
9676e7d3316Smrg	taglist="$taglist $tagname"
9686e7d3316Smrg
9696e7d3316Smrg	# Evaluate the configuration.  Be careful to quote the path
9706e7d3316Smrg	# and the sed script, to avoid splitting on whitespace, but
9716e7d3316Smrg	# also don't use non-portable quotes within backquotes within
9726e7d3316Smrg	# quotes we have to do it in 2 steps:
9736e7d3316Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
9746e7d3316Smrg	eval "$extractedcf"
9756e7d3316Smrg      else
9766e7d3316Smrg	func_error "ignoring unknown tag $tagname"
9776e7d3316Smrg      fi
9786e7d3316Smrg      ;;
9796e7d3316Smrg  esac
9806e7d3316Smrg}
9816e7d3316Smrg
98297cf2ee2Smrg# func_check_version_match
98397cf2ee2Smrg# Ensure that we are using m4 macros, and libtool script from the same
98497cf2ee2Smrg# release of libtool.
98597cf2ee2Smrgfunc_check_version_match ()
9866e7d3316Smrg{
98797cf2ee2Smrg  if test "$package_revision" != "$macro_revision"; then
98897cf2ee2Smrg    if test "$VERSION" != "$macro_version"; then
98997cf2ee2Smrg      if test -z "$macro_version"; then
99097cf2ee2Smrg        cat >&2 <<_LT_EOF
99197cf2ee2Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
99297cf2ee2Smrg$progname: definition of this LT_INIT comes from an older release.
99397cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
99497cf2ee2Smrg$progname: and run autoconf again.
99597cf2ee2Smrg_LT_EOF
99697cf2ee2Smrg      else
99797cf2ee2Smrg        cat >&2 <<_LT_EOF
99897cf2ee2Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
99997cf2ee2Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
100097cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
100197cf2ee2Smrg$progname: and run autoconf again.
100297cf2ee2Smrg_LT_EOF
100397cf2ee2Smrg      fi
100497cf2ee2Smrg    else
100597cf2ee2Smrg      cat >&2 <<_LT_EOF
100697cf2ee2Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
100797cf2ee2Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
100897cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
100997cf2ee2Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
101097cf2ee2Smrg_LT_EOF
101197cf2ee2Smrg    fi
1012a966c04fSmrg
101397cf2ee2Smrg    exit $EXIT_MISMATCH
101497cf2ee2Smrg  fi
101597cf2ee2Smrg}
101697cf2ee2Smrg
101797cf2ee2Smrg
101897cf2ee2Smrg# Shorthand for --mode=foo, only valid as the first argument
101997cf2ee2Smrgcase $1 in
102097cf2ee2Smrgclean|clea|cle|cl)
102197cf2ee2Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
102297cf2ee2Smrg  ;;
102397cf2ee2Smrgcompile|compil|compi|comp|com|co|c)
102497cf2ee2Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
102597cf2ee2Smrg  ;;
102697cf2ee2Smrgexecute|execut|execu|exec|exe|ex|e)
102797cf2ee2Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
102897cf2ee2Smrg  ;;
102997cf2ee2Smrgfinish|finis|fini|fin|fi|f)
103097cf2ee2Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
103197cf2ee2Smrg  ;;
103297cf2ee2Smrginstall|instal|insta|inst|ins|in|i)
103397cf2ee2Smrg  shift; set dummy --mode install ${1+"$@"}; shift
103497cf2ee2Smrg  ;;
103597cf2ee2Smrglink|lin|li|l)
103697cf2ee2Smrg  shift; set dummy --mode link ${1+"$@"}; shift
103797cf2ee2Smrg  ;;
103897cf2ee2Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
103997cf2ee2Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
104097cf2ee2Smrg  ;;
104197cf2ee2Smrgesac
1042a966c04fSmrg
104397cf2ee2Smrg
104497cf2ee2Smrg
104597cf2ee2Smrg# Option defaults:
104697cf2ee2Smrgopt_debug=:
104797cf2ee2Smrgopt_dry_run=false
104897cf2ee2Smrgopt_config=false
104997cf2ee2Smrgopt_preserve_dup_deps=false
105097cf2ee2Smrgopt_features=false
105197cf2ee2Smrgopt_finish=false
105297cf2ee2Smrgopt_help=false
105397cf2ee2Smrgopt_help_all=false
105497cf2ee2Smrgopt_silent=:
105597cf2ee2Smrgopt_verbose=:
105697cf2ee2Smrgopt_silent=false
105797cf2ee2Smrgopt_verbose=false
105897cf2ee2Smrg
105997cf2ee2Smrg
106097cf2ee2Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
106197cf2ee2Smrg# script to make things like `--version' happen as quickly as we can.
106297cf2ee2Smrg{
106397cf2ee2Smrg  # this just eases exit handling
106497cf2ee2Smrg  while test $# -gt 0; do
10656e7d3316Smrg    opt="$1"
10666e7d3316Smrg    shift
10676e7d3316Smrg    case $opt in
106897cf2ee2Smrg      --debug|-x)	opt_debug='set -x'
10696e7d3316Smrg			func_echo "enabling shell trace mode"
10706e7d3316Smrg			$opt_debug
10716e7d3316Smrg			;;
107297cf2ee2Smrg      --dry-run|--dryrun|-n)
107397cf2ee2Smrg			opt_dry_run=:
10746e7d3316Smrg			;;
107597cf2ee2Smrg      --config)
107697cf2ee2Smrg			opt_config=:
107797cf2ee2Smrgfunc_config
107897cf2ee2Smrg			;;
107997cf2ee2Smrg      --dlopen|-dlopen)
108097cf2ee2Smrg			optarg="$1"
108197cf2ee2Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
108297cf2ee2Smrg}$optarg"
10836e7d3316Smrg			shift
10846e7d3316Smrg			;;
10856e7d3316Smrg      --preserve-dup-deps)
108697cf2ee2Smrg			opt_preserve_dup_deps=:
10876e7d3316Smrg			;;
108897cf2ee2Smrg      --features)
108997cf2ee2Smrg			opt_features=:
109097cf2ee2Smrgfunc_features
10916e7d3316Smrg			;;
109297cf2ee2Smrg      --finish)
109397cf2ee2Smrg			opt_finish=:
109497cf2ee2Smrgset dummy --mode finish ${1+"$@"}; shift
109597cf2ee2Smrg			;;
109697cf2ee2Smrg      --help)
109797cf2ee2Smrg			opt_help=:
109897cf2ee2Smrg			;;
109997cf2ee2Smrg      --help-all)
110097cf2ee2Smrg			opt_help_all=:
110197cf2ee2Smrgopt_help=': help-all'
110297cf2ee2Smrg			;;
110397cf2ee2Smrg      --mode)
110497cf2ee2Smrg			test $# = 0 && func_missing_arg $opt && break
110597cf2ee2Smrg			optarg="$1"
110697cf2ee2Smrg			opt_mode="$optarg"
110797cf2ee2Smrgcase $optarg in
110897cf2ee2Smrg  # Valid mode arguments:
110997cf2ee2Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
111097cf2ee2Smrg
111197cf2ee2Smrg  # Catch anything else as an error
111297cf2ee2Smrg  *) func_error "invalid argument for $opt"
111397cf2ee2Smrg     exit_cmd=exit
111497cf2ee2Smrg     break
111597cf2ee2Smrg     ;;
111697cf2ee2Smrgesac
111797cf2ee2Smrg			shift
111897cf2ee2Smrg			;;
111997cf2ee2Smrg      --no-silent|--no-quiet)
11206e7d3316Smrg			opt_silent=false
112197cf2ee2Smrgfunc_append preserve_args " $opt"
11226e7d3316Smrg			;;
112397cf2ee2Smrg      --no-verbose)
11246e7d3316Smrg			opt_verbose=false
112597cf2ee2Smrgfunc_append preserve_args " $opt"
11266e7d3316Smrg			;;
112797cf2ee2Smrg      --silent|--quiet)
112897cf2ee2Smrg			opt_silent=:
112997cf2ee2Smrgfunc_append preserve_args " $opt"
113097cf2ee2Smrg        opt_verbose=false
113197cf2ee2Smrg			;;
113297cf2ee2Smrg      --verbose|-v)
113397cf2ee2Smrg			opt_verbose=:
113497cf2ee2Smrgfunc_append preserve_args " $opt"
113597cf2ee2Smrgopt_silent=false
113697cf2ee2Smrg			;;
113797cf2ee2Smrg      --tag)
113897cf2ee2Smrg			test $# = 0 && func_missing_arg $opt && break
113997cf2ee2Smrg			optarg="$1"
114097cf2ee2Smrg			opt_tag="$optarg"
114197cf2ee2Smrgfunc_append preserve_args " $opt $optarg"
114297cf2ee2Smrgfunc_enable_tag "$optarg"
11436e7d3316Smrg			shift
11446e7d3316Smrg			;;
11456e7d3316Smrg
114697cf2ee2Smrg      -\?|-h)		func_usage				;;
114797cf2ee2Smrg      --help)		func_help				;;
114897cf2ee2Smrg      --version)	func_version				;;
114997cf2ee2Smrg
11506e7d3316Smrg      # Separate optargs to long options:
115197cf2ee2Smrg      --*=*)
115297cf2ee2Smrg			func_split_long_opt "$opt"
115397cf2ee2Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
11546e7d3316Smrg			shift
11556e7d3316Smrg			;;
11566e7d3316Smrg
115797cf2ee2Smrg      # Separate non-argument short options:
115897cf2ee2Smrg      -\?*|-h*|-n*|-v*)
115997cf2ee2Smrg			func_split_short_opt "$opt"
116097cf2ee2Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
116197cf2ee2Smrg			shift
11626e7d3316Smrg			;;
116397cf2ee2Smrg
116497cf2ee2Smrg      --)		break					;;
116597cf2ee2Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
116697cf2ee2Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
11676e7d3316Smrg    esac
11686e7d3316Smrg  done
11696e7d3316Smrg
117097cf2ee2Smrg  # Validate options:
117197cf2ee2Smrg
117297cf2ee2Smrg  # save first non-option argument
117397cf2ee2Smrg  if test "$#" -gt 0; then
117497cf2ee2Smrg    nonopt="$opt"
117597cf2ee2Smrg    shift
117697cf2ee2Smrg  fi
117797cf2ee2Smrg
117897cf2ee2Smrg  # preserve --debug
117997cf2ee2Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
11806e7d3316Smrg
11816e7d3316Smrg  case $host in
11826e7d3316Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
11836e7d3316Smrg      # don't eliminate duplications in $postdeps and $predeps
11846e7d3316Smrg      opt_duplicate_compiler_generated_deps=:
1185a966c04fSmrg      ;;
1186a966c04fSmrg    *)
118797cf2ee2Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
11886e7d3316Smrg      ;;
11896e7d3316Smrg  esac
1190a966c04fSmrg
119197cf2ee2Smrg  $opt_help || {
119297cf2ee2Smrg    # Sanity checks first:
119397cf2ee2Smrg    func_check_version_match
11946e7d3316Smrg
119597cf2ee2Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
119697cf2ee2Smrg      func_fatal_configuration "not configured to build any kind of library"
11976e7d3316Smrg    fi
11986e7d3316Smrg
119997cf2ee2Smrg    # Darwin sucks
120097cf2ee2Smrg    eval std_shrext=\"$shrext_cmds\"
12016e7d3316Smrg
120297cf2ee2Smrg    # Only execute mode is allowed to have -dlopen flags.
120397cf2ee2Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
120497cf2ee2Smrg      func_error "unrecognized option \`-dlopen'"
120597cf2ee2Smrg      $ECHO "$help" 1>&2
120697cf2ee2Smrg      exit $EXIT_FAILURE
120797cf2ee2Smrg    fi
12086e7d3316Smrg
120997cf2ee2Smrg    # Change the help message to a mode-specific one.
121097cf2ee2Smrg    generic_help="$help"
121197cf2ee2Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
121297cf2ee2Smrg  }
12136e7d3316Smrg
12146e7d3316Smrg
121597cf2ee2Smrg  # Bail if the options were screwed
121697cf2ee2Smrg  $exit_cmd $EXIT_FAILURE
121797cf2ee2Smrg}
12186e7d3316Smrg
12196e7d3316Smrg
1220a966c04fSmrg
1221a966c04fSmrg
122297cf2ee2Smrg## ----------- ##
122397cf2ee2Smrg##    Main.    ##
122497cf2ee2Smrg## ----------- ##
1225a966c04fSmrg
12266e7d3316Smrg# func_lalib_p file
12276e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
12286e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12296e7d3316Smrg# determined imposters.
12306e7d3316Smrgfunc_lalib_p ()
12316e7d3316Smrg{
12326e7d3316Smrg    test -f "$1" &&
12336e7d3316Smrg      $SED -e 4q "$1" 2>/dev/null \
12346e7d3316Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
12356e7d3316Smrg}
1236a966c04fSmrg
12376e7d3316Smrg# func_lalib_unsafe_p file
12386e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
12396e7d3316Smrg# This function implements the same check as func_lalib_p without
12406e7d3316Smrg# resorting to external programs.  To this end, it redirects stdin and
12416e7d3316Smrg# closes it afterwards, without saving the original file descriptor.
12426e7d3316Smrg# As a safety measure, use it only where a negative result would be
12436e7d3316Smrg# fatal anyway.  Works if `file' does not exist.
12446e7d3316Smrgfunc_lalib_unsafe_p ()
12456e7d3316Smrg{
12466e7d3316Smrg    lalib_p=no
12476e7d3316Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
12486e7d3316Smrg	for lalib_p_l in 1 2 3 4
12496e7d3316Smrg	do
12506e7d3316Smrg	    read lalib_p_line
12516e7d3316Smrg	    case "$lalib_p_line" in
12526e7d3316Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
12536e7d3316Smrg	    esac
12546e7d3316Smrg	done
12556e7d3316Smrg	exec 0<&5 5<&-
12566e7d3316Smrg    fi
12576e7d3316Smrg    test "$lalib_p" = yes
12586e7d3316Smrg}
1259a966c04fSmrg
12606e7d3316Smrg# func_ltwrapper_script_p file
12616e7d3316Smrg# True iff FILE is a libtool wrapper script
12626e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12636e7d3316Smrg# determined imposters.
12646e7d3316Smrgfunc_ltwrapper_script_p ()
12656e7d3316Smrg{
12666e7d3316Smrg    func_lalib_p "$1"
12676e7d3316Smrg}
1268a966c04fSmrg
12696e7d3316Smrg# func_ltwrapper_executable_p file
12706e7d3316Smrg# True iff FILE is a libtool wrapper executable
12716e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12726e7d3316Smrg# determined imposters.
12736e7d3316Smrgfunc_ltwrapper_executable_p ()
12746e7d3316Smrg{
12756e7d3316Smrg    func_ltwrapper_exec_suffix=
12766e7d3316Smrg    case $1 in
12776e7d3316Smrg    *.exe) ;;
12786e7d3316Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
12796e7d3316Smrg    esac
12806e7d3316Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
12816e7d3316Smrg}
12826e7d3316Smrg
12836e7d3316Smrg# func_ltwrapper_scriptname file
12846e7d3316Smrg# Assumes file is an ltwrapper_executable
12856e7d3316Smrg# uses $file to determine the appropriate filename for a
12866e7d3316Smrg# temporary ltwrapper_script.
12876e7d3316Smrgfunc_ltwrapper_scriptname ()
12886e7d3316Smrg{
128997cf2ee2Smrg    func_dirname_and_basename "$1" "" "."
129097cf2ee2Smrg    func_stripname '' '.exe' "$func_basename_result"
129197cf2ee2Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
12926e7d3316Smrg}
12936e7d3316Smrg
12946e7d3316Smrg# func_ltwrapper_p file
12956e7d3316Smrg# True iff FILE is a libtool wrapper script or wrapper executable
12966e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12976e7d3316Smrg# determined imposters.
12986e7d3316Smrgfunc_ltwrapper_p ()
12996e7d3316Smrg{
13006e7d3316Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
13016e7d3316Smrg}
13026e7d3316Smrg
13036e7d3316Smrg
13046e7d3316Smrg# func_execute_cmds commands fail_cmd
13056e7d3316Smrg# Execute tilde-delimited COMMANDS.
13066e7d3316Smrg# If FAIL_CMD is given, eval that upon failure.
13076e7d3316Smrg# FAIL_CMD may read-access the current command in variable CMD!
13086e7d3316Smrgfunc_execute_cmds ()
13096e7d3316Smrg{
13106e7d3316Smrg    $opt_debug
13116e7d3316Smrg    save_ifs=$IFS; IFS='~'
13126e7d3316Smrg    for cmd in $1; do
13136e7d3316Smrg      IFS=$save_ifs
13146e7d3316Smrg      eval cmd=\"$cmd\"
13156e7d3316Smrg      func_show_eval "$cmd" "${2-:}"
13166e7d3316Smrg    done
13176e7d3316Smrg    IFS=$save_ifs
13186e7d3316Smrg}
13196e7d3316Smrg
13206e7d3316Smrg
13216e7d3316Smrg# func_source file
13226e7d3316Smrg# Source FILE, adding directory component if necessary.
13236e7d3316Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
13246e7d3316Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
13256e7d3316Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
13266e7d3316Smrg# `FILE.' does not work on cygwin managed mounts.
13276e7d3316Smrgfunc_source ()
13286e7d3316Smrg{
13296e7d3316Smrg    $opt_debug
13306e7d3316Smrg    case $1 in
13316e7d3316Smrg    */* | *\\*)	. "$1" ;;
13326e7d3316Smrg    *)		. "./$1" ;;
13336e7d3316Smrg    esac
13346e7d3316Smrg}
13356e7d3316Smrg
13366e7d3316Smrg
133797cf2ee2Smrg# func_resolve_sysroot PATH
133897cf2ee2Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
133997cf2ee2Smrg# func_resolve_sysroot_result
134097cf2ee2Smrgfunc_resolve_sysroot ()
134197cf2ee2Smrg{
134297cf2ee2Smrg  func_resolve_sysroot_result=$1
134397cf2ee2Smrg  case $func_resolve_sysroot_result in
134497cf2ee2Smrg  =*)
134597cf2ee2Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
134697cf2ee2Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
134797cf2ee2Smrg    ;;
134897cf2ee2Smrg  esac
134997cf2ee2Smrg}
135097cf2ee2Smrg
135197cf2ee2Smrg# func_replace_sysroot PATH
135297cf2ee2Smrg# If PATH begins with the sysroot, replace it with = and
135397cf2ee2Smrg# store the result into func_replace_sysroot_result.
135497cf2ee2Smrgfunc_replace_sysroot ()
135597cf2ee2Smrg{
135697cf2ee2Smrg  case "$lt_sysroot:$1" in
135797cf2ee2Smrg  ?*:"$lt_sysroot"*)
135897cf2ee2Smrg    func_stripname "$lt_sysroot" '' "$1"
135997cf2ee2Smrg    func_replace_sysroot_result="=$func_stripname_result"
136097cf2ee2Smrg    ;;
136197cf2ee2Smrg  *)
136297cf2ee2Smrg    # Including no sysroot.
136397cf2ee2Smrg    func_replace_sysroot_result=$1
136497cf2ee2Smrg    ;;
136597cf2ee2Smrg  esac
136697cf2ee2Smrg}
136797cf2ee2Smrg
13686e7d3316Smrg# func_infer_tag arg
13696e7d3316Smrg# Infer tagged configuration to use if any are available and
13706e7d3316Smrg# if one wasn't chosen via the "--tag" command line option.
13716e7d3316Smrg# Only attempt this if the compiler in the base compile
13726e7d3316Smrg# command doesn't match the default compiler.
13736e7d3316Smrg# arg is usually of the form 'gcc ...'
13746e7d3316Smrgfunc_infer_tag ()
13756e7d3316Smrg{
13766e7d3316Smrg    $opt_debug
13776e7d3316Smrg    if test -n "$available_tags" && test -z "$tagname"; then
13786e7d3316Smrg      CC_quoted=
13796e7d3316Smrg      for arg in $CC; do
138097cf2ee2Smrg	func_append_quoted CC_quoted "$arg"
13816e7d3316Smrg      done
13826e7d3316Smrg      CC_expanded=`func_echo_all $CC`
13836e7d3316Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
13846e7d3316Smrg      case $@ in
13856e7d3316Smrg      # Blanks in the command may have been stripped by the calling shell,
13866e7d3316Smrg      # but not from the CC environment variable when configure was run.
13876e7d3316Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
13886e7d3316Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
13896e7d3316Smrg      # Blanks at the start of $base_compile will cause this to fail
13906e7d3316Smrg      # if we don't check for them as well.
13916e7d3316Smrg      *)
13926e7d3316Smrg	for z in $available_tags; do
13936e7d3316Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
13946e7d3316Smrg	    # Evaluate the configuration.
13956e7d3316Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
13966e7d3316Smrg	    CC_quoted=
13976e7d3316Smrg	    for arg in $CC; do
13986e7d3316Smrg	      # Double-quote args containing other shell metacharacters.
139997cf2ee2Smrg	      func_append_quoted CC_quoted "$arg"
14006e7d3316Smrg	    done
14016e7d3316Smrg	    CC_expanded=`func_echo_all $CC`
14026e7d3316Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
14036e7d3316Smrg	    case "$@ " in
14046e7d3316Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
14056e7d3316Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
14066e7d3316Smrg	      # The compiler in the base compile command matches
14076e7d3316Smrg	      # the one in the tagged configuration.
14086e7d3316Smrg	      # Assume this is the tagged configuration we want.
14096e7d3316Smrg	      tagname=$z
14106e7d3316Smrg	      break
14116e7d3316Smrg	      ;;
14126e7d3316Smrg	    esac
14136e7d3316Smrg	  fi
14146e7d3316Smrg	done
14156e7d3316Smrg	# If $tagname still isn't set, then no tagged configuration
14166e7d3316Smrg	# was found and let the user know that the "--tag" command
14176e7d3316Smrg	# line option must be used.
14186e7d3316Smrg	if test -z "$tagname"; then
14196e7d3316Smrg	  func_echo "unable to infer tagged configuration"
14206e7d3316Smrg	  func_fatal_error "specify a tag with \`--tag'"
14216e7d3316Smrg#	else
14226e7d3316Smrg#	  func_verbose "using $tagname tagged configuration"
14236e7d3316Smrg	fi
14246e7d3316Smrg	;;
14256e7d3316Smrg      esac
14266e7d3316Smrg    fi
14276e7d3316Smrg}
14286e7d3316Smrg
14296e7d3316Smrg
14306e7d3316Smrg
143197cf2ee2Smrg# func_write_libtool_object output_name pic_name nonpic_name
143297cf2ee2Smrg# Create a libtool object file (analogous to a ".la" file),
143397cf2ee2Smrg# but don't create it if we're doing a dry run.
143497cf2ee2Smrgfunc_write_libtool_object ()
143597cf2ee2Smrg{
143697cf2ee2Smrg    write_libobj=${1}
143797cf2ee2Smrg    if test "$build_libtool_libs" = yes; then
143897cf2ee2Smrg      write_lobj=\'${2}\'
143997cf2ee2Smrg    else
144097cf2ee2Smrg      write_lobj=none
144197cf2ee2Smrg    fi
144297cf2ee2Smrg
144397cf2ee2Smrg    if test "$build_old_libs" = yes; then
144497cf2ee2Smrg      write_oldobj=\'${3}\'
144597cf2ee2Smrg    else
144697cf2ee2Smrg      write_oldobj=none
144797cf2ee2Smrg    fi
144897cf2ee2Smrg
144997cf2ee2Smrg    $opt_dry_run || {
145097cf2ee2Smrg      cat >${write_libobj}T <<EOF
145197cf2ee2Smrg# $write_libobj - a libtool object file
145297cf2ee2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
145397cf2ee2Smrg#
145497cf2ee2Smrg# Please DO NOT delete this file!
145597cf2ee2Smrg# It is necessary for linking the library.
145697cf2ee2Smrg
145797cf2ee2Smrg# Name of the PIC object.
145897cf2ee2Smrgpic_object=$write_lobj
145997cf2ee2Smrg
146097cf2ee2Smrg# Name of the non-PIC object
146197cf2ee2Smrgnon_pic_object=$write_oldobj
146297cf2ee2Smrg
146397cf2ee2SmrgEOF
146497cf2ee2Smrg      $MV "${write_libobj}T" "${write_libobj}"
146597cf2ee2Smrg    }
146697cf2ee2Smrg}
146797cf2ee2Smrg
146897cf2ee2Smrg
146997cf2ee2Smrg##################################################
147097cf2ee2Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
147197cf2ee2Smrg##################################################
147297cf2ee2Smrg
147397cf2ee2Smrg# func_convert_core_file_wine_to_w32 ARG
147497cf2ee2Smrg# Helper function used by file name conversion functions when $build is *nix,
147597cf2ee2Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
147697cf2ee2Smrg# correctly configured wine environment available, with the winepath program
147797cf2ee2Smrg# in $build's $PATH.
147897cf2ee2Smrg#
147997cf2ee2Smrg# ARG is the $build file name to be converted to w32 format.
148097cf2ee2Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
148197cf2ee2Smrg# be empty on error (or when ARG is empty)
148297cf2ee2Smrgfunc_convert_core_file_wine_to_w32 ()
148397cf2ee2Smrg{
148497cf2ee2Smrg  $opt_debug
148597cf2ee2Smrg  func_convert_core_file_wine_to_w32_result="$1"
148697cf2ee2Smrg  if test -n "$1"; then
148797cf2ee2Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
148897cf2ee2Smrg    # are forced to check the contents of stdout. On the other hand, if the
148997cf2ee2Smrg    # command is not found, the shell will set an exit code of 127 and print
149097cf2ee2Smrg    # *an error message* to stdout. So we must check for both error code of
149197cf2ee2Smrg    # zero AND non-empty stdout, which explains the odd construction:
149297cf2ee2Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
149397cf2ee2Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
149497cf2ee2Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
149597cf2ee2Smrg        $SED -e "$lt_sed_naive_backslashify"`
149697cf2ee2Smrg    else
149797cf2ee2Smrg      func_convert_core_file_wine_to_w32_result=
149897cf2ee2Smrg    fi
149997cf2ee2Smrg  fi
150097cf2ee2Smrg}
150197cf2ee2Smrg# end: func_convert_core_file_wine_to_w32
150297cf2ee2Smrg
150397cf2ee2Smrg
150497cf2ee2Smrg# func_convert_core_path_wine_to_w32 ARG
150597cf2ee2Smrg# Helper function used by path conversion functions when $build is *nix, and
150697cf2ee2Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
150797cf2ee2Smrg# configured wine environment available, with the winepath program in $build's
150897cf2ee2Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
150997cf2ee2Smrg#
151097cf2ee2Smrg# ARG is path to be converted from $build format to win32.
151197cf2ee2Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
151297cf2ee2Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
151397cf2ee2Smrg# are convertible, then the result may be empty.
151497cf2ee2Smrgfunc_convert_core_path_wine_to_w32 ()
151597cf2ee2Smrg{
151697cf2ee2Smrg  $opt_debug
151797cf2ee2Smrg  # unfortunately, winepath doesn't convert paths, only file names
151897cf2ee2Smrg  func_convert_core_path_wine_to_w32_result=""
151997cf2ee2Smrg  if test -n "$1"; then
152097cf2ee2Smrg    oldIFS=$IFS
152197cf2ee2Smrg    IFS=:
152297cf2ee2Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
152397cf2ee2Smrg      IFS=$oldIFS
152497cf2ee2Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
152597cf2ee2Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
152697cf2ee2Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
152797cf2ee2Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
152897cf2ee2Smrg        else
152997cf2ee2Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
153097cf2ee2Smrg        fi
153197cf2ee2Smrg      fi
153297cf2ee2Smrg    done
153397cf2ee2Smrg    IFS=$oldIFS
153497cf2ee2Smrg  fi
153597cf2ee2Smrg}
153697cf2ee2Smrg# end: func_convert_core_path_wine_to_w32
153797cf2ee2Smrg
153897cf2ee2Smrg
153997cf2ee2Smrg# func_cygpath ARGS...
154097cf2ee2Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
154197cf2ee2Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
154297cf2ee2Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
154397cf2ee2Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
154497cf2ee2Smrg# file name or path is assumed to be in w32 format, as previously converted
154597cf2ee2Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
154697cf2ee2Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
154797cf2ee2Smrg# Cygwin format). Returns an empty string on error.
154897cf2ee2Smrg#
154997cf2ee2Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
155097cf2ee2Smrg# be converted.
155197cf2ee2Smrg#
155297cf2ee2Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
155397cf2ee2Smrg# environment variable; do not put it in $PATH.
155497cf2ee2Smrgfunc_cygpath ()
155597cf2ee2Smrg{
155697cf2ee2Smrg  $opt_debug
155797cf2ee2Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
155897cf2ee2Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
155997cf2ee2Smrg    if test "$?" -ne 0; then
156097cf2ee2Smrg      # on failure, ensure result is empty
156197cf2ee2Smrg      func_cygpath_result=
156297cf2ee2Smrg    fi
156397cf2ee2Smrg  else
156497cf2ee2Smrg    func_cygpath_result=
156597cf2ee2Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
156697cf2ee2Smrg  fi
156797cf2ee2Smrg}
156897cf2ee2Smrg#end: func_cygpath
156997cf2ee2Smrg
157097cf2ee2Smrg
157197cf2ee2Smrg# func_convert_core_msys_to_w32 ARG
157297cf2ee2Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
157397cf2ee2Smrg# result in func_convert_core_msys_to_w32_result.
157497cf2ee2Smrgfunc_convert_core_msys_to_w32 ()
157597cf2ee2Smrg{
157697cf2ee2Smrg  $opt_debug
157797cf2ee2Smrg  # awkward: cmd appends spaces to result
157897cf2ee2Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
157997cf2ee2Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
158097cf2ee2Smrg}
158197cf2ee2Smrg#end: func_convert_core_msys_to_w32
158297cf2ee2Smrg
158397cf2ee2Smrg
158497cf2ee2Smrg# func_convert_file_check ARG1 ARG2
158597cf2ee2Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
158697cf2ee2Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
158797cf2ee2Smrg# func_to_host_file_result to ARG1).
158897cf2ee2Smrgfunc_convert_file_check ()
158997cf2ee2Smrg{
159097cf2ee2Smrg  $opt_debug
159197cf2ee2Smrg  if test -z "$2" && test -n "$1" ; then
159297cf2ee2Smrg    func_error "Could not determine host file name corresponding to"
159397cf2ee2Smrg    func_error "  \`$1'"
159497cf2ee2Smrg    func_error "Continuing, but uninstalled executables may not work."
159597cf2ee2Smrg    # Fallback:
159697cf2ee2Smrg    func_to_host_file_result="$1"
159797cf2ee2Smrg  fi
159897cf2ee2Smrg}
159997cf2ee2Smrg# end func_convert_file_check
160097cf2ee2Smrg
160197cf2ee2Smrg
160297cf2ee2Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
160397cf2ee2Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
160497cf2ee2Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
160597cf2ee2Smrg# func_to_host_file_result to a simplistic fallback value (see below).
160697cf2ee2Smrgfunc_convert_path_check ()
160797cf2ee2Smrg{
160897cf2ee2Smrg  $opt_debug
160997cf2ee2Smrg  if test -z "$4" && test -n "$3"; then
161097cf2ee2Smrg    func_error "Could not determine the host path corresponding to"
161197cf2ee2Smrg    func_error "  \`$3'"
161297cf2ee2Smrg    func_error "Continuing, but uninstalled executables may not work."
161397cf2ee2Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
161497cf2ee2Smrg    # should not be "improved".  See libtool.info.
161597cf2ee2Smrg    if test "x$1" != "x$2"; then
161697cf2ee2Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
161797cf2ee2Smrg      func_to_host_path_result=`echo "$3" |
161897cf2ee2Smrg        $SED -e "$lt_replace_pathsep_chars"`
161997cf2ee2Smrg    else
162097cf2ee2Smrg      func_to_host_path_result="$3"
162197cf2ee2Smrg    fi
162297cf2ee2Smrg  fi
162397cf2ee2Smrg}
162497cf2ee2Smrg# end func_convert_path_check
162597cf2ee2Smrg
162697cf2ee2Smrg
162797cf2ee2Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
162897cf2ee2Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
162997cf2ee2Smrg# and appending REPL if ORIG matches BACKPAT.
163097cf2ee2Smrgfunc_convert_path_front_back_pathsep ()
163197cf2ee2Smrg{
163297cf2ee2Smrg  $opt_debug
163397cf2ee2Smrg  case $4 in
163497cf2ee2Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
163597cf2ee2Smrg    ;;
163697cf2ee2Smrg  esac
163797cf2ee2Smrg  case $4 in
163897cf2ee2Smrg  $2 ) func_append func_to_host_path_result "$3"
163997cf2ee2Smrg    ;;
164097cf2ee2Smrg  esac
164197cf2ee2Smrg}
164297cf2ee2Smrg# end func_convert_path_front_back_pathsep
164397cf2ee2Smrg
164497cf2ee2Smrg
164597cf2ee2Smrg##################################################
164697cf2ee2Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
164797cf2ee2Smrg##################################################
164897cf2ee2Smrg# invoked via `$to_host_file_cmd ARG'
164997cf2ee2Smrg#
165097cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format.
165197cf2ee2Smrg# Result will be available in $func_to_host_file_result.
165297cf2ee2Smrg
165397cf2ee2Smrg
165497cf2ee2Smrg# func_to_host_file ARG
165597cf2ee2Smrg# Converts the file name ARG from $build format to $host format. Return result
165697cf2ee2Smrg# in func_to_host_file_result.
165797cf2ee2Smrgfunc_to_host_file ()
165897cf2ee2Smrg{
165997cf2ee2Smrg  $opt_debug
166097cf2ee2Smrg  $to_host_file_cmd "$1"
166197cf2ee2Smrg}
166297cf2ee2Smrg# end func_to_host_file
166397cf2ee2Smrg
166497cf2ee2Smrg
166597cf2ee2Smrg# func_to_tool_file ARG LAZY
166697cf2ee2Smrg# converts the file name ARG from $build format to toolchain format. Return
166797cf2ee2Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
166897cf2ee2Smrg# in (the comma separated) LAZY, no conversion takes place.
166997cf2ee2Smrgfunc_to_tool_file ()
167097cf2ee2Smrg{
167197cf2ee2Smrg  $opt_debug
167297cf2ee2Smrg  case ,$2, in
167397cf2ee2Smrg    *,"$to_tool_file_cmd",*)
167497cf2ee2Smrg      func_to_tool_file_result=$1
167597cf2ee2Smrg      ;;
167697cf2ee2Smrg    *)
167797cf2ee2Smrg      $to_tool_file_cmd "$1"
167897cf2ee2Smrg      func_to_tool_file_result=$func_to_host_file_result
167997cf2ee2Smrg      ;;
168097cf2ee2Smrg  esac
168197cf2ee2Smrg}
168297cf2ee2Smrg# end func_to_tool_file
168397cf2ee2Smrg
168497cf2ee2Smrg
168597cf2ee2Smrg# func_convert_file_noop ARG
168697cf2ee2Smrg# Copy ARG to func_to_host_file_result.
168797cf2ee2Smrgfunc_convert_file_noop ()
168897cf2ee2Smrg{
168997cf2ee2Smrg  func_to_host_file_result="$1"
169097cf2ee2Smrg}
169197cf2ee2Smrg# end func_convert_file_noop
169297cf2ee2Smrg
169397cf2ee2Smrg
169497cf2ee2Smrg# func_convert_file_msys_to_w32 ARG
169597cf2ee2Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
169697cf2ee2Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
169797cf2ee2Smrg# func_to_host_file_result.
169897cf2ee2Smrgfunc_convert_file_msys_to_w32 ()
169997cf2ee2Smrg{
170097cf2ee2Smrg  $opt_debug
170197cf2ee2Smrg  func_to_host_file_result="$1"
170297cf2ee2Smrg  if test -n "$1"; then
170397cf2ee2Smrg    func_convert_core_msys_to_w32 "$1"
170497cf2ee2Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
170597cf2ee2Smrg  fi
170697cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
170797cf2ee2Smrg}
170897cf2ee2Smrg# end func_convert_file_msys_to_w32
170997cf2ee2Smrg
171097cf2ee2Smrg
171197cf2ee2Smrg# func_convert_file_cygwin_to_w32 ARG
171297cf2ee2Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
171397cf2ee2Smrg# func_to_host_file_result.
171497cf2ee2Smrgfunc_convert_file_cygwin_to_w32 ()
171597cf2ee2Smrg{
171697cf2ee2Smrg  $opt_debug
171797cf2ee2Smrg  func_to_host_file_result="$1"
171897cf2ee2Smrg  if test -n "$1"; then
171997cf2ee2Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
172097cf2ee2Smrg    # LT_CYGPATH in this case.
172197cf2ee2Smrg    func_to_host_file_result=`cygpath -m "$1"`
172297cf2ee2Smrg  fi
172397cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
172497cf2ee2Smrg}
172597cf2ee2Smrg# end func_convert_file_cygwin_to_w32
172697cf2ee2Smrg
172797cf2ee2Smrg
172897cf2ee2Smrg# func_convert_file_nix_to_w32 ARG
172997cf2ee2Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
173097cf2ee2Smrg# and a working winepath. Returns result in func_to_host_file_result.
173197cf2ee2Smrgfunc_convert_file_nix_to_w32 ()
173297cf2ee2Smrg{
173397cf2ee2Smrg  $opt_debug
173497cf2ee2Smrg  func_to_host_file_result="$1"
173597cf2ee2Smrg  if test -n "$1"; then
173697cf2ee2Smrg    func_convert_core_file_wine_to_w32 "$1"
173797cf2ee2Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
173897cf2ee2Smrg  fi
173997cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
174097cf2ee2Smrg}
174197cf2ee2Smrg# end func_convert_file_nix_to_w32
174297cf2ee2Smrg
174397cf2ee2Smrg
174497cf2ee2Smrg# func_convert_file_msys_to_cygwin ARG
174597cf2ee2Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
174697cf2ee2Smrg# Returns result in func_to_host_file_result.
174797cf2ee2Smrgfunc_convert_file_msys_to_cygwin ()
174897cf2ee2Smrg{
174997cf2ee2Smrg  $opt_debug
175097cf2ee2Smrg  func_to_host_file_result="$1"
175197cf2ee2Smrg  if test -n "$1"; then
175297cf2ee2Smrg    func_convert_core_msys_to_w32 "$1"
175397cf2ee2Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
175497cf2ee2Smrg    func_to_host_file_result="$func_cygpath_result"
175597cf2ee2Smrg  fi
175697cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
175797cf2ee2Smrg}
175897cf2ee2Smrg# end func_convert_file_msys_to_cygwin
175997cf2ee2Smrg
176097cf2ee2Smrg
176197cf2ee2Smrg# func_convert_file_nix_to_cygwin ARG
176297cf2ee2Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
176397cf2ee2Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
176497cf2ee2Smrg# in func_to_host_file_result.
176597cf2ee2Smrgfunc_convert_file_nix_to_cygwin ()
176697cf2ee2Smrg{
176797cf2ee2Smrg  $opt_debug
176897cf2ee2Smrg  func_to_host_file_result="$1"
176997cf2ee2Smrg  if test -n "$1"; then
177097cf2ee2Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
177197cf2ee2Smrg    func_convert_core_file_wine_to_w32 "$1"
177297cf2ee2Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
177397cf2ee2Smrg    func_to_host_file_result="$func_cygpath_result"
177497cf2ee2Smrg  fi
177597cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
177697cf2ee2Smrg}
177797cf2ee2Smrg# end func_convert_file_nix_to_cygwin
177897cf2ee2Smrg
177997cf2ee2Smrg
178097cf2ee2Smrg#############################################
178197cf2ee2Smrg# $build to $host PATH CONVERSION FUNCTIONS #
178297cf2ee2Smrg#############################################
178397cf2ee2Smrg# invoked via `$to_host_path_cmd ARG'
178497cf2ee2Smrg#
178597cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format.
178697cf2ee2Smrg# The result will be available in $func_to_host_path_result.
178797cf2ee2Smrg#
178897cf2ee2Smrg# Path separators are also converted from $build format to $host format.  If
178997cf2ee2Smrg# ARG begins or ends with a path separator character, it is preserved (but
179097cf2ee2Smrg# converted to $host format) on output.
179197cf2ee2Smrg#
179297cf2ee2Smrg# All path conversion functions are named using the following convention:
179397cf2ee2Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
179497cf2ee2Smrg#   path conversion function         : func_convert_path_X_to_Y ()
179597cf2ee2Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
179697cf2ee2Smrg# same.  If conversion functions are added for new $build/$host combinations,
179797cf2ee2Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
179897cf2ee2Smrg# will break.
179997cf2ee2Smrg
180097cf2ee2Smrg
180197cf2ee2Smrg# func_init_to_host_path_cmd
180297cf2ee2Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
180397cf2ee2Smrg# appropriate value, based on the value of $to_host_file_cmd.
180497cf2ee2Smrgto_host_path_cmd=
180597cf2ee2Smrgfunc_init_to_host_path_cmd ()
180697cf2ee2Smrg{
180797cf2ee2Smrg  $opt_debug
180897cf2ee2Smrg  if test -z "$to_host_path_cmd"; then
180997cf2ee2Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
181097cf2ee2Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
181197cf2ee2Smrg  fi
181297cf2ee2Smrg}
181397cf2ee2Smrg
181497cf2ee2Smrg
181597cf2ee2Smrg# func_to_host_path ARG
181697cf2ee2Smrg# Converts the path ARG from $build format to $host format. Return result
181797cf2ee2Smrg# in func_to_host_path_result.
181897cf2ee2Smrgfunc_to_host_path ()
181997cf2ee2Smrg{
182097cf2ee2Smrg  $opt_debug
182197cf2ee2Smrg  func_init_to_host_path_cmd
182297cf2ee2Smrg  $to_host_path_cmd "$1"
182397cf2ee2Smrg}
182497cf2ee2Smrg# end func_to_host_path
182597cf2ee2Smrg
182697cf2ee2Smrg
182797cf2ee2Smrg# func_convert_path_noop ARG
182897cf2ee2Smrg# Copy ARG to func_to_host_path_result.
182997cf2ee2Smrgfunc_convert_path_noop ()
183097cf2ee2Smrg{
183197cf2ee2Smrg  func_to_host_path_result="$1"
183297cf2ee2Smrg}
183397cf2ee2Smrg# end func_convert_path_noop
183497cf2ee2Smrg
183597cf2ee2Smrg
183697cf2ee2Smrg# func_convert_path_msys_to_w32 ARG
183797cf2ee2Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
183897cf2ee2Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
183997cf2ee2Smrg# func_to_host_path_result.
184097cf2ee2Smrgfunc_convert_path_msys_to_w32 ()
18416e7d3316Smrg{
184297cf2ee2Smrg  $opt_debug
184397cf2ee2Smrg  func_to_host_path_result="$1"
184497cf2ee2Smrg  if test -n "$1"; then
184597cf2ee2Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
184697cf2ee2Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
184797cf2ee2Smrg    # and winepath ignores them completely.
184897cf2ee2Smrg    func_stripname : : "$1"
184997cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
185097cf2ee2Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
185197cf2ee2Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
185297cf2ee2Smrg    func_convert_path_check : ";" \
185397cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
185497cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
185597cf2ee2Smrg  fi
185697cf2ee2Smrg}
185797cf2ee2Smrg# end func_convert_path_msys_to_w32
18586e7d3316Smrg
18596e7d3316Smrg
186097cf2ee2Smrg# func_convert_path_cygwin_to_w32 ARG
186197cf2ee2Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
186297cf2ee2Smrg# func_to_host_file_result.
186397cf2ee2Smrgfunc_convert_path_cygwin_to_w32 ()
186497cf2ee2Smrg{
186597cf2ee2Smrg  $opt_debug
186697cf2ee2Smrg  func_to_host_path_result="$1"
186797cf2ee2Smrg  if test -n "$1"; then
186897cf2ee2Smrg    # See func_convert_path_msys_to_w32:
186997cf2ee2Smrg    func_stripname : : "$1"
187097cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
187197cf2ee2Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
187297cf2ee2Smrg    func_convert_path_check : ";" \
187397cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
187497cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
187597cf2ee2Smrg  fi
187697cf2ee2Smrg}
187797cf2ee2Smrg# end func_convert_path_cygwin_to_w32
18786e7d3316Smrg
18796e7d3316Smrg
188097cf2ee2Smrg# func_convert_path_nix_to_w32 ARG
188197cf2ee2Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
188297cf2ee2Smrg# a working winepath.  Returns result in func_to_host_file_result.
188397cf2ee2Smrgfunc_convert_path_nix_to_w32 ()
188497cf2ee2Smrg{
188597cf2ee2Smrg  $opt_debug
188697cf2ee2Smrg  func_to_host_path_result="$1"
188797cf2ee2Smrg  if test -n "$1"; then
188897cf2ee2Smrg    # See func_convert_path_msys_to_w32:
188997cf2ee2Smrg    func_stripname : : "$1"
189097cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
189197cf2ee2Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
189297cf2ee2Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
189397cf2ee2Smrg    func_convert_path_check : ";" \
189497cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
189597cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
189697cf2ee2Smrg  fi
189797cf2ee2Smrg}
189897cf2ee2Smrg# end func_convert_path_nix_to_w32
18996e7d3316Smrg
190097cf2ee2Smrg
190197cf2ee2Smrg# func_convert_path_msys_to_cygwin ARG
190297cf2ee2Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
190397cf2ee2Smrg# Returns result in func_to_host_file_result.
190497cf2ee2Smrgfunc_convert_path_msys_to_cygwin ()
190597cf2ee2Smrg{
190697cf2ee2Smrg  $opt_debug
190797cf2ee2Smrg  func_to_host_path_result="$1"
190897cf2ee2Smrg  if test -n "$1"; then
190997cf2ee2Smrg    # See func_convert_path_msys_to_w32:
191097cf2ee2Smrg    func_stripname : : "$1"
191197cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
191297cf2ee2Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
191397cf2ee2Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
191497cf2ee2Smrg    func_to_host_path_result="$func_cygpath_result"
191597cf2ee2Smrg    func_convert_path_check : : \
191697cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
191797cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
191897cf2ee2Smrg  fi
191997cf2ee2Smrg}
192097cf2ee2Smrg# end func_convert_path_msys_to_cygwin
192197cf2ee2Smrg
192297cf2ee2Smrg
192397cf2ee2Smrg# func_convert_path_nix_to_cygwin ARG
192497cf2ee2Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
192597cf2ee2Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
192697cf2ee2Smrg# func_to_host_file_result.
192797cf2ee2Smrgfunc_convert_path_nix_to_cygwin ()
192897cf2ee2Smrg{
192997cf2ee2Smrg  $opt_debug
193097cf2ee2Smrg  func_to_host_path_result="$1"
193197cf2ee2Smrg  if test -n "$1"; then
193297cf2ee2Smrg    # Remove leading and trailing path separator characters from
193397cf2ee2Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
193497cf2ee2Smrg    # into '.;' and ';.', and winepath ignores them completely.
193597cf2ee2Smrg    func_stripname : : "$1"
193697cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
193797cf2ee2Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
193897cf2ee2Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
193997cf2ee2Smrg    func_to_host_path_result="$func_cygpath_result"
194097cf2ee2Smrg    func_convert_path_check : : \
194197cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
194297cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
194397cf2ee2Smrg  fi
19446e7d3316Smrg}
194597cf2ee2Smrg# end func_convert_path_nix_to_cygwin
194697cf2ee2Smrg
19476e7d3316Smrg
19486e7d3316Smrg# func_mode_compile arg...
19496e7d3316Smrgfunc_mode_compile ()
19506e7d3316Smrg{
19516e7d3316Smrg    $opt_debug
19526e7d3316Smrg    # Get the compilation command and the source file.
19536e7d3316Smrg    base_compile=
19546e7d3316Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
19556e7d3316Smrg    suppress_opt=yes
19566e7d3316Smrg    suppress_output=
19576e7d3316Smrg    arg_mode=normal
19586e7d3316Smrg    libobj=
19596e7d3316Smrg    later=
19606e7d3316Smrg    pie_flag=
19616e7d3316Smrg
19626e7d3316Smrg    for arg
19636e7d3316Smrg    do
19646e7d3316Smrg      case $arg_mode in
19656e7d3316Smrg      arg  )
19666e7d3316Smrg	# do not "continue".  Instead, add this to base_compile
19676e7d3316Smrg	lastarg="$arg"
19686e7d3316Smrg	arg_mode=normal
19696e7d3316Smrg	;;
19706e7d3316Smrg
19716e7d3316Smrg      target )
19726e7d3316Smrg	libobj="$arg"
19736e7d3316Smrg	arg_mode=normal
19746e7d3316Smrg	continue
19756e7d3316Smrg	;;
19766e7d3316Smrg
19776e7d3316Smrg      normal )
19786e7d3316Smrg	# Accept any command-line options.
19796e7d3316Smrg	case $arg in
19806e7d3316Smrg	-o)
19816e7d3316Smrg	  test -n "$libobj" && \
19826e7d3316Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
19836e7d3316Smrg	  arg_mode=target
19846e7d3316Smrg	  continue
19856e7d3316Smrg	  ;;
19866e7d3316Smrg
19876e7d3316Smrg	-pie | -fpie | -fPIE)
198897cf2ee2Smrg          func_append pie_flag " $arg"
19896e7d3316Smrg	  continue
19906e7d3316Smrg	  ;;
19916e7d3316Smrg
19926e7d3316Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
199397cf2ee2Smrg	  func_append later " $arg"
19946e7d3316Smrg	  continue
19956e7d3316Smrg	  ;;
1996a966c04fSmrg
1997a966c04fSmrg	-no-suppress)
1998a966c04fSmrg	  suppress_opt=no
1999a966c04fSmrg	  continue
2000a966c04fSmrg	  ;;
2001a966c04fSmrg
2002a966c04fSmrg	-Xcompiler)
2003a966c04fSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2004a966c04fSmrg	  continue      #  The current "srcfile" will either be retained or
2005a966c04fSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
2006a966c04fSmrg
2007a966c04fSmrg	-Wc,*)
20086e7d3316Smrg	  func_stripname '-Wc,' '' "$arg"
20096e7d3316Smrg	  args=$func_stripname_result
2010a966c04fSmrg	  lastarg=
2011a966c04fSmrg	  save_ifs="$IFS"; IFS=','
20126e7d3316Smrg	  for arg in $args; do
2013a966c04fSmrg	    IFS="$save_ifs"
201497cf2ee2Smrg	    func_append_quoted lastarg "$arg"
2015a966c04fSmrg	  done
2016a966c04fSmrg	  IFS="$save_ifs"
20176e7d3316Smrg	  func_stripname ' ' '' "$lastarg"
20186e7d3316Smrg	  lastarg=$func_stripname_result
2019a966c04fSmrg
2020a966c04fSmrg	  # Add the arguments to base_compile.
202197cf2ee2Smrg	  func_append base_compile " $lastarg"
2022a966c04fSmrg	  continue
2023a966c04fSmrg	  ;;
2024a966c04fSmrg
20256e7d3316Smrg	*)
2026a966c04fSmrg	  # Accept the current argument as the source file.
2027a966c04fSmrg	  # The previous "srcfile" becomes the current argument.
2028a966c04fSmrg	  #
2029a966c04fSmrg	  lastarg="$srcfile"
2030a966c04fSmrg	  srcfile="$arg"
2031a966c04fSmrg	  ;;
2032a966c04fSmrg	esac  #  case $arg
2033a966c04fSmrg	;;
2034a966c04fSmrg      esac    #  case $arg_mode
2035a966c04fSmrg
2036a966c04fSmrg      # Aesthetically quote the previous argument.
203797cf2ee2Smrg      func_append_quoted base_compile "$lastarg"
2038a966c04fSmrg    done # for arg
2039a966c04fSmrg
2040a966c04fSmrg    case $arg_mode in
2041a966c04fSmrg    arg)
20426e7d3316Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2043a966c04fSmrg      ;;
2044a966c04fSmrg    target)
20456e7d3316Smrg      func_fatal_error "you must specify a target with \`-o'"
2046a966c04fSmrg      ;;
2047a966c04fSmrg    *)
2048a966c04fSmrg      # Get the name of the library object.
20496e7d3316Smrg      test -z "$libobj" && {
20506e7d3316Smrg	func_basename "$srcfile"
20516e7d3316Smrg	libobj="$func_basename_result"
20526e7d3316Smrg      }
2053a966c04fSmrg      ;;
2054a966c04fSmrg    esac
2055a966c04fSmrg
2056a966c04fSmrg    # Recognize several different file suffixes.
2057a966c04fSmrg    # If the user specifies -o file.o, it is replaced with file.lo
2058a966c04fSmrg    case $libobj in
20596e7d3316Smrg    *.[cCFSifmso] | \
20606e7d3316Smrg    *.ada | *.adb | *.ads | *.asm | \
20616e7d3316Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
20626e7d3316Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
20636e7d3316Smrg      func_xform "$libobj"
20646e7d3316Smrg      libobj=$func_xform_result
20656e7d3316Smrg      ;;
2066a966c04fSmrg    esac
2067a966c04fSmrg
2068a966c04fSmrg    case $libobj in
20696e7d3316Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2070a966c04fSmrg    *)
20716e7d3316Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2072a966c04fSmrg      ;;
2073a966c04fSmrg    esac
2074a966c04fSmrg
2075a966c04fSmrg    func_infer_tag $base_compile
2076a966c04fSmrg
2077a966c04fSmrg    for arg in $later; do
2078a966c04fSmrg      case $arg in
20796e7d3316Smrg      -shared)
20806e7d3316Smrg	test "$build_libtool_libs" != yes && \
20816e7d3316Smrg	  func_fatal_configuration "can not build a shared library"
20826e7d3316Smrg	build_old_libs=no
20836e7d3316Smrg	continue
20846e7d3316Smrg	;;
20856e7d3316Smrg
2086a966c04fSmrg      -static)
20876e7d3316Smrg	build_libtool_libs=no
2088a966c04fSmrg	build_old_libs=yes
2089a966c04fSmrg	continue
2090a966c04fSmrg	;;
2091a966c04fSmrg
2092a966c04fSmrg      -prefer-pic)
2093a966c04fSmrg	pic_mode=yes
2094a966c04fSmrg	continue
2095a966c04fSmrg	;;
2096a966c04fSmrg
2097a966c04fSmrg      -prefer-non-pic)
2098a966c04fSmrg	pic_mode=no
2099a966c04fSmrg	continue
2100a966c04fSmrg	;;
2101a966c04fSmrg      esac
2102a966c04fSmrg    done
2103a966c04fSmrg
21046e7d3316Smrg    func_quote_for_eval "$libobj"
21056e7d3316Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
21066e7d3316Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
21076e7d3316Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
21086e7d3316Smrg    func_dirname_and_basename "$obj" "/" ""
21096e7d3316Smrg    objname="$func_basename_result"
21106e7d3316Smrg    xdir="$func_dirname_result"
2111a966c04fSmrg    lobj=${xdir}$objdir/$objname
2112a966c04fSmrg
21136e7d3316Smrg    test -z "$base_compile" && \
21146e7d3316Smrg      func_fatal_help "you must specify a compilation command"
2115a966c04fSmrg
2116a966c04fSmrg    # Delete any leftover library objects.
2117a966c04fSmrg    if test "$build_old_libs" = yes; then
2118a966c04fSmrg      removelist="$obj $lobj $libobj ${libobj}T"
2119a966c04fSmrg    else
2120a966c04fSmrg      removelist="$lobj $libobj ${libobj}T"
2121a966c04fSmrg    fi
2122a966c04fSmrg
2123a966c04fSmrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2124a966c04fSmrg    case $host_os in
21256e7d3316Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2126a966c04fSmrg      pic_mode=default
2127a966c04fSmrg      ;;
2128a966c04fSmrg    esac
2129a966c04fSmrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2130a966c04fSmrg      # non-PIC code in shared libraries is not supported
2131a966c04fSmrg      pic_mode=default
2132a966c04fSmrg    fi
2133a966c04fSmrg
2134a966c04fSmrg    # Calculate the filename of the output object if compiler does
2135a966c04fSmrg    # not support -o with -c
2136a966c04fSmrg    if test "$compiler_c_o" = no; then
21376e7d3316Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2138a966c04fSmrg      lockfile="$output_obj.lock"
2139a966c04fSmrg    else
2140a966c04fSmrg      output_obj=
2141a966c04fSmrg      need_locks=no
2142a966c04fSmrg      lockfile=
2143a966c04fSmrg    fi
2144a966c04fSmrg
2145a966c04fSmrg    # Lock this critical section if it is needed
2146a966c04fSmrg    # We use this script file to make the link, it avoids creating a new file
2147a966c04fSmrg    if test "$need_locks" = yes; then
21486e7d3316Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
21496e7d3316Smrg	func_echo "Waiting for $lockfile to be removed"
2150a966c04fSmrg	sleep 2
2151a966c04fSmrg      done
2152a966c04fSmrg    elif test "$need_locks" = warn; then
2153a966c04fSmrg      if test -f "$lockfile"; then
21546e7d3316Smrg	$ECHO "\
2155a966c04fSmrg*** ERROR, $lockfile exists and contains:
2156a966c04fSmrg`cat $lockfile 2>/dev/null`
2157a966c04fSmrg
2158a966c04fSmrgThis indicates that another process is trying to use the same
2159a966c04fSmrgtemporary object file, and libtool could not work around it because
2160a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2161a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
2162a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
2163a966c04fSmrgcompiler."
2164a966c04fSmrg
21656e7d3316Smrg	$opt_dry_run || $RM $removelist
2166a966c04fSmrg	exit $EXIT_FAILURE
2167a966c04fSmrg      fi
216897cf2ee2Smrg      func_append removelist " $output_obj"
21696e7d3316Smrg      $ECHO "$srcfile" > "$lockfile"
2170a966c04fSmrg    fi
2171a966c04fSmrg
21726e7d3316Smrg    $opt_dry_run || $RM $removelist
217397cf2ee2Smrg    func_append removelist " $lockfile"
21746e7d3316Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
21756e7d3316Smrg
217697cf2ee2Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
217797cf2ee2Smrg    srcfile=$func_to_tool_file_result
21786e7d3316Smrg    func_quote_for_eval "$srcfile"
21796e7d3316Smrg    qsrcfile=$func_quote_for_eval_result
2180a966c04fSmrg
2181a966c04fSmrg    # Only build a PIC object if we are building libtool libraries.
2182a966c04fSmrg    if test "$build_libtool_libs" = yes; then
2183a966c04fSmrg      # Without this assignment, base_compile gets emptied.
2184a966c04fSmrg      fbsd_hideous_sh_bug=$base_compile
2185a966c04fSmrg
2186a966c04fSmrg      if test "$pic_mode" != no; then
2187a966c04fSmrg	command="$base_compile $qsrcfile $pic_flag"
2188a966c04fSmrg      else
2189a966c04fSmrg	# Don't build PIC code
2190a966c04fSmrg	command="$base_compile $qsrcfile"
2191a966c04fSmrg      fi
2192a966c04fSmrg
21936e7d3316Smrg      func_mkdir_p "$xdir$objdir"
2194a966c04fSmrg
2195a966c04fSmrg      if test -z "$output_obj"; then
2196a966c04fSmrg	# Place PIC objects in $objdir
219797cf2ee2Smrg	func_append command " -o $lobj"
2198a966c04fSmrg      fi
2199a966c04fSmrg
22006e7d3316Smrg      func_show_eval_locale "$command"	\
22016e7d3316Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2202a966c04fSmrg
2203a966c04fSmrg      if test "$need_locks" = warn &&
2204a966c04fSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
22056e7d3316Smrg	$ECHO "\
2206a966c04fSmrg*** ERROR, $lockfile contains:
2207a966c04fSmrg`cat $lockfile 2>/dev/null`
2208a966c04fSmrg
2209a966c04fSmrgbut it should contain:
2210a966c04fSmrg$srcfile
2211a966c04fSmrg
2212a966c04fSmrgThis indicates that another process is trying to use the same
2213a966c04fSmrgtemporary object file, and libtool could not work around it because
2214a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2215a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
2216a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
2217a966c04fSmrgcompiler."
2218a966c04fSmrg
22196e7d3316Smrg	$opt_dry_run || $RM $removelist
2220a966c04fSmrg	exit $EXIT_FAILURE
2221a966c04fSmrg      fi
2222a966c04fSmrg
2223a966c04fSmrg      # Just move the object if needed, then go on to compile the next one
2224a966c04fSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
22256e7d3316Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
22266e7d3316Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2227a966c04fSmrg      fi
2228a966c04fSmrg
2229a966c04fSmrg      # Allow error messages only from the first compilation.
2230a966c04fSmrg      if test "$suppress_opt" = yes; then
22316e7d3316Smrg	suppress_output=' >/dev/null 2>&1'
2232a966c04fSmrg      fi
2233a966c04fSmrg    fi
2234a966c04fSmrg
2235a966c04fSmrg    # Only build a position-dependent object if we build old libraries.
2236a966c04fSmrg    if test "$build_old_libs" = yes; then
2237a966c04fSmrg      if test "$pic_mode" != yes; then
2238a966c04fSmrg	# Don't build PIC code
22396e7d3316Smrg	command="$base_compile $qsrcfile$pie_flag"
2240a966c04fSmrg      else
2241a966c04fSmrg	command="$base_compile $qsrcfile $pic_flag"
2242a966c04fSmrg      fi
2243a966c04fSmrg      if test "$compiler_c_o" = yes; then
224497cf2ee2Smrg	func_append command " -o $obj"
2245a966c04fSmrg      fi
2246a966c04fSmrg
2247a966c04fSmrg      # Suppress compiler output if we already did a PIC compilation.
224897cf2ee2Smrg      func_append command "$suppress_output"
22496e7d3316Smrg      func_show_eval_locale "$command" \
22506e7d3316Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2251a966c04fSmrg
2252a966c04fSmrg      if test "$need_locks" = warn &&
2253a966c04fSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
22546e7d3316Smrg	$ECHO "\
2255a966c04fSmrg*** ERROR, $lockfile contains:
2256a966c04fSmrg`cat $lockfile 2>/dev/null`
2257a966c04fSmrg
2258a966c04fSmrgbut it should contain:
2259a966c04fSmrg$srcfile
2260a966c04fSmrg
2261a966c04fSmrgThis indicates that another process is trying to use the same
2262a966c04fSmrgtemporary object file, and libtool could not work around it because
2263a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2264a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
2265a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
2266a966c04fSmrgcompiler."
2267a966c04fSmrg
22686e7d3316Smrg	$opt_dry_run || $RM $removelist
2269a966c04fSmrg	exit $EXIT_FAILURE
2270a966c04fSmrg      fi
2271a966c04fSmrg
2272a966c04fSmrg      # Just move the object if needed
2273a966c04fSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
22746e7d3316Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
22756e7d3316Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2276a966c04fSmrg      fi
2277a966c04fSmrg    fi
2278a966c04fSmrg
22796e7d3316Smrg    $opt_dry_run || {
22806e7d3316Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2281a966c04fSmrg
22826e7d3316Smrg      # Unlock the critical section if it was locked
22836e7d3316Smrg      if test "$need_locks" != no; then
22846e7d3316Smrg	removelist=$lockfile
22856e7d3316Smrg        $RM "$lockfile"
22866e7d3316Smrg      fi
22876e7d3316Smrg    }
2288a966c04fSmrg
2289a966c04fSmrg    exit $EXIT_SUCCESS
22906e7d3316Smrg}
2291a966c04fSmrg
22926e7d3316Smrg$opt_help || {
229397cf2ee2Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
22946e7d3316Smrg}
2295a966c04fSmrg
22966e7d3316Smrgfunc_mode_help ()
22976e7d3316Smrg{
22986e7d3316Smrg    # We need to display help for each of the modes.
229997cf2ee2Smrg    case $opt_mode in
23006e7d3316Smrg      "")
23016e7d3316Smrg        # Generic help is extracted from the usage comments
23026e7d3316Smrg        # at the start of this file.
23036e7d3316Smrg        func_help
23046e7d3316Smrg        ;;
2305a966c04fSmrg
23066e7d3316Smrg      clean)
23076e7d3316Smrg        $ECHO \
23086e7d3316Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2309a966c04fSmrg
23106e7d3316SmrgRemove files from the build directory.
2311a966c04fSmrg
23126e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE
23136e7d3316Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
23146e7d3316Smrgto RM.
2315a966c04fSmrg
23166e7d3316SmrgIf FILE is a libtool library, object or program, all the files associated
23176e7d3316Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
23186e7d3316Smrg        ;;
2319a966c04fSmrg
23206e7d3316Smrg      compile)
23216e7d3316Smrg      $ECHO \
23226e7d3316Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2323a966c04fSmrg
23246e7d3316SmrgCompile a source file into a libtool library object.
2325a966c04fSmrg
23266e7d3316SmrgThis mode accepts the following additional options:
2327a966c04fSmrg
23286e7d3316Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
23296e7d3316Smrg  -no-suppress      do not suppress compiler output for multiple passes
23306e7d3316Smrg  -prefer-pic       try to build PIC objects only
23316e7d3316Smrg  -prefer-non-pic   try to build non-PIC objects only
23326e7d3316Smrg  -shared           do not build a \`.o' file suitable for static linking
23336e7d3316Smrg  -static           only build a \`.o' file suitable for static linking
23346e7d3316Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2335a966c04fSmrg
23366e7d3316SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
23376e7d3316Smrgfrom the given SOURCEFILE.
2338a966c04fSmrg
23396e7d3316SmrgThe output file name is determined by removing the directory component from
23406e7d3316SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
23416e7d3316Smrglibrary object suffix, \`.lo'."
23426e7d3316Smrg        ;;
2343a966c04fSmrg
23446e7d3316Smrg      execute)
23456e7d3316Smrg        $ECHO \
23466e7d3316Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2347a966c04fSmrg
23486e7d3316SmrgAutomatically set library path, then run a program.
2349a966c04fSmrg
23506e7d3316SmrgThis mode accepts the following additional options:
2351a966c04fSmrg
23526e7d3316Smrg  -dlopen FILE      add the directory containing FILE to the library path
2353a966c04fSmrg
23546e7d3316SmrgThis mode sets the library path environment variable according to \`-dlopen'
23556e7d3316Smrgflags.
2356a966c04fSmrg
23576e7d3316SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
23586e7d3316Smrginto their corresponding uninstalled binary, and any of their required library
23596e7d3316Smrgdirectories are added to the library path.
2360a966c04fSmrg
23616e7d3316SmrgThen, COMMAND is executed, with ARGS as arguments."
23626e7d3316Smrg        ;;
2363a966c04fSmrg
23646e7d3316Smrg      finish)
23656e7d3316Smrg        $ECHO \
23666e7d3316Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2367a966c04fSmrg
23686e7d3316SmrgComplete the installation of libtool libraries.
2369a966c04fSmrg
23706e7d3316SmrgEach LIBDIR is a directory that contains libtool libraries.
2371a966c04fSmrg
23726e7d3316SmrgThe commands that this mode executes may require superuser privileges.  Use
23736e7d3316Smrgthe \`--dry-run' option if you just want to see what would be executed."
23746e7d3316Smrg        ;;
2375a966c04fSmrg
23766e7d3316Smrg      install)
23776e7d3316Smrg        $ECHO \
23786e7d3316Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2379a966c04fSmrg
23806e7d3316SmrgInstall executables or libraries.
2381a966c04fSmrg
23826e7d3316SmrgINSTALL-COMMAND is the installation command.  The first component should be
23836e7d3316Smrgeither the \`install' or \`cp' program.
2384a966c04fSmrg
23856e7d3316SmrgThe following components of INSTALL-COMMAND are treated specially:
2386a966c04fSmrg
23876e7d3316Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2388a966c04fSmrg
23896e7d3316SmrgThe rest of the components are interpreted as arguments to that command (only
23906e7d3316SmrgBSD-compatible install options are recognized)."
23916e7d3316Smrg        ;;
2392a966c04fSmrg
23936e7d3316Smrg      link)
23946e7d3316Smrg        $ECHO \
23956e7d3316Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2396a966c04fSmrg
23976e7d3316SmrgLink object files or libraries together to form another library, or to
23986e7d3316Smrgcreate an executable program.
2399a966c04fSmrg
24006e7d3316SmrgLINK-COMMAND is a command using the C compiler that you would use to create
24016e7d3316Smrga program from several object files.
2402a966c04fSmrg
24036e7d3316SmrgThe following components of LINK-COMMAND are treated specially:
2404a966c04fSmrg
24056e7d3316Smrg  -all-static       do not do any dynamic linking at all
24066e7d3316Smrg  -avoid-version    do not add a version suffix if possible
24076e7d3316Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
24086e7d3316Smrg                    libraries must be found in the PATH setting at runtime)
24096e7d3316Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
24106e7d3316Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
24116e7d3316Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
24126e7d3316Smrg  -export-symbols SYMFILE
24136e7d3316Smrg                    try to export only the symbols listed in SYMFILE
24146e7d3316Smrg  -export-symbols-regex REGEX
24156e7d3316Smrg                    try to export only the symbols matching REGEX
24166e7d3316Smrg  -LLIBDIR          search LIBDIR for required installed libraries
24176e7d3316Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
24186e7d3316Smrg  -module           build a library that can dlopened
24196e7d3316Smrg  -no-fast-install  disable the fast-install mode
24206e7d3316Smrg  -no-install       link a not-installable executable
24216e7d3316Smrg  -no-undefined     declare that a library does not refer to external symbols
24226e7d3316Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
24236e7d3316Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
24246e7d3316Smrg  -precious-files-regex REGEX
24256e7d3316Smrg                    don't remove output files matching REGEX
24266e7d3316Smrg  -release RELEASE  specify package release information
24276e7d3316Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
24286e7d3316Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
24296e7d3316Smrg  -shared           only do dynamic linking of libtool libraries
24306e7d3316Smrg  -shrext SUFFIX    override the standard shared library file extension
24316e7d3316Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
24326e7d3316Smrg  -static-libtool-libs
24336e7d3316Smrg                    do not do any dynamic linking of libtool libraries
24346e7d3316Smrg  -version-info CURRENT[:REVISION[:AGE]]
24356e7d3316Smrg                    specify library version info [each variable defaults to 0]
24366e7d3316Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
24376e7d3316Smrg  -Wc,FLAG
24386e7d3316Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
24396e7d3316Smrg  -Wl,FLAG
24406e7d3316Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
24416e7d3316Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2442a966c04fSmrg
24436e7d3316SmrgAll other options (arguments beginning with \`-') are ignored.
2444a966c04fSmrg
24456e7d3316SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
24466e7d3316Smrgtreated as uninstalled libtool libraries, other files are standard or library
24476e7d3316Smrgobject files.
2448a966c04fSmrg
24496e7d3316SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
24506e7d3316Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
24516e7d3316Smrgrequired, except when creating a convenience library.
2452a966c04fSmrg
24536e7d3316SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
24546e7d3316Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
24552e2dd055Smrg
24566e7d3316SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
24576e7d3316Smrgis created, otherwise an executable program is created."
24586e7d3316Smrg        ;;
2459a966c04fSmrg
24606e7d3316Smrg      uninstall)
24616e7d3316Smrg        $ECHO \
24626e7d3316Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2463a966c04fSmrg
24646e7d3316SmrgRemove libraries from an installation directory.
2465a966c04fSmrg
24666e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE
24676e7d3316Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
24686e7d3316Smrgto RM.
2469a966c04fSmrg
24706e7d3316SmrgIf FILE is a libtool library, all the files associated with it are deleted.
24716e7d3316SmrgOtherwise, only FILE itself is deleted using RM."
24726e7d3316Smrg        ;;
2473a966c04fSmrg
24746e7d3316Smrg      *)
247597cf2ee2Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
24766e7d3316Smrg        ;;
24776e7d3316Smrg    esac
2478a966c04fSmrg
24796e7d3316Smrg    echo
24806e7d3316Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
24816e7d3316Smrg}
2482a966c04fSmrg
24836e7d3316Smrg# Now that we've collected a possible --mode arg, show help if necessary
24846e7d3316Smrgif $opt_help; then
24856e7d3316Smrg  if test "$opt_help" = :; then
24866e7d3316Smrg    func_mode_help
24876e7d3316Smrg  else
24886e7d3316Smrg    {
24896e7d3316Smrg      func_help noexit
249097cf2ee2Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24916e7d3316Smrg	func_mode_help
24926e7d3316Smrg      done
24936e7d3316Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
24946e7d3316Smrg    {
24956e7d3316Smrg      func_help noexit
249697cf2ee2Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24976e7d3316Smrg	echo
24986e7d3316Smrg	func_mode_help
24996e7d3316Smrg      done
25006e7d3316Smrg    } |
25016e7d3316Smrg    sed '1d
25026e7d3316Smrg      /^When reporting/,/^Report/{
25036e7d3316Smrg	H
25046e7d3316Smrg	d
25056e7d3316Smrg      }
25066e7d3316Smrg      $x
25076e7d3316Smrg      /information about other modes/d
25086e7d3316Smrg      /more detailed .*MODE/d
25096e7d3316Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
25106e7d3316Smrg  fi
25116e7d3316Smrg  exit $?
25126e7d3316Smrgfi
2513a966c04fSmrg
2514a966c04fSmrg
25156e7d3316Smrg# func_mode_execute arg...
25166e7d3316Smrgfunc_mode_execute ()
25176e7d3316Smrg{
25186e7d3316Smrg    $opt_debug
25196e7d3316Smrg    # The first argument is the command name.
25206e7d3316Smrg    cmd="$nonopt"
25216e7d3316Smrg    test -z "$cmd" && \
25226e7d3316Smrg      func_fatal_help "you must specify a COMMAND"
2523a966c04fSmrg
25246e7d3316Smrg    # Handle -dlopen flags immediately.
252597cf2ee2Smrg    for file in $opt_dlopen; do
25266e7d3316Smrg      test -f "$file" \
25276e7d3316Smrg	|| func_fatal_help "\`$file' is not a file"
2528a966c04fSmrg
25296e7d3316Smrg      dir=
25306e7d3316Smrg      case $file in
25316e7d3316Smrg      *.la)
253297cf2ee2Smrg	func_resolve_sysroot "$file"
253397cf2ee2Smrg	file=$func_resolve_sysroot_result
253497cf2ee2Smrg
25356e7d3316Smrg	# Check to see that this really is a libtool archive.
25366e7d3316Smrg	func_lalib_unsafe_p "$file" \
25376e7d3316Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2538a966c04fSmrg
25396e7d3316Smrg	# Read the libtool library.
25406e7d3316Smrg	dlname=
25416e7d3316Smrg	library_names=
25426e7d3316Smrg	func_source "$file"
2543a966c04fSmrg
25446e7d3316Smrg	# Skip this library if it cannot be dlopened.
25456e7d3316Smrg	if test -z "$dlname"; then
25466e7d3316Smrg	  # Warn if it was a shared library.
25476e7d3316Smrg	  test -n "$library_names" && \
25486e7d3316Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
25496e7d3316Smrg	  continue
25506e7d3316Smrg	fi
2551a966c04fSmrg
25526e7d3316Smrg	func_dirname "$file" "" "."
25536e7d3316Smrg	dir="$func_dirname_result"
2554a966c04fSmrg
25556e7d3316Smrg	if test -f "$dir/$objdir/$dlname"; then
255697cf2ee2Smrg	  func_append dir "/$objdir"
25576e7d3316Smrg	else
25586e7d3316Smrg	  if test ! -f "$dir/$dlname"; then
25596e7d3316Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
25606e7d3316Smrg	  fi
25616e7d3316Smrg	fi
2562a966c04fSmrg	;;
2563a966c04fSmrg
25646e7d3316Smrg      *.lo)
25656e7d3316Smrg	# Just add the directory containing the .lo file.
25666e7d3316Smrg	func_dirname "$file" "" "."
25676e7d3316Smrg	dir="$func_dirname_result"
2568a966c04fSmrg	;;
25696e7d3316Smrg
25706e7d3316Smrg      *)
25716e7d3316Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2572a966c04fSmrg	continue
2573a966c04fSmrg	;;
25746e7d3316Smrg      esac
2575a966c04fSmrg
25766e7d3316Smrg      # Get the absolute pathname.
25776e7d3316Smrg      absdir=`cd "$dir" && pwd`
25786e7d3316Smrg      test -n "$absdir" && dir="$absdir"
2579a966c04fSmrg
25806e7d3316Smrg      # Now add the directory to shlibpath_var.
25816e7d3316Smrg      if eval "test -z \"\$$shlibpath_var\""; then
25826e7d3316Smrg	eval "$shlibpath_var=\"\$dir\""
25836e7d3316Smrg      else
25846e7d3316Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
25856e7d3316Smrg      fi
25866e7d3316Smrg    done
2587a966c04fSmrg
25886e7d3316Smrg    # This variable tells wrapper scripts just to set shlibpath_var
25896e7d3316Smrg    # rather than running their programs.
25906e7d3316Smrg    libtool_execute_magic="$magic"
2591a966c04fSmrg
25926e7d3316Smrg    # Check if any of the arguments is a wrapper script.
25936e7d3316Smrg    args=
25946e7d3316Smrg    for file
25956e7d3316Smrg    do
25966e7d3316Smrg      case $file in
25976e7d3316Smrg      -* | *.la | *.lo ) ;;
25986e7d3316Smrg      *)
25996e7d3316Smrg	# Do a test to see if this is really a libtool program.
26006e7d3316Smrg	if func_ltwrapper_script_p "$file"; then
26016e7d3316Smrg	  func_source "$file"
26026e7d3316Smrg	  # Transform arg to wrapped name.
26036e7d3316Smrg	  file="$progdir/$program"
26046e7d3316Smrg	elif func_ltwrapper_executable_p "$file"; then
26056e7d3316Smrg	  func_ltwrapper_scriptname "$file"
26066e7d3316Smrg	  func_source "$func_ltwrapper_scriptname_result"
26076e7d3316Smrg	  # Transform arg to wrapped name.
26086e7d3316Smrg	  file="$progdir/$program"
26096e7d3316Smrg	fi
2610a966c04fSmrg	;;
26116e7d3316Smrg      esac
26126e7d3316Smrg      # Quote arguments (to preserve shell metacharacters).
261397cf2ee2Smrg      func_append_quoted args "$file"
26146e7d3316Smrg    done
2615a966c04fSmrg
26166e7d3316Smrg    if test "X$opt_dry_run" = Xfalse; then
26176e7d3316Smrg      if test -n "$shlibpath_var"; then
26186e7d3316Smrg	# Export the shlibpath_var.
26196e7d3316Smrg	eval "export $shlibpath_var"
26206e7d3316Smrg      fi
2621a966c04fSmrg
26226e7d3316Smrg      # Restore saved environment variables
26236e7d3316Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
26246e7d3316Smrg      do
26256e7d3316Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
26266e7d3316Smrg                $lt_var=\$save_$lt_var; export $lt_var
26276e7d3316Smrg	      else
26286e7d3316Smrg		$lt_unset $lt_var
26296e7d3316Smrg	      fi"
26306e7d3316Smrg      done
2631a966c04fSmrg
26326e7d3316Smrg      # Now prepare to actually exec the command.
26336e7d3316Smrg      exec_cmd="\$cmd$args"
26346e7d3316Smrg    else
26356e7d3316Smrg      # Display what would be done.
26366e7d3316Smrg      if test -n "$shlibpath_var"; then
26376e7d3316Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26386e7d3316Smrg	echo "export $shlibpath_var"
26396e7d3316Smrg      fi
26406e7d3316Smrg      $ECHO "$cmd$args"
26416e7d3316Smrg      exit $EXIT_SUCCESS
26426e7d3316Smrg    fi
26436e7d3316Smrg}
2644a966c04fSmrg
264597cf2ee2Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2646a966c04fSmrg
2647a966c04fSmrg
26486e7d3316Smrg# func_mode_finish arg...
26496e7d3316Smrgfunc_mode_finish ()
26506e7d3316Smrg{
26516e7d3316Smrg    $opt_debug
265297cf2ee2Smrg    libs=
265397cf2ee2Smrg    libdirs=
26546e7d3316Smrg    admincmds=
2655a966c04fSmrg
265697cf2ee2Smrg    for opt in "$nonopt" ${1+"$@"}
265797cf2ee2Smrg    do
265897cf2ee2Smrg      if test -d "$opt"; then
265997cf2ee2Smrg	func_append libdirs " $opt"
266097cf2ee2Smrg
266197cf2ee2Smrg      elif test -f "$opt"; then
266297cf2ee2Smrg	if func_lalib_unsafe_p "$opt"; then
266397cf2ee2Smrg	  func_append libs " $opt"
266497cf2ee2Smrg	else
266597cf2ee2Smrg	  func_warning "\`$opt' is not a valid libtool archive"
266697cf2ee2Smrg	fi
266797cf2ee2Smrg
266897cf2ee2Smrg      else
266997cf2ee2Smrg	func_fatal_error "invalid argument \`$opt'"
267097cf2ee2Smrg      fi
267197cf2ee2Smrg    done
267297cf2ee2Smrg
267397cf2ee2Smrg    if test -n "$libs"; then
267497cf2ee2Smrg      if test -n "$lt_sysroot"; then
267597cf2ee2Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
267697cf2ee2Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
267797cf2ee2Smrg      else
267897cf2ee2Smrg        sysroot_cmd=
267997cf2ee2Smrg      fi
268097cf2ee2Smrg
268197cf2ee2Smrg      # Remove sysroot references
268297cf2ee2Smrg      if $opt_dry_run; then
268397cf2ee2Smrg        for lib in $libs; do
268497cf2ee2Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
268597cf2ee2Smrg        done
268697cf2ee2Smrg      else
268797cf2ee2Smrg        tmpdir=`func_mktempdir`
268897cf2ee2Smrg        for lib in $libs; do
268997cf2ee2Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
269097cf2ee2Smrg	    > $tmpdir/tmp-la
269197cf2ee2Smrg	  mv -f $tmpdir/tmp-la $lib
269297cf2ee2Smrg	done
269397cf2ee2Smrg        ${RM}r "$tmpdir"
269497cf2ee2Smrg      fi
269597cf2ee2Smrg    fi
2696a966c04fSmrg
269797cf2ee2Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
26986e7d3316Smrg      for libdir in $libdirs; do
26996e7d3316Smrg	if test -n "$finish_cmds"; then
27006e7d3316Smrg	  # Do each command in the finish commands.
27016e7d3316Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
27026e7d3316Smrg'"$cmd"'"'
27036e7d3316Smrg	fi
27046e7d3316Smrg	if test -n "$finish_eval"; then
27056e7d3316Smrg	  # Do the single finish_eval.
27066e7d3316Smrg	  eval cmds=\"$finish_eval\"
270797cf2ee2Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
27086e7d3316Smrg       $cmds"
27096e7d3316Smrg	fi
27106e7d3316Smrg      done
27116e7d3316Smrg    fi
2712a966c04fSmrg
27136e7d3316Smrg    # Exit here if they wanted silent mode.
27146e7d3316Smrg    $opt_silent && exit $EXIT_SUCCESS
2715a966c04fSmrg
271697cf2ee2Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
271797cf2ee2Smrg      echo "----------------------------------------------------------------------"
271897cf2ee2Smrg      echo "Libraries have been installed in:"
271997cf2ee2Smrg      for libdir in $libdirs; do
272097cf2ee2Smrg	$ECHO "   $libdir"
272197cf2ee2Smrg      done
272297cf2ee2Smrg      echo
272397cf2ee2Smrg      echo "If you ever happen to want to link against installed libraries"
272497cf2ee2Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
272597cf2ee2Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
272697cf2ee2Smrg      echo "flag during linking and do at least one of the following:"
272797cf2ee2Smrg      if test -n "$shlibpath_var"; then
272897cf2ee2Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
272997cf2ee2Smrg	echo "     during execution"
273097cf2ee2Smrg      fi
273197cf2ee2Smrg      if test -n "$runpath_var"; then
273297cf2ee2Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
273397cf2ee2Smrg	echo "     during linking"
273497cf2ee2Smrg      fi
273597cf2ee2Smrg      if test -n "$hardcode_libdir_flag_spec"; then
273697cf2ee2Smrg	libdir=LIBDIR
273797cf2ee2Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2738a966c04fSmrg
273997cf2ee2Smrg	$ECHO "   - use the \`$flag' linker flag"
274097cf2ee2Smrg      fi
274197cf2ee2Smrg      if test -n "$admincmds"; then
274297cf2ee2Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
274397cf2ee2Smrg      fi
274497cf2ee2Smrg      if test -f /etc/ld.so.conf; then
274597cf2ee2Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
274697cf2ee2Smrg      fi
274797cf2ee2Smrg      echo
2748a966c04fSmrg
274997cf2ee2Smrg      echo "See any operating system documentation about shared libraries for"
275097cf2ee2Smrg      case $host in
275197cf2ee2Smrg	solaris2.[6789]|solaris2.1[0-9])
275297cf2ee2Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
275397cf2ee2Smrg	  echo "pages."
275497cf2ee2Smrg	  ;;
275597cf2ee2Smrg	*)
275697cf2ee2Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
275797cf2ee2Smrg	  ;;
275897cf2ee2Smrg      esac
275997cf2ee2Smrg      echo "----------------------------------------------------------------------"
276097cf2ee2Smrg    fi
27616e7d3316Smrg    exit $EXIT_SUCCESS
27626e7d3316Smrg}
2763a966c04fSmrg
276497cf2ee2Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2765a966c04fSmrg
2766a966c04fSmrg
27676e7d3316Smrg# func_mode_install arg...
27686e7d3316Smrgfunc_mode_install ()
27696e7d3316Smrg{
27706e7d3316Smrg    $opt_debug
27716e7d3316Smrg    # There may be an optional sh(1) argument at the beginning of
27726e7d3316Smrg    # install_prog (especially on Windows NT).
27736e7d3316Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
27746e7d3316Smrg       # Allow the use of GNU shtool's install command.
27756e7d3316Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
27766e7d3316Smrg      # Aesthetically quote it.
27776e7d3316Smrg      func_quote_for_eval "$nonopt"
27786e7d3316Smrg      install_prog="$func_quote_for_eval_result "
27796e7d3316Smrg      arg=$1
27806e7d3316Smrg      shift
27816e7d3316Smrg    else
27826e7d3316Smrg      install_prog=
27836e7d3316Smrg      arg=$nonopt
27846e7d3316Smrg    fi
2785a966c04fSmrg
27866e7d3316Smrg    # The real first argument should be the name of the installation program.
27876e7d3316Smrg    # Aesthetically quote it.
27886e7d3316Smrg    func_quote_for_eval "$arg"
278997cf2ee2Smrg    func_append install_prog "$func_quote_for_eval_result"
27906e7d3316Smrg    install_shared_prog=$install_prog
27916e7d3316Smrg    case " $install_prog " in
27926e7d3316Smrg      *[\\\ /]cp\ *) install_cp=: ;;
27936e7d3316Smrg      *) install_cp=false ;;
27946e7d3316Smrg    esac
2795a966c04fSmrg
27966e7d3316Smrg    # We need to accept at least all the BSD install flags.
27976e7d3316Smrg    dest=
27986e7d3316Smrg    files=
27996e7d3316Smrg    opts=
28006e7d3316Smrg    prev=
28016e7d3316Smrg    install_type=
28026e7d3316Smrg    isdir=no
28036e7d3316Smrg    stripme=
28046e7d3316Smrg    no_mode=:
28056e7d3316Smrg    for arg
28066e7d3316Smrg    do
28076e7d3316Smrg      arg2=
28086e7d3316Smrg      if test -n "$dest"; then
280997cf2ee2Smrg	func_append files " $dest"
28106e7d3316Smrg	dest=$arg
2811a966c04fSmrg	continue
28126e7d3316Smrg      fi
2813a966c04fSmrg
28146e7d3316Smrg      case $arg in
28156e7d3316Smrg      -d) isdir=yes ;;
28166e7d3316Smrg      -f)
28176e7d3316Smrg	if $install_cp; then :; else
28186e7d3316Smrg	  prev=$arg
2819a966c04fSmrg	fi
28206e7d3316Smrg	;;
28216e7d3316Smrg      -g | -m | -o)
28226e7d3316Smrg	prev=$arg
28236e7d3316Smrg	;;
28246e7d3316Smrg      -s)
28256e7d3316Smrg	stripme=" -s"
2826a966c04fSmrg	continue
2827a966c04fSmrg	;;
28286e7d3316Smrg      -*)
28296e7d3316Smrg	;;
2830a966c04fSmrg      *)
28316e7d3316Smrg	# If the previous option needed an argument, then skip it.
28326e7d3316Smrg	if test -n "$prev"; then
28336e7d3316Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
28346e7d3316Smrg	    arg2=$install_override_mode
28356e7d3316Smrg	    no_mode=false
28366e7d3316Smrg	  fi
28376e7d3316Smrg	  prev=
28386e7d3316Smrg	else
28396e7d3316Smrg	  dest=$arg
28406e7d3316Smrg	  continue
28416e7d3316Smrg	fi
2842a966c04fSmrg	;;
28436e7d3316Smrg      esac
2844a966c04fSmrg
28456e7d3316Smrg      # Aesthetically quote the argument.
28466e7d3316Smrg      func_quote_for_eval "$arg"
284797cf2ee2Smrg      func_append install_prog " $func_quote_for_eval_result"
28486e7d3316Smrg      if test -n "$arg2"; then
28496e7d3316Smrg	func_quote_for_eval "$arg2"
2850a966c04fSmrg      fi
285197cf2ee2Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
28526e7d3316Smrg    done
2853a966c04fSmrg
28546e7d3316Smrg    test -z "$install_prog" && \
28556e7d3316Smrg      func_fatal_help "you must specify an install program"
2856a966c04fSmrg
28576e7d3316Smrg    test -n "$prev" && \
28586e7d3316Smrg      func_fatal_help "the \`$prev' option requires an argument"
2859a966c04fSmrg
28606e7d3316Smrg    if test -n "$install_override_mode" && $no_mode; then
28616e7d3316Smrg      if $install_cp; then :; else
28626e7d3316Smrg	func_quote_for_eval "$install_override_mode"
286397cf2ee2Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
28646e7d3316Smrg      fi
2865a966c04fSmrg    fi
2866a966c04fSmrg
28676e7d3316Smrg    if test -z "$files"; then
28686e7d3316Smrg      if test -z "$dest"; then
28696e7d3316Smrg	func_fatal_help "no file or destination specified"
28706e7d3316Smrg      else
28716e7d3316Smrg	func_fatal_help "you must specify a destination"
2872a966c04fSmrg      fi
2873a966c04fSmrg    fi
2874a966c04fSmrg
28756e7d3316Smrg    # Strip any trailing slash from the destination.
28766e7d3316Smrg    func_stripname '' '/' "$dest"
28776e7d3316Smrg    dest=$func_stripname_result
2878a966c04fSmrg
28796e7d3316Smrg    # Check to see that the destination is a directory.
28806e7d3316Smrg    test -d "$dest" && isdir=yes
28816e7d3316Smrg    if test "$isdir" = yes; then
28826e7d3316Smrg      destdir="$dest"
28836e7d3316Smrg      destname=
28846e7d3316Smrg    else
28856e7d3316Smrg      func_dirname_and_basename "$dest" "" "."
28866e7d3316Smrg      destdir="$func_dirname_result"
28876e7d3316Smrg      destname="$func_basename_result"
28886e7d3316Smrg
28896e7d3316Smrg      # Not a directory, so check to see that there is only one file specified.
28906e7d3316Smrg      set dummy $files; shift
28916e7d3316Smrg      test "$#" -gt 1 && \
28926e7d3316Smrg	func_fatal_help "\`$dest' is not a directory"
28936e7d3316Smrg    fi
28946e7d3316Smrg    case $destdir in
28956e7d3316Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2896a966c04fSmrg    *)
28976e7d3316Smrg      for file in $files; do
28986e7d3316Smrg	case $file in
28996e7d3316Smrg	*.lo) ;;
29006e7d3316Smrg	*)
29016e7d3316Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
29026e7d3316Smrg	  ;;
29036e7d3316Smrg	esac
29046e7d3316Smrg      done
2905a966c04fSmrg      ;;
2906a966c04fSmrg    esac
2907a966c04fSmrg
29086e7d3316Smrg    # This variable tells wrapper scripts just to set variables rather
29096e7d3316Smrg    # than running their programs.
29106e7d3316Smrg    libtool_install_magic="$magic"
2911a966c04fSmrg
29126e7d3316Smrg    staticlibs=
29136e7d3316Smrg    future_libdirs=
29146e7d3316Smrg    current_libdirs=
29156e7d3316Smrg    for file in $files; do
2916a966c04fSmrg
29176e7d3316Smrg      # Do each installation.
29186e7d3316Smrg      case $file in
29196e7d3316Smrg      *.$libext)
29206e7d3316Smrg	# Do the static libraries later.
292197cf2ee2Smrg	func_append staticlibs " $file"
29226e7d3316Smrg	;;
29236e7d3316Smrg
29246e7d3316Smrg      *.la)
292597cf2ee2Smrg	func_resolve_sysroot "$file"
292697cf2ee2Smrg	file=$func_resolve_sysroot_result
292797cf2ee2Smrg
29286e7d3316Smrg	# Check to see that this really is a libtool archive.
29296e7d3316Smrg	func_lalib_unsafe_p "$file" \
29306e7d3316Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
29316e7d3316Smrg
29326e7d3316Smrg	library_names=
29336e7d3316Smrg	old_library=
29346e7d3316Smrg	relink_command=
29356e7d3316Smrg	func_source "$file"
29366e7d3316Smrg
29376e7d3316Smrg	# Add the libdir to current_libdirs if it is the destination.
29386e7d3316Smrg	if test "X$destdir" = "X$libdir"; then
29396e7d3316Smrg	  case "$current_libdirs " in
29406e7d3316Smrg	  *" $libdir "*) ;;
294197cf2ee2Smrg	  *) func_append current_libdirs " $libdir" ;;
2942a966c04fSmrg	  esac
29436e7d3316Smrg	else
29446e7d3316Smrg	  # Note the libdir as a future libdir.
29456e7d3316Smrg	  case "$future_libdirs " in
29466e7d3316Smrg	  *" $libdir "*) ;;
294797cf2ee2Smrg	  *) func_append future_libdirs " $libdir" ;;
29486e7d3316Smrg	  esac
29496e7d3316Smrg	fi
2950a966c04fSmrg
29516e7d3316Smrg	func_dirname "$file" "/" ""
29526e7d3316Smrg	dir="$func_dirname_result"
295397cf2ee2Smrg	func_append dir "$objdir"
29546e7d3316Smrg
29556e7d3316Smrg	if test -n "$relink_command"; then
29566e7d3316Smrg	  # Determine the prefix the user has applied to our future dir.
29576e7d3316Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
29586e7d3316Smrg
29596e7d3316Smrg	  # Don't allow the user to place us outside of our expected
29606e7d3316Smrg	  # location b/c this prevents finding dependent libraries that
29616e7d3316Smrg	  # are installed to the same prefix.
29626e7d3316Smrg	  # At present, this check doesn't affect windows .dll's that
29636e7d3316Smrg	  # are installed into $libdir/../bin (currently, that works fine)
29646e7d3316Smrg	  # but it's something to keep an eye on.
29656e7d3316Smrg	  test "$inst_prefix_dir" = "$destdir" && \
29666e7d3316Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
29676e7d3316Smrg
29686e7d3316Smrg	  if test -n "$inst_prefix_dir"; then
29696e7d3316Smrg	    # Stick the inst_prefix_dir data into the link command.
29706e7d3316Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
29716e7d3316Smrg	  else
29726e7d3316Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
29736e7d3316Smrg	  fi
29746e7d3316Smrg
29756e7d3316Smrg	  func_warning "relinking \`$file'"
29766e7d3316Smrg	  func_show_eval "$relink_command" \
29776e7d3316Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
29786e7d3316Smrg	fi
29796e7d3316Smrg
29806e7d3316Smrg	# See the names of the shared library.
29816e7d3316Smrg	set dummy $library_names; shift
29826e7d3316Smrg	if test -n "$1"; then
29836e7d3316Smrg	  realname="$1"
29846e7d3316Smrg	  shift
29856e7d3316Smrg
29866e7d3316Smrg	  srcname="$realname"
29876e7d3316Smrg	  test -n "$relink_command" && srcname="$realname"T
29886e7d3316Smrg
29896e7d3316Smrg	  # Install the shared library and build the symlinks.
29906e7d3316Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
29916e7d3316Smrg	      'exit $?'
29926e7d3316Smrg	  tstripme="$stripme"
29936e7d3316Smrg	  case $host_os in
29946e7d3316Smrg	  cygwin* | mingw* | pw32* | cegcc*)
29956e7d3316Smrg	    case $realname in
29966e7d3316Smrg	    *.dll.a)
29976e7d3316Smrg	      tstripme=""
29986e7d3316Smrg	      ;;
29996e7d3316Smrg	    esac
3000a966c04fSmrg	    ;;
3001a966c04fSmrg	  esac
30026e7d3316Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
30036e7d3316Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
30046e7d3316Smrg	  fi
30056e7d3316Smrg
30066e7d3316Smrg	  if test "$#" -gt 0; then
30076e7d3316Smrg	    # Delete the old symlinks, and create new ones.
30086e7d3316Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
30096e7d3316Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
30106e7d3316Smrg	    # so we also need to try rm && ln -s.
30116e7d3316Smrg	    for linkname
30126e7d3316Smrg	    do
30136e7d3316Smrg	      test "$linkname" != "$realname" \
30146e7d3316Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
30156e7d3316Smrg	    done
30166e7d3316Smrg	  fi
30176e7d3316Smrg
30186e7d3316Smrg	  # Do each command in the postinstall commands.
30196e7d3316Smrg	  lib="$destdir/$realname"
30206e7d3316Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
30216e7d3316Smrg	fi
30226e7d3316Smrg
30236e7d3316Smrg	# Install the pseudo-library for information purposes.
30246e7d3316Smrg	func_basename "$file"
30256e7d3316Smrg	name="$func_basename_result"
30266e7d3316Smrg	instname="$dir/$name"i
30276e7d3316Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
30286e7d3316Smrg
30296e7d3316Smrg	# Maybe install the static library, too.
303097cf2ee2Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3031a966c04fSmrg	;;
30326e7d3316Smrg
30336e7d3316Smrg      *.lo)
30346e7d3316Smrg	# Install (i.e. copy) a libtool object.
30356e7d3316Smrg
30366e7d3316Smrg	# Figure out destination file name, if it wasn't already specified.
30376e7d3316Smrg	if test -n "$destname"; then
30386e7d3316Smrg	  destfile="$destdir/$destname"
30396e7d3316Smrg	else
30406e7d3316Smrg	  func_basename "$file"
30416e7d3316Smrg	  destfile="$func_basename_result"
30426e7d3316Smrg	  destfile="$destdir/$destfile"
30436e7d3316Smrg	fi
30446e7d3316Smrg
30456e7d3316Smrg	# Deduce the name of the destination old-style object file.
30466e7d3316Smrg	case $destfile in
30476e7d3316Smrg	*.lo)
30486e7d3316Smrg	  func_lo2o "$destfile"
30496e7d3316Smrg	  staticdest=$func_lo2o_result
3050a966c04fSmrg	  ;;
30516e7d3316Smrg	*.$objext)
30526e7d3316Smrg	  staticdest="$destfile"
30536e7d3316Smrg	  destfile=
3054a966c04fSmrg	  ;;
30556e7d3316Smrg	*)
30566e7d3316Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3057a966c04fSmrg	  ;;
30586e7d3316Smrg	esac
30596e7d3316Smrg
30606e7d3316Smrg	# Install the libtool object if requested.
30616e7d3316Smrg	test -n "$destfile" && \
30626e7d3316Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
30636e7d3316Smrg
30646e7d3316Smrg	# Install the old object if enabled.
30656e7d3316Smrg	if test "$build_old_libs" = yes; then
30666e7d3316Smrg	  # Deduce the name of the old-style object file.
30676e7d3316Smrg	  func_lo2o "$file"
30686e7d3316Smrg	  staticobj=$func_lo2o_result
30696e7d3316Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3070a966c04fSmrg	fi
30716e7d3316Smrg	exit $EXIT_SUCCESS
30726e7d3316Smrg	;;
3073a966c04fSmrg
30746e7d3316Smrg      *)
30756e7d3316Smrg	# Figure out destination file name, if it wasn't already specified.
30766e7d3316Smrg	if test -n "$destname"; then
30776e7d3316Smrg	  destfile="$destdir/$destname"
3078a966c04fSmrg	else
30796e7d3316Smrg	  func_basename "$file"
30806e7d3316Smrg	  destfile="$func_basename_result"
30816e7d3316Smrg	  destfile="$destdir/$destfile"
3082a966c04fSmrg	fi
3083a966c04fSmrg
30846e7d3316Smrg	# If the file is missing, and there is a .exe on the end, strip it
30856e7d3316Smrg	# because it is most likely a libtool script we actually want to
30866e7d3316Smrg	# install
30876e7d3316Smrg	stripped_ext=""
30886e7d3316Smrg	case $file in
30896e7d3316Smrg	  *.exe)
30906e7d3316Smrg	    if test ! -f "$file"; then
30916e7d3316Smrg	      func_stripname '' '.exe' "$file"
30926e7d3316Smrg	      file=$func_stripname_result
30936e7d3316Smrg	      stripped_ext=".exe"
30946e7d3316Smrg	    fi
30956e7d3316Smrg	    ;;
30966e7d3316Smrg	esac
3097a966c04fSmrg
30986e7d3316Smrg	# Do a test to see if this is really a libtool program.
30996e7d3316Smrg	case $host in
31006e7d3316Smrg	*cygwin* | *mingw*)
31016e7d3316Smrg	    if func_ltwrapper_executable_p "$file"; then
31026e7d3316Smrg	      func_ltwrapper_scriptname "$file"
31036e7d3316Smrg	      wrapper=$func_ltwrapper_scriptname_result
31046e7d3316Smrg	    else
31056e7d3316Smrg	      func_stripname '' '.exe' "$file"
31066e7d3316Smrg	      wrapper=$func_stripname_result
31076e7d3316Smrg	    fi
31086e7d3316Smrg	    ;;
31096e7d3316Smrg	*)
31106e7d3316Smrg	    wrapper=$file
31116e7d3316Smrg	    ;;
31126e7d3316Smrg	esac
31136e7d3316Smrg	if func_ltwrapper_script_p "$wrapper"; then
31146e7d3316Smrg	  notinst_deplibs=
31156e7d3316Smrg	  relink_command=
3116a966c04fSmrg
31176e7d3316Smrg	  func_source "$wrapper"
3118a966c04fSmrg
31196e7d3316Smrg	  # Check the variables that should have been set.
31206e7d3316Smrg	  test -z "$generated_by_libtool_version" && \
31216e7d3316Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3122a966c04fSmrg
31236e7d3316Smrg	  finalize=yes
31246e7d3316Smrg	  for lib in $notinst_deplibs; do
31256e7d3316Smrg	    # Check to see that each library is installed.
31266e7d3316Smrg	    libdir=
31276e7d3316Smrg	    if test -f "$lib"; then
31286e7d3316Smrg	      func_source "$lib"
3129a966c04fSmrg	    fi
31306e7d3316Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
31316e7d3316Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
31326e7d3316Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
31336e7d3316Smrg	      finalize=no
31346e7d3316Smrg	    fi
31356e7d3316Smrg	  done
3136a966c04fSmrg
31376e7d3316Smrg	  relink_command=
31386e7d3316Smrg	  func_source "$wrapper"
3139a966c04fSmrg
31406e7d3316Smrg	  outputname=
31416e7d3316Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
31426e7d3316Smrg	    $opt_dry_run || {
31436e7d3316Smrg	      if test "$finalize" = yes; then
31446e7d3316Smrg	        tmpdir=`func_mktempdir`
31456e7d3316Smrg		func_basename "$file$stripped_ext"
31466e7d3316Smrg		file="$func_basename_result"
31476e7d3316Smrg	        outputname="$tmpdir/$file"
31486e7d3316Smrg	        # Replace the output file specification.
31496e7d3316Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
31506e7d3316Smrg
31516e7d3316Smrg	        $opt_silent || {
31526e7d3316Smrg	          func_quote_for_expand "$relink_command"
31536e7d3316Smrg		  eval "func_echo $func_quote_for_expand_result"
31546e7d3316Smrg	        }
31556e7d3316Smrg	        if eval "$relink_command"; then :
31566e7d3316Smrg	          else
31576e7d3316Smrg		  func_error "error: relink \`$file' with the above command before installing it"
31586e7d3316Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
31596e7d3316Smrg		  continue
31606e7d3316Smrg	        fi
31616e7d3316Smrg	        file="$outputname"
31626e7d3316Smrg	      else
31636e7d3316Smrg	        func_warning "cannot relink \`$file'"
31646e7d3316Smrg	      fi
31656e7d3316Smrg	    }
3166a966c04fSmrg	  else
31676e7d3316Smrg	    # Install the binary that we compiled earlier.
31686e7d3316Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3169a966c04fSmrg	  fi
31706e7d3316Smrg	fi
3171a966c04fSmrg
31726e7d3316Smrg	# remove .exe since cygwin /usr/bin/install will append another
31736e7d3316Smrg	# one anyway
31746e7d3316Smrg	case $install_prog,$host in
31756e7d3316Smrg	*/usr/bin/install*,*cygwin*)
31766e7d3316Smrg	  case $file:$destfile in
31776e7d3316Smrg	  *.exe:*.exe)
31786e7d3316Smrg	    # this is ok
31796e7d3316Smrg	    ;;
31806e7d3316Smrg	  *.exe:*)
31816e7d3316Smrg	    destfile=$destfile.exe
31826e7d3316Smrg	    ;;
31836e7d3316Smrg	  *:*.exe)
31846e7d3316Smrg	    func_stripname '' '.exe' "$destfile"
31856e7d3316Smrg	    destfile=$func_stripname_result
31866e7d3316Smrg	    ;;
31876e7d3316Smrg	  esac
3188a966c04fSmrg	  ;;
3189a966c04fSmrg	esac
31906e7d3316Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
31916e7d3316Smrg	$opt_dry_run || if test -n "$outputname"; then
31926e7d3316Smrg	  ${RM}r "$tmpdir"
31936e7d3316Smrg	fi
31946e7d3316Smrg	;;
31956e7d3316Smrg      esac
31966e7d3316Smrg    done
3197a966c04fSmrg
31986e7d3316Smrg    for file in $staticlibs; do
31996e7d3316Smrg      func_basename "$file"
32006e7d3316Smrg      name="$func_basename_result"
32016e7d3316Smrg
32026e7d3316Smrg      # Set up the ranlib parameters.
32036e7d3316Smrg      oldlib="$destdir/$name"
32046e7d3316Smrg
32056e7d3316Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
32066e7d3316Smrg
32076e7d3316Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
32086e7d3316Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
32096e7d3316Smrg      fi
32106e7d3316Smrg
32116e7d3316Smrg      # Do each command in the postinstall commands.
32126e7d3316Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
32136e7d3316Smrg    done
32146e7d3316Smrg
32156e7d3316Smrg    test -n "$future_libdirs" && \
32166e7d3316Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
32176e7d3316Smrg
32186e7d3316Smrg    if test -n "$current_libdirs"; then
32196e7d3316Smrg      # Maybe just do a dry run.
32206e7d3316Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
32216e7d3316Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
32226e7d3316Smrg    else
32236e7d3316Smrg      exit $EXIT_SUCCESS
32246e7d3316Smrg    fi
32256e7d3316Smrg}
32266e7d3316Smrg
322797cf2ee2Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
32286e7d3316Smrg
32296e7d3316Smrg
32306e7d3316Smrg# func_generate_dlsyms outputname originator pic_p
32316e7d3316Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
32326e7d3316Smrg# a dlpreopen symbol table.
32336e7d3316Smrgfunc_generate_dlsyms ()
32346e7d3316Smrg{
32356e7d3316Smrg    $opt_debug
32366e7d3316Smrg    my_outputname="$1"
32376e7d3316Smrg    my_originator="$2"
32386e7d3316Smrg    my_pic_p="${3-no}"
32396e7d3316Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
32406e7d3316Smrg    my_dlsyms=
32416e7d3316Smrg
32426e7d3316Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
32436e7d3316Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
32446e7d3316Smrg	my_dlsyms="${my_outputname}S.c"
32456e7d3316Smrg      else
32466e7d3316Smrg	func_error "not configured to extract global symbols from dlpreopened files"
32476e7d3316Smrg      fi
32486e7d3316Smrg    fi
32496e7d3316Smrg
32506e7d3316Smrg    if test -n "$my_dlsyms"; then
32516e7d3316Smrg      case $my_dlsyms in
32526e7d3316Smrg      "") ;;
32536e7d3316Smrg      *.c)
32546e7d3316Smrg	# Discover the nlist of each of the dlfiles.
32556e7d3316Smrg	nlist="$output_objdir/${my_outputname}.nm"
32566e7d3316Smrg
32576e7d3316Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
32586e7d3316Smrg
32596e7d3316Smrg	# Parse the name list into a source file.
32606e7d3316Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
32616e7d3316Smrg
32626e7d3316Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
32636e7d3316Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
32646e7d3316Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
32656e7d3316Smrg
32666e7d3316Smrg#ifdef __cplusplus
32676e7d3316Smrgextern \"C\" {
32686e7d3316Smrg#endif
32696e7d3316Smrg
32706e7d3316Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
32716e7d3316Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
32726e7d3316Smrg#endif
32736e7d3316Smrg
327497cf2ee2Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
327597cf2ee2Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
327697cf2ee2Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
327797cf2ee2Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
327897cf2ee2Smrg# define LT_DLSYM_CONST
327997cf2ee2Smrg#elif defined(__osf__)
328097cf2ee2Smrg/* This system does not cope well with relocations in const data.  */
328197cf2ee2Smrg# define LT_DLSYM_CONST
328297cf2ee2Smrg#else
328397cf2ee2Smrg# define LT_DLSYM_CONST const
328497cf2ee2Smrg#endif
328597cf2ee2Smrg
32866e7d3316Smrg/* External symbol declarations for the compiler. */\
32876e7d3316Smrg"
32886e7d3316Smrg
32896e7d3316Smrg	if test "$dlself" = yes; then
32906e7d3316Smrg	  func_verbose "generating symbol list for \`$output'"
32916e7d3316Smrg
32926e7d3316Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
32936e7d3316Smrg
32946e7d3316Smrg	  # Add our own program objects to the symbol list.
32956e7d3316Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
32966e7d3316Smrg	  for progfile in $progfiles; do
329797cf2ee2Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
329897cf2ee2Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
329997cf2ee2Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
33006e7d3316Smrg	  done
33016e7d3316Smrg
33026e7d3316Smrg	  if test -n "$exclude_expsyms"; then
33036e7d3316Smrg	    $opt_dry_run || {
33046e7d3316Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
33056e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
33066e7d3316Smrg	    }
3307a966c04fSmrg	  fi
33086e7d3316Smrg
33096e7d3316Smrg	  if test -n "$export_symbols_regex"; then
33106e7d3316Smrg	    $opt_dry_run || {
33116e7d3316Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
33126e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
33136e7d3316Smrg	    }
33146e7d3316Smrg	  fi
33156e7d3316Smrg
33166e7d3316Smrg	  # Prepare the list of exported symbols
33176e7d3316Smrg	  if test -z "$export_symbols"; then
33186e7d3316Smrg	    export_symbols="$output_objdir/$outputname.exp"
33196e7d3316Smrg	    $opt_dry_run || {
33206e7d3316Smrg	      $RM $export_symbols
33216e7d3316Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
33226e7d3316Smrg	      case $host in
33236e7d3316Smrg	      *cygwin* | *mingw* | *cegcc* )
33246e7d3316Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
33256e7d3316Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
33266e7d3316Smrg	        ;;
33276e7d3316Smrg	      esac
33286e7d3316Smrg	    }
3329a966c04fSmrg	  else
33306e7d3316Smrg	    $opt_dry_run || {
33316e7d3316Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
33326e7d3316Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
33336e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
33346e7d3316Smrg	      case $host in
33356e7d3316Smrg	        *cygwin* | *mingw* | *cegcc* )
33366e7d3316Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
33376e7d3316Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
33386e7d3316Smrg	          ;;
33396e7d3316Smrg	      esac
33406e7d3316Smrg	    }
3341a966c04fSmrg	  fi
33426e7d3316Smrg	fi
3343a966c04fSmrg
33446e7d3316Smrg	for dlprefile in $dlprefiles; do
33456e7d3316Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
33466e7d3316Smrg	  func_basename "$dlprefile"
33476e7d3316Smrg	  name="$func_basename_result"
334897cf2ee2Smrg          case $host in
334997cf2ee2Smrg	    *cygwin* | *mingw* | *cegcc* )
335097cf2ee2Smrg	      # if an import library, we need to obtain dlname
335197cf2ee2Smrg	      if func_win32_import_lib_p "$dlprefile"; then
335297cf2ee2Smrg	        func_tr_sh "$dlprefile"
335397cf2ee2Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
335497cf2ee2Smrg	        dlprefile_dlbasename=""
335597cf2ee2Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
335697cf2ee2Smrg	          # Use subshell, to avoid clobbering current variable values
335797cf2ee2Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
335897cf2ee2Smrg	          if test -n "$dlprefile_dlname" ; then
335997cf2ee2Smrg	            func_basename "$dlprefile_dlname"
336097cf2ee2Smrg	            dlprefile_dlbasename="$func_basename_result"
336197cf2ee2Smrg	          else
336297cf2ee2Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
336397cf2ee2Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
336497cf2ee2Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
336597cf2ee2Smrg	          fi
336697cf2ee2Smrg	        fi
336797cf2ee2Smrg	        $opt_dry_run || {
336897cf2ee2Smrg	          if test -n "$dlprefile_dlbasename" ; then
336997cf2ee2Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
337097cf2ee2Smrg	          else
337197cf2ee2Smrg	            func_warning "Could not compute DLL name from $name"
337297cf2ee2Smrg	            eval '$ECHO ": $name " >> "$nlist"'
337397cf2ee2Smrg	          fi
337497cf2ee2Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
337597cf2ee2Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
337697cf2ee2Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
337797cf2ee2Smrg	        }
337897cf2ee2Smrg	      else # not an import lib
337997cf2ee2Smrg	        $opt_dry_run || {
338097cf2ee2Smrg	          eval '$ECHO ": $name " >> "$nlist"'
338197cf2ee2Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
338297cf2ee2Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
338397cf2ee2Smrg	        }
338497cf2ee2Smrg	      fi
338597cf2ee2Smrg	    ;;
338697cf2ee2Smrg	    *)
338797cf2ee2Smrg	      $opt_dry_run || {
338897cf2ee2Smrg	        eval '$ECHO ": $name " >> "$nlist"'
338997cf2ee2Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
339097cf2ee2Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
339197cf2ee2Smrg	      }
339297cf2ee2Smrg	    ;;
339397cf2ee2Smrg          esac
33946e7d3316Smrg	done
33956e7d3316Smrg
33966e7d3316Smrg	$opt_dry_run || {
33976e7d3316Smrg	  # Make sure we have at least an empty file.
33986e7d3316Smrg	  test -f "$nlist" || : > "$nlist"
33996e7d3316Smrg
34006e7d3316Smrg	  if test -n "$exclude_expsyms"; then
34016e7d3316Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
34026e7d3316Smrg	    $MV "$nlist"T "$nlist"
3403a966c04fSmrg	  fi
34046e7d3316Smrg
34056e7d3316Smrg	  # Try sorting and uniquifying the output.
34066e7d3316Smrg	  if $GREP -v "^: " < "$nlist" |
34076e7d3316Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
34086e7d3316Smrg		sort -k 3
34096e7d3316Smrg	      else
34106e7d3316Smrg		sort +2
34116e7d3316Smrg	      fi |
34126e7d3316Smrg	      uniq > "$nlist"S; then
34136e7d3316Smrg	    :
3414a966c04fSmrg	  else
34156e7d3316Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3416a966c04fSmrg	  fi
3417a966c04fSmrg
34186e7d3316Smrg	  if test -f "$nlist"S; then
34196e7d3316Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3420a966c04fSmrg	  else
34216e7d3316Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3422a966c04fSmrg	  fi
3423a966c04fSmrg
34246e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3425a966c04fSmrg
34266e7d3316Smrg/* The mapping between symbol names and symbols.  */
34276e7d3316Smrgtypedef struct {
34286e7d3316Smrg  const char *name;
34296e7d3316Smrg  void *address;
34306e7d3316Smrg} lt_dlsymlist;
343197cf2ee2Smrgextern LT_DLSYM_CONST lt_dlsymlist
34326e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[];
343397cf2ee2SmrgLT_DLSYM_CONST lt_dlsymlist
34346e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
34356e7d3316Smrg{\
34366e7d3316Smrg  { \"$my_originator\", (void *) 0 },"
3437a966c04fSmrg
34386e7d3316Smrg	  case $need_lib_prefix in
34396e7d3316Smrg	  no)
34406e7d3316Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
34416e7d3316Smrg	    ;;
34426e7d3316Smrg	  *)
34436e7d3316Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
34446e7d3316Smrg	    ;;
34456e7d3316Smrg	  esac
34466e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
34476e7d3316Smrg  {0, (void *) 0}
34486e7d3316Smrg};
3449a966c04fSmrg
34506e7d3316Smrg/* This works around a problem in FreeBSD linker */
34516e7d3316Smrg#ifdef FREEBSD_WORKAROUND
34526e7d3316Smrgstatic const void *lt_preloaded_setup() {
34536e7d3316Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
34546e7d3316Smrg}
34556e7d3316Smrg#endif
3456a966c04fSmrg
34576e7d3316Smrg#ifdef __cplusplus
34586e7d3316Smrg}
34596e7d3316Smrg#endif\
34606e7d3316Smrg"
34616e7d3316Smrg	} # !$opt_dry_run
3462a966c04fSmrg
34636e7d3316Smrg	pic_flag_for_symtable=
34646e7d3316Smrg	case "$compile_command " in
34656e7d3316Smrg	*" -static "*) ;;
34666e7d3316Smrg	*)
34676e7d3316Smrg	  case $host in
34686e7d3316Smrg	  # compiling the symbol table file with pic_flag works around
34696e7d3316Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
34706e7d3316Smrg	  # linked before any other PIC object.  But we must not use
34716e7d3316Smrg	  # pic_flag when linking with -static.  The problem exists in
34726e7d3316Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
34736e7d3316Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
34746e7d3316Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
34756e7d3316Smrg	  *-*-hpux*)
34766e7d3316Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
34776e7d3316Smrg	  *)
34786e7d3316Smrg	    if test "X$my_pic_p" != Xno; then
34796e7d3316Smrg	      pic_flag_for_symtable=" $pic_flag"
34806e7d3316Smrg	    fi
34816e7d3316Smrg	    ;;
34826e7d3316Smrg	  esac
34836e7d3316Smrg	  ;;
34846e7d3316Smrg	esac
34856e7d3316Smrg	symtab_cflags=
34866e7d3316Smrg	for arg in $LTCFLAGS; do
34876e7d3316Smrg	  case $arg in
34886e7d3316Smrg	  -pie | -fpie | -fPIE) ;;
348997cf2ee2Smrg	  *) func_append symtab_cflags " $arg" ;;
34906e7d3316Smrg	  esac
34916e7d3316Smrg	done
3492a966c04fSmrg
34936e7d3316Smrg	# Now compile the dynamic symbol file.
34946e7d3316Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3495a966c04fSmrg
34966e7d3316Smrg	# Clean up the generated files.
34976e7d3316Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3498a966c04fSmrg
34996e7d3316Smrg	# Transform the symbol file into the correct name.
35006e7d3316Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
35016e7d3316Smrg	case $host in
35026e7d3316Smrg	*cygwin* | *mingw* | *cegcc* )
35036e7d3316Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
35046e7d3316Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35056e7d3316Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35066e7d3316Smrg	  else
35076e7d3316Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35086e7d3316Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35096e7d3316Smrg	  fi
35106e7d3316Smrg	  ;;
35116e7d3316Smrg	*)
35126e7d3316Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35136e7d3316Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35146e7d3316Smrg	  ;;
35156e7d3316Smrg	esac
35166e7d3316Smrg	;;
35176e7d3316Smrg      *)
35186e7d3316Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
35196e7d3316Smrg	;;
35206e7d3316Smrg      esac
35216e7d3316Smrg    else
35226e7d3316Smrg      # We keep going just in case the user didn't refer to
35236e7d3316Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
35246e7d3316Smrg      # really was required.
3525a966c04fSmrg
35266e7d3316Smrg      # Nullify the symbol file.
35276e7d3316Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
35286e7d3316Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
35296e7d3316Smrg    fi
35306e7d3316Smrg}
3531a966c04fSmrg
35326e7d3316Smrg# func_win32_libid arg
35336e7d3316Smrg# return the library type of file 'arg'
35346e7d3316Smrg#
35356e7d3316Smrg# Need a lot of goo to handle *both* DLLs and import libs
35366e7d3316Smrg# Has to be a shell function in order to 'eat' the argument
35376e7d3316Smrg# that is supplied when $file_magic_command is called.
35386e7d3316Smrg# Despite the name, also deal with 64 bit binaries.
35396e7d3316Smrgfunc_win32_libid ()
35406e7d3316Smrg{
35416e7d3316Smrg  $opt_debug
35426e7d3316Smrg  win32_libid_type="unknown"
35436e7d3316Smrg  win32_fileres=`file -L $1 2>/dev/null`
35446e7d3316Smrg  case $win32_fileres in
35456e7d3316Smrg  *ar\ archive\ import\ library*) # definitely import
35466e7d3316Smrg    win32_libid_type="x86 archive import"
35476e7d3316Smrg    ;;
35486e7d3316Smrg  *ar\ archive*) # could be an import, or static
35496e7d3316Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
35506e7d3316Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
35516e7d3316Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
355297cf2ee2Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
355397cf2ee2Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
35546e7d3316Smrg	$SED -n -e '
35556e7d3316Smrg	    1,100{
35566e7d3316Smrg		/ I /{
35576e7d3316Smrg		    s,.*,import,
35586e7d3316Smrg		    p
35596e7d3316Smrg		    q
35606e7d3316Smrg		}
35616e7d3316Smrg	    }'`
35626e7d3316Smrg      case $win32_nmres in
35636e7d3316Smrg      import*)  win32_libid_type="x86 archive import";;
35646e7d3316Smrg      *)        win32_libid_type="x86 archive static";;
35656e7d3316Smrg      esac
35666e7d3316Smrg    fi
35676e7d3316Smrg    ;;
35686e7d3316Smrg  *DLL*)
35696e7d3316Smrg    win32_libid_type="x86 DLL"
35706e7d3316Smrg    ;;
35716e7d3316Smrg  *executable*) # but shell scripts are "executable" too...
35726e7d3316Smrg    case $win32_fileres in
35736e7d3316Smrg    *MS\ Windows\ PE\ Intel*)
35746e7d3316Smrg      win32_libid_type="x86 DLL"
35756e7d3316Smrg      ;;
35766e7d3316Smrg    esac
35776e7d3316Smrg    ;;
35786e7d3316Smrg  esac
35796e7d3316Smrg  $ECHO "$win32_libid_type"
35806e7d3316Smrg}
3581a966c04fSmrg
358297cf2ee2Smrg# func_cygming_dll_for_implib ARG
358397cf2ee2Smrg#
358497cf2ee2Smrg# Platform-specific function to extract the
358597cf2ee2Smrg# name of the DLL associated with the specified
358697cf2ee2Smrg# import library ARG.
358797cf2ee2Smrg# Invoked by eval'ing the libtool variable
358897cf2ee2Smrg#    $sharedlib_from_linklib_cmd
358997cf2ee2Smrg# Result is available in the variable
359097cf2ee2Smrg#    $sharedlib_from_linklib_result
359197cf2ee2Smrgfunc_cygming_dll_for_implib ()
359297cf2ee2Smrg{
359397cf2ee2Smrg  $opt_debug
359497cf2ee2Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
359597cf2ee2Smrg}
359697cf2ee2Smrg
359797cf2ee2Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
359897cf2ee2Smrg#
359997cf2ee2Smrg# The is the core of a fallback implementation of a
360097cf2ee2Smrg# platform-specific function to extract the name of the
360197cf2ee2Smrg# DLL associated with the specified import library LIBNAME.
360297cf2ee2Smrg#
360397cf2ee2Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
360497cf2ee2Smrg# on the platform and compiler that created the implib.
360597cf2ee2Smrg#
360697cf2ee2Smrg# Echos the name of the DLL associated with the
360797cf2ee2Smrg# specified import library.
360897cf2ee2Smrgfunc_cygming_dll_for_implib_fallback_core ()
360997cf2ee2Smrg{
361097cf2ee2Smrg  $opt_debug
361197cf2ee2Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
361297cf2ee2Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
361397cf2ee2Smrg    $SED '/^Contents of section '"$match_literal"':/{
361497cf2ee2Smrg      # Place marker at beginning of archive member dllname section
361597cf2ee2Smrg      s/.*/====MARK====/
361697cf2ee2Smrg      p
361797cf2ee2Smrg      d
361897cf2ee2Smrg    }
361997cf2ee2Smrg    # These lines can sometimes be longer than 43 characters, but
362097cf2ee2Smrg    # are always uninteresting
362197cf2ee2Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
362297cf2ee2Smrg    /^In archive [^:]*:/d
362397cf2ee2Smrg    # Ensure marker is printed
362497cf2ee2Smrg    /^====MARK====/p
362597cf2ee2Smrg    # Remove all lines with less than 43 characters
362697cf2ee2Smrg    /^.\{43\}/!d
362797cf2ee2Smrg    # From remaining lines, remove first 43 characters
362897cf2ee2Smrg    s/^.\{43\}//' |
362997cf2ee2Smrg    $SED -n '
363097cf2ee2Smrg      # Join marker and all lines until next marker into a single line
363197cf2ee2Smrg      /^====MARK====/ b para
363297cf2ee2Smrg      H
363397cf2ee2Smrg      $ b para
363497cf2ee2Smrg      b
363597cf2ee2Smrg      :para
363697cf2ee2Smrg      x
363797cf2ee2Smrg      s/\n//g
363897cf2ee2Smrg      # Remove the marker
363997cf2ee2Smrg      s/^====MARK====//
364097cf2ee2Smrg      # Remove trailing dots and whitespace
364197cf2ee2Smrg      s/[\. \t]*$//
364297cf2ee2Smrg      # Print
364397cf2ee2Smrg      /./p' |
364497cf2ee2Smrg    # we now have a list, one entry per line, of the stringified
364597cf2ee2Smrg    # contents of the appropriate section of all members of the
364697cf2ee2Smrg    # archive which possess that section. Heuristic: eliminate
364797cf2ee2Smrg    # all those which have a first or second character that is
364897cf2ee2Smrg    # a '.' (that is, objdump's representation of an unprintable
364997cf2ee2Smrg    # character.) This should work for all archives with less than
365097cf2ee2Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
365197cf2ee2Smrg    # begins with a literal '.' or a single character followed by
365297cf2ee2Smrg    # a '.'.
365397cf2ee2Smrg    #
365497cf2ee2Smrg    # Of those that remain, print the first one.
365597cf2ee2Smrg    $SED -e '/^\./d;/^.\./d;q'
365697cf2ee2Smrg}
365797cf2ee2Smrg
365897cf2ee2Smrg# func_cygming_gnu_implib_p ARG
365997cf2ee2Smrg# This predicate returns with zero status (TRUE) if
366097cf2ee2Smrg# ARG is a GNU/binutils-style import library. Returns
366197cf2ee2Smrg# with nonzero status (FALSE) otherwise.
366297cf2ee2Smrgfunc_cygming_gnu_implib_p ()
366397cf2ee2Smrg{
366497cf2ee2Smrg  $opt_debug
366597cf2ee2Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
366697cf2ee2Smrg  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)$'`
366797cf2ee2Smrg  test -n "$func_cygming_gnu_implib_tmp"
366897cf2ee2Smrg}
366997cf2ee2Smrg
367097cf2ee2Smrg# func_cygming_ms_implib_p ARG
367197cf2ee2Smrg# This predicate returns with zero status (TRUE) if
367297cf2ee2Smrg# ARG is an MS-style import library. Returns
367397cf2ee2Smrg# with nonzero status (FALSE) otherwise.
367497cf2ee2Smrgfunc_cygming_ms_implib_p ()
367597cf2ee2Smrg{
367697cf2ee2Smrg  $opt_debug
367797cf2ee2Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
367897cf2ee2Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
367997cf2ee2Smrg  test -n "$func_cygming_ms_implib_tmp"
368097cf2ee2Smrg}
368197cf2ee2Smrg
368297cf2ee2Smrg# func_cygming_dll_for_implib_fallback ARG
368397cf2ee2Smrg# Platform-specific function to extract the
368497cf2ee2Smrg# name of the DLL associated with the specified
368597cf2ee2Smrg# import library ARG.
368697cf2ee2Smrg#
368797cf2ee2Smrg# This fallback implementation is for use when $DLLTOOL
368897cf2ee2Smrg# does not support the --identify-strict option.
368997cf2ee2Smrg# Invoked by eval'ing the libtool variable
369097cf2ee2Smrg#    $sharedlib_from_linklib_cmd
369197cf2ee2Smrg# Result is available in the variable
369297cf2ee2Smrg#    $sharedlib_from_linklib_result
369397cf2ee2Smrgfunc_cygming_dll_for_implib_fallback ()
369497cf2ee2Smrg{
369597cf2ee2Smrg  $opt_debug
369697cf2ee2Smrg  if func_cygming_gnu_implib_p "$1" ; then
369797cf2ee2Smrg    # binutils import library
369897cf2ee2Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
369997cf2ee2Smrg  elif func_cygming_ms_implib_p "$1" ; then
370097cf2ee2Smrg    # ms-generated import library
370197cf2ee2Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
370297cf2ee2Smrg  else
370397cf2ee2Smrg    # unknown
370497cf2ee2Smrg    sharedlib_from_linklib_result=""
370597cf2ee2Smrg  fi
370697cf2ee2Smrg}
3707a966c04fSmrg
3708a966c04fSmrg
37096e7d3316Smrg# func_extract_an_archive dir oldlib
37106e7d3316Smrgfunc_extract_an_archive ()
37116e7d3316Smrg{
37126e7d3316Smrg    $opt_debug
37136e7d3316Smrg    f_ex_an_ar_dir="$1"; shift
37146e7d3316Smrg    f_ex_an_ar_oldlib="$1"
37156e7d3316Smrg    if test "$lock_old_archive_extraction" = yes; then
37166e7d3316Smrg      lockfile=$f_ex_an_ar_oldlib.lock
37176e7d3316Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
37186e7d3316Smrg	func_echo "Waiting for $lockfile to be removed"
37196e7d3316Smrg	sleep 2
37206e7d3316Smrg      done
37216e7d3316Smrg    fi
37226e7d3316Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
37236e7d3316Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37246e7d3316Smrg    if test "$lock_old_archive_extraction" = yes; then
37256e7d3316Smrg      $opt_dry_run || rm -f "$lockfile"
37266e7d3316Smrg    fi
37276e7d3316Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
37286e7d3316Smrg     :
37296e7d3316Smrg    else
37306e7d3316Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
37316e7d3316Smrg    fi
37326e7d3316Smrg}
3733a966c04fSmrg
3734a966c04fSmrg
37356e7d3316Smrg# func_extract_archives gentop oldlib ...
37366e7d3316Smrgfunc_extract_archives ()
37376e7d3316Smrg{
37386e7d3316Smrg    $opt_debug
37396e7d3316Smrg    my_gentop="$1"; shift
37406e7d3316Smrg    my_oldlibs=${1+"$@"}
37416e7d3316Smrg    my_oldobjs=""
37426e7d3316Smrg    my_xlib=""
37436e7d3316Smrg    my_xabs=""
37446e7d3316Smrg    my_xdir=""
3745a966c04fSmrg
37466e7d3316Smrg    for my_xlib in $my_oldlibs; do
37476e7d3316Smrg      # Extract the objects.
37486e7d3316Smrg      case $my_xlib in
37496e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
37506e7d3316Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
37516e7d3316Smrg      esac
37526e7d3316Smrg      func_basename "$my_xlib"
37536e7d3316Smrg      my_xlib="$func_basename_result"
37546e7d3316Smrg      my_xlib_u=$my_xlib
37556e7d3316Smrg      while :; do
37566e7d3316Smrg        case " $extracted_archives " in
37576e7d3316Smrg	*" $my_xlib_u "*)
37586e7d3316Smrg	  func_arith $extracted_serial + 1
37596e7d3316Smrg	  extracted_serial=$func_arith_result
37606e7d3316Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
37616e7d3316Smrg	*) break ;;
37626e7d3316Smrg	esac
37636e7d3316Smrg      done
37646e7d3316Smrg      extracted_archives="$extracted_archives $my_xlib_u"
37656e7d3316Smrg      my_xdir="$my_gentop/$my_xlib_u"
3766a966c04fSmrg
37676e7d3316Smrg      func_mkdir_p "$my_xdir"
37686e7d3316Smrg
37696e7d3316Smrg      case $host in
37706e7d3316Smrg      *-darwin*)
37716e7d3316Smrg	func_verbose "Extracting $my_xabs"
37726e7d3316Smrg	# Do not bother doing anything if just a dry run
37736e7d3316Smrg	$opt_dry_run || {
37746e7d3316Smrg	  darwin_orig_dir=`pwd`
37756e7d3316Smrg	  cd $my_xdir || exit $?
37766e7d3316Smrg	  darwin_archive=$my_xabs
37776e7d3316Smrg	  darwin_curdir=`pwd`
37786e7d3316Smrg	  darwin_base_archive=`basename "$darwin_archive"`
37796e7d3316Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
37806e7d3316Smrg	  if test -n "$darwin_arches"; then
37816e7d3316Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
37826e7d3316Smrg	    darwin_arch=
37836e7d3316Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
37846e7d3316Smrg	    for darwin_arch in  $darwin_arches ; do
37856e7d3316Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37866e7d3316Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
37876e7d3316Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37886e7d3316Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
37896e7d3316Smrg	      cd "$darwin_curdir"
37906e7d3316Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
37916e7d3316Smrg	    done # $darwin_arches
37926e7d3316Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
37936e7d3316Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
37946e7d3316Smrg	    darwin_file=
37956e7d3316Smrg	    darwin_files=
37966e7d3316Smrg	    for darwin_file in $darwin_filelist; do
37976e7d3316Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
37986e7d3316Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
37996e7d3316Smrg	    done # $darwin_filelist
38006e7d3316Smrg	    $RM -rf unfat-$$
38016e7d3316Smrg	    cd "$darwin_orig_dir"
3802a966c04fSmrg	  else
38036e7d3316Smrg	    cd $darwin_orig_dir
38046e7d3316Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
38056e7d3316Smrg	  fi # $darwin_arches
38066e7d3316Smrg	} # !$opt_dry_run
38076e7d3316Smrg	;;
38086e7d3316Smrg      *)
38096e7d3316Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
38106e7d3316Smrg	;;
38116e7d3316Smrg      esac
38126e7d3316Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
38136e7d3316Smrg    done
3814a966c04fSmrg
38156e7d3316Smrg    func_extract_archives_result="$my_oldobjs"
38166e7d3316Smrg}
3817a966c04fSmrg
3818a966c04fSmrg
38196e7d3316Smrg# func_emit_wrapper [arg=no]
38206e7d3316Smrg#
38216e7d3316Smrg# Emit a libtool wrapper script on stdout.
38226e7d3316Smrg# Don't directly open a file because we may want to
38236e7d3316Smrg# incorporate the script contents within a cygwin/mingw
38246e7d3316Smrg# wrapper executable.  Must ONLY be called from within
38256e7d3316Smrg# func_mode_link because it depends on a number of variables
38266e7d3316Smrg# set therein.
38276e7d3316Smrg#
38286e7d3316Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
38296e7d3316Smrg# variable will take.  If 'yes', then the emitted script
38306e7d3316Smrg# will assume that the directory in which it is stored is
38316e7d3316Smrg# the $objdir directory.  This is a cygwin/mingw-specific
38326e7d3316Smrg# behavior.
38336e7d3316Smrgfunc_emit_wrapper ()
38346e7d3316Smrg{
38356e7d3316Smrg	func_emit_wrapper_arg1=${1-no}
3836a966c04fSmrg
38376e7d3316Smrg	$ECHO "\
38386e7d3316Smrg#! $SHELL
3839a966c04fSmrg
38406e7d3316Smrg# $output - temporary wrapper script for $objdir/$outputname
38416e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
38426e7d3316Smrg#
38436e7d3316Smrg# The $output program cannot be directly executed until all the libtool
38446e7d3316Smrg# libraries that it depends on are installed.
38456e7d3316Smrg#
38466e7d3316Smrg# This wrapper script should never be moved out of the build directory.
38476e7d3316Smrg# If it is, it will not operate correctly.
3848a966c04fSmrg
38496e7d3316Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
38506e7d3316Smrg# metacharacters that are still active within double-quoted strings.
38516e7d3316Smrgsed_quote_subst='$sed_quote_subst'
3852a966c04fSmrg
38536e7d3316Smrg# Be Bourne compatible
38546e7d3316Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
38556e7d3316Smrg  emulate sh
38566e7d3316Smrg  NULLCMD=:
38576e7d3316Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
38586e7d3316Smrg  # is contrary to our usage.  Disable this feature.
38596e7d3316Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
38606e7d3316Smrg  setopt NO_GLOB_SUBST
38616e7d3316Smrgelse
38626e7d3316Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
38636e7d3316Smrgfi
38646e7d3316SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
38656e7d3316SmrgDUALCASE=1; export DUALCASE # for MKS sh
3866a966c04fSmrg
38676e7d3316Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
38686e7d3316Smrg# if CDPATH is set.
38696e7d3316Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3870a966c04fSmrg
38716e7d3316Smrgrelink_command=\"$relink_command\"
3872a966c04fSmrg
38736e7d3316Smrg# This environment variable determines our operation mode.
38746e7d3316Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
38756e7d3316Smrg  # install mode needs the following variables:
38766e7d3316Smrg  generated_by_libtool_version='$macro_version'
38776e7d3316Smrg  notinst_deplibs='$notinst_deplibs'
38786e7d3316Smrgelse
38796e7d3316Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
38806e7d3316Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
38816e7d3316Smrg    file=\"\$0\""
3882a966c04fSmrg
38836e7d3316Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
38846e7d3316Smrg    $ECHO "\
3885a966c04fSmrg
38866e7d3316Smrg# A function that is used when there is no print builtin or printf.
38876e7d3316Smrgfunc_fallback_echo ()
38886e7d3316Smrg{
38896e7d3316Smrg  eval 'cat <<_LTECHO_EOF
38906e7d3316Smrg\$1
38916e7d3316Smrg_LTECHO_EOF'
38926e7d3316Smrg}
38936e7d3316Smrg    ECHO=\"$qECHO\"
38946e7d3316Smrg  fi
38956e7d3316Smrg
38966e7d3316Smrg# Very basic option parsing. These options are (a) specific to
38976e7d3316Smrg# the libtool wrapper, (b) are identical between the wrapper
38986e7d3316Smrg# /script/ and the wrapper /executable/ which is used only on
38996e7d3316Smrg# windows platforms, and (c) all begin with the string "--lt-"
39006e7d3316Smrg# (application programs are unlikely to have options which match
39016e7d3316Smrg# this pattern).
39026e7d3316Smrg#
39036e7d3316Smrg# There are only two supported options: --lt-debug and
39046e7d3316Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
39056e7d3316Smrg#
39066e7d3316Smrg# The first argument to this parsing function should be the
39076e7d3316Smrg# script's $0 value, followed by "$@".
39086e7d3316Smrglt_option_debug=
39096e7d3316Smrgfunc_parse_lt_options ()
39106e7d3316Smrg{
39116e7d3316Smrg  lt_script_arg0=\$0
39126e7d3316Smrg  shift
39136e7d3316Smrg  for lt_opt
39146e7d3316Smrg  do
39156e7d3316Smrg    case \"\$lt_opt\" in
39166e7d3316Smrg    --lt-debug) lt_option_debug=1 ;;
39176e7d3316Smrg    --lt-dump-script)
39186e7d3316Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
39196e7d3316Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
39206e7d3316Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
39216e7d3316Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
39226e7d3316Smrg        exit 0
39236e7d3316Smrg      ;;
39246e7d3316Smrg    --lt-*)
39256e7d3316Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
39266e7d3316Smrg        exit 1
3927a966c04fSmrg      ;;
39286e7d3316Smrg    esac
39296e7d3316Smrg  done
3930a966c04fSmrg
39316e7d3316Smrg  # Print the debug banner immediately:
39326e7d3316Smrg  if test -n \"\$lt_option_debug\"; then
39336e7d3316Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
39346e7d3316Smrg  fi
39356e7d3316Smrg}
3936a966c04fSmrg
39376e7d3316Smrg# Used when --lt-debug. Prints its arguments to stdout
39386e7d3316Smrg# (redirection is the responsibility of the caller)
39396e7d3316Smrgfunc_lt_dump_args ()
39406e7d3316Smrg{
39416e7d3316Smrg  lt_dump_args_N=1;
39426e7d3316Smrg  for lt_arg
39436e7d3316Smrg  do
39446e7d3316Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
39456e7d3316Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
39466e7d3316Smrg  done
39476e7d3316Smrg}
3948a966c04fSmrg
39496e7d3316Smrg# Core function for launching the target application
39506e7d3316Smrgfunc_exec_program_core ()
39516e7d3316Smrg{
39526e7d3316Smrg"
39536e7d3316Smrg  case $host in
39546e7d3316Smrg  # Backslashes separate directories on plain windows
39556e7d3316Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
39566e7d3316Smrg    $ECHO "\
39576e7d3316Smrg      if test -n \"\$lt_option_debug\"; then
39586e7d3316Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
39596e7d3316Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3960a966c04fSmrg      fi
39616e7d3316Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
39626e7d3316Smrg"
39636e7d3316Smrg    ;;
3964a966c04fSmrg
39656e7d3316Smrg  *)
39666e7d3316Smrg    $ECHO "\
39676e7d3316Smrg      if test -n \"\$lt_option_debug\"; then
39686e7d3316Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
39696e7d3316Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3970a966c04fSmrg      fi
39716e7d3316Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
39726e7d3316Smrg"
39736e7d3316Smrg    ;;
39746e7d3316Smrg  esac
39756e7d3316Smrg  $ECHO "\
39766e7d3316Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
39776e7d3316Smrg      exit 1
39786e7d3316Smrg}
3979a966c04fSmrg
39806e7d3316Smrg# A function to encapsulate launching the target application
39816e7d3316Smrg# Strips options in the --lt-* namespace from \$@ and
39826e7d3316Smrg# launches target application with the remaining arguments.
39836e7d3316Smrgfunc_exec_program ()
39846e7d3316Smrg{
39856e7d3316Smrg  for lt_wr_arg
39866e7d3316Smrg  do
39876e7d3316Smrg    case \$lt_wr_arg in
39886e7d3316Smrg    --lt-*) ;;
39896e7d3316Smrg    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
39906e7d3316Smrg    esac
39916e7d3316Smrg    shift
39926e7d3316Smrg  done
39936e7d3316Smrg  func_exec_program_core \${1+\"\$@\"}
39946e7d3316Smrg}
3995a966c04fSmrg
39966e7d3316Smrg  # Parse options
39976e7d3316Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
3998a966c04fSmrg
39996e7d3316Smrg  # Find the directory that this script lives in.
40006e7d3316Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
40016e7d3316Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4002a966c04fSmrg
40036e7d3316Smrg  # Follow symbolic links until we get to the real thisdir.
40046e7d3316Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
40056e7d3316Smrg  while test -n \"\$file\"; do
40066e7d3316Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4007a966c04fSmrg
40086e7d3316Smrg    # If there was a directory component, then change thisdir.
40096e7d3316Smrg    if test \"x\$destdir\" != \"x\$file\"; then
40106e7d3316Smrg      case \"\$destdir\" in
40116e7d3316Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
40126e7d3316Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
40136e7d3316Smrg      esac
40146e7d3316Smrg    fi
4015a966c04fSmrg
40166e7d3316Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
40176e7d3316Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
40186e7d3316Smrg  done
4019a966c04fSmrg
40206e7d3316Smrg  # Usually 'no', except on cygwin/mingw when embedded into
40216e7d3316Smrg  # the cwrapper.
40226e7d3316Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
40236e7d3316Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
40246e7d3316Smrg    # special case for '.'
40256e7d3316Smrg    if test \"\$thisdir\" = \".\"; then
40266e7d3316Smrg      thisdir=\`pwd\`
40276e7d3316Smrg    fi
40286e7d3316Smrg    # remove .libs from thisdir
40296e7d3316Smrg    case \"\$thisdir\" in
40306e7d3316Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
40316e7d3316Smrg    $objdir )   thisdir=. ;;
40326e7d3316Smrg    esac
40336e7d3316Smrg  fi
4034a966c04fSmrg
40356e7d3316Smrg  # Try to get the absolute directory name.
40366e7d3316Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
40376e7d3316Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
40386e7d3316Smrg"
4039a966c04fSmrg
40406e7d3316Smrg	if test "$fast_install" = yes; then
40416e7d3316Smrg	  $ECHO "\
40426e7d3316Smrg  program=lt-'$outputname'$exeext
40436e7d3316Smrg  progdir=\"\$thisdir/$objdir\"
4044a966c04fSmrg
40456e7d3316Smrg  if test ! -f \"\$progdir/\$program\" ||
40466e7d3316Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
40476e7d3316Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4048a966c04fSmrg
40496e7d3316Smrg    file=\"\$\$-\$program\"
4050a966c04fSmrg
40516e7d3316Smrg    if test ! -d \"\$progdir\"; then
40526e7d3316Smrg      $MKDIR \"\$progdir\"
40536e7d3316Smrg    else
40546e7d3316Smrg      $RM \"\$progdir/\$file\"
40556e7d3316Smrg    fi"
4056a966c04fSmrg
40576e7d3316Smrg	  $ECHO "\
4058a966c04fSmrg
40596e7d3316Smrg    # relink executable if necessary
40606e7d3316Smrg    if test -n \"\$relink_command\"; then
40616e7d3316Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
40626e7d3316Smrg      else
40636e7d3316Smrg	$ECHO \"\$relink_command_output\" >&2
40646e7d3316Smrg	$RM \"\$progdir/\$file\"
40656e7d3316Smrg	exit 1
40666e7d3316Smrg      fi
40676e7d3316Smrg    fi
4068a966c04fSmrg
40696e7d3316Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
40706e7d3316Smrg    { $RM \"\$progdir/\$program\";
40716e7d3316Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
40726e7d3316Smrg    $RM \"\$progdir/\$file\"
40736e7d3316Smrg  fi"
40746e7d3316Smrg	else
40756e7d3316Smrg	  $ECHO "\
40766e7d3316Smrg  program='$outputname'
40776e7d3316Smrg  progdir=\"\$thisdir/$objdir\"
40786e7d3316Smrg"
40796e7d3316Smrg	fi
4080a966c04fSmrg
40816e7d3316Smrg	$ECHO "\
4082a966c04fSmrg
40836e7d3316Smrg  if test -f \"\$progdir/\$program\"; then"
4084a966c04fSmrg
408597cf2ee2Smrg	# fixup the dll searchpath if we need to.
408697cf2ee2Smrg	#
408797cf2ee2Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
408897cf2ee2Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
408997cf2ee2Smrg	# libraries must come first.
409097cf2ee2Smrg	if test -n "$dllsearchpath"; then
409197cf2ee2Smrg	  $ECHO "\
409297cf2ee2Smrg    # Add the dll search path components to the executable PATH
409397cf2ee2Smrg    PATH=$dllsearchpath:\$PATH
409497cf2ee2Smrg"
409597cf2ee2Smrg	fi
409697cf2ee2Smrg
40976e7d3316Smrg	# Export our shlibpath_var if we have one.
40986e7d3316Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
40996e7d3316Smrg	  $ECHO "\
41006e7d3316Smrg    # Add our own library path to $shlibpath_var
41016e7d3316Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4102a966c04fSmrg
41036e7d3316Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
41046e7d3316Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
41056e7d3316Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4106a966c04fSmrg
41076e7d3316Smrg    export $shlibpath_var
41086e7d3316Smrg"
41096e7d3316Smrg	fi
4110a966c04fSmrg
41116e7d3316Smrg	$ECHO "\
41126e7d3316Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
41136e7d3316Smrg      # Run the actual program with our arguments.
41146e7d3316Smrg      func_exec_program \${1+\"\$@\"}
41156e7d3316Smrg    fi
41166e7d3316Smrg  else
41176e7d3316Smrg    # The program doesn't exist.
41186e7d3316Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
41196e7d3316Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
41206e7d3316Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
41216e7d3316Smrg    exit 1
41226e7d3316Smrg  fi
41236e7d3316Smrgfi\
41246e7d3316Smrg"
41256e7d3316Smrg}
4126a966c04fSmrg
4127a966c04fSmrg
41286e7d3316Smrg# func_emit_cwrapperexe_src
41296e7d3316Smrg# emit the source code for a wrapper executable on stdout
41306e7d3316Smrg# Must ONLY be called from within func_mode_link because
41316e7d3316Smrg# it depends on a number of variable set therein.
41326e7d3316Smrgfunc_emit_cwrapperexe_src ()
41336e7d3316Smrg{
41346e7d3316Smrg	cat <<EOF
4135a966c04fSmrg
41366e7d3316Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
41376e7d3316Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4138a966c04fSmrg
41396e7d3316Smrg   The $output program cannot be directly executed until all the libtool
41406e7d3316Smrg   libraries that it depends on are installed.
4141a966c04fSmrg
41426e7d3316Smrg   This wrapper executable should never be moved out of the build directory.
41436e7d3316Smrg   If it is, it will not operate correctly.
41446e7d3316Smrg*/
41456e7d3316SmrgEOF
41466e7d3316Smrg	    cat <<"EOF"
41476e7d3316Smrg#ifdef _MSC_VER
41486e7d3316Smrg# define _CRT_SECURE_NO_DEPRECATE 1
41496e7d3316Smrg#endif
41506e7d3316Smrg#include <stdio.h>
41516e7d3316Smrg#include <stdlib.h>
41526e7d3316Smrg#ifdef _MSC_VER
41536e7d3316Smrg# include <direct.h>
41546e7d3316Smrg# include <process.h>
41556e7d3316Smrg# include <io.h>
41566e7d3316Smrg#else
41576e7d3316Smrg# include <unistd.h>
41586e7d3316Smrg# include <stdint.h>
41596e7d3316Smrg# ifdef __CYGWIN__
41606e7d3316Smrg#  include <io.h>
41616e7d3316Smrg# endif
41626e7d3316Smrg#endif
41636e7d3316Smrg#include <malloc.h>
41646e7d3316Smrg#include <stdarg.h>
41656e7d3316Smrg#include <assert.h>
41666e7d3316Smrg#include <string.h>
41676e7d3316Smrg#include <ctype.h>
41686e7d3316Smrg#include <errno.h>
41696e7d3316Smrg#include <fcntl.h>
41706e7d3316Smrg#include <sys/stat.h>
4171a966c04fSmrg
41726e7d3316Smrg/* declarations of non-ANSI functions */
41736e7d3316Smrg#if defined(__MINGW32__)
41746e7d3316Smrg# ifdef __STRICT_ANSI__
41756e7d3316Smrgint _putenv (const char *);
41766e7d3316Smrg# endif
41776e7d3316Smrg#elif defined(__CYGWIN__)
41786e7d3316Smrg# ifdef __STRICT_ANSI__
41796e7d3316Smrgchar *realpath (const char *, char *);
41806e7d3316Smrgint putenv (char *);
41816e7d3316Smrgint setenv (const char *, const char *, int);
41826e7d3316Smrg# endif
41836e7d3316Smrg/* #elif defined (other platforms) ... */
41846e7d3316Smrg#endif
4185a966c04fSmrg
41866e7d3316Smrg/* portability defines, excluding path handling macros */
41876e7d3316Smrg#if defined(_MSC_VER)
41886e7d3316Smrg# define setmode _setmode
41896e7d3316Smrg# define stat    _stat
41906e7d3316Smrg# define chmod   _chmod
41916e7d3316Smrg# define getcwd  _getcwd
41926e7d3316Smrg# define putenv  _putenv
41936e7d3316Smrg# define S_IXUSR _S_IEXEC
41946e7d3316Smrg# ifndef _INTPTR_T_DEFINED
41956e7d3316Smrg#  define _INTPTR_T_DEFINED
41966e7d3316Smrg#  define intptr_t int
41976e7d3316Smrg# endif
41986e7d3316Smrg#elif defined(__MINGW32__)
41996e7d3316Smrg# define setmode _setmode
42006e7d3316Smrg# define stat    _stat
42016e7d3316Smrg# define chmod   _chmod
42026e7d3316Smrg# define getcwd  _getcwd
42036e7d3316Smrg# define putenv  _putenv
42046e7d3316Smrg#elif defined(__CYGWIN__)
42056e7d3316Smrg# define HAVE_SETENV
42066e7d3316Smrg# define FOPEN_WB "wb"
42076e7d3316Smrg/* #elif defined (other platforms) ... */
42086e7d3316Smrg#endif
4209a966c04fSmrg
42106e7d3316Smrg#if defined(PATH_MAX)
42116e7d3316Smrg# define LT_PATHMAX PATH_MAX
42126e7d3316Smrg#elif defined(MAXPATHLEN)
42136e7d3316Smrg# define LT_PATHMAX MAXPATHLEN
42146e7d3316Smrg#else
42156e7d3316Smrg# define LT_PATHMAX 1024
42166e7d3316Smrg#endif
4217a966c04fSmrg
42186e7d3316Smrg#ifndef S_IXOTH
42196e7d3316Smrg# define S_IXOTH 0
42206e7d3316Smrg#endif
42216e7d3316Smrg#ifndef S_IXGRP
42226e7d3316Smrg# define S_IXGRP 0
42236e7d3316Smrg#endif
4224a966c04fSmrg
42256e7d3316Smrg/* path handling portability macros */
42266e7d3316Smrg#ifndef DIR_SEPARATOR
42276e7d3316Smrg# define DIR_SEPARATOR '/'
42286e7d3316Smrg# define PATH_SEPARATOR ':'
42296e7d3316Smrg#endif
4230a966c04fSmrg
42316e7d3316Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
42326e7d3316Smrg  defined (__OS2__)
42336e7d3316Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
42346e7d3316Smrg# define FOPEN_WB "wb"
42356e7d3316Smrg# ifndef DIR_SEPARATOR_2
42366e7d3316Smrg#  define DIR_SEPARATOR_2 '\\'
42376e7d3316Smrg# endif
42386e7d3316Smrg# ifndef PATH_SEPARATOR_2
42396e7d3316Smrg#  define PATH_SEPARATOR_2 ';'
42406e7d3316Smrg# endif
42416e7d3316Smrg#endif
4242a966c04fSmrg
42436e7d3316Smrg#ifndef DIR_SEPARATOR_2
42446e7d3316Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
42456e7d3316Smrg#else /* DIR_SEPARATOR_2 */
42466e7d3316Smrg# define IS_DIR_SEPARATOR(ch) \
42476e7d3316Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
42486e7d3316Smrg#endif /* DIR_SEPARATOR_2 */
4249a966c04fSmrg
42506e7d3316Smrg#ifndef PATH_SEPARATOR_2
42516e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
42526e7d3316Smrg#else /* PATH_SEPARATOR_2 */
42536e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
42546e7d3316Smrg#endif /* PATH_SEPARATOR_2 */
42556e7d3316Smrg
42566e7d3316Smrg#ifndef FOPEN_WB
42576e7d3316Smrg# define FOPEN_WB "w"
42586e7d3316Smrg#endif
42596e7d3316Smrg#ifndef _O_BINARY
42606e7d3316Smrg# define _O_BINARY 0
42616e7d3316Smrg#endif
42626e7d3316Smrg
42636e7d3316Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
42646e7d3316Smrg#define XFREE(stale) do { \
42656e7d3316Smrg  if (stale) { free ((void *) stale); stale = 0; } \
42666e7d3316Smrg} while (0)
42676e7d3316Smrg
42686e7d3316Smrg#if defined(LT_DEBUGWRAPPER)
42696e7d3316Smrgstatic int lt_debug = 1;
42706e7d3316Smrg#else
42716e7d3316Smrgstatic int lt_debug = 0;
42726e7d3316Smrg#endif
42736e7d3316Smrg
42746e7d3316Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
42756e7d3316Smrg
42766e7d3316Smrgvoid *xmalloc (size_t num);
42776e7d3316Smrgchar *xstrdup (const char *string);
42786e7d3316Smrgconst char *base_name (const char *name);
42796e7d3316Smrgchar *find_executable (const char *wrapper);
42806e7d3316Smrgchar *chase_symlinks (const char *pathspec);
42816e7d3316Smrgint make_executable (const char *path);
42826e7d3316Smrgint check_executable (const char *path);
42836e7d3316Smrgchar *strendzap (char *str, const char *pat);
42846e7d3316Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
42856e7d3316Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
42866e7d3316Smrgstatic const char *nonnull (const char *s);
42876e7d3316Smrgstatic const char *nonempty (const char *s);
42886e7d3316Smrgvoid lt_setenv (const char *name, const char *value);
42896e7d3316Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
42906e7d3316Smrgvoid lt_update_exe_path (const char *name, const char *value);
42916e7d3316Smrgvoid lt_update_lib_path (const char *name, const char *value);
42926e7d3316Smrgchar **prepare_spawn (char **argv);
42936e7d3316Smrgvoid lt_dump_script (FILE *f);
42946e7d3316SmrgEOF
42956e7d3316Smrg
42966e7d3316Smrg	    cat <<EOF
429797cf2ee2Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
42986e7d3316Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
42996e7d3316SmrgEOF
43006e7d3316Smrg
43016e7d3316Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
430297cf2ee2Smrg              func_to_host_path "$temp_rpath"
43036e7d3316Smrg	      cat <<EOF
430497cf2ee2Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4305a966c04fSmrgEOF
4306a966c04fSmrg	    else
43076e7d3316Smrg	      cat <<"EOF"
43086e7d3316Smrgconst char * LIB_PATH_VALUE   = "";
43096e7d3316SmrgEOF
4310a966c04fSmrg	    fi
43116e7d3316Smrg
43126e7d3316Smrg	    if test -n "$dllsearchpath"; then
431397cf2ee2Smrg              func_to_host_path "$dllsearchpath:"
43146e7d3316Smrg	      cat <<EOF
43156e7d3316Smrgconst char * EXE_PATH_VARNAME = "PATH";
431697cf2ee2Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
43176e7d3316SmrgEOF
4318a966c04fSmrg	    else
43196e7d3316Smrg	      cat <<"EOF"
43206e7d3316Smrgconst char * EXE_PATH_VARNAME = "";
43216e7d3316Smrgconst char * EXE_PATH_VALUE   = "";
43226e7d3316SmrgEOF
4323a966c04fSmrg	    fi
43246e7d3316Smrg
43256e7d3316Smrg	    if test "$fast_install" = yes; then
43266e7d3316Smrg	      cat <<EOF
43276e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
43286e7d3316SmrgEOF
4329a966c04fSmrg	    else
43306e7d3316Smrg	      cat <<EOF
43316e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
43326e7d3316SmrgEOF
4333a966c04fSmrg	    fi
4334a966c04fSmrg
4335a966c04fSmrg
43366e7d3316Smrg	    cat <<"EOF"
4337a966c04fSmrg
43386e7d3316Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4339a966c04fSmrg
43406e7d3316Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
43416e7d3316Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
43426e7d3316Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4343a966c04fSmrg
43446e7d3316Smrgint
43456e7d3316Smrgmain (int argc, char *argv[])
43466e7d3316Smrg{
43476e7d3316Smrg  char **newargz;
43486e7d3316Smrg  int  newargc;
43496e7d3316Smrg  char *tmp_pathspec;
43506e7d3316Smrg  char *actual_cwrapper_path;
43516e7d3316Smrg  char *actual_cwrapper_name;
43526e7d3316Smrg  char *target_name;
43536e7d3316Smrg  char *lt_argv_zero;
43546e7d3316Smrg  intptr_t rval = 127;
4355a966c04fSmrg
43566e7d3316Smrg  int i;
4357a966c04fSmrg
43586e7d3316Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
43596e7d3316Smrg  newargz = XMALLOC (char *, argc + 1);
4360a966c04fSmrg
43616e7d3316Smrg  /* very simple arg parsing; don't want to rely on getopt
43626e7d3316Smrg   * also, copy all non cwrapper options to newargz, except
43636e7d3316Smrg   * argz[0], which is handled differently
43646e7d3316Smrg   */
43656e7d3316Smrg  newargc=0;
43666e7d3316Smrg  for (i = 1; i < argc; i++)
43676e7d3316Smrg    {
43686e7d3316Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
43696e7d3316Smrg	{
43706e7d3316SmrgEOF
43716e7d3316Smrg	    case "$host" in
43726e7d3316Smrg	      *mingw* | *cygwin* )
43736e7d3316Smrg		# make stdout use "unix" line endings
43746e7d3316Smrg		echo "          setmode(1,_O_BINARY);"
43756e7d3316Smrg		;;
43762e2dd055Smrg	      esac
4377a966c04fSmrg
43786e7d3316Smrg	    cat <<"EOF"
43796e7d3316Smrg	  lt_dump_script (stdout);
43806e7d3316Smrg	  return 0;
43816e7d3316Smrg	}
43826e7d3316Smrg      if (strcmp (argv[i], debug_opt) == 0)
43836e7d3316Smrg	{
43846e7d3316Smrg          lt_debug = 1;
43856e7d3316Smrg          continue;
43866e7d3316Smrg	}
43876e7d3316Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
43886e7d3316Smrg        {
43896e7d3316Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
43906e7d3316Smrg             namespace, but it is not one of the ones we know about and
43916e7d3316Smrg             have already dealt with, above (inluding dump-script), then
43926e7d3316Smrg             report an error. Otherwise, targets might begin to believe
43936e7d3316Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
43946e7d3316Smrg             namespace. The first time any user complains about this, we'll
43956e7d3316Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
43966e7d3316Smrg             or a configure.ac-settable value.
43976e7d3316Smrg           */
43986e7d3316Smrg          lt_fatal (__FILE__, __LINE__,
43996e7d3316Smrg		    "unrecognized %s option: '%s'",
44006e7d3316Smrg                    ltwrapper_option_prefix, argv[i]);
44016e7d3316Smrg        }
44026e7d3316Smrg      /* otherwise ... */
44036e7d3316Smrg      newargz[++newargc] = xstrdup (argv[i]);
44046e7d3316Smrg    }
44056e7d3316Smrg  newargz[++newargc] = NULL;
4406a966c04fSmrg
44076e7d3316SmrgEOF
44086e7d3316Smrg	    cat <<EOF
44096e7d3316Smrg  /* The GNU banner must be the first non-error debug message */
44106e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
44116e7d3316SmrgEOF
44126e7d3316Smrg	    cat <<"EOF"
44136e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
44146e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
44156e7d3316Smrg
44166e7d3316Smrg  tmp_pathspec = find_executable (argv[0]);
44176e7d3316Smrg  if (tmp_pathspec == NULL)
44186e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
44196e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
44206e7d3316Smrg                  "(main) found exe (before symlink chase) at: %s\n",
44216e7d3316Smrg		  tmp_pathspec);
44226e7d3316Smrg
44236e7d3316Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
44246e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
44256e7d3316Smrg                  "(main) found exe (after symlink chase) at: %s\n",
44266e7d3316Smrg		  actual_cwrapper_path);
44276e7d3316Smrg  XFREE (tmp_pathspec);
44286e7d3316Smrg
44296e7d3316Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
44306e7d3316Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
44316e7d3316Smrg
44326e7d3316Smrg  /* wrapper name transforms */
44336e7d3316Smrg  strendzap (actual_cwrapper_name, ".exe");
44346e7d3316Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
44356e7d3316Smrg  XFREE (actual_cwrapper_name);
44366e7d3316Smrg  actual_cwrapper_name = tmp_pathspec;
44376e7d3316Smrg  tmp_pathspec = 0;
44386e7d3316Smrg
44396e7d3316Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
44406e7d3316Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
44416e7d3316Smrg  strendzap (target_name, ".exe");
44426e7d3316Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
44436e7d3316Smrg  XFREE (target_name);
44446e7d3316Smrg  target_name = tmp_pathspec;
44456e7d3316Smrg  tmp_pathspec = 0;
44466e7d3316Smrg
44476e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
44486e7d3316Smrg		  "(main) libtool target name: %s\n",
44496e7d3316Smrg		  target_name);
44506e7d3316SmrgEOF
4451a966c04fSmrg
44526e7d3316Smrg	    cat <<EOF
44536e7d3316Smrg  newargz[0] =
44546e7d3316Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
44556e7d3316Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
44566e7d3316Smrg  strcpy (newargz[0], actual_cwrapper_path);
44576e7d3316Smrg  strcat (newargz[0], "$objdir");
44586e7d3316Smrg  strcat (newargz[0], "/");
44596e7d3316SmrgEOF
4460a966c04fSmrg
44616e7d3316Smrg	    cat <<"EOF"
44626e7d3316Smrg  /* stop here, and copy so we don't have to do this twice */
44636e7d3316Smrg  tmp_pathspec = xstrdup (newargz[0]);
4464a966c04fSmrg
44656e7d3316Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
44666e7d3316Smrg  strcat (newargz[0], actual_cwrapper_name);
4467a966c04fSmrg
44686e7d3316Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
44696e7d3316Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
44706e7d3316Smrg  XFREE (tmp_pathspec);
44716e7d3316Smrg  tmp_pathspec = NULL;
44726e7d3316SmrgEOF
4473a966c04fSmrg
44746e7d3316Smrg	    case $host_os in
44756e7d3316Smrg	      mingw*)
44766e7d3316Smrg	    cat <<"EOF"
44776e7d3316Smrg  {
44786e7d3316Smrg    char* p;
44796e7d3316Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
44806e7d3316Smrg      {
44816e7d3316Smrg	*p = '/';
44826e7d3316Smrg      }
44836e7d3316Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
44846e7d3316Smrg      {
44856e7d3316Smrg	*p = '/';
44866e7d3316Smrg      }
44876e7d3316Smrg  }
44886e7d3316SmrgEOF
44896e7d3316Smrg	    ;;
44906e7d3316Smrg	    esac
4491a966c04fSmrg
44926e7d3316Smrg	    cat <<"EOF"
44936e7d3316Smrg  XFREE (target_name);
44946e7d3316Smrg  XFREE (actual_cwrapper_path);
44956e7d3316Smrg  XFREE (actual_cwrapper_name);
4496a966c04fSmrg
44976e7d3316Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
44986e7d3316Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
449997cf2ee2Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
450097cf2ee2Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
450197cf2ee2Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
450297cf2ee2Smrg     libraries must come first. */
45036e7d3316Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
450497cf2ee2Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4505a966c04fSmrg
45066e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
45076e7d3316Smrg		  nonnull (lt_argv_zero));
45086e7d3316Smrg  for (i = 0; i < newargc; i++)
45096e7d3316Smrg    {
45106e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
45116e7d3316Smrg		      i, nonnull (newargz[i]));
45126e7d3316Smrg    }
4513a966c04fSmrg
45146e7d3316SmrgEOF
4515a966c04fSmrg
45166e7d3316Smrg	    case $host_os in
45176e7d3316Smrg	      mingw*)
45186e7d3316Smrg		cat <<"EOF"
45196e7d3316Smrg  /* execv doesn't actually work on mingw as expected on unix */
45206e7d3316Smrg  newargz = prepare_spawn (newargz);
45216e7d3316Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
45226e7d3316Smrg  if (rval == -1)
45236e7d3316Smrg    {
45246e7d3316Smrg      /* failed to start process */
45256e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__,
45266e7d3316Smrg		      "(main) failed to launch target \"%s\": %s\n",
45276e7d3316Smrg		      lt_argv_zero, nonnull (strerror (errno)));
45286e7d3316Smrg      return 127;
45296e7d3316Smrg    }
45306e7d3316Smrg  return rval;
45316e7d3316SmrgEOF
45326e7d3316Smrg		;;
45336e7d3316Smrg	      *)
45346e7d3316Smrg		cat <<"EOF"
45356e7d3316Smrg  execv (lt_argv_zero, newargz);
45366e7d3316Smrg  return rval; /* =127, but avoids unused variable warning */
45376e7d3316SmrgEOF
45386e7d3316Smrg		;;
45396e7d3316Smrg	    esac
4540a966c04fSmrg
45416e7d3316Smrg	    cat <<"EOF"
45426e7d3316Smrg}
4543a966c04fSmrg
45446e7d3316Smrgvoid *
45456e7d3316Smrgxmalloc (size_t num)
45466e7d3316Smrg{
45476e7d3316Smrg  void *p = (void *) malloc (num);
45486e7d3316Smrg  if (!p)
45496e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4550a966c04fSmrg
45516e7d3316Smrg  return p;
45526e7d3316Smrg}
4553a966c04fSmrg
45546e7d3316Smrgchar *
45556e7d3316Smrgxstrdup (const char *string)
45566e7d3316Smrg{
45576e7d3316Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
45586e7d3316Smrg			  string) : NULL;
45596e7d3316Smrg}
4560a966c04fSmrg
45616e7d3316Smrgconst char *
45626e7d3316Smrgbase_name (const char *name)
45636e7d3316Smrg{
45646e7d3316Smrg  const char *base;
4565a966c04fSmrg
45666e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
45676e7d3316Smrg  /* Skip over the disk name in MSDOS pathnames. */
45686e7d3316Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
45696e7d3316Smrg    name += 2;
45706e7d3316Smrg#endif
4571a966c04fSmrg
45726e7d3316Smrg  for (base = name; *name; name++)
45736e7d3316Smrg    if (IS_DIR_SEPARATOR (*name))
45746e7d3316Smrg      base = name + 1;
45756e7d3316Smrg  return base;
45766e7d3316Smrg}
4577a966c04fSmrg
45786e7d3316Smrgint
45796e7d3316Smrgcheck_executable (const char *path)
45806e7d3316Smrg{
45816e7d3316Smrg  struct stat st;
4582a966c04fSmrg
45836e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
45846e7d3316Smrg                  nonempty (path));
45856e7d3316Smrg  if ((!path) || (!*path))
45866e7d3316Smrg    return 0;
4587a966c04fSmrg
45886e7d3316Smrg  if ((stat (path, &st) >= 0)
45896e7d3316Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
45906e7d3316Smrg    return 1;
45916e7d3316Smrg  else
45926e7d3316Smrg    return 0;
45936e7d3316Smrg}
4594a966c04fSmrg
45956e7d3316Smrgint
45966e7d3316Smrgmake_executable (const char *path)
45976e7d3316Smrg{
45986e7d3316Smrg  int rval = 0;
45996e7d3316Smrg  struct stat st;
4600a966c04fSmrg
46016e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
46026e7d3316Smrg                  nonempty (path));
46036e7d3316Smrg  if ((!path) || (!*path))
46046e7d3316Smrg    return 0;
4605a966c04fSmrg
46066e7d3316Smrg  if (stat (path, &st) >= 0)
46076e7d3316Smrg    {
46086e7d3316Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
46096e7d3316Smrg    }
46106e7d3316Smrg  return rval;
46116e7d3316Smrg}
4612a966c04fSmrg
46136e7d3316Smrg/* Searches for the full path of the wrapper.  Returns
46146e7d3316Smrg   newly allocated full path name if found, NULL otherwise
46156e7d3316Smrg   Does not chase symlinks, even on platforms that support them.
46166e7d3316Smrg*/
46176e7d3316Smrgchar *
46186e7d3316Smrgfind_executable (const char *wrapper)
46196e7d3316Smrg{
46206e7d3316Smrg  int has_slash = 0;
46216e7d3316Smrg  const char *p;
46226e7d3316Smrg  const char *p_next;
46236e7d3316Smrg  /* static buffer for getcwd */
46246e7d3316Smrg  char tmp[LT_PATHMAX + 1];
46256e7d3316Smrg  int tmp_len;
46266e7d3316Smrg  char *concat_name;
4627a966c04fSmrg
46286e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
46296e7d3316Smrg                  nonempty (wrapper));
4630a966c04fSmrg
46316e7d3316Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
46326e7d3316Smrg    return NULL;
4633a966c04fSmrg
46346e7d3316Smrg  /* Absolute path? */
46356e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
46366e7d3316Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
46376e7d3316Smrg    {
46386e7d3316Smrg      concat_name = xstrdup (wrapper);
46396e7d3316Smrg      if (check_executable (concat_name))
46406e7d3316Smrg	return concat_name;
46416e7d3316Smrg      XFREE (concat_name);
46426e7d3316Smrg    }
46436e7d3316Smrg  else
46446e7d3316Smrg    {
46456e7d3316Smrg#endif
46466e7d3316Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
46476e7d3316Smrg	{
46486e7d3316Smrg	  concat_name = xstrdup (wrapper);
46496e7d3316Smrg	  if (check_executable (concat_name))
46506e7d3316Smrg	    return concat_name;
46516e7d3316Smrg	  XFREE (concat_name);
46526e7d3316Smrg	}
46536e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
46546e7d3316Smrg    }
46556e7d3316Smrg#endif
4656a966c04fSmrg
46576e7d3316Smrg  for (p = wrapper; *p; p++)
46586e7d3316Smrg    if (*p == '/')
46596e7d3316Smrg      {
46606e7d3316Smrg	has_slash = 1;
46616e7d3316Smrg	break;
46626e7d3316Smrg      }
46636e7d3316Smrg  if (!has_slash)
46646e7d3316Smrg    {
46656e7d3316Smrg      /* no slashes; search PATH */
46666e7d3316Smrg      const char *path = getenv ("PATH");
46676e7d3316Smrg      if (path != NULL)
46686e7d3316Smrg	{
46696e7d3316Smrg	  for (p = path; *p; p = p_next)
46706e7d3316Smrg	    {
46716e7d3316Smrg	      const char *q;
46726e7d3316Smrg	      size_t p_len;
46736e7d3316Smrg	      for (q = p; *q; q++)
46746e7d3316Smrg		if (IS_PATH_SEPARATOR (*q))
46756e7d3316Smrg		  break;
46766e7d3316Smrg	      p_len = q - p;
46776e7d3316Smrg	      p_next = (*q == '\0' ? q : q + 1);
46786e7d3316Smrg	      if (p_len == 0)
46796e7d3316Smrg		{
46806e7d3316Smrg		  /* empty path: current directory */
46816e7d3316Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
46826e7d3316Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
46836e7d3316Smrg                              nonnull (strerror (errno)));
46846e7d3316Smrg		  tmp_len = strlen (tmp);
46856e7d3316Smrg		  concat_name =
46866e7d3316Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
46876e7d3316Smrg		  memcpy (concat_name, tmp, tmp_len);
46886e7d3316Smrg		  concat_name[tmp_len] = '/';
46896e7d3316Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
46906e7d3316Smrg		}
46916e7d3316Smrg	      else
46926e7d3316Smrg		{
46936e7d3316Smrg		  concat_name =
46946e7d3316Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
46956e7d3316Smrg		  memcpy (concat_name, p, p_len);
46966e7d3316Smrg		  concat_name[p_len] = '/';
46976e7d3316Smrg		  strcpy (concat_name + p_len + 1, wrapper);
46986e7d3316Smrg		}
46996e7d3316Smrg	      if (check_executable (concat_name))
47006e7d3316Smrg		return concat_name;
47016e7d3316Smrg	      XFREE (concat_name);
47026e7d3316Smrg	    }
47036e7d3316Smrg	}
47046e7d3316Smrg      /* not found in PATH; assume curdir */
47056e7d3316Smrg    }
47066e7d3316Smrg  /* Relative path | not found in path: prepend cwd */
47076e7d3316Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
47086e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
47096e7d3316Smrg              nonnull (strerror (errno)));
47106e7d3316Smrg  tmp_len = strlen (tmp);
47116e7d3316Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
47126e7d3316Smrg  memcpy (concat_name, tmp, tmp_len);
47136e7d3316Smrg  concat_name[tmp_len] = '/';
47146e7d3316Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4715a966c04fSmrg
47166e7d3316Smrg  if (check_executable (concat_name))
47176e7d3316Smrg    return concat_name;
47186e7d3316Smrg  XFREE (concat_name);
47196e7d3316Smrg  return NULL;
47206e7d3316Smrg}
4721a966c04fSmrg
47226e7d3316Smrgchar *
47236e7d3316Smrgchase_symlinks (const char *pathspec)
47246e7d3316Smrg{
47256e7d3316Smrg#ifndef S_ISLNK
47266e7d3316Smrg  return xstrdup (pathspec);
47276e7d3316Smrg#else
47286e7d3316Smrg  char buf[LT_PATHMAX];
47296e7d3316Smrg  struct stat s;
47306e7d3316Smrg  char *tmp_pathspec = xstrdup (pathspec);
47316e7d3316Smrg  char *p;
47326e7d3316Smrg  int has_symlinks = 0;
47336e7d3316Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
47346e7d3316Smrg    {
47356e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__,
47366e7d3316Smrg		      "checking path component for symlinks: %s\n",
47376e7d3316Smrg		      tmp_pathspec);
47386e7d3316Smrg      if (lstat (tmp_pathspec, &s) == 0)
47396e7d3316Smrg	{
47406e7d3316Smrg	  if (S_ISLNK (s.st_mode) != 0)
47416e7d3316Smrg	    {
47426e7d3316Smrg	      has_symlinks = 1;
47436e7d3316Smrg	      break;
47446e7d3316Smrg	    }
4745a966c04fSmrg
47466e7d3316Smrg	  /* search backwards for last DIR_SEPARATOR */
47476e7d3316Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
47486e7d3316Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
47496e7d3316Smrg	    p--;
47506e7d3316Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
47516e7d3316Smrg	    {
47526e7d3316Smrg	      /* no more DIR_SEPARATORS left */
47536e7d3316Smrg	      break;
47546e7d3316Smrg	    }
47556e7d3316Smrg	  *p = '\0';
47566e7d3316Smrg	}
47576e7d3316Smrg      else
47586e7d3316Smrg	{
47596e7d3316Smrg	  lt_fatal (__FILE__, __LINE__,
47606e7d3316Smrg		    "error accessing file \"%s\": %s",
47616e7d3316Smrg		    tmp_pathspec, nonnull (strerror (errno)));
47626e7d3316Smrg	}
47636e7d3316Smrg    }
47646e7d3316Smrg  XFREE (tmp_pathspec);
4765a966c04fSmrg
47666e7d3316Smrg  if (!has_symlinks)
47676e7d3316Smrg    {
47686e7d3316Smrg      return xstrdup (pathspec);
47696e7d3316Smrg    }
4770a966c04fSmrg
47716e7d3316Smrg  tmp_pathspec = realpath (pathspec, buf);
47726e7d3316Smrg  if (tmp_pathspec == 0)
47736e7d3316Smrg    {
47746e7d3316Smrg      lt_fatal (__FILE__, __LINE__,
47756e7d3316Smrg		"could not follow symlinks for %s", pathspec);
47766e7d3316Smrg    }
47776e7d3316Smrg  return xstrdup (tmp_pathspec);
47786e7d3316Smrg#endif
47796e7d3316Smrg}
4780a966c04fSmrg
47816e7d3316Smrgchar *
47826e7d3316Smrgstrendzap (char *str, const char *pat)
47836e7d3316Smrg{
47846e7d3316Smrg  size_t len, patlen;
4785a966c04fSmrg
47866e7d3316Smrg  assert (str != NULL);
47876e7d3316Smrg  assert (pat != NULL);
4788a966c04fSmrg
47896e7d3316Smrg  len = strlen (str);
47906e7d3316Smrg  patlen = strlen (pat);
4791a966c04fSmrg
47926e7d3316Smrg  if (patlen <= len)
47936e7d3316Smrg    {
47946e7d3316Smrg      str += len - patlen;
47956e7d3316Smrg      if (strcmp (str, pat) == 0)
47966e7d3316Smrg	*str = '\0';
47976e7d3316Smrg    }
47986e7d3316Smrg  return str;
47996e7d3316Smrg}
4800a966c04fSmrg
48016e7d3316Smrgvoid
48026e7d3316Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
48036e7d3316Smrg{
48046e7d3316Smrg  va_list args;
48056e7d3316Smrg  if (lt_debug)
48066e7d3316Smrg    {
48076e7d3316Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
48086e7d3316Smrg      va_start (args, fmt);
48096e7d3316Smrg      (void) vfprintf (stderr, fmt, args);
48106e7d3316Smrg      va_end (args);
48116e7d3316Smrg    }
48126e7d3316Smrg}
4813a966c04fSmrg
48146e7d3316Smrgstatic void
48156e7d3316Smrglt_error_core (int exit_status, const char *file,
48166e7d3316Smrg	       int line, const char *mode,
48176e7d3316Smrg	       const char *message, va_list ap)
48186e7d3316Smrg{
48196e7d3316Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
48206e7d3316Smrg  vfprintf (stderr, message, ap);
48216e7d3316Smrg  fprintf (stderr, ".\n");
4822a966c04fSmrg
48236e7d3316Smrg  if (exit_status >= 0)
48246e7d3316Smrg    exit (exit_status);
48256e7d3316Smrg}
4826a966c04fSmrg
48276e7d3316Smrgvoid
48286e7d3316Smrglt_fatal (const char *file, int line, const char *message, ...)
48296e7d3316Smrg{
48306e7d3316Smrg  va_list ap;
48316e7d3316Smrg  va_start (ap, message);
48326e7d3316Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
48336e7d3316Smrg  va_end (ap);
48346e7d3316Smrg}
4835a966c04fSmrg
48366e7d3316Smrgstatic const char *
48376e7d3316Smrgnonnull (const char *s)
48386e7d3316Smrg{
48396e7d3316Smrg  return s ? s : "(null)";
48406e7d3316Smrg}
4841a966c04fSmrg
48426e7d3316Smrgstatic const char *
48436e7d3316Smrgnonempty (const char *s)
48446e7d3316Smrg{
48456e7d3316Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
48466e7d3316Smrg}
4847a966c04fSmrg
48486e7d3316Smrgvoid
48496e7d3316Smrglt_setenv (const char *name, const char *value)
48506e7d3316Smrg{
48516e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
48526e7d3316Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
48536e7d3316Smrg                  nonnull (name), nonnull (value));
48546e7d3316Smrg  {
48556e7d3316Smrg#ifdef HAVE_SETENV
48566e7d3316Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
48576e7d3316Smrg    char *str = xstrdup (value);
48586e7d3316Smrg    setenv (name, str, 1);
48596e7d3316Smrg#else
48606e7d3316Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
48616e7d3316Smrg    char *str = XMALLOC (char, len);
48626e7d3316Smrg    sprintf (str, "%s=%s", name, value);
48636e7d3316Smrg    if (putenv (str) != EXIT_SUCCESS)
48646e7d3316Smrg      {
48656e7d3316Smrg        XFREE (str);
48666e7d3316Smrg      }
48676e7d3316Smrg#endif
48686e7d3316Smrg  }
48696e7d3316Smrg}
4870a966c04fSmrg
48716e7d3316Smrgchar *
48726e7d3316Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
48736e7d3316Smrg{
48746e7d3316Smrg  char *new_value;
48756e7d3316Smrg  if (orig_value && *orig_value)
48766e7d3316Smrg    {
48776e7d3316Smrg      int orig_value_len = strlen (orig_value);
48786e7d3316Smrg      int add_len = strlen (add);
48796e7d3316Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
48806e7d3316Smrg      if (to_end)
48816e7d3316Smrg        {
48826e7d3316Smrg          strcpy (new_value, orig_value);
48836e7d3316Smrg          strcpy (new_value + orig_value_len, add);
48846e7d3316Smrg        }
48856e7d3316Smrg      else
48866e7d3316Smrg        {
48876e7d3316Smrg          strcpy (new_value, add);
48886e7d3316Smrg          strcpy (new_value + add_len, orig_value);
48896e7d3316Smrg        }
48906e7d3316Smrg    }
48916e7d3316Smrg  else
48926e7d3316Smrg    {
48936e7d3316Smrg      new_value = xstrdup (add);
48946e7d3316Smrg    }
48956e7d3316Smrg  return new_value;
48966e7d3316Smrg}
4897a966c04fSmrg
48986e7d3316Smrgvoid
48996e7d3316Smrglt_update_exe_path (const char *name, const char *value)
49006e7d3316Smrg{
49016e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
49026e7d3316Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
49036e7d3316Smrg                  nonnull (name), nonnull (value));
4904a966c04fSmrg
49056e7d3316Smrg  if (name && *name && value && *value)
49066e7d3316Smrg    {
49076e7d3316Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
49086e7d3316Smrg      /* some systems can't cope with a ':'-terminated path #' */
49096e7d3316Smrg      int len = strlen (new_value);
49106e7d3316Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
49116e7d3316Smrg        {
49126e7d3316Smrg          new_value[len-1] = '\0';
49136e7d3316Smrg        }
49146e7d3316Smrg      lt_setenv (name, new_value);
49156e7d3316Smrg      XFREE (new_value);
49166e7d3316Smrg    }
49176e7d3316Smrg}
4918a966c04fSmrg
49196e7d3316Smrgvoid
49206e7d3316Smrglt_update_lib_path (const char *name, const char *value)
49216e7d3316Smrg{
49226e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
49236e7d3316Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
49246e7d3316Smrg                  nonnull (name), nonnull (value));
4925a966c04fSmrg
49266e7d3316Smrg  if (name && *name && value && *value)
49276e7d3316Smrg    {
49286e7d3316Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
49296e7d3316Smrg      lt_setenv (name, new_value);
49306e7d3316Smrg      XFREE (new_value);
49316e7d3316Smrg    }
49326e7d3316Smrg}
4933a966c04fSmrg
49346e7d3316SmrgEOF
49356e7d3316Smrg	    case $host_os in
49366e7d3316Smrg	      mingw*)
49376e7d3316Smrg		cat <<"EOF"
49386e7d3316Smrg
49396e7d3316Smrg/* Prepares an argument vector before calling spawn().
49406e7d3316Smrg   Note that spawn() does not by itself call the command interpreter
49416e7d3316Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
49426e7d3316Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
49436e7d3316Smrg         GetVersionEx(&v);
49446e7d3316Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
49456e7d3316Smrg      }) ? "cmd.exe" : "command.com").
49466e7d3316Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
49476e7d3316Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
49486e7d3316Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
49496e7d3316Smrg   special way:
49506e7d3316Smrg   - Space and tab are interpreted as delimiters. They are not treated as
49516e7d3316Smrg     delimiters if they are surrounded by double quotes: "...".
49526e7d3316Smrg   - Unescaped double quotes are removed from the input. Their only effect is
49536e7d3316Smrg     that within double quotes, space and tab are treated like normal
49546e7d3316Smrg     characters.
49556e7d3316Smrg   - Backslashes not followed by double quotes are not special.
49566e7d3316Smrg   - But 2*n+1 backslashes followed by a double quote become
49576e7d3316Smrg     n backslashes followed by a double quote (n >= 0):
49586e7d3316Smrg       \" -> "
49596e7d3316Smrg       \\\" -> \"
49606e7d3316Smrg       \\\\\" -> \\"
49616e7d3316Smrg */
49626e7d3316Smrg#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"
49636e7d3316Smrg#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"
49646e7d3316Smrgchar **
49656e7d3316Smrgprepare_spawn (char **argv)
49666e7d3316Smrg{
49676e7d3316Smrg  size_t argc;
49686e7d3316Smrg  char **new_argv;
49696e7d3316Smrg  size_t i;
4970a966c04fSmrg
49716e7d3316Smrg  /* Count number of arguments.  */
49726e7d3316Smrg  for (argc = 0; argv[argc] != NULL; argc++)
49736e7d3316Smrg    ;
4974a966c04fSmrg
49756e7d3316Smrg  /* Allocate new argument vector.  */
49766e7d3316Smrg  new_argv = XMALLOC (char *, argc + 1);
4977a966c04fSmrg
49786e7d3316Smrg  /* Put quoted arguments into the new argument vector.  */
49796e7d3316Smrg  for (i = 0; i < argc; i++)
49806e7d3316Smrg    {
49816e7d3316Smrg      const char *string = argv[i];
49826e7d3316Smrg
49836e7d3316Smrg      if (string[0] == '\0')
49846e7d3316Smrg	new_argv[i] = xstrdup ("\"\"");
49856e7d3316Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
49866e7d3316Smrg	{
49876e7d3316Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
49886e7d3316Smrg	  size_t length;
49896e7d3316Smrg	  unsigned int backslashes;
49906e7d3316Smrg	  const char *s;
49916e7d3316Smrg	  char *quoted_string;
49926e7d3316Smrg	  char *p;
49936e7d3316Smrg
49946e7d3316Smrg	  length = 0;
49956e7d3316Smrg	  backslashes = 0;
49966e7d3316Smrg	  if (quote_around)
49976e7d3316Smrg	    length++;
49986e7d3316Smrg	  for (s = string; *s != '\0'; s++)
49996e7d3316Smrg	    {
50006e7d3316Smrg	      char c = *s;
50016e7d3316Smrg	      if (c == '"')
50026e7d3316Smrg		length += backslashes + 1;
50036e7d3316Smrg	      length++;
50046e7d3316Smrg	      if (c == '\\')
50056e7d3316Smrg		backslashes++;
50066e7d3316Smrg	      else
50076e7d3316Smrg		backslashes = 0;
50086e7d3316Smrg	    }
50096e7d3316Smrg	  if (quote_around)
50106e7d3316Smrg	    length += backslashes + 1;
50116e7d3316Smrg
50126e7d3316Smrg	  quoted_string = XMALLOC (char, length + 1);
50136e7d3316Smrg
50146e7d3316Smrg	  p = quoted_string;
50156e7d3316Smrg	  backslashes = 0;
50166e7d3316Smrg	  if (quote_around)
50176e7d3316Smrg	    *p++ = '"';
50186e7d3316Smrg	  for (s = string; *s != '\0'; s++)
50196e7d3316Smrg	    {
50206e7d3316Smrg	      char c = *s;
50216e7d3316Smrg	      if (c == '"')
50226e7d3316Smrg		{
50236e7d3316Smrg		  unsigned int j;
50246e7d3316Smrg		  for (j = backslashes + 1; j > 0; j--)
50256e7d3316Smrg		    *p++ = '\\';
50266e7d3316Smrg		}
50276e7d3316Smrg	      *p++ = c;
50286e7d3316Smrg	      if (c == '\\')
50296e7d3316Smrg		backslashes++;
50306e7d3316Smrg	      else
50316e7d3316Smrg		backslashes = 0;
50326e7d3316Smrg	    }
50336e7d3316Smrg	  if (quote_around)
50346e7d3316Smrg	    {
50356e7d3316Smrg	      unsigned int j;
50366e7d3316Smrg	      for (j = backslashes; j > 0; j--)
50376e7d3316Smrg		*p++ = '\\';
50386e7d3316Smrg	      *p++ = '"';
50396e7d3316Smrg	    }
50406e7d3316Smrg	  *p = '\0';
5041a966c04fSmrg
50426e7d3316Smrg	  new_argv[i] = quoted_string;
50436e7d3316Smrg	}
50446e7d3316Smrg      else
50456e7d3316Smrg	new_argv[i] = (char *) string;
50466e7d3316Smrg    }
50476e7d3316Smrg  new_argv[argc] = NULL;
5048a966c04fSmrg
50496e7d3316Smrg  return new_argv;
50506e7d3316Smrg}
50516e7d3316SmrgEOF
5052a966c04fSmrg		;;
50536e7d3316Smrg	    esac
5054a966c04fSmrg
50556e7d3316Smrg            cat <<"EOF"
50566e7d3316Smrgvoid lt_dump_script (FILE* f)
50576e7d3316Smrg{
50586e7d3316SmrgEOF
50596e7d3316Smrg	    func_emit_wrapper yes |
50606e7d3316Smrg              $SED -e 's/\([\\"]\)/\\\1/g' \
50616e7d3316Smrg	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
5062a966c04fSmrg
50636e7d3316Smrg            cat <<"EOF"
50646e7d3316Smrg}
50656e7d3316SmrgEOF
50666e7d3316Smrg}
50676e7d3316Smrg# end: func_emit_cwrapperexe_src
5068a966c04fSmrg
50696e7d3316Smrg# func_win32_import_lib_p ARG
50706e7d3316Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
50716e7d3316Smrgfunc_win32_import_lib_p ()
50726e7d3316Smrg{
50736e7d3316Smrg    $opt_debug
50746e7d3316Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
50756e7d3316Smrg    *import*) : ;;
50766e7d3316Smrg    *) false ;;
50776e7d3316Smrg    esac
50786e7d3316Smrg}
5079a966c04fSmrg
50806e7d3316Smrg# func_mode_link arg...
50816e7d3316Smrgfunc_mode_link ()
50826e7d3316Smrg{
50836e7d3316Smrg    $opt_debug
50846e7d3316Smrg    case $host in
50856e7d3316Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
50866e7d3316Smrg      # It is impossible to link a dll without this setting, and
50876e7d3316Smrg      # we shouldn't force the makefile maintainer to figure out
50886e7d3316Smrg      # which system we are compiling for in order to pass an extra
50896e7d3316Smrg      # flag for every libtool invocation.
50906e7d3316Smrg      # allow_undefined=no
5091a966c04fSmrg
50926e7d3316Smrg      # FIXME: Unfortunately, there are problems with the above when trying
50936e7d3316Smrg      # to make a dll which has undefined symbols, in which case not
50946e7d3316Smrg      # even a static library is built.  For now, we need to specify
50956e7d3316Smrg      # -no-undefined on the libtool link line when we can be certain
50966e7d3316Smrg      # that all symbols are satisfied, otherwise we get a static library.
50976e7d3316Smrg      allow_undefined=yes
50986e7d3316Smrg      ;;
50996e7d3316Smrg    *)
51006e7d3316Smrg      allow_undefined=yes
51016e7d3316Smrg      ;;
51026e7d3316Smrg    esac
51036e7d3316Smrg    libtool_args=$nonopt
51046e7d3316Smrg    base_compile="$nonopt $@"
51056e7d3316Smrg    compile_command=$nonopt
51066e7d3316Smrg    finalize_command=$nonopt
5107a966c04fSmrg
51086e7d3316Smrg    compile_rpath=
51096e7d3316Smrg    finalize_rpath=
51106e7d3316Smrg    compile_shlibpath=
51116e7d3316Smrg    finalize_shlibpath=
51126e7d3316Smrg    convenience=
51136e7d3316Smrg    old_convenience=
51146e7d3316Smrg    deplibs=
51156e7d3316Smrg    old_deplibs=
51166e7d3316Smrg    compiler_flags=
51176e7d3316Smrg    linker_flags=
51186e7d3316Smrg    dllsearchpath=
51196e7d3316Smrg    lib_search_path=`pwd`
51206e7d3316Smrg    inst_prefix_dir=
51216e7d3316Smrg    new_inherited_linker_flags=
5122a966c04fSmrg
51236e7d3316Smrg    avoid_version=no
51246e7d3316Smrg    bindir=
51256e7d3316Smrg    dlfiles=
51266e7d3316Smrg    dlprefiles=
51276e7d3316Smrg    dlself=no
51286e7d3316Smrg    export_dynamic=no
51296e7d3316Smrg    export_symbols=
51306e7d3316Smrg    export_symbols_regex=
51316e7d3316Smrg    generated=
51326e7d3316Smrg    libobjs=
51336e7d3316Smrg    ltlibs=
51346e7d3316Smrg    module=no
51356e7d3316Smrg    no_install=no
51366e7d3316Smrg    objs=
51376e7d3316Smrg    non_pic_objects=
51386e7d3316Smrg    precious_files_regex=
51396e7d3316Smrg    prefer_static_libs=no
51406e7d3316Smrg    preload=no
51416e7d3316Smrg    prev=
51426e7d3316Smrg    prevarg=
51436e7d3316Smrg    release=
51446e7d3316Smrg    rpath=
51456e7d3316Smrg    xrpath=
51466e7d3316Smrg    perm_rpath=
51476e7d3316Smrg    temp_rpath=
51486e7d3316Smrg    thread_safe=no
51496e7d3316Smrg    vinfo=
51506e7d3316Smrg    vinfo_number=no
51516e7d3316Smrg    weak_libs=
51526e7d3316Smrg    single_module="${wl}-single_module"
51536e7d3316Smrg    func_infer_tag $base_compile
5154a966c04fSmrg
51556e7d3316Smrg    # We need to know -static, to get the right output filenames.
51566e7d3316Smrg    for arg
51576e7d3316Smrg    do
51586e7d3316Smrg      case $arg in
51596e7d3316Smrg      -shared)
51606e7d3316Smrg	test "$build_libtool_libs" != yes && \
51616e7d3316Smrg	  func_fatal_configuration "can not build a shared library"
51626e7d3316Smrg	build_old_libs=no
51636e7d3316Smrg	break
51646e7d3316Smrg	;;
51656e7d3316Smrg      -all-static | -static | -static-libtool-libs)
51666e7d3316Smrg	case $arg in
51676e7d3316Smrg	-all-static)
51686e7d3316Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
51696e7d3316Smrg	    func_warning "complete static linking is impossible in this configuration"
51706e7d3316Smrg	  fi
51716e7d3316Smrg	  if test -n "$link_static_flag"; then
51726e7d3316Smrg	    dlopen_self=$dlopen_self_static
51736e7d3316Smrg	  fi
51746e7d3316Smrg	  prefer_static_libs=yes
51756e7d3316Smrg	  ;;
51766e7d3316Smrg	-static)
51776e7d3316Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
51786e7d3316Smrg	    dlopen_self=$dlopen_self_static
51796e7d3316Smrg	  fi
51806e7d3316Smrg	  prefer_static_libs=built
51816e7d3316Smrg	  ;;
51826e7d3316Smrg	-static-libtool-libs)
51836e7d3316Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
51846e7d3316Smrg	    dlopen_self=$dlopen_self_static
51856e7d3316Smrg	  fi
51866e7d3316Smrg	  prefer_static_libs=yes
51876e7d3316Smrg	  ;;
51886e7d3316Smrg	esac
51896e7d3316Smrg	build_libtool_libs=no
51906e7d3316Smrg	build_old_libs=yes
51916e7d3316Smrg	break
51926e7d3316Smrg	;;
51936e7d3316Smrg      esac
51946e7d3316Smrg    done
5195a966c04fSmrg
51966e7d3316Smrg    # See if our shared archives depend on static archives.
51976e7d3316Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5198a966c04fSmrg
51996e7d3316Smrg    # Go through the arguments, transforming them on the way.
52006e7d3316Smrg    while test "$#" -gt 0; do
52016e7d3316Smrg      arg="$1"
52026e7d3316Smrg      shift
52036e7d3316Smrg      func_quote_for_eval "$arg"
52046e7d3316Smrg      qarg=$func_quote_for_eval_unquoted_result
52056e7d3316Smrg      func_append libtool_args " $func_quote_for_eval_result"
5206a966c04fSmrg
52076e7d3316Smrg      # If the previous option needs an argument, assign it.
52086e7d3316Smrg      if test -n "$prev"; then
52096e7d3316Smrg	case $prev in
52106e7d3316Smrg	output)
52116e7d3316Smrg	  func_append compile_command " @OUTPUT@"
52126e7d3316Smrg	  func_append finalize_command " @OUTPUT@"
52136e7d3316Smrg	  ;;
52146e7d3316Smrg	esac
5215a966c04fSmrg
52166e7d3316Smrg	case $prev in
52176e7d3316Smrg	bindir)
52186e7d3316Smrg	  bindir="$arg"
52196e7d3316Smrg	  prev=
52206e7d3316Smrg	  continue
52216e7d3316Smrg	  ;;
52226e7d3316Smrg	dlfiles|dlprefiles)
52236e7d3316Smrg	  if test "$preload" = no; then
52246e7d3316Smrg	    # Add the symbol object into the linking commands.
52256e7d3316Smrg	    func_append compile_command " @SYMFILE@"
52266e7d3316Smrg	    func_append finalize_command " @SYMFILE@"
52276e7d3316Smrg	    preload=yes
5228a966c04fSmrg	  fi
52296e7d3316Smrg	  case $arg in
52306e7d3316Smrg	  *.la | *.lo) ;;  # We handle these cases below.
52316e7d3316Smrg	  force)
52326e7d3316Smrg	    if test "$dlself" = no; then
52336e7d3316Smrg	      dlself=needless
52346e7d3316Smrg	      export_dynamic=yes
5235a966c04fSmrg	    fi
52366e7d3316Smrg	    prev=
52376e7d3316Smrg	    continue
52386e7d3316Smrg	    ;;
52396e7d3316Smrg	  self)
52406e7d3316Smrg	    if test "$prev" = dlprefiles; then
52416e7d3316Smrg	      dlself=yes
52426e7d3316Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
52436e7d3316Smrg	      dlself=yes
5244a966c04fSmrg	    else
52456e7d3316Smrg	      dlself=needless
52466e7d3316Smrg	      export_dynamic=yes
5247a966c04fSmrg	    fi
52486e7d3316Smrg	    prev=
52496e7d3316Smrg	    continue
52506e7d3316Smrg	    ;;
52516e7d3316Smrg	  *)
52526e7d3316Smrg	    if test "$prev" = dlfiles; then
525397cf2ee2Smrg	      func_append dlfiles " $arg"
5254a966c04fSmrg	    else
525597cf2ee2Smrg	      func_append dlprefiles " $arg"
5256a966c04fSmrg	    fi
52576e7d3316Smrg	    prev=
52586e7d3316Smrg	    continue
52596e7d3316Smrg	    ;;
52606e7d3316Smrg	  esac
52616e7d3316Smrg	  ;;
52626e7d3316Smrg	expsyms)
52636e7d3316Smrg	  export_symbols="$arg"
52646e7d3316Smrg	  test -f "$arg" \
52656e7d3316Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
52666e7d3316Smrg	  prev=
52676e7d3316Smrg	  continue
52686e7d3316Smrg	  ;;
52696e7d3316Smrg	expsyms_regex)
52706e7d3316Smrg	  export_symbols_regex="$arg"
52716e7d3316Smrg	  prev=
52726e7d3316Smrg	  continue
52736e7d3316Smrg	  ;;
52746e7d3316Smrg	framework)
5275a966c04fSmrg	  case $host in
52766e7d3316Smrg	    *-*-darwin*)
52776e7d3316Smrg	      case "$deplibs " in
52786e7d3316Smrg		*" $qarg.ltframework "*) ;;
527997cf2ee2Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
52806e7d3316Smrg		   ;;
52816e7d3316Smrg	      esac
52826e7d3316Smrg	      ;;
5283a966c04fSmrg	  esac
52846e7d3316Smrg	  prev=
52856e7d3316Smrg	  continue
5286a966c04fSmrg	  ;;
52876e7d3316Smrg	inst_prefix)
52886e7d3316Smrg	  inst_prefix_dir="$arg"
52896e7d3316Smrg	  prev=
52906e7d3316Smrg	  continue
5291a966c04fSmrg	  ;;
52926e7d3316Smrg	objectlist)
52936e7d3316Smrg	  if test -f "$arg"; then
52946e7d3316Smrg	    save_arg=$arg
52956e7d3316Smrg	    moreargs=
52966e7d3316Smrg	    for fil in `cat "$save_arg"`
52976e7d3316Smrg	    do
529897cf2ee2Smrg#	      func_append moreargs " $fil"
52996e7d3316Smrg	      arg=$fil
53006e7d3316Smrg	      # A libtool-controlled object.
5301a966c04fSmrg
53026e7d3316Smrg	      # Check to see that this really is a libtool object.
53036e7d3316Smrg	      if func_lalib_unsafe_p "$arg"; then
53046e7d3316Smrg		pic_object=
53056e7d3316Smrg		non_pic_object=
5306a966c04fSmrg
53076e7d3316Smrg		# Read the .lo file
53086e7d3316Smrg		func_source "$arg"
5309a966c04fSmrg
53106e7d3316Smrg		if test -z "$pic_object" ||
53116e7d3316Smrg		   test -z "$non_pic_object" ||
53126e7d3316Smrg		   test "$pic_object" = none &&
53136e7d3316Smrg		   test "$non_pic_object" = none; then
53146e7d3316Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
53156e7d3316Smrg		fi
5316a966c04fSmrg
53176e7d3316Smrg		# Extract subdirectory from the argument.
53186e7d3316Smrg		func_dirname "$arg" "/" ""
53196e7d3316Smrg		xdir="$func_dirname_result"
5320a966c04fSmrg
53216e7d3316Smrg		if test "$pic_object" != none; then
53226e7d3316Smrg		  # Prepend the subdirectory the object is found in.
53236e7d3316Smrg		  pic_object="$xdir$pic_object"
5324a966c04fSmrg
53256e7d3316Smrg		  if test "$prev" = dlfiles; then
53266e7d3316Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
532797cf2ee2Smrg		      func_append dlfiles " $pic_object"
53286e7d3316Smrg		      prev=
53296e7d3316Smrg		      continue
53306e7d3316Smrg		    else
53316e7d3316Smrg		      # If libtool objects are unsupported, then we need to preload.
53326e7d3316Smrg		      prev=dlprefiles
53336e7d3316Smrg		    fi
53346e7d3316Smrg		  fi
5335a966c04fSmrg
53366e7d3316Smrg		  # CHECK ME:  I think I busted this.  -Ossama
53376e7d3316Smrg		  if test "$prev" = dlprefiles; then
53386e7d3316Smrg		    # Preload the old-style object.
533997cf2ee2Smrg		    func_append dlprefiles " $pic_object"
53406e7d3316Smrg		    prev=
53416e7d3316Smrg		  fi
5342a966c04fSmrg
53436e7d3316Smrg		  # A PIC object.
53446e7d3316Smrg		  func_append libobjs " $pic_object"
53456e7d3316Smrg		  arg="$pic_object"
53466e7d3316Smrg		fi
5347a966c04fSmrg
53486e7d3316Smrg		# Non-PIC object.
53496e7d3316Smrg		if test "$non_pic_object" != none; then
53506e7d3316Smrg		  # Prepend the subdirectory the object is found in.
53516e7d3316Smrg		  non_pic_object="$xdir$non_pic_object"
5352a966c04fSmrg
53536e7d3316Smrg		  # A standard non-PIC object
53546e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
53556e7d3316Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
53566e7d3316Smrg		    arg="$non_pic_object"
53576e7d3316Smrg		  fi
53586e7d3316Smrg		else
53596e7d3316Smrg		  # If the PIC object exists, use it instead.
53606e7d3316Smrg		  # $xdir was prepended to $pic_object above.
53616e7d3316Smrg		  non_pic_object="$pic_object"
53626e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
53636e7d3316Smrg		fi
53646e7d3316Smrg	      else
53656e7d3316Smrg		# Only an error if not doing a dry-run.
53666e7d3316Smrg		if $opt_dry_run; then
53676e7d3316Smrg		  # Extract subdirectory from the argument.
53686e7d3316Smrg		  func_dirname "$arg" "/" ""
53696e7d3316Smrg		  xdir="$func_dirname_result"
53706e7d3316Smrg
53716e7d3316Smrg		  func_lo2o "$arg"
53726e7d3316Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
53736e7d3316Smrg		  non_pic_object=$xdir$func_lo2o_result
53746e7d3316Smrg		  func_append libobjs " $pic_object"
53756e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
53766e7d3316Smrg	        else
53776e7d3316Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
53786e7d3316Smrg		fi
53796e7d3316Smrg	      fi
53806e7d3316Smrg	    done
5381a966c04fSmrg	  else
53826e7d3316Smrg	    func_fatal_error "link input file \`$arg' does not exist"
5383a966c04fSmrg	  fi
53846e7d3316Smrg	  arg=$save_arg
53856e7d3316Smrg	  prev=
53866e7d3316Smrg	  continue
53876e7d3316Smrg	  ;;
53886e7d3316Smrg	precious_regex)
53896e7d3316Smrg	  precious_files_regex="$arg"
53906e7d3316Smrg	  prev=
53916e7d3316Smrg	  continue
53926e7d3316Smrg	  ;;
53936e7d3316Smrg	release)
53946e7d3316Smrg	  release="-$arg"
53956e7d3316Smrg	  prev=
53966e7d3316Smrg	  continue
53976e7d3316Smrg	  ;;
53986e7d3316Smrg	rpath | xrpath)
53996e7d3316Smrg	  # We need an absolute path.
54006e7d3316Smrg	  case $arg in
54016e7d3316Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
54026e7d3316Smrg	  *)
54036e7d3316Smrg	    func_fatal_error "only absolute run-paths are allowed"
54046e7d3316Smrg	    ;;
54056e7d3316Smrg	  esac
54066e7d3316Smrg	  if test "$prev" = rpath; then
54076e7d3316Smrg	    case "$rpath " in
54086e7d3316Smrg	    *" $arg "*) ;;
540997cf2ee2Smrg	    *) func_append rpath " $arg" ;;
54106e7d3316Smrg	    esac
5411a966c04fSmrg	  else
54126e7d3316Smrg	    case "$xrpath " in
54136e7d3316Smrg	    *" $arg "*) ;;
541497cf2ee2Smrg	    *) func_append xrpath " $arg" ;;
54156e7d3316Smrg	    esac
5416a966c04fSmrg	  fi
54176e7d3316Smrg	  prev=
54186e7d3316Smrg	  continue
54196e7d3316Smrg	  ;;
54206e7d3316Smrg	shrext)
54216e7d3316Smrg	  shrext_cmds="$arg"
54226e7d3316Smrg	  prev=
54236e7d3316Smrg	  continue
54246e7d3316Smrg	  ;;
54256e7d3316Smrg	weak)
542697cf2ee2Smrg	  func_append weak_libs " $arg"
54276e7d3316Smrg	  prev=
54286e7d3316Smrg	  continue
54296e7d3316Smrg	  ;;
54306e7d3316Smrg	xcclinker)
543197cf2ee2Smrg	  func_append linker_flags " $qarg"
543297cf2ee2Smrg	  func_append compiler_flags " $qarg"
54336e7d3316Smrg	  prev=
54346e7d3316Smrg	  func_append compile_command " $qarg"
54356e7d3316Smrg	  func_append finalize_command " $qarg"
54366e7d3316Smrg	  continue
54376e7d3316Smrg	  ;;
54386e7d3316Smrg	xcompiler)
543997cf2ee2Smrg	  func_append compiler_flags " $qarg"
54406e7d3316Smrg	  prev=
54416e7d3316Smrg	  func_append compile_command " $qarg"
54426e7d3316Smrg	  func_append finalize_command " $qarg"
54436e7d3316Smrg	  continue
54446e7d3316Smrg	  ;;
54456e7d3316Smrg	xlinker)
544697cf2ee2Smrg	  func_append linker_flags " $qarg"
544797cf2ee2Smrg	  func_append compiler_flags " $wl$qarg"
54486e7d3316Smrg	  prev=
54496e7d3316Smrg	  func_append compile_command " $wl$qarg"
54506e7d3316Smrg	  func_append finalize_command " $wl$qarg"
54516e7d3316Smrg	  continue
54526e7d3316Smrg	  ;;
54536e7d3316Smrg	*)
54546e7d3316Smrg	  eval "$prev=\"\$arg\""
54556e7d3316Smrg	  prev=
54566e7d3316Smrg	  continue
54576e7d3316Smrg	  ;;
5458a966c04fSmrg	esac
54596e7d3316Smrg      fi # test -n "$prev"
5460a966c04fSmrg
54616e7d3316Smrg      prevarg="$arg"
5462a966c04fSmrg
54636e7d3316Smrg      case $arg in
54646e7d3316Smrg      -all-static)
54656e7d3316Smrg	if test -n "$link_static_flag"; then
54666e7d3316Smrg	  # See comment for -static flag below, for more details.
54676e7d3316Smrg	  func_append compile_command " $link_static_flag"
54686e7d3316Smrg	  func_append finalize_command " $link_static_flag"
54696e7d3316Smrg	fi
54706e7d3316Smrg	continue
54716e7d3316Smrg	;;
5472a966c04fSmrg
54736e7d3316Smrg      -allow-undefined)
54746e7d3316Smrg	# FIXME: remove this flag sometime in the future.
54756e7d3316Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
54766e7d3316Smrg	;;
5477a966c04fSmrg
54786e7d3316Smrg      -avoid-version)
54796e7d3316Smrg	avoid_version=yes
54806e7d3316Smrg	continue
54816e7d3316Smrg	;;
5482a966c04fSmrg
54836e7d3316Smrg      -bindir)
54846e7d3316Smrg	prev=bindir
54856e7d3316Smrg	continue
54866e7d3316Smrg	;;
5487a966c04fSmrg
54886e7d3316Smrg      -dlopen)
54896e7d3316Smrg	prev=dlfiles
54906e7d3316Smrg	continue
54916e7d3316Smrg	;;
5492a966c04fSmrg
54936e7d3316Smrg      -dlpreopen)
54946e7d3316Smrg	prev=dlprefiles
54956e7d3316Smrg	continue
54966e7d3316Smrg	;;
5497a966c04fSmrg
54986e7d3316Smrg      -export-dynamic)
54996e7d3316Smrg	export_dynamic=yes
55006e7d3316Smrg	continue
55016e7d3316Smrg	;;
5502a966c04fSmrg
55036e7d3316Smrg      -export-symbols | -export-symbols-regex)
55046e7d3316Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
55056e7d3316Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
55066e7d3316Smrg	fi
55076e7d3316Smrg	if test "X$arg" = "X-export-symbols"; then
55086e7d3316Smrg	  prev=expsyms
55096e7d3316Smrg	else
55106e7d3316Smrg	  prev=expsyms_regex
55116e7d3316Smrg	fi
55126e7d3316Smrg	continue
55136e7d3316Smrg	;;
5514a966c04fSmrg
55156e7d3316Smrg      -framework)
55166e7d3316Smrg	prev=framework
55176e7d3316Smrg	continue
55186e7d3316Smrg	;;
5519a966c04fSmrg
55206e7d3316Smrg      -inst-prefix-dir)
55216e7d3316Smrg	prev=inst_prefix
55226e7d3316Smrg	continue
55236e7d3316Smrg	;;
5524a966c04fSmrg
55256e7d3316Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
55266e7d3316Smrg      # so, if we see these flags be careful not to treat them like -L
55276e7d3316Smrg      -L[A-Z][A-Z]*:*)
55286e7d3316Smrg	case $with_gcc/$host in
55296e7d3316Smrg	no/*-*-irix* | /*-*-irix*)
55306e7d3316Smrg	  func_append compile_command " $arg"
55316e7d3316Smrg	  func_append finalize_command " $arg"
55326e7d3316Smrg	  ;;
55336e7d3316Smrg	esac
55346e7d3316Smrg	continue
55356e7d3316Smrg	;;
5536a966c04fSmrg
55376e7d3316Smrg      -L*)
553897cf2ee2Smrg	func_stripname "-L" '' "$arg"
553997cf2ee2Smrg	if test -z "$func_stripname_result"; then
55406e7d3316Smrg	  if test "$#" -gt 0; then
55416e7d3316Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
55426e7d3316Smrg	  else
55436e7d3316Smrg	    func_fatal_error "need path for \`-L' option"
55446e7d3316Smrg	  fi
55456e7d3316Smrg	fi
554697cf2ee2Smrg	func_resolve_sysroot "$func_stripname_result"
554797cf2ee2Smrg	dir=$func_resolve_sysroot_result
55486e7d3316Smrg	# We need an absolute path.
55496e7d3316Smrg	case $dir in
55506e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
55516e7d3316Smrg	*)
55526e7d3316Smrg	  absdir=`cd "$dir" && pwd`
55536e7d3316Smrg	  test -z "$absdir" && \
55546e7d3316Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
55556e7d3316Smrg	  dir="$absdir"
55566e7d3316Smrg	  ;;
55576e7d3316Smrg	esac
55586e7d3316Smrg	case "$deplibs " in
555997cf2ee2Smrg	*" -L$dir "* | *" $arg "*)
556097cf2ee2Smrg	  # Will only happen for absolute or sysroot arguments
556197cf2ee2Smrg	  ;;
55626e7d3316Smrg	*)
556397cf2ee2Smrg	  # Preserve sysroot, but never include relative directories
556497cf2ee2Smrg	  case $dir in
556597cf2ee2Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
556697cf2ee2Smrg	    *) func_append deplibs " -L$dir" ;;
556797cf2ee2Smrg	  esac
556897cf2ee2Smrg	  func_append lib_search_path " $dir"
55696e7d3316Smrg	  ;;
55706e7d3316Smrg	esac
55716e7d3316Smrg	case $host in
55726e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
55736e7d3316Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
55746e7d3316Smrg	  case :$dllsearchpath: in
55756e7d3316Smrg	  *":$dir:"*) ;;
55766e7d3316Smrg	  ::) dllsearchpath=$dir;;
557797cf2ee2Smrg	  *) func_append dllsearchpath ":$dir";;
55786e7d3316Smrg	  esac
55796e7d3316Smrg	  case :$dllsearchpath: in
55806e7d3316Smrg	  *":$testbindir:"*) ;;
55816e7d3316Smrg	  ::) dllsearchpath=$testbindir;;
558297cf2ee2Smrg	  *) func_append dllsearchpath ":$testbindir";;
55836e7d3316Smrg	  esac
55846e7d3316Smrg	  ;;
55856e7d3316Smrg	esac
55866e7d3316Smrg	continue
55876e7d3316Smrg	;;
5588a966c04fSmrg
55896e7d3316Smrg      -l*)
55906e7d3316Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
55916e7d3316Smrg	  case $host in
55926e7d3316Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
55936e7d3316Smrg	    # These systems don't actually have a C or math library (as such)
55946e7d3316Smrg	    continue
55956e7d3316Smrg	    ;;
55966e7d3316Smrg	  *-*-os2*)
55976e7d3316Smrg	    # These systems don't actually have a C library (as such)
55986e7d3316Smrg	    test "X$arg" = "X-lc" && continue
55996e7d3316Smrg	    ;;
56006e7d3316Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
56016e7d3316Smrg	    # Do not include libc due to us having libc/libc_r.
56026e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56036e7d3316Smrg	    ;;
56046e7d3316Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
56056e7d3316Smrg	    # Rhapsody C and math libraries are in the System framework
560697cf2ee2Smrg	    func_append deplibs " System.ltframework"
56076e7d3316Smrg	    continue
56086e7d3316Smrg	    ;;
56096e7d3316Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
56106e7d3316Smrg	    # Causes problems with __ctype
56116e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56126e7d3316Smrg	    ;;
56136e7d3316Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
56146e7d3316Smrg	    # Compiler inserts libc in the correct place for threads to work
56156e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56166e7d3316Smrg	    ;;
56176e7d3316Smrg	  esac
56186e7d3316Smrg	elif test "X$arg" = "X-lc_r"; then
56196e7d3316Smrg	 case $host in
56206e7d3316Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
56216e7d3316Smrg	   # Do not include libc_r directly, use -pthread flag.
56226e7d3316Smrg	   continue
56236e7d3316Smrg	   ;;
56246e7d3316Smrg	 esac
56256e7d3316Smrg	fi
562697cf2ee2Smrg	func_append deplibs " $arg"
56276e7d3316Smrg	continue
56286e7d3316Smrg	;;
5629a966c04fSmrg
56306e7d3316Smrg      -module)
56316e7d3316Smrg	module=yes
56326e7d3316Smrg	continue
56336e7d3316Smrg	;;
5634a966c04fSmrg
56356e7d3316Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
56366e7d3316Smrg      # classes, name mangling, and exception handling.
56376e7d3316Smrg      # Darwin uses the -arch flag to determine output architecture.
563897cf2ee2Smrg      -model|-arch|-isysroot|--sysroot)
563997cf2ee2Smrg	func_append compiler_flags " $arg"
56406e7d3316Smrg	func_append compile_command " $arg"
56416e7d3316Smrg	func_append finalize_command " $arg"
56426e7d3316Smrg	prev=xcompiler
56436e7d3316Smrg	continue
56446e7d3316Smrg	;;
5645a966c04fSmrg
56466e7d3316Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
564797cf2ee2Smrg	func_append compiler_flags " $arg"
56486e7d3316Smrg	func_append compile_command " $arg"
56496e7d3316Smrg	func_append finalize_command " $arg"
56506e7d3316Smrg	case "$new_inherited_linker_flags " in
56516e7d3316Smrg	    *" $arg "*) ;;
565297cf2ee2Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
56536e7d3316Smrg	esac
56546e7d3316Smrg	continue
56556e7d3316Smrg	;;
5656a966c04fSmrg
56576e7d3316Smrg      -multi_module)
56586e7d3316Smrg	single_module="${wl}-multi_module"
56596e7d3316Smrg	continue
56606e7d3316Smrg	;;
5661a966c04fSmrg
56626e7d3316Smrg      -no-fast-install)
56636e7d3316Smrg	fast_install=no
56646e7d3316Smrg	continue
56656e7d3316Smrg	;;
5666a966c04fSmrg
56676e7d3316Smrg      -no-install)
56686e7d3316Smrg	case $host in
56696e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
56706e7d3316Smrg	  # The PATH hackery in wrapper scripts is required on Windows
56716e7d3316Smrg	  # and Darwin in order for the loader to find any dlls it needs.
56726e7d3316Smrg	  func_warning "\`-no-install' is ignored for $host"
56736e7d3316Smrg	  func_warning "assuming \`-no-fast-install' instead"
56746e7d3316Smrg	  fast_install=no
56756e7d3316Smrg	  ;;
56766e7d3316Smrg	*) no_install=yes ;;
56776e7d3316Smrg	esac
56786e7d3316Smrg	continue
56796e7d3316Smrg	;;
5680a966c04fSmrg
56816e7d3316Smrg      -no-undefined)
56826e7d3316Smrg	allow_undefined=no
56836e7d3316Smrg	continue
56846e7d3316Smrg	;;
5685a966c04fSmrg
56866e7d3316Smrg      -objectlist)
56876e7d3316Smrg	prev=objectlist
56886e7d3316Smrg	continue
56896e7d3316Smrg	;;
5690a966c04fSmrg
56916e7d3316Smrg      -o) prev=output ;;
5692a966c04fSmrg
56936e7d3316Smrg      -precious-files-regex)
56946e7d3316Smrg	prev=precious_regex
56956e7d3316Smrg	continue
56966e7d3316Smrg	;;
5697a966c04fSmrg
56986e7d3316Smrg      -release)
56996e7d3316Smrg	prev=release
57006e7d3316Smrg	continue
57016e7d3316Smrg	;;
5702a966c04fSmrg
57036e7d3316Smrg      -rpath)
57046e7d3316Smrg	prev=rpath
57056e7d3316Smrg	continue
57066e7d3316Smrg	;;
5707a966c04fSmrg
57086e7d3316Smrg      -R)
57096e7d3316Smrg	prev=xrpath
57106e7d3316Smrg	continue
57116e7d3316Smrg	;;
5712a966c04fSmrg
57136e7d3316Smrg      -R*)
57146e7d3316Smrg	func_stripname '-R' '' "$arg"
57156e7d3316Smrg	dir=$func_stripname_result
57166e7d3316Smrg	# We need an absolute path.
57176e7d3316Smrg	case $dir in
57186e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
571997cf2ee2Smrg	=*)
572097cf2ee2Smrg	  func_stripname '=' '' "$dir"
572197cf2ee2Smrg	  dir=$lt_sysroot$func_stripname_result
572297cf2ee2Smrg	  ;;
57236e7d3316Smrg	*)
57246e7d3316Smrg	  func_fatal_error "only absolute run-paths are allowed"
57256e7d3316Smrg	  ;;
57266e7d3316Smrg	esac
57276e7d3316Smrg	case "$xrpath " in
57286e7d3316Smrg	*" $dir "*) ;;
572997cf2ee2Smrg	*) func_append xrpath " $dir" ;;
57306e7d3316Smrg	esac
57316e7d3316Smrg	continue
57326e7d3316Smrg	;;
5733a966c04fSmrg
57346e7d3316Smrg      -shared)
57356e7d3316Smrg	# The effects of -shared are defined in a previous loop.
57366e7d3316Smrg	continue
57376e7d3316Smrg	;;
5738a966c04fSmrg
57396e7d3316Smrg      -shrext)
57406e7d3316Smrg	prev=shrext
57416e7d3316Smrg	continue
57426e7d3316Smrg	;;
5743a966c04fSmrg
57446e7d3316Smrg      -static | -static-libtool-libs)
57456e7d3316Smrg	# The effects of -static are defined in a previous loop.
57466e7d3316Smrg	# We used to do the same as -all-static on platforms that
57476e7d3316Smrg	# didn't have a PIC flag, but the assumption that the effects
57486e7d3316Smrg	# would be equivalent was wrong.  It would break on at least
57496e7d3316Smrg	# Digital Unix and AIX.
57506e7d3316Smrg	continue
57516e7d3316Smrg	;;
5752a966c04fSmrg
57536e7d3316Smrg      -thread-safe)
57546e7d3316Smrg	thread_safe=yes
57556e7d3316Smrg	continue
57566e7d3316Smrg	;;
5757a966c04fSmrg
57586e7d3316Smrg      -version-info)
57596e7d3316Smrg	prev=vinfo
57606e7d3316Smrg	continue
57616e7d3316Smrg	;;
5762a966c04fSmrg
57636e7d3316Smrg      -version-number)
57646e7d3316Smrg	prev=vinfo
57656e7d3316Smrg	vinfo_number=yes
57666e7d3316Smrg	continue
57676e7d3316Smrg	;;
5768a966c04fSmrg
57696e7d3316Smrg      -weak)
57706e7d3316Smrg        prev=weak
57716e7d3316Smrg	continue
57726e7d3316Smrg	;;
5773a966c04fSmrg
57746e7d3316Smrg      -Wc,*)
57756e7d3316Smrg	func_stripname '-Wc,' '' "$arg"
57766e7d3316Smrg	args=$func_stripname_result
57776e7d3316Smrg	arg=
57786e7d3316Smrg	save_ifs="$IFS"; IFS=','
57796e7d3316Smrg	for flag in $args; do
57806e7d3316Smrg	  IFS="$save_ifs"
57816e7d3316Smrg          func_quote_for_eval "$flag"
578297cf2ee2Smrg	  func_append arg " $func_quote_for_eval_result"
578397cf2ee2Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
57846e7d3316Smrg	done
57856e7d3316Smrg	IFS="$save_ifs"
57866e7d3316Smrg	func_stripname ' ' '' "$arg"
57876e7d3316Smrg	arg=$func_stripname_result
57886e7d3316Smrg	;;
5789a966c04fSmrg
57906e7d3316Smrg      -Wl,*)
57916e7d3316Smrg	func_stripname '-Wl,' '' "$arg"
57926e7d3316Smrg	args=$func_stripname_result
57936e7d3316Smrg	arg=
57946e7d3316Smrg	save_ifs="$IFS"; IFS=','
57956e7d3316Smrg	for flag in $args; do
57966e7d3316Smrg	  IFS="$save_ifs"
57976e7d3316Smrg          func_quote_for_eval "$flag"
579897cf2ee2Smrg	  func_append arg " $wl$func_quote_for_eval_result"
579997cf2ee2Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
580097cf2ee2Smrg	  func_append linker_flags " $func_quote_for_eval_result"
58016e7d3316Smrg	done
58026e7d3316Smrg	IFS="$save_ifs"
58036e7d3316Smrg	func_stripname ' ' '' "$arg"
58046e7d3316Smrg	arg=$func_stripname_result
58056e7d3316Smrg	;;
5806a966c04fSmrg
58076e7d3316Smrg      -Xcompiler)
58086e7d3316Smrg	prev=xcompiler
58096e7d3316Smrg	continue
58106e7d3316Smrg	;;
5811a966c04fSmrg
58126e7d3316Smrg      -Xlinker)
58136e7d3316Smrg	prev=xlinker
58146e7d3316Smrg	continue
58156e7d3316Smrg	;;
5816a966c04fSmrg
58176e7d3316Smrg      -XCClinker)
58186e7d3316Smrg	prev=xcclinker
58196e7d3316Smrg	continue
58206e7d3316Smrg	;;
5821a966c04fSmrg
58226e7d3316Smrg      # -msg_* for osf cc
58236e7d3316Smrg      -msg_*)
58246e7d3316Smrg	func_quote_for_eval "$arg"
58256e7d3316Smrg	arg="$func_quote_for_eval_result"
58266e7d3316Smrg	;;
5827a966c04fSmrg
58286e7d3316Smrg      # Flags to be passed through unchanged, with rationale:
58296e7d3316Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
58306e7d3316Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
58316e7d3316Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
58326e7d3316Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
58336e7d3316Smrg      # -q*                  compiler args for the IBM compiler
58346e7d3316Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
58356e7d3316Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
58366e7d3316Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
58376e7d3316Smrg      # @file                GCC response files
58386e7d3316Smrg      # -tp=*                Portland pgcc target processor selection
583997cf2ee2Smrg      # --sysroot=*          for sysroot support
584097cf2ee2Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
58416e7d3316Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
584297cf2ee2Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
584397cf2ee2Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
58446e7d3316Smrg        func_quote_for_eval "$arg"
58456e7d3316Smrg	arg="$func_quote_for_eval_result"
58466e7d3316Smrg        func_append compile_command " $arg"
58476e7d3316Smrg        func_append finalize_command " $arg"
584897cf2ee2Smrg        func_append compiler_flags " $arg"
58496e7d3316Smrg        continue
58506e7d3316Smrg        ;;
5851a966c04fSmrg
58526e7d3316Smrg      # Some other compiler flag.
58536e7d3316Smrg      -* | +*)
58546e7d3316Smrg        func_quote_for_eval "$arg"
58556e7d3316Smrg	arg="$func_quote_for_eval_result"
58566e7d3316Smrg	;;
5857a966c04fSmrg
58586e7d3316Smrg      *.$objext)
58596e7d3316Smrg	# A standard object.
586097cf2ee2Smrg	func_append objs " $arg"
58616e7d3316Smrg	;;
5862a966c04fSmrg
58636e7d3316Smrg      *.lo)
58646e7d3316Smrg	# A libtool-controlled object.
5865a966c04fSmrg
58666e7d3316Smrg	# Check to see that this really is a libtool object.
58676e7d3316Smrg	if func_lalib_unsafe_p "$arg"; then
58686e7d3316Smrg	  pic_object=
58696e7d3316Smrg	  non_pic_object=
5870a966c04fSmrg
58716e7d3316Smrg	  # Read the .lo file
58726e7d3316Smrg	  func_source "$arg"
5873a966c04fSmrg
58746e7d3316Smrg	  if test -z "$pic_object" ||
58756e7d3316Smrg	     test -z "$non_pic_object" ||
58766e7d3316Smrg	     test "$pic_object" = none &&
58776e7d3316Smrg	     test "$non_pic_object" = none; then
58786e7d3316Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
58796e7d3316Smrg	  fi
58802e2dd055Smrg
58816e7d3316Smrg	  # Extract subdirectory from the argument.
58826e7d3316Smrg	  func_dirname "$arg" "/" ""
58836e7d3316Smrg	  xdir="$func_dirname_result"
5884a966c04fSmrg
58856e7d3316Smrg	  if test "$pic_object" != none; then
58866e7d3316Smrg	    # Prepend the subdirectory the object is found in.
58876e7d3316Smrg	    pic_object="$xdir$pic_object"
5888a966c04fSmrg
58896e7d3316Smrg	    if test "$prev" = dlfiles; then
58906e7d3316Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
589197cf2ee2Smrg		func_append dlfiles " $pic_object"
58926e7d3316Smrg		prev=
58936e7d3316Smrg		continue
58946e7d3316Smrg	      else
58956e7d3316Smrg		# If libtool objects are unsupported, then we need to preload.
58966e7d3316Smrg		prev=dlprefiles
58976e7d3316Smrg	      fi
58986e7d3316Smrg	    fi
58996e7d3316Smrg
59006e7d3316Smrg	    # CHECK ME:  I think I busted this.  -Ossama
59016e7d3316Smrg	    if test "$prev" = dlprefiles; then
59026e7d3316Smrg	      # Preload the old-style object.
590397cf2ee2Smrg	      func_append dlprefiles " $pic_object"
59046e7d3316Smrg	      prev=
59056e7d3316Smrg	    fi
59066e7d3316Smrg
59076e7d3316Smrg	    # A PIC object.
59086e7d3316Smrg	    func_append libobjs " $pic_object"
59096e7d3316Smrg	    arg="$pic_object"
59106e7d3316Smrg	  fi
59116e7d3316Smrg
59126e7d3316Smrg	  # Non-PIC object.
59136e7d3316Smrg	  if test "$non_pic_object" != none; then
59146e7d3316Smrg	    # Prepend the subdirectory the object is found in.
59156e7d3316Smrg	    non_pic_object="$xdir$non_pic_object"
59166e7d3316Smrg
59176e7d3316Smrg	    # A standard non-PIC object
59186e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
59196e7d3316Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
59206e7d3316Smrg	      arg="$non_pic_object"
59216e7d3316Smrg	    fi
59226e7d3316Smrg	  else
59236e7d3316Smrg	    # If the PIC object exists, use it instead.
59246e7d3316Smrg	    # $xdir was prepended to $pic_object above.
59256e7d3316Smrg	    non_pic_object="$pic_object"
59266e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
59276e7d3316Smrg	  fi
59286e7d3316Smrg	else
59296e7d3316Smrg	  # Only an error if not doing a dry-run.
59306e7d3316Smrg	  if $opt_dry_run; then
59316e7d3316Smrg	    # Extract subdirectory from the argument.
59326e7d3316Smrg	    func_dirname "$arg" "/" ""
59336e7d3316Smrg	    xdir="$func_dirname_result"
59346e7d3316Smrg
59356e7d3316Smrg	    func_lo2o "$arg"
59366e7d3316Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
59376e7d3316Smrg	    non_pic_object=$xdir$func_lo2o_result
59386e7d3316Smrg	    func_append libobjs " $pic_object"
59396e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
59406e7d3316Smrg	  else
59416e7d3316Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
59426e7d3316Smrg	  fi
59436e7d3316Smrg	fi
59446e7d3316Smrg	;;
59456e7d3316Smrg
59466e7d3316Smrg      *.$libext)
59476e7d3316Smrg	# An archive.
594897cf2ee2Smrg	func_append deplibs " $arg"
594997cf2ee2Smrg	func_append old_deplibs " $arg"
59506e7d3316Smrg	continue
59516e7d3316Smrg	;;
59526e7d3316Smrg
59536e7d3316Smrg      *.la)
59546e7d3316Smrg	# A libtool-controlled library.
59556e7d3316Smrg
595697cf2ee2Smrg	func_resolve_sysroot "$arg"
59576e7d3316Smrg	if test "$prev" = dlfiles; then
59586e7d3316Smrg	  # This library was specified with -dlopen.
595997cf2ee2Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
59606e7d3316Smrg	  prev=
59616e7d3316Smrg	elif test "$prev" = dlprefiles; then
59626e7d3316Smrg	  # The library was specified with -dlpreopen.
596397cf2ee2Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
59646e7d3316Smrg	  prev=
59656e7d3316Smrg	else
596697cf2ee2Smrg	  func_append deplibs " $func_resolve_sysroot_result"
59676e7d3316Smrg	fi
59686e7d3316Smrg	continue
59696e7d3316Smrg	;;
59706e7d3316Smrg
59716e7d3316Smrg      # Some other compiler argument.
59726e7d3316Smrg      *)
59736e7d3316Smrg	# Unknown arguments in both finalize_command and compile_command need
59746e7d3316Smrg	# to be aesthetically quoted because they are evaled later.
59756e7d3316Smrg	func_quote_for_eval "$arg"
59766e7d3316Smrg	arg="$func_quote_for_eval_result"
59776e7d3316Smrg	;;
59786e7d3316Smrg      esac # arg
59796e7d3316Smrg
59806e7d3316Smrg      # Now actually substitute the argument into the commands.
59816e7d3316Smrg      if test -n "$arg"; then
59826e7d3316Smrg	func_append compile_command " $arg"
59836e7d3316Smrg	func_append finalize_command " $arg"
59846e7d3316Smrg      fi
59856e7d3316Smrg    done # argument parsing loop
59866e7d3316Smrg
59876e7d3316Smrg    test -n "$prev" && \
59886e7d3316Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
59896e7d3316Smrg
59906e7d3316Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
59916e7d3316Smrg      eval arg=\"$export_dynamic_flag_spec\"
59926e7d3316Smrg      func_append compile_command " $arg"
59936e7d3316Smrg      func_append finalize_command " $arg"
59946e7d3316Smrg    fi
59956e7d3316Smrg
59966e7d3316Smrg    oldlibs=
59976e7d3316Smrg    # calculate the name of the file, without its directory
59986e7d3316Smrg    func_basename "$output"
59996e7d3316Smrg    outputname="$func_basename_result"
60006e7d3316Smrg    libobjs_save="$libobjs"
60016e7d3316Smrg
60026e7d3316Smrg    if test -n "$shlibpath_var"; then
60036e7d3316Smrg      # get the directories listed in $shlibpath_var
60046e7d3316Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6005a966c04fSmrg    else
60066e7d3316Smrg      shlib_search_path=
6007a966c04fSmrg    fi
60086e7d3316Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
60096e7d3316Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6010a966c04fSmrg
60116e7d3316Smrg    func_dirname "$output" "/" ""
60126e7d3316Smrg    output_objdir="$func_dirname_result$objdir"
601397cf2ee2Smrg    func_to_tool_file "$output_objdir/"
601497cf2ee2Smrg    tool_output_objdir=$func_to_tool_file_result
60156e7d3316Smrg    # Create the object directory.
60166e7d3316Smrg    func_mkdir_p "$output_objdir"
6017a966c04fSmrg
60186e7d3316Smrg    # Determine the type of output
60196e7d3316Smrg    case $output in
60206e7d3316Smrg    "")
60216e7d3316Smrg      func_fatal_help "you must specify an output file"
60226e7d3316Smrg      ;;
60236e7d3316Smrg    *.$libext) linkmode=oldlib ;;
60246e7d3316Smrg    *.lo | *.$objext) linkmode=obj ;;
60256e7d3316Smrg    *.la) linkmode=lib ;;
60266e7d3316Smrg    *) linkmode=prog ;; # Anything else should be a program.
60276e7d3316Smrg    esac
60286e7d3316Smrg
60296e7d3316Smrg    specialdeplibs=
60306e7d3316Smrg
60316e7d3316Smrg    libs=
60326e7d3316Smrg    # Find all interdependent deplibs by searching for libraries
60336e7d3316Smrg    # that are linked more than once (e.g. -la -lb -la)
60346e7d3316Smrg    for deplib in $deplibs; do
603597cf2ee2Smrg      if $opt_preserve_dup_deps ; then
60366e7d3316Smrg	case "$libs " in
603797cf2ee2Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
60386e7d3316Smrg	esac
60396e7d3316Smrg      fi
604097cf2ee2Smrg      func_append libs " $deplib"
60416e7d3316Smrg    done
60426e7d3316Smrg
60436e7d3316Smrg    if test "$linkmode" = lib; then
60446e7d3316Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
60456e7d3316Smrg
60466e7d3316Smrg      # Compute libraries that are listed more than once in $predeps
60476e7d3316Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
60486e7d3316Smrg      # not to be eliminated).
60496e7d3316Smrg      pre_post_deps=
60506e7d3316Smrg      if $opt_duplicate_compiler_generated_deps; then
60516e7d3316Smrg	for pre_post_dep in $predeps $postdeps; do
60526e7d3316Smrg	  case "$pre_post_deps " in
605397cf2ee2Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
60546e7d3316Smrg	  esac
605597cf2ee2Smrg	  func_append pre_post_deps " $pre_post_dep"
60566e7d3316Smrg	done
60576e7d3316Smrg      fi
60586e7d3316Smrg      pre_post_deps=
60596e7d3316Smrg    fi
60606e7d3316Smrg
60616e7d3316Smrg    deplibs=
60626e7d3316Smrg    newdependency_libs=
60636e7d3316Smrg    newlib_search_path=
60646e7d3316Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
60656e7d3316Smrg    notinst_deplibs= # not-installed libtool libraries
60666e7d3316Smrg    notinst_path= # paths that contain not-installed libtool libraries
60676e7d3316Smrg
60686e7d3316Smrg    case $linkmode in
60696e7d3316Smrg    lib)
60706e7d3316Smrg	passes="conv dlpreopen link"
60716e7d3316Smrg	for file in $dlfiles $dlprefiles; do
60726e7d3316Smrg	  case $file in
60736e7d3316Smrg	  *.la) ;;
60746e7d3316Smrg	  *)
60756e7d3316Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
60766e7d3316Smrg	    ;;
60776e7d3316Smrg	  esac
60786e7d3316Smrg	done
60796e7d3316Smrg	;;
60806e7d3316Smrg    prog)
60816e7d3316Smrg	compile_deplibs=
60826e7d3316Smrg	finalize_deplibs=
60836e7d3316Smrg	alldeplibs=no
60846e7d3316Smrg	newdlfiles=
60856e7d3316Smrg	newdlprefiles=
60866e7d3316Smrg	passes="conv scan dlopen dlpreopen link"
60876e7d3316Smrg	;;
60886e7d3316Smrg    *)  passes="conv"
60896e7d3316Smrg	;;
60906e7d3316Smrg    esac
60916e7d3316Smrg
60926e7d3316Smrg    for pass in $passes; do
60936e7d3316Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
60946e7d3316Smrg      # so that -L comes before libs that need it for instance...
60956e7d3316Smrg      if test "$linkmode,$pass" = "lib,link"; then
60966e7d3316Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
60976e7d3316Smrg	##        order, and fix it there properly
60986e7d3316Smrg        tmp_deplibs=
60996e7d3316Smrg	for deplib in $deplibs; do
61006e7d3316Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
61016e7d3316Smrg	done
61026e7d3316Smrg	deplibs="$tmp_deplibs"
61036e7d3316Smrg      fi
61046e7d3316Smrg
61056e7d3316Smrg      if test "$linkmode,$pass" = "lib,link" ||
61066e7d3316Smrg	 test "$linkmode,$pass" = "prog,scan"; then
61076e7d3316Smrg	libs="$deplibs"
61086e7d3316Smrg	deplibs=
61096e7d3316Smrg      fi
61106e7d3316Smrg      if test "$linkmode" = prog; then
61116e7d3316Smrg	case $pass in
61126e7d3316Smrg	dlopen) libs="$dlfiles" ;;
61136e7d3316Smrg	dlpreopen) libs="$dlprefiles" ;;
61146e7d3316Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
61156e7d3316Smrg	esac
61166e7d3316Smrg      fi
61176e7d3316Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
61186e7d3316Smrg	# Collect and forward deplibs of preopened libtool libs
61196e7d3316Smrg	for lib in $dlprefiles; do
61206e7d3316Smrg	  # Ignore non-libtool-libs
61216e7d3316Smrg	  dependency_libs=
612297cf2ee2Smrg	  func_resolve_sysroot "$lib"
61236e7d3316Smrg	  case $lib in
612497cf2ee2Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
61256e7d3316Smrg	  esac
61266e7d3316Smrg
61276e7d3316Smrg	  # Collect preopened libtool deplibs, except any this library
61286e7d3316Smrg	  # has declared as weak libs
61296e7d3316Smrg	  for deplib in $dependency_libs; do
61306e7d3316Smrg	    func_basename "$deplib"
61316e7d3316Smrg            deplib_base=$func_basename_result
61326e7d3316Smrg	    case " $weak_libs " in
61336e7d3316Smrg	    *" $deplib_base "*) ;;
613497cf2ee2Smrg	    *) func_append deplibs " $deplib" ;;
61356e7d3316Smrg	    esac
61366e7d3316Smrg	  done
61376e7d3316Smrg	done
61386e7d3316Smrg	libs="$dlprefiles"
61396e7d3316Smrg      fi
61406e7d3316Smrg      if test "$pass" = dlopen; then
61416e7d3316Smrg	# Collect dlpreopened libraries
61426e7d3316Smrg	save_deplibs="$deplibs"
61436e7d3316Smrg	deplibs=
61446e7d3316Smrg      fi
61456e7d3316Smrg
61466e7d3316Smrg      for deplib in $libs; do
61476e7d3316Smrg	lib=
61486e7d3316Smrg	found=no
61496e7d3316Smrg	case $deplib in
61506e7d3316Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
61516e7d3316Smrg	  if test "$linkmode,$pass" = "prog,link"; then
61526e7d3316Smrg	    compile_deplibs="$deplib $compile_deplibs"
61536e7d3316Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
61546e7d3316Smrg	  else
615597cf2ee2Smrg	    func_append compiler_flags " $deplib"
61566e7d3316Smrg	    if test "$linkmode" = lib ; then
61576e7d3316Smrg		case "$new_inherited_linker_flags " in
61586e7d3316Smrg		    *" $deplib "*) ;;
615997cf2ee2Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
61606e7d3316Smrg		esac
61616e7d3316Smrg	    fi
61626e7d3316Smrg	  fi
61636e7d3316Smrg	  continue
61646e7d3316Smrg	  ;;
61656e7d3316Smrg	-l*)
61666e7d3316Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
61676e7d3316Smrg	    func_warning "\`-l' is ignored for archives/objects"
61686e7d3316Smrg	    continue
61696e7d3316Smrg	  fi
61706e7d3316Smrg	  func_stripname '-l' '' "$deplib"
61716e7d3316Smrg	  name=$func_stripname_result
61726e7d3316Smrg	  if test "$linkmode" = lib; then
61736e7d3316Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
61746e7d3316Smrg	  else
61756e7d3316Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
61766e7d3316Smrg	  fi
61776e7d3316Smrg	  for searchdir in $searchdirs; do
61786e7d3316Smrg	    for search_ext in .la $std_shrext .so .a; do
61796e7d3316Smrg	      # Search the libtool library
61806e7d3316Smrg	      lib="$searchdir/lib${name}${search_ext}"
61816e7d3316Smrg	      if test -f "$lib"; then
61826e7d3316Smrg		if test "$search_ext" = ".la"; then
61836e7d3316Smrg		  found=yes
61846e7d3316Smrg		else
61856e7d3316Smrg		  found=no
61866e7d3316Smrg		fi
61876e7d3316Smrg		break 2
61886e7d3316Smrg	      fi
61896e7d3316Smrg	    done
61906e7d3316Smrg	  done
61916e7d3316Smrg	  if test "$found" != yes; then
61926e7d3316Smrg	    # deplib doesn't seem to be a libtool library
61936e7d3316Smrg	    if test "$linkmode,$pass" = "prog,link"; then
61946e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
61956e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
61966e7d3316Smrg	    else
61976e7d3316Smrg	      deplibs="$deplib $deplibs"
61986e7d3316Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
61996e7d3316Smrg	    fi
62006e7d3316Smrg	    continue
62016e7d3316Smrg	  else # deplib is a libtool library
62026e7d3316Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
62036e7d3316Smrg	    # We need to do some special things here, and not later.
62046e7d3316Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
62056e7d3316Smrg	      case " $predeps $postdeps " in
62066e7d3316Smrg	      *" $deplib "*)
62076e7d3316Smrg		if func_lalib_p "$lib"; then
62086e7d3316Smrg		  library_names=
62096e7d3316Smrg		  old_library=
62106e7d3316Smrg		  func_source "$lib"
62116e7d3316Smrg		  for l in $old_library $library_names; do
62126e7d3316Smrg		    ll="$l"
62136e7d3316Smrg		  done
62146e7d3316Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
62156e7d3316Smrg		    found=no
62166e7d3316Smrg		    func_dirname "$lib" "" "."
62176e7d3316Smrg		    ladir="$func_dirname_result"
62186e7d3316Smrg		    lib=$ladir/$old_library
62196e7d3316Smrg		    if test "$linkmode,$pass" = "prog,link"; then
62206e7d3316Smrg		      compile_deplibs="$deplib $compile_deplibs"
62216e7d3316Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
62226e7d3316Smrg		    else
62236e7d3316Smrg		      deplibs="$deplib $deplibs"
62246e7d3316Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
62256e7d3316Smrg		    fi
62266e7d3316Smrg		    continue
62276e7d3316Smrg		  fi
62286e7d3316Smrg		fi
62296e7d3316Smrg		;;
62306e7d3316Smrg	      *) ;;
62316e7d3316Smrg	      esac
62326e7d3316Smrg	    fi
62336e7d3316Smrg	  fi
62346e7d3316Smrg	  ;; # -l
62356e7d3316Smrg	*.ltframework)
62366e7d3316Smrg	  if test "$linkmode,$pass" = "prog,link"; then
62376e7d3316Smrg	    compile_deplibs="$deplib $compile_deplibs"
62386e7d3316Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
62396e7d3316Smrg	  else
62406e7d3316Smrg	    deplibs="$deplib $deplibs"
62416e7d3316Smrg	    if test "$linkmode" = lib ; then
62426e7d3316Smrg		case "$new_inherited_linker_flags " in
62436e7d3316Smrg		    *" $deplib "*) ;;
624497cf2ee2Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
62456e7d3316Smrg		esac
62466e7d3316Smrg	    fi
62476e7d3316Smrg	  fi
62486e7d3316Smrg	  continue
62496e7d3316Smrg	  ;;
62506e7d3316Smrg	-L*)
62516e7d3316Smrg	  case $linkmode in
62526e7d3316Smrg	  lib)
62536e7d3316Smrg	    deplibs="$deplib $deplibs"
62546e7d3316Smrg	    test "$pass" = conv && continue
62556e7d3316Smrg	    newdependency_libs="$deplib $newdependency_libs"
62566e7d3316Smrg	    func_stripname '-L' '' "$deplib"
625797cf2ee2Smrg	    func_resolve_sysroot "$func_stripname_result"
625897cf2ee2Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
62596e7d3316Smrg	    ;;
62606e7d3316Smrg	  prog)
62616e7d3316Smrg	    if test "$pass" = conv; then
62626e7d3316Smrg	      deplibs="$deplib $deplibs"
62636e7d3316Smrg	      continue
62646e7d3316Smrg	    fi
62656e7d3316Smrg	    if test "$pass" = scan; then
62666e7d3316Smrg	      deplibs="$deplib $deplibs"
62676e7d3316Smrg	    else
62686e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
62696e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
62706e7d3316Smrg	    fi
62716e7d3316Smrg	    func_stripname '-L' '' "$deplib"
627297cf2ee2Smrg	    func_resolve_sysroot "$func_stripname_result"
627397cf2ee2Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
62746e7d3316Smrg	    ;;
62756e7d3316Smrg	  *)
62766e7d3316Smrg	    func_warning "\`-L' is ignored for archives/objects"
62776e7d3316Smrg	    ;;
62786e7d3316Smrg	  esac # linkmode
62796e7d3316Smrg	  continue
62806e7d3316Smrg	  ;; # -L
62816e7d3316Smrg	-R*)
62826e7d3316Smrg	  if test "$pass" = link; then
62836e7d3316Smrg	    func_stripname '-R' '' "$deplib"
628497cf2ee2Smrg	    func_resolve_sysroot "$func_stripname_result"
628597cf2ee2Smrg	    dir=$func_resolve_sysroot_result
62866e7d3316Smrg	    # Make sure the xrpath contains only unique directories.
62876e7d3316Smrg	    case "$xrpath " in
62886e7d3316Smrg	    *" $dir "*) ;;
628997cf2ee2Smrg	    *) func_append xrpath " $dir" ;;
62906e7d3316Smrg	    esac
62916e7d3316Smrg	  fi
62926e7d3316Smrg	  deplibs="$deplib $deplibs"
62936e7d3316Smrg	  continue
62946e7d3316Smrg	  ;;
629597cf2ee2Smrg	*.la)
629697cf2ee2Smrg	  func_resolve_sysroot "$deplib"
629797cf2ee2Smrg	  lib=$func_resolve_sysroot_result
629897cf2ee2Smrg	  ;;
62996e7d3316Smrg	*.$libext)
63006e7d3316Smrg	  if test "$pass" = conv; then
63016e7d3316Smrg	    deplibs="$deplib $deplibs"
63026e7d3316Smrg	    continue
63036e7d3316Smrg	  fi
63046e7d3316Smrg	  case $linkmode in
63056e7d3316Smrg	  lib)
63066e7d3316Smrg	    # Linking convenience modules into shared libraries is allowed,
63076e7d3316Smrg	    # but linking other static libraries is non-portable.
63086e7d3316Smrg	    case " $dlpreconveniencelibs " in
63096e7d3316Smrg	    *" $deplib "*) ;;
63106e7d3316Smrg	    *)
63116e7d3316Smrg	      valid_a_lib=no
63126e7d3316Smrg	      case $deplibs_check_method in
63136e7d3316Smrg		match_pattern*)
63146e7d3316Smrg		  set dummy $deplibs_check_method; shift
63156e7d3316Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
63166e7d3316Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
63176e7d3316Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
63186e7d3316Smrg		    valid_a_lib=yes
63196e7d3316Smrg		  fi
63206e7d3316Smrg		;;
63216e7d3316Smrg		pass_all)
63226e7d3316Smrg		  valid_a_lib=yes
63236e7d3316Smrg		;;
63246e7d3316Smrg	      esac
63256e7d3316Smrg	      if test "$valid_a_lib" != yes; then
63266e7d3316Smrg		echo
63276e7d3316Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
63286e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
63296e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
63306e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
63316e7d3316Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
63326e7d3316Smrg		echo "*** that it is just a static archive that I should not use here."
63336e7d3316Smrg	      else
63346e7d3316Smrg		echo
63356e7d3316Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
63366e7d3316Smrg		$ECHO "*** static library $deplib is not portable!"
63376e7d3316Smrg		deplibs="$deplib $deplibs"
63386e7d3316Smrg	      fi
63396e7d3316Smrg	      ;;
63406e7d3316Smrg	    esac
63416e7d3316Smrg	    continue
63426e7d3316Smrg	    ;;
63436e7d3316Smrg	  prog)
63446e7d3316Smrg	    if test "$pass" != link; then
63456e7d3316Smrg	      deplibs="$deplib $deplibs"
63466e7d3316Smrg	    else
63476e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
63486e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
63496e7d3316Smrg	    fi
63506e7d3316Smrg	    continue
63516e7d3316Smrg	    ;;
63526e7d3316Smrg	  esac # linkmode
63536e7d3316Smrg	  ;; # *.$libext
63546e7d3316Smrg	*.lo | *.$objext)
63556e7d3316Smrg	  if test "$pass" = conv; then
63566e7d3316Smrg	    deplibs="$deplib $deplibs"
63576e7d3316Smrg	  elif test "$linkmode" = prog; then
63586e7d3316Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
63596e7d3316Smrg	      # If there is no dlopen support or we're linking statically,
63606e7d3316Smrg	      # we need to preload.
636197cf2ee2Smrg	      func_append newdlprefiles " $deplib"
63626e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
63636e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
63646e7d3316Smrg	    else
636597cf2ee2Smrg	      func_append newdlfiles " $deplib"
63666e7d3316Smrg	    fi
63676e7d3316Smrg	  fi
63686e7d3316Smrg	  continue
63696e7d3316Smrg	  ;;
63706e7d3316Smrg	%DEPLIBS%)
63716e7d3316Smrg	  alldeplibs=yes
63726e7d3316Smrg	  continue
63736e7d3316Smrg	  ;;
63746e7d3316Smrg	esac # case $deplib
63756e7d3316Smrg
63766e7d3316Smrg	if test "$found" = yes || test -f "$lib"; then :
63776e7d3316Smrg	else
63786e7d3316Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
63796e7d3316Smrg	fi
63806e7d3316Smrg
63816e7d3316Smrg	# Check to see that this really is a libtool archive.
63826e7d3316Smrg	func_lalib_unsafe_p "$lib" \
63836e7d3316Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
63846e7d3316Smrg
63856e7d3316Smrg	func_dirname "$lib" "" "."
63866e7d3316Smrg	ladir="$func_dirname_result"
63876e7d3316Smrg
63886e7d3316Smrg	dlname=
63896e7d3316Smrg	dlopen=
63906e7d3316Smrg	dlpreopen=
63916e7d3316Smrg	libdir=
63926e7d3316Smrg	library_names=
63936e7d3316Smrg	old_library=
63946e7d3316Smrg	inherited_linker_flags=
63956e7d3316Smrg	# If the library was installed with an old release of libtool,
63966e7d3316Smrg	# it will not redefine variables installed, or shouldnotlink
63976e7d3316Smrg	installed=yes
63986e7d3316Smrg	shouldnotlink=no
63996e7d3316Smrg	avoidtemprpath=
64006e7d3316Smrg
64016e7d3316Smrg
64026e7d3316Smrg	# Read the .la file
64036e7d3316Smrg	func_source "$lib"
64046e7d3316Smrg
64056e7d3316Smrg	# Convert "-framework foo" to "foo.ltframework"
64066e7d3316Smrg	if test -n "$inherited_linker_flags"; then
64076e7d3316Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
64086e7d3316Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
64096e7d3316Smrg	    case " $new_inherited_linker_flags " in
64106e7d3316Smrg	      *" $tmp_inherited_linker_flag "*) ;;
641197cf2ee2Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
64126e7d3316Smrg	    esac
64136e7d3316Smrg	  done
64146e7d3316Smrg	fi
64156e7d3316Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
64166e7d3316Smrg	if test "$linkmode,$pass" = "lib,link" ||
64176e7d3316Smrg	   test "$linkmode,$pass" = "prog,scan" ||
64186e7d3316Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
641997cf2ee2Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
642097cf2ee2Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
64216e7d3316Smrg	fi
64226e7d3316Smrg
64236e7d3316Smrg	if test "$pass" = conv; then
64246e7d3316Smrg	  # Only check for convenience libraries
64256e7d3316Smrg	  deplibs="$lib $deplibs"
64266e7d3316Smrg	  if test -z "$libdir"; then
64276e7d3316Smrg	    if test -z "$old_library"; then
64286e7d3316Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
64296e7d3316Smrg	    fi
64306e7d3316Smrg	    # It is a libtool convenience library, so add in its objects.
643197cf2ee2Smrg	    func_append convenience " $ladir/$objdir/$old_library"
643297cf2ee2Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
64336e7d3316Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
64346e7d3316Smrg	    func_fatal_error "\`$lib' is not a convenience library"
64356e7d3316Smrg	  fi
64366e7d3316Smrg	  tmp_libs=
64376e7d3316Smrg	  for deplib in $dependency_libs; do
64386e7d3316Smrg	    deplibs="$deplib $deplibs"
643997cf2ee2Smrg	    if $opt_preserve_dup_deps ; then
64406e7d3316Smrg	      case "$tmp_libs " in
644197cf2ee2Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
64426e7d3316Smrg	      esac
64436e7d3316Smrg	    fi
644497cf2ee2Smrg	    func_append tmp_libs " $deplib"
64456e7d3316Smrg	  done
64466e7d3316Smrg	  continue
64476e7d3316Smrg	fi # $pass = conv
64486e7d3316Smrg
64496e7d3316Smrg
64506e7d3316Smrg	# Get the name of the library we link against.
64516e7d3316Smrg	linklib=
645297cf2ee2Smrg	if test -n "$old_library" &&
645397cf2ee2Smrg	   { test "$prefer_static_libs" = yes ||
645497cf2ee2Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
645597cf2ee2Smrg	  linklib=$old_library
645697cf2ee2Smrg	else
645797cf2ee2Smrg	  for l in $old_library $library_names; do
645897cf2ee2Smrg	    linklib="$l"
645997cf2ee2Smrg	  done
646097cf2ee2Smrg	fi
64616e7d3316Smrg	if test -z "$linklib"; then
64626e7d3316Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
64636e7d3316Smrg	fi
64646e7d3316Smrg
64656e7d3316Smrg	# This library was specified with -dlopen.
64666e7d3316Smrg	if test "$pass" = dlopen; then
64676e7d3316Smrg	  if test -z "$libdir"; then
64686e7d3316Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
64696e7d3316Smrg	  fi
64706e7d3316Smrg	  if test -z "$dlname" ||
64716e7d3316Smrg	     test "$dlopen_support" != yes ||
64726e7d3316Smrg	     test "$build_libtool_libs" = no; then
64736e7d3316Smrg	    # If there is no dlname, no dlopen support or we're linking
64746e7d3316Smrg	    # statically, we need to preload.  We also need to preload any
64756e7d3316Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
64766e7d3316Smrg	    # bomb out in the load deplibs phase.
647797cf2ee2Smrg	    func_append dlprefiles " $lib $dependency_libs"
64786e7d3316Smrg	  else
647997cf2ee2Smrg	    func_append newdlfiles " $lib"
64806e7d3316Smrg	  fi
64816e7d3316Smrg	  continue
64826e7d3316Smrg	fi # $pass = dlopen
64836e7d3316Smrg
64846e7d3316Smrg	# We need an absolute path.
64856e7d3316Smrg	case $ladir in
64866e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
64876e7d3316Smrg	*)
64886e7d3316Smrg	  abs_ladir=`cd "$ladir" && pwd`
64896e7d3316Smrg	  if test -z "$abs_ladir"; then
64906e7d3316Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
64916e7d3316Smrg	    func_warning "passing it literally to the linker, although it might fail"
64926e7d3316Smrg	    abs_ladir="$ladir"
64936e7d3316Smrg	  fi
64946e7d3316Smrg	  ;;
64956e7d3316Smrg	esac
64966e7d3316Smrg	func_basename "$lib"
64976e7d3316Smrg	laname="$func_basename_result"
64986e7d3316Smrg
64996e7d3316Smrg	# Find the relevant object directory and library name.
65006e7d3316Smrg	if test "X$installed" = Xyes; then
650197cf2ee2Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65026e7d3316Smrg	    func_warning "library \`$lib' was moved."
65036e7d3316Smrg	    dir="$ladir"
65046e7d3316Smrg	    absdir="$abs_ladir"
65056e7d3316Smrg	    libdir="$abs_ladir"
65066e7d3316Smrg	  else
650797cf2ee2Smrg	    dir="$lt_sysroot$libdir"
650897cf2ee2Smrg	    absdir="$lt_sysroot$libdir"
65096e7d3316Smrg	  fi
65106e7d3316Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
65116e7d3316Smrg	else
65126e7d3316Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65136e7d3316Smrg	    dir="$ladir"
65146e7d3316Smrg	    absdir="$abs_ladir"
65156e7d3316Smrg	    # Remove this search path later
651697cf2ee2Smrg	    func_append notinst_path " $abs_ladir"
65176e7d3316Smrg	  else
65186e7d3316Smrg	    dir="$ladir/$objdir"
65196e7d3316Smrg	    absdir="$abs_ladir/$objdir"
65206e7d3316Smrg	    # Remove this search path later
652197cf2ee2Smrg	    func_append notinst_path " $abs_ladir"
65226e7d3316Smrg	  fi
65236e7d3316Smrg	fi # $installed = yes
65246e7d3316Smrg	func_stripname 'lib' '.la' "$laname"
65256e7d3316Smrg	name=$func_stripname_result
65266e7d3316Smrg
65276e7d3316Smrg	# This library was specified with -dlpreopen.
65286e7d3316Smrg	if test "$pass" = dlpreopen; then
65296e7d3316Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
65306e7d3316Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
65316e7d3316Smrg	  fi
653297cf2ee2Smrg	  case "$host" in
653397cf2ee2Smrg	    # special handling for platforms with PE-DLLs.
653497cf2ee2Smrg	    *cygwin* | *mingw* | *cegcc* )
653597cf2ee2Smrg	      # Linker will automatically link against shared library if both
653697cf2ee2Smrg	      # static and shared are present.  Therefore, ensure we extract
653797cf2ee2Smrg	      # symbols from the import library if a shared library is present
653897cf2ee2Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
653997cf2ee2Smrg	      # this by putting the import library name into $newdlprefiles.
654097cf2ee2Smrg	      # We recover the dlopen module name by 'saving' the la file
654197cf2ee2Smrg	      # name in a special purpose variable, and (later) extracting the
654297cf2ee2Smrg	      # dlname from the la file.
654397cf2ee2Smrg	      if test -n "$dlname"; then
654497cf2ee2Smrg	        func_tr_sh "$dir/$linklib"
654597cf2ee2Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
654697cf2ee2Smrg	        func_append newdlprefiles " $dir/$linklib"
654797cf2ee2Smrg	      else
654897cf2ee2Smrg	        func_append newdlprefiles " $dir/$old_library"
654997cf2ee2Smrg	        # Keep a list of preopened convenience libraries to check
655097cf2ee2Smrg	        # that they are being used correctly in the link pass.
655197cf2ee2Smrg	        test -z "$libdir" && \
655297cf2ee2Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
655397cf2ee2Smrg	      fi
655497cf2ee2Smrg	    ;;
655597cf2ee2Smrg	    * )
655697cf2ee2Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
655797cf2ee2Smrg	      # are required to link).
655897cf2ee2Smrg	      if test -n "$old_library"; then
655997cf2ee2Smrg	        func_append newdlprefiles " $dir/$old_library"
656097cf2ee2Smrg	        # Keep a list of preopened convenience libraries to check
656197cf2ee2Smrg	        # that they are being used correctly in the link pass.
656297cf2ee2Smrg	        test -z "$libdir" && \
656397cf2ee2Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
656497cf2ee2Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
656597cf2ee2Smrg	      elif test -n "$dlname"; then
656697cf2ee2Smrg	        func_append newdlprefiles " $dir/$dlname"
656797cf2ee2Smrg	      else
656897cf2ee2Smrg	        func_append newdlprefiles " $dir/$linklib"
656997cf2ee2Smrg	      fi
657097cf2ee2Smrg	    ;;
657197cf2ee2Smrg	  esac
65726e7d3316Smrg	fi # $pass = dlpreopen
65736e7d3316Smrg
65746e7d3316Smrg	if test -z "$libdir"; then
65756e7d3316Smrg	  # Link the convenience library
65766e7d3316Smrg	  if test "$linkmode" = lib; then
65776e7d3316Smrg	    deplibs="$dir/$old_library $deplibs"
65786e7d3316Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
65796e7d3316Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
65806e7d3316Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
65816e7d3316Smrg	  else
65826e7d3316Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
65836e7d3316Smrg	  fi
65846e7d3316Smrg	  continue
65856e7d3316Smrg	fi
65866e7d3316Smrg
65876e7d3316Smrg
65886e7d3316Smrg	if test "$linkmode" = prog && test "$pass" != link; then
658997cf2ee2Smrg	  func_append newlib_search_path " $ladir"
65906e7d3316Smrg	  deplibs="$lib $deplibs"
65916e7d3316Smrg
65926e7d3316Smrg	  linkalldeplibs=no
65936e7d3316Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
65946e7d3316Smrg	     test "$build_libtool_libs" = no; then
65956e7d3316Smrg	    linkalldeplibs=yes
65966e7d3316Smrg	  fi
65976e7d3316Smrg
65986e7d3316Smrg	  tmp_libs=
65996e7d3316Smrg	  for deplib in $dependency_libs; do
66006e7d3316Smrg	    case $deplib in
66016e7d3316Smrg	    -L*) func_stripname '-L' '' "$deplib"
660297cf2ee2Smrg	         func_resolve_sysroot "$func_stripname_result"
660397cf2ee2Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
66046e7d3316Smrg		 ;;
66056e7d3316Smrg	    esac
66066e7d3316Smrg	    # Need to link against all dependency_libs?
66076e7d3316Smrg	    if test "$linkalldeplibs" = yes; then
66086e7d3316Smrg	      deplibs="$deplib $deplibs"
66096e7d3316Smrg	    else
66106e7d3316Smrg	      # Need to hardcode shared library paths
66116e7d3316Smrg	      # or/and link against static libraries
66126e7d3316Smrg	      newdependency_libs="$deplib $newdependency_libs"
66136e7d3316Smrg	    fi
661497cf2ee2Smrg	    if $opt_preserve_dup_deps ; then
66156e7d3316Smrg	      case "$tmp_libs " in
661697cf2ee2Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
66176e7d3316Smrg	      esac
66186e7d3316Smrg	    fi
661997cf2ee2Smrg	    func_append tmp_libs " $deplib"
66206e7d3316Smrg	  done # for deplib
66216e7d3316Smrg	  continue
66226e7d3316Smrg	fi # $linkmode = prog...
66236e7d3316Smrg
66246e7d3316Smrg	if test "$linkmode,$pass" = "prog,link"; then
66256e7d3316Smrg	  if test -n "$library_names" &&
66266e7d3316Smrg	     { { test "$prefer_static_libs" = no ||
66276e7d3316Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
66286e7d3316Smrg	       test -z "$old_library"; }; then
66296e7d3316Smrg	    # We need to hardcode the library path
66306e7d3316Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
66316e7d3316Smrg	      # Make sure the rpath contains only unique directories.
66326e7d3316Smrg	      case "$temp_rpath:" in
66336e7d3316Smrg	      *"$absdir:"*) ;;
663497cf2ee2Smrg	      *) func_append temp_rpath "$absdir:" ;;
66356e7d3316Smrg	      esac
66366e7d3316Smrg	    fi
66376e7d3316Smrg
66386e7d3316Smrg	    # Hardcode the library path.
66396e7d3316Smrg	    # Skip directories that are in the system default run-time
66406e7d3316Smrg	    # search path.
66416e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
66426e7d3316Smrg	    *" $absdir "*) ;;
66436e7d3316Smrg	    *)
66446e7d3316Smrg	      case "$compile_rpath " in
66456e7d3316Smrg	      *" $absdir "*) ;;
664697cf2ee2Smrg	      *) func_append compile_rpath " $absdir" ;;
66476e7d3316Smrg	      esac
66486e7d3316Smrg	      ;;
66496e7d3316Smrg	    esac
66506e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
66516e7d3316Smrg	    *" $libdir "*) ;;
66526e7d3316Smrg	    *)
66536e7d3316Smrg	      case "$finalize_rpath " in
66546e7d3316Smrg	      *" $libdir "*) ;;
665597cf2ee2Smrg	      *) func_append finalize_rpath " $libdir" ;;
66566e7d3316Smrg	      esac
66576e7d3316Smrg	      ;;
66586e7d3316Smrg	    esac
66596e7d3316Smrg	  fi # $linkmode,$pass = prog,link...
66606e7d3316Smrg
66616e7d3316Smrg	  if test "$alldeplibs" = yes &&
66626e7d3316Smrg	     { test "$deplibs_check_method" = pass_all ||
66636e7d3316Smrg	       { test "$build_libtool_libs" = yes &&
66646e7d3316Smrg		 test -n "$library_names"; }; }; then
66656e7d3316Smrg	    # We only need to search for static libraries
66666e7d3316Smrg	    continue
66676e7d3316Smrg	  fi
66686e7d3316Smrg	fi
66696e7d3316Smrg
66706e7d3316Smrg	link_static=no # Whether the deplib will be linked statically
66716e7d3316Smrg	use_static_libs=$prefer_static_libs
66726e7d3316Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
66736e7d3316Smrg	  use_static_libs=no
66746e7d3316Smrg	fi
66756e7d3316Smrg	if test -n "$library_names" &&
66766e7d3316Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
66776e7d3316Smrg	  case $host in
66786e7d3316Smrg	  *cygwin* | *mingw* | *cegcc*)
66796e7d3316Smrg	      # No point in relinking DLLs because paths are not encoded
668097cf2ee2Smrg	      func_append notinst_deplibs " $lib"
66816e7d3316Smrg	      need_relink=no
66826e7d3316Smrg	    ;;
66836e7d3316Smrg	  *)
66846e7d3316Smrg	    if test "$installed" = no; then
668597cf2ee2Smrg	      func_append notinst_deplibs " $lib"
66866e7d3316Smrg	      need_relink=yes
66876e7d3316Smrg	    fi
66886e7d3316Smrg	    ;;
66896e7d3316Smrg	  esac
66906e7d3316Smrg	  # This is a shared library
66916e7d3316Smrg
66926e7d3316Smrg	  # Warn about portability, can't link against -module's on some
66936e7d3316Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
66946e7d3316Smrg	  dlopenmodule=""
66956e7d3316Smrg	  for dlpremoduletest in $dlprefiles; do
66966e7d3316Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
66976e7d3316Smrg	      dlopenmodule="$dlpremoduletest"
66986e7d3316Smrg	      break
66996e7d3316Smrg	    fi
67006e7d3316Smrg	  done
67016e7d3316Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
67026e7d3316Smrg	    echo
67036e7d3316Smrg	    if test "$linkmode" = prog; then
67046e7d3316Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
67056e7d3316Smrg	    else
67066e7d3316Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
67076e7d3316Smrg	    fi
67086e7d3316Smrg	    $ECHO "*** $linklib is not portable!"
67096e7d3316Smrg	  fi
67106e7d3316Smrg	  if test "$linkmode" = lib &&
67116e7d3316Smrg	     test "$hardcode_into_libs" = yes; then
67126e7d3316Smrg	    # Hardcode the library path.
67136e7d3316Smrg	    # Skip directories that are in the system default run-time
67146e7d3316Smrg	    # search path.
67156e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
67166e7d3316Smrg	    *" $absdir "*) ;;
67176e7d3316Smrg	    *)
67186e7d3316Smrg	      case "$compile_rpath " in
67196e7d3316Smrg	      *" $absdir "*) ;;
672097cf2ee2Smrg	      *) func_append compile_rpath " $absdir" ;;
67216e7d3316Smrg	      esac
67226e7d3316Smrg	      ;;
67236e7d3316Smrg	    esac
67246e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
67256e7d3316Smrg	    *" $libdir "*) ;;
67266e7d3316Smrg	    *)
67276e7d3316Smrg	      case "$finalize_rpath " in
67286e7d3316Smrg	      *" $libdir "*) ;;
672997cf2ee2Smrg	      *) func_append finalize_rpath " $libdir" ;;
67306e7d3316Smrg	      esac
67316e7d3316Smrg	      ;;
67326e7d3316Smrg	    esac
67336e7d3316Smrg	  fi
67346e7d3316Smrg
67356e7d3316Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
67366e7d3316Smrg	    # figure out the soname
67376e7d3316Smrg	    set dummy $library_names
67386e7d3316Smrg	    shift
67396e7d3316Smrg	    realname="$1"
67406e7d3316Smrg	    shift
67416e7d3316Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
67426e7d3316Smrg	    # use dlname if we got it. it's perfectly good, no?
67436e7d3316Smrg	    if test -n "$dlname"; then
67446e7d3316Smrg	      soname="$dlname"
67456e7d3316Smrg	    elif test -n "$soname_spec"; then
67466e7d3316Smrg	      # bleh windows
67476e7d3316Smrg	      case $host in
67486e7d3316Smrg	      *cygwin* | mingw* | *cegcc*)
67496e7d3316Smrg	        func_arith $current - $age
67506e7d3316Smrg		major=$func_arith_result
67516e7d3316Smrg		versuffix="-$major"
67526e7d3316Smrg		;;
67536e7d3316Smrg	      esac
67546e7d3316Smrg	      eval soname=\"$soname_spec\"
67556e7d3316Smrg	    else
67566e7d3316Smrg	      soname="$realname"
67576e7d3316Smrg	    fi
67586e7d3316Smrg
67596e7d3316Smrg	    # Make a new name for the extract_expsyms_cmds to use
67606e7d3316Smrg	    soroot="$soname"
67616e7d3316Smrg	    func_basename "$soroot"
67626e7d3316Smrg	    soname="$func_basename_result"
67636e7d3316Smrg	    func_stripname 'lib' '.dll' "$soname"
67646e7d3316Smrg	    newlib=libimp-$func_stripname_result.a
67656e7d3316Smrg
67666e7d3316Smrg	    # If the library has no export list, then create one now
67676e7d3316Smrg	    if test -f "$output_objdir/$soname-def"; then :
67686e7d3316Smrg	    else
67696e7d3316Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
67706e7d3316Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
67716e7d3316Smrg	    fi
67726e7d3316Smrg
67736e7d3316Smrg	    # Create $newlib
67746e7d3316Smrg	    if test -f "$output_objdir/$newlib"; then :; else
67756e7d3316Smrg	      func_verbose "generating import library for \`$soname'"
67766e7d3316Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
67776e7d3316Smrg	    fi
67786e7d3316Smrg	    # make sure the library variables are pointing to the new library
67796e7d3316Smrg	    dir=$output_objdir
67806e7d3316Smrg	    linklib=$newlib
67816e7d3316Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
67826e7d3316Smrg
678397cf2ee2Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
67846e7d3316Smrg	    add_shlibpath=
67856e7d3316Smrg	    add_dir=
67866e7d3316Smrg	    add=
67876e7d3316Smrg	    lib_linked=yes
67886e7d3316Smrg	    case $hardcode_action in
67896e7d3316Smrg	    immediate | unsupported)
67906e7d3316Smrg	      if test "$hardcode_direct" = no; then
67916e7d3316Smrg		add="$dir/$linklib"
67926e7d3316Smrg		case $host in
67936e7d3316Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
67946e7d3316Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
67956e7d3316Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
67966e7d3316Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
67976e7d3316Smrg		  *-*-darwin* )
67986e7d3316Smrg		    # if the lib is a (non-dlopened) module then we can not
67996e7d3316Smrg		    # link against it, someone is ignoring the earlier warnings
68006e7d3316Smrg		    if /usr/bin/file -L $add 2> /dev/null |
68016e7d3316Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
68026e7d3316Smrg		      if test "X$dlopenmodule" != "X$lib"; then
68036e7d3316Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
68046e7d3316Smrg			if test -z "$old_library" ; then
68056e7d3316Smrg			  echo
68066e7d3316Smrg			  echo "*** And there doesn't seem to be a static archive available"
68076e7d3316Smrg			  echo "*** The link will probably fail, sorry"
68086e7d3316Smrg			else
68096e7d3316Smrg			  add="$dir/$old_library"
68106e7d3316Smrg			fi
68116e7d3316Smrg		      elif test -n "$old_library"; then
68126e7d3316Smrg			add="$dir/$old_library"
68136e7d3316Smrg		      fi
68146e7d3316Smrg		    fi
68156e7d3316Smrg		esac
68166e7d3316Smrg	      elif test "$hardcode_minus_L" = no; then
68176e7d3316Smrg		case $host in
68186e7d3316Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
68196e7d3316Smrg		esac
68206e7d3316Smrg		add_dir="-L$dir"
68216e7d3316Smrg		add="-l$name"
68226e7d3316Smrg	      elif test "$hardcode_shlibpath_var" = no; then
68236e7d3316Smrg		add_shlibpath="$dir"
68246e7d3316Smrg		add="-l$name"
68256e7d3316Smrg	      else
68266e7d3316Smrg		lib_linked=no
68276e7d3316Smrg	      fi
68286e7d3316Smrg	      ;;
68296e7d3316Smrg	    relink)
68306e7d3316Smrg	      if test "$hardcode_direct" = yes &&
68316e7d3316Smrg	         test "$hardcode_direct_absolute" = no; then
68326e7d3316Smrg		add="$dir/$linklib"
68336e7d3316Smrg	      elif test "$hardcode_minus_L" = yes; then
68346e7d3316Smrg		add_dir="-L$dir"
68356e7d3316Smrg		# Try looking first in the location we're being installed to.
68366e7d3316Smrg		if test -n "$inst_prefix_dir"; then
68376e7d3316Smrg		  case $libdir in
68386e7d3316Smrg		    [\\/]*)
683997cf2ee2Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
68406e7d3316Smrg		      ;;
68416e7d3316Smrg		  esac
68426e7d3316Smrg		fi
68436e7d3316Smrg		add="-l$name"
68446e7d3316Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
68456e7d3316Smrg		add_shlibpath="$dir"
68466e7d3316Smrg		add="-l$name"
68476e7d3316Smrg	      else
68486e7d3316Smrg		lib_linked=no
68496e7d3316Smrg	      fi
68506e7d3316Smrg	      ;;
68516e7d3316Smrg	    *) lib_linked=no ;;
68526e7d3316Smrg	    esac
68536e7d3316Smrg
68546e7d3316Smrg	    if test "$lib_linked" != yes; then
68556e7d3316Smrg	      func_fatal_configuration "unsupported hardcode properties"
68566e7d3316Smrg	    fi
68576e7d3316Smrg
68586e7d3316Smrg	    if test -n "$add_shlibpath"; then
68596e7d3316Smrg	      case :$compile_shlibpath: in
68606e7d3316Smrg	      *":$add_shlibpath:"*) ;;
686197cf2ee2Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
68626e7d3316Smrg	      esac
68636e7d3316Smrg	    fi
68646e7d3316Smrg	    if test "$linkmode" = prog; then
68656e7d3316Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
68666e7d3316Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
68676e7d3316Smrg	    else
68686e7d3316Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
68696e7d3316Smrg	      test -n "$add" && deplibs="$add $deplibs"
68706e7d3316Smrg	      if test "$hardcode_direct" != yes &&
68716e7d3316Smrg		 test "$hardcode_minus_L" != yes &&
68726e7d3316Smrg		 test "$hardcode_shlibpath_var" = yes; then
68736e7d3316Smrg		case :$finalize_shlibpath: in
68746e7d3316Smrg		*":$libdir:"*) ;;
687597cf2ee2Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
68766e7d3316Smrg		esac
68776e7d3316Smrg	      fi
68786e7d3316Smrg	    fi
68796e7d3316Smrg	  fi
68806e7d3316Smrg
688197cf2ee2Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
68826e7d3316Smrg	    add_shlibpath=
68836e7d3316Smrg	    add_dir=
68846e7d3316Smrg	    add=
68856e7d3316Smrg	    # Finalize command for both is simple: just hardcode it.
68866e7d3316Smrg	    if test "$hardcode_direct" = yes &&
68876e7d3316Smrg	       test "$hardcode_direct_absolute" = no; then
68886e7d3316Smrg	      add="$libdir/$linklib"
68896e7d3316Smrg	    elif test "$hardcode_minus_L" = yes; then
68906e7d3316Smrg	      add_dir="-L$libdir"
68916e7d3316Smrg	      add="-l$name"
68926e7d3316Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
68936e7d3316Smrg	      case :$finalize_shlibpath: in
68946e7d3316Smrg	      *":$libdir:"*) ;;
689597cf2ee2Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
68966e7d3316Smrg	      esac
68976e7d3316Smrg	      add="-l$name"
68986e7d3316Smrg	    elif test "$hardcode_automatic" = yes; then
68996e7d3316Smrg	      if test -n "$inst_prefix_dir" &&
69006e7d3316Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
69016e7d3316Smrg		add="$inst_prefix_dir$libdir/$linklib"
69026e7d3316Smrg	      else
69036e7d3316Smrg		add="$libdir/$linklib"
69046e7d3316Smrg	      fi
69056e7d3316Smrg	    else
69066e7d3316Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
69076e7d3316Smrg	      add_dir="-L$libdir"
69086e7d3316Smrg	      # Try looking first in the location we're being installed to.
69096e7d3316Smrg	      if test -n "$inst_prefix_dir"; then
69106e7d3316Smrg		case $libdir in
69116e7d3316Smrg		  [\\/]*)
691297cf2ee2Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
69136e7d3316Smrg		    ;;
69146e7d3316Smrg		esac
69156e7d3316Smrg	      fi
69166e7d3316Smrg	      add="-l$name"
69176e7d3316Smrg	    fi
69186e7d3316Smrg
69196e7d3316Smrg	    if test "$linkmode" = prog; then
69206e7d3316Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
69216e7d3316Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
69226e7d3316Smrg	    else
69236e7d3316Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
69246e7d3316Smrg	      test -n "$add" && deplibs="$add $deplibs"
69256e7d3316Smrg	    fi
69266e7d3316Smrg	  fi
69276e7d3316Smrg	elif test "$linkmode" = prog; then
69286e7d3316Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
69296e7d3316Smrg	  # is not unsupported.  This is valid on all known static and
69306e7d3316Smrg	  # shared platforms.
69316e7d3316Smrg	  if test "$hardcode_direct" != unsupported; then
69326e7d3316Smrg	    test -n "$old_library" && linklib="$old_library"
69336e7d3316Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
69346e7d3316Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
69356e7d3316Smrg	  else
69366e7d3316Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
69376e7d3316Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
69386e7d3316Smrg	  fi
69396e7d3316Smrg	elif test "$build_libtool_libs" = yes; then
69406e7d3316Smrg	  # Not a shared library
69416e7d3316Smrg	  if test "$deplibs_check_method" != pass_all; then
69426e7d3316Smrg	    # We're trying link a shared library against a static one
69436e7d3316Smrg	    # but the system doesn't support it.
69446e7d3316Smrg
69456e7d3316Smrg	    # Just print a warning and add the library to dependency_libs so
69466e7d3316Smrg	    # that the program can be linked against the static library.
69476e7d3316Smrg	    echo
69486e7d3316Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
69496e7d3316Smrg	    echo "*** I have the capability to make that library automatically link in when"
69506e7d3316Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
69516e7d3316Smrg	    echo "*** shared version of the library, which you do not appear to have."
69526e7d3316Smrg	    if test "$module" = yes; then
69536e7d3316Smrg	      echo "*** But as you try to build a module library, libtool will still create "
69546e7d3316Smrg	      echo "*** a static module, that should work as long as the dlopening application"
69556e7d3316Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
69566e7d3316Smrg	      if test -z "$global_symbol_pipe"; then
69576e7d3316Smrg		echo
69586e7d3316Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69596e7d3316Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
69606e7d3316Smrg		echo "*** not find such a program.  So, this module is probably useless."
69616e7d3316Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
69626e7d3316Smrg	      fi
69636e7d3316Smrg	      if test "$build_old_libs" = no; then
69646e7d3316Smrg		build_libtool_libs=module
69656e7d3316Smrg		build_old_libs=yes
69666e7d3316Smrg	      else
69676e7d3316Smrg		build_libtool_libs=no
69686e7d3316Smrg	      fi
69696e7d3316Smrg	    fi
69706e7d3316Smrg	  else
69716e7d3316Smrg	    deplibs="$dir/$old_library $deplibs"
69726e7d3316Smrg	    link_static=yes
69736e7d3316Smrg	  fi
69746e7d3316Smrg	fi # link shared/static library?
69756e7d3316Smrg
69766e7d3316Smrg	if test "$linkmode" = lib; then
69776e7d3316Smrg	  if test -n "$dependency_libs" &&
69786e7d3316Smrg	     { test "$hardcode_into_libs" != yes ||
69796e7d3316Smrg	       test "$build_old_libs" = yes ||
69806e7d3316Smrg	       test "$link_static" = yes; }; then
69816e7d3316Smrg	    # Extract -R from dependency_libs
69826e7d3316Smrg	    temp_deplibs=
69836e7d3316Smrg	    for libdir in $dependency_libs; do
69846e7d3316Smrg	      case $libdir in
69856e7d3316Smrg	      -R*) func_stripname '-R' '' "$libdir"
69866e7d3316Smrg	           temp_xrpath=$func_stripname_result
69876e7d3316Smrg		   case " $xrpath " in
69886e7d3316Smrg		   *" $temp_xrpath "*) ;;
698997cf2ee2Smrg		   *) func_append xrpath " $temp_xrpath";;
69906e7d3316Smrg		   esac;;
699197cf2ee2Smrg	      *) func_append temp_deplibs " $libdir";;
69926e7d3316Smrg	      esac
69936e7d3316Smrg	    done
69946e7d3316Smrg	    dependency_libs="$temp_deplibs"
69956e7d3316Smrg	  fi
69966e7d3316Smrg
699797cf2ee2Smrg	  func_append newlib_search_path " $absdir"
69986e7d3316Smrg	  # Link against this library
69996e7d3316Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
70006e7d3316Smrg	  # ... and its dependency_libs
70016e7d3316Smrg	  tmp_libs=
70026e7d3316Smrg	  for deplib in $dependency_libs; do
70036e7d3316Smrg	    newdependency_libs="$deplib $newdependency_libs"
700497cf2ee2Smrg	    case $deplib in
700597cf2ee2Smrg              -L*) func_stripname '-L' '' "$deplib"
700697cf2ee2Smrg                   func_resolve_sysroot "$func_stripname_result";;
700797cf2ee2Smrg              *) func_resolve_sysroot "$deplib" ;;
700897cf2ee2Smrg            esac
700997cf2ee2Smrg	    if $opt_preserve_dup_deps ; then
70106e7d3316Smrg	      case "$tmp_libs " in
701197cf2ee2Smrg	      *" $func_resolve_sysroot_result "*)
701297cf2ee2Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
70136e7d3316Smrg	      esac
70146e7d3316Smrg	    fi
701597cf2ee2Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
70166e7d3316Smrg	  done
70176e7d3316Smrg
70186e7d3316Smrg	  if test "$link_all_deplibs" != no; then
70196e7d3316Smrg	    # Add the search paths of all dependency libraries
70206e7d3316Smrg	    for deplib in $dependency_libs; do
70216e7d3316Smrg	      path=
70226e7d3316Smrg	      case $deplib in
70236e7d3316Smrg	      -L*) path="$deplib" ;;
70246e7d3316Smrg	      *.la)
702597cf2ee2Smrg	        func_resolve_sysroot "$deplib"
702697cf2ee2Smrg	        deplib=$func_resolve_sysroot_result
70276e7d3316Smrg	        func_dirname "$deplib" "" "."
702897cf2ee2Smrg		dir=$func_dirname_result
70296e7d3316Smrg		# We need an absolute path.
70306e7d3316Smrg		case $dir in
70316e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
70326e7d3316Smrg		*)
70336e7d3316Smrg		  absdir=`cd "$dir" && pwd`
70346e7d3316Smrg		  if test -z "$absdir"; then
70356e7d3316Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
70366e7d3316Smrg		    absdir="$dir"
70376e7d3316Smrg		  fi
70386e7d3316Smrg		  ;;
70396e7d3316Smrg		esac
70406e7d3316Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
70416e7d3316Smrg		case $host in
70426e7d3316Smrg		*-*-darwin*)
70436e7d3316Smrg		  depdepl=
70446e7d3316Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
70456e7d3316Smrg		  if test -n "$deplibrary_names" ; then
70466e7d3316Smrg		    for tmp in $deplibrary_names ; do
70476e7d3316Smrg		      depdepl=$tmp
70486e7d3316Smrg		    done
70496e7d3316Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
70506e7d3316Smrg		      depdepl="$absdir/$objdir/$depdepl"
70516e7d3316Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
70526e7d3316Smrg                      if test -z "$darwin_install_name"; then
70536e7d3316Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
70546e7d3316Smrg                      fi
705597cf2ee2Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
705697cf2ee2Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
70576e7d3316Smrg		      path=
70586e7d3316Smrg		    fi
70596e7d3316Smrg		  fi
70606e7d3316Smrg		  ;;
70616e7d3316Smrg		*)
70626e7d3316Smrg		  path="-L$absdir/$objdir"
70636e7d3316Smrg		  ;;
70646e7d3316Smrg		esac
70656e7d3316Smrg		else
70666e7d3316Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
70676e7d3316Smrg		  test -z "$libdir" && \
70686e7d3316Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
70696e7d3316Smrg		  test "$absdir" != "$libdir" && \
70706e7d3316Smrg		    func_warning "\`$deplib' seems to be moved"
70716e7d3316Smrg
70726e7d3316Smrg		  path="-L$absdir"
70736e7d3316Smrg		fi
70746e7d3316Smrg		;;
70756e7d3316Smrg	      esac
70766e7d3316Smrg	      case " $deplibs " in
70776e7d3316Smrg	      *" $path "*) ;;
70786e7d3316Smrg	      *) deplibs="$path $deplibs" ;;
70796e7d3316Smrg	      esac
70806e7d3316Smrg	    done
70816e7d3316Smrg	  fi # link_all_deplibs != no
70826e7d3316Smrg	fi # linkmode = lib
70836e7d3316Smrg      done # for deplib in $libs
70846e7d3316Smrg      if test "$pass" = link; then
70856e7d3316Smrg	if test "$linkmode" = "prog"; then
70866e7d3316Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
70876e7d3316Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
70886e7d3316Smrg	else
70896e7d3316Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
70906e7d3316Smrg	fi
70916e7d3316Smrg      fi
70926e7d3316Smrg      dependency_libs="$newdependency_libs"
70936e7d3316Smrg      if test "$pass" = dlpreopen; then
70946e7d3316Smrg	# Link the dlpreopened libraries before other libraries
70956e7d3316Smrg	for deplib in $save_deplibs; do
70966e7d3316Smrg	  deplibs="$deplib $deplibs"
70976e7d3316Smrg	done
70986e7d3316Smrg      fi
70996e7d3316Smrg      if test "$pass" != dlopen; then
71006e7d3316Smrg	if test "$pass" != conv; then
71016e7d3316Smrg	  # Make sure lib_search_path contains only unique directories.
71026e7d3316Smrg	  lib_search_path=
71036e7d3316Smrg	  for dir in $newlib_search_path; do
71046e7d3316Smrg	    case "$lib_search_path " in
71056e7d3316Smrg	    *" $dir "*) ;;
710697cf2ee2Smrg	    *) func_append lib_search_path " $dir" ;;
71076e7d3316Smrg	    esac
71086e7d3316Smrg	  done
71096e7d3316Smrg	  newlib_search_path=
71106e7d3316Smrg	fi
71116e7d3316Smrg
71126e7d3316Smrg	if test "$linkmode,$pass" != "prog,link"; then
71136e7d3316Smrg	  vars="deplibs"
71146e7d3316Smrg	else
71156e7d3316Smrg	  vars="compile_deplibs finalize_deplibs"
71166e7d3316Smrg	fi
71176e7d3316Smrg	for var in $vars dependency_libs; do
71186e7d3316Smrg	  # Add libraries to $var in reverse order
71196e7d3316Smrg	  eval tmp_libs=\"\$$var\"
71206e7d3316Smrg	  new_libs=
71216e7d3316Smrg	  for deplib in $tmp_libs; do
71226e7d3316Smrg	    # FIXME: Pedantically, this is the right thing to do, so
71236e7d3316Smrg	    #        that some nasty dependency loop isn't accidentally
71246e7d3316Smrg	    #        broken:
71256e7d3316Smrg	    #new_libs="$deplib $new_libs"
71266e7d3316Smrg	    # Pragmatically, this seems to cause very few problems in
71276e7d3316Smrg	    # practice:
71286e7d3316Smrg	    case $deplib in
71296e7d3316Smrg	    -L*) new_libs="$deplib $new_libs" ;;
71306e7d3316Smrg	    -R*) ;;
71316e7d3316Smrg	    *)
71326e7d3316Smrg	      # And here is the reason: when a library appears more
71336e7d3316Smrg	      # than once as an explicit dependence of a library, or
71346e7d3316Smrg	      # is implicitly linked in more than once by the
71356e7d3316Smrg	      # compiler, it is considered special, and multiple
71366e7d3316Smrg	      # occurrences thereof are not removed.  Compare this
71376e7d3316Smrg	      # with having the same library being listed as a
71386e7d3316Smrg	      # dependency of multiple other libraries: in this case,
71396e7d3316Smrg	      # we know (pedantically, we assume) the library does not
71406e7d3316Smrg	      # need to be listed more than once, so we keep only the
71416e7d3316Smrg	      # last copy.  This is not always right, but it is rare
71426e7d3316Smrg	      # enough that we require users that really mean to play
71436e7d3316Smrg	      # such unportable linking tricks to link the library
71446e7d3316Smrg	      # using -Wl,-lname, so that libtool does not consider it
71456e7d3316Smrg	      # for duplicate removal.
71466e7d3316Smrg	      case " $specialdeplibs " in
71476e7d3316Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
71486e7d3316Smrg	      *)
71496e7d3316Smrg		case " $new_libs " in
71506e7d3316Smrg		*" $deplib "*) ;;
71516e7d3316Smrg		*) new_libs="$deplib $new_libs" ;;
71526e7d3316Smrg		esac
71536e7d3316Smrg		;;
71546e7d3316Smrg	      esac
71556e7d3316Smrg	      ;;
71566e7d3316Smrg	    esac
71576e7d3316Smrg	  done
71586e7d3316Smrg	  tmp_libs=
71596e7d3316Smrg	  for deplib in $new_libs; do
71606e7d3316Smrg	    case $deplib in
71616e7d3316Smrg	    -L*)
71626e7d3316Smrg	      case " $tmp_libs " in
71636e7d3316Smrg	      *" $deplib "*) ;;
716497cf2ee2Smrg	      *) func_append tmp_libs " $deplib" ;;
71656e7d3316Smrg	      esac
71666e7d3316Smrg	      ;;
716797cf2ee2Smrg	    *) func_append tmp_libs " $deplib" ;;
71686e7d3316Smrg	    esac
71696e7d3316Smrg	  done
71706e7d3316Smrg	  eval $var=\"$tmp_libs\"
71716e7d3316Smrg	done # for var
71726e7d3316Smrg      fi
71736e7d3316Smrg      # Last step: remove runtime libs from dependency_libs
71746e7d3316Smrg      # (they stay in deplibs)
71756e7d3316Smrg      tmp_libs=
71766e7d3316Smrg      for i in $dependency_libs ; do
71776e7d3316Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
71786e7d3316Smrg	*" $i "*)
71796e7d3316Smrg	  i=""
71806e7d3316Smrg	  ;;
71816e7d3316Smrg	esac
71826e7d3316Smrg	if test -n "$i" ; then
718397cf2ee2Smrg	  func_append tmp_libs " $i"
71846e7d3316Smrg	fi
71856e7d3316Smrg      done
71866e7d3316Smrg      dependency_libs=$tmp_libs
71876e7d3316Smrg    done # for pass
71886e7d3316Smrg    if test "$linkmode" = prog; then
71896e7d3316Smrg      dlfiles="$newdlfiles"
71906e7d3316Smrg    fi
71916e7d3316Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
71926e7d3316Smrg      dlprefiles="$newdlprefiles"
71936e7d3316Smrg    fi
71946e7d3316Smrg
71956e7d3316Smrg    case $linkmode in
71966e7d3316Smrg    oldlib)
71976e7d3316Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
71986e7d3316Smrg	func_warning "\`-dlopen' is ignored for archives"
71996e7d3316Smrg      fi
72006e7d3316Smrg
72016e7d3316Smrg      case " $deplibs" in
72026e7d3316Smrg      *\ -l* | *\ -L*)
72036e7d3316Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
72046e7d3316Smrg      esac
72056e7d3316Smrg
72066e7d3316Smrg      test -n "$rpath" && \
72076e7d3316Smrg	func_warning "\`-rpath' is ignored for archives"
72086e7d3316Smrg
72096e7d3316Smrg      test -n "$xrpath" && \
72106e7d3316Smrg	func_warning "\`-R' is ignored for archives"
72116e7d3316Smrg
72126e7d3316Smrg      test -n "$vinfo" && \
72136e7d3316Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
72146e7d3316Smrg
72156e7d3316Smrg      test -n "$release" && \
72166e7d3316Smrg	func_warning "\`-release' is ignored for archives"
72176e7d3316Smrg
72186e7d3316Smrg      test -n "$export_symbols$export_symbols_regex" && \
72196e7d3316Smrg	func_warning "\`-export-symbols' is ignored for archives"
72206e7d3316Smrg
72216e7d3316Smrg      # Now set the variables for building old libraries.
72226e7d3316Smrg      build_libtool_libs=no
72236e7d3316Smrg      oldlibs="$output"
722497cf2ee2Smrg      func_append objs "$old_deplibs"
72256e7d3316Smrg      ;;
72266e7d3316Smrg
72276e7d3316Smrg    lib)
72286e7d3316Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
72296e7d3316Smrg      case $outputname in
72306e7d3316Smrg      lib*)
72316e7d3316Smrg	func_stripname 'lib' '.la' "$outputname"
72326e7d3316Smrg	name=$func_stripname_result
72336e7d3316Smrg	eval shared_ext=\"$shrext_cmds\"
72346e7d3316Smrg	eval libname=\"$libname_spec\"
72356e7d3316Smrg	;;
72366e7d3316Smrg      *)
72376e7d3316Smrg	test "$module" = no && \
72386e7d3316Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
72396e7d3316Smrg
72406e7d3316Smrg	if test "$need_lib_prefix" != no; then
72416e7d3316Smrg	  # Add the "lib" prefix for modules if required
72426e7d3316Smrg	  func_stripname '' '.la' "$outputname"
72436e7d3316Smrg	  name=$func_stripname_result
72446e7d3316Smrg	  eval shared_ext=\"$shrext_cmds\"
72456e7d3316Smrg	  eval libname=\"$libname_spec\"
72466e7d3316Smrg	else
72476e7d3316Smrg	  func_stripname '' '.la' "$outputname"
72486e7d3316Smrg	  libname=$func_stripname_result
72496e7d3316Smrg	fi
72506e7d3316Smrg	;;
72516e7d3316Smrg      esac
72526e7d3316Smrg
72536e7d3316Smrg      if test -n "$objs"; then
72546e7d3316Smrg	if test "$deplibs_check_method" != pass_all; then
72556e7d3316Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
72566e7d3316Smrg	else
72576e7d3316Smrg	  echo
72586e7d3316Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
72596e7d3316Smrg	  $ECHO "*** objects $objs is not portable!"
726097cf2ee2Smrg	  func_append libobjs " $objs"
72616e7d3316Smrg	fi
72626e7d3316Smrg      fi
72636e7d3316Smrg
72646e7d3316Smrg      test "$dlself" != no && \
72656e7d3316Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
72666e7d3316Smrg
72676e7d3316Smrg      set dummy $rpath
72686e7d3316Smrg      shift
72696e7d3316Smrg      test "$#" -gt 1 && \
72706e7d3316Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
72716e7d3316Smrg
72726e7d3316Smrg      install_libdir="$1"
72736e7d3316Smrg
72746e7d3316Smrg      oldlibs=
72756e7d3316Smrg      if test -z "$rpath"; then
72766e7d3316Smrg	if test "$build_libtool_libs" = yes; then
72776e7d3316Smrg	  # Building a libtool convenience library.
72786e7d3316Smrg	  # Some compilers have problems with a `.al' extension so
72796e7d3316Smrg	  # convenience libraries should have the same extension an
72806e7d3316Smrg	  # archive normally would.
72816e7d3316Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
72826e7d3316Smrg	  build_libtool_libs=convenience
72836e7d3316Smrg	  build_old_libs=yes
72846e7d3316Smrg	fi
72856e7d3316Smrg
72866e7d3316Smrg	test -n "$vinfo" && \
72876e7d3316Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
72886e7d3316Smrg
72896e7d3316Smrg	test -n "$release" && \
72906e7d3316Smrg	  func_warning "\`-release' is ignored for convenience libraries"
72916e7d3316Smrg      else
72926e7d3316Smrg
72936e7d3316Smrg	# Parse the version information argument.
72946e7d3316Smrg	save_ifs="$IFS"; IFS=':'
72956e7d3316Smrg	set dummy $vinfo 0 0 0
72966e7d3316Smrg	shift
72976e7d3316Smrg	IFS="$save_ifs"
72986e7d3316Smrg
72996e7d3316Smrg	test -n "$7" && \
73006e7d3316Smrg	  func_fatal_help "too many parameters to \`-version-info'"
73016e7d3316Smrg
73026e7d3316Smrg	# convert absolute version numbers to libtool ages
73036e7d3316Smrg	# this retains compatibility with .la files and attempts
73046e7d3316Smrg	# to make the code below a bit more comprehensible
73056e7d3316Smrg
73066e7d3316Smrg	case $vinfo_number in
73076e7d3316Smrg	yes)
73086e7d3316Smrg	  number_major="$1"
73096e7d3316Smrg	  number_minor="$2"
73106e7d3316Smrg	  number_revision="$3"
73116e7d3316Smrg	  #
73126e7d3316Smrg	  # There are really only two kinds -- those that
73136e7d3316Smrg	  # use the current revision as the major version
73146e7d3316Smrg	  # and those that subtract age and use age as
73156e7d3316Smrg	  # a minor version.  But, then there is irix
73166e7d3316Smrg	  # which has an extra 1 added just for fun
73176e7d3316Smrg	  #
73186e7d3316Smrg	  case $version_type in
73196e7d3316Smrg	  darwin|linux|osf|windows|none)
73206e7d3316Smrg	    func_arith $number_major + $number_minor
73216e7d3316Smrg	    current=$func_arith_result
73226e7d3316Smrg	    age="$number_minor"
73236e7d3316Smrg	    revision="$number_revision"
73246e7d3316Smrg	    ;;
73256e7d3316Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
73266e7d3316Smrg	    current="$number_major"
73276e7d3316Smrg	    revision="$number_minor"
73286e7d3316Smrg	    age="0"
73296e7d3316Smrg	    ;;
73306e7d3316Smrg	  irix|nonstopux)
73316e7d3316Smrg	    func_arith $number_major + $number_minor
73326e7d3316Smrg	    current=$func_arith_result
73336e7d3316Smrg	    age="$number_minor"
73346e7d3316Smrg	    revision="$number_minor"
73356e7d3316Smrg	    lt_irix_increment=no
73366e7d3316Smrg	    ;;
73376e7d3316Smrg	  esac
73386e7d3316Smrg	  ;;
73396e7d3316Smrg	no)
73406e7d3316Smrg	  current="$1"
73416e7d3316Smrg	  revision="$2"
73426e7d3316Smrg	  age="$3"
73436e7d3316Smrg	  ;;
73446e7d3316Smrg	esac
73456e7d3316Smrg
73466e7d3316Smrg	# Check that each of the things are valid numbers.
73476e7d3316Smrg	case $current in
73486e7d3316Smrg	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]) ;;
73496e7d3316Smrg	*)
73506e7d3316Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
73516e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73526e7d3316Smrg	  ;;
73536e7d3316Smrg	esac
73546e7d3316Smrg
73556e7d3316Smrg	case $revision in
73566e7d3316Smrg	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]) ;;
73576e7d3316Smrg	*)
73586e7d3316Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
73596e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73606e7d3316Smrg	  ;;
73616e7d3316Smrg	esac
73626e7d3316Smrg
73636e7d3316Smrg	case $age in
73646e7d3316Smrg	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]) ;;
73656e7d3316Smrg	*)
73666e7d3316Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
73676e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73686e7d3316Smrg	  ;;
73696e7d3316Smrg	esac
73706e7d3316Smrg
73716e7d3316Smrg	if test "$age" -gt "$current"; then
73726e7d3316Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
73736e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73746e7d3316Smrg	fi
73756e7d3316Smrg
73766e7d3316Smrg	# Calculate the version variables.
73776e7d3316Smrg	major=
73786e7d3316Smrg	versuffix=
73796e7d3316Smrg	verstring=
73806e7d3316Smrg	case $version_type in
73816e7d3316Smrg	none) ;;
73826e7d3316Smrg
73836e7d3316Smrg	darwin)
73846e7d3316Smrg	  # Like Linux, but with the current version available in
73856e7d3316Smrg	  # verstring for coding it into the library header
73866e7d3316Smrg	  func_arith $current - $age
73876e7d3316Smrg	  major=.$func_arith_result
73886e7d3316Smrg	  versuffix="$major.$age.$revision"
73896e7d3316Smrg	  # Darwin ld doesn't like 0 for these options...
73906e7d3316Smrg	  func_arith $current + 1
73916e7d3316Smrg	  minor_current=$func_arith_result
73926e7d3316Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
73936e7d3316Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
73946e7d3316Smrg	  ;;
73956e7d3316Smrg
73966e7d3316Smrg	freebsd-aout)
73976e7d3316Smrg	  major=".$current"
73986e7d3316Smrg	  versuffix=".$current.$revision";
73996e7d3316Smrg	  ;;
74006e7d3316Smrg
74016e7d3316Smrg	freebsd-elf)
74026e7d3316Smrg	  major=".$current"
74036e7d3316Smrg	  versuffix=".$current"
74046e7d3316Smrg	  ;;
74056e7d3316Smrg
74066e7d3316Smrg	irix | nonstopux)
74076e7d3316Smrg	  if test "X$lt_irix_increment" = "Xno"; then
74086e7d3316Smrg	    func_arith $current - $age
74096e7d3316Smrg	  else
74106e7d3316Smrg	    func_arith $current - $age + 1
74116e7d3316Smrg	  fi
74126e7d3316Smrg	  major=$func_arith_result
74136e7d3316Smrg
74146e7d3316Smrg	  case $version_type in
74156e7d3316Smrg	    nonstopux) verstring_prefix=nonstopux ;;
74166e7d3316Smrg	    *)         verstring_prefix=sgi ;;
74176e7d3316Smrg	  esac
74186e7d3316Smrg	  verstring="$verstring_prefix$major.$revision"
74196e7d3316Smrg
74206e7d3316Smrg	  # Add in all the interfaces that we are compatible with.
74216e7d3316Smrg	  loop=$revision
74226e7d3316Smrg	  while test "$loop" -ne 0; do
74236e7d3316Smrg	    func_arith $revision - $loop
74246e7d3316Smrg	    iface=$func_arith_result
74256e7d3316Smrg	    func_arith $loop - 1
74266e7d3316Smrg	    loop=$func_arith_result
74276e7d3316Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
74286e7d3316Smrg	  done
74296e7d3316Smrg
74306e7d3316Smrg	  # Before this point, $major must not contain `.'.
74316e7d3316Smrg	  major=.$major
74326e7d3316Smrg	  versuffix="$major.$revision"
74336e7d3316Smrg	  ;;
74346e7d3316Smrg
74356e7d3316Smrg	linux)
74366e7d3316Smrg	  func_arith $current - $age
74376e7d3316Smrg	  major=.$func_arith_result
74386e7d3316Smrg	  versuffix="$major.$age.$revision"
74396e7d3316Smrg	  ;;
74406e7d3316Smrg
74416e7d3316Smrg	osf)
74426e7d3316Smrg	  func_arith $current - $age
74436e7d3316Smrg	  major=.$func_arith_result
74446e7d3316Smrg	  versuffix=".$current.$age.$revision"
74456e7d3316Smrg	  verstring="$current.$age.$revision"
74466e7d3316Smrg
74476e7d3316Smrg	  # Add in all the interfaces that we are compatible with.
74486e7d3316Smrg	  loop=$age
74496e7d3316Smrg	  while test "$loop" -ne 0; do
74506e7d3316Smrg	    func_arith $current - $loop
74516e7d3316Smrg	    iface=$func_arith_result
74526e7d3316Smrg	    func_arith $loop - 1
74536e7d3316Smrg	    loop=$func_arith_result
74546e7d3316Smrg	    verstring="$verstring:${iface}.0"
74556e7d3316Smrg	  done
74566e7d3316Smrg
74576e7d3316Smrg	  # Make executables depend on our current version.
745897cf2ee2Smrg	  func_append verstring ":${current}.0"
74596e7d3316Smrg	  ;;
74606e7d3316Smrg
74616e7d3316Smrg	qnx)
74626e7d3316Smrg	  major=".$current"
74636e7d3316Smrg	  versuffix=".$current"
74646e7d3316Smrg	  ;;
74656e7d3316Smrg
74666e7d3316Smrg	sunos)
74676e7d3316Smrg	  major=".$current"
74686e7d3316Smrg	  versuffix=".$current.$revision"
74696e7d3316Smrg	  ;;
74706e7d3316Smrg
74716e7d3316Smrg	windows)
74726e7d3316Smrg	  # Use '-' rather than '.', since we only want one
74736e7d3316Smrg	  # extension on DOS 8.3 filesystems.
74746e7d3316Smrg	  func_arith $current - $age
74756e7d3316Smrg	  major=$func_arith_result
74766e7d3316Smrg	  versuffix="-$major"
74776e7d3316Smrg	  ;;
74786e7d3316Smrg
74796e7d3316Smrg	*)
74806e7d3316Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
74816e7d3316Smrg	  ;;
74826e7d3316Smrg	esac
74836e7d3316Smrg
74846e7d3316Smrg	# Clear the version info if we defaulted, and they specified a release.
74856e7d3316Smrg	if test -z "$vinfo" && test -n "$release"; then
74866e7d3316Smrg	  major=
74876e7d3316Smrg	  case $version_type in
74886e7d3316Smrg	  darwin)
74896e7d3316Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
74906e7d3316Smrg	    # problems, so we reset it completely
74916e7d3316Smrg	    verstring=
74926e7d3316Smrg	    ;;
74936e7d3316Smrg	  *)
74946e7d3316Smrg	    verstring="0.0"
74956e7d3316Smrg	    ;;
74966e7d3316Smrg	  esac
74976e7d3316Smrg	  if test "$need_version" = no; then
74986e7d3316Smrg	    versuffix=
74996e7d3316Smrg	  else
75006e7d3316Smrg	    versuffix=".0.0"
75016e7d3316Smrg	  fi
75026e7d3316Smrg	fi
75036e7d3316Smrg
75046e7d3316Smrg	# Remove version info from name if versioning should be avoided
75056e7d3316Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
75066e7d3316Smrg	  major=
75076e7d3316Smrg	  versuffix=
75086e7d3316Smrg	  verstring=""
75096e7d3316Smrg	fi
75106e7d3316Smrg
75116e7d3316Smrg	# Check to see if the archive will have undefined symbols.
75126e7d3316Smrg	if test "$allow_undefined" = yes; then
75136e7d3316Smrg	  if test "$allow_undefined_flag" = unsupported; then
75146e7d3316Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
75156e7d3316Smrg	    build_libtool_libs=no
75166e7d3316Smrg	    build_old_libs=yes
75176e7d3316Smrg	  fi
75186e7d3316Smrg	else
75196e7d3316Smrg	  # Don't allow undefined symbols.
75206e7d3316Smrg	  allow_undefined_flag="$no_undefined_flag"
75216e7d3316Smrg	fi
75226e7d3316Smrg
75236e7d3316Smrg      fi
75246e7d3316Smrg
75256e7d3316Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
752697cf2ee2Smrg      func_append libobjs " $symfileobj"
75276e7d3316Smrg      test "X$libobjs" = "X " && libobjs=
75286e7d3316Smrg
752997cf2ee2Smrg      if test "$opt_mode" != relink; then
75306e7d3316Smrg	# Remove our outputs, but don't remove object files since they
75316e7d3316Smrg	# may have been created when compiling PIC objects.
75326e7d3316Smrg	removelist=
75336e7d3316Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
75346e7d3316Smrg	for p in $tempremovelist; do
75356e7d3316Smrg	  case $p in
75366e7d3316Smrg	    *.$objext | *.gcno)
75376e7d3316Smrg	       ;;
75386e7d3316Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
75396e7d3316Smrg	       if test "X$precious_files_regex" != "X"; then
75406e7d3316Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
75416e7d3316Smrg		 then
75426e7d3316Smrg		   continue
75436e7d3316Smrg		 fi
75446e7d3316Smrg	       fi
754597cf2ee2Smrg	       func_append removelist " $p"
75466e7d3316Smrg	       ;;
75476e7d3316Smrg	    *) ;;
75486e7d3316Smrg	  esac
75496e7d3316Smrg	done
75506e7d3316Smrg	test -n "$removelist" && \
75516e7d3316Smrg	  func_show_eval "${RM}r \$removelist"
75526e7d3316Smrg      fi
75536e7d3316Smrg
75546e7d3316Smrg      # Now set the variables for building old libraries.
75556e7d3316Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
755697cf2ee2Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
75576e7d3316Smrg
75586e7d3316Smrg	# Transform .lo files to .o files.
75596e7d3316Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
75606e7d3316Smrg      fi
75616e7d3316Smrg
75626e7d3316Smrg      # Eliminate all temporary directories.
75636e7d3316Smrg      #for path in $notinst_path; do
75646e7d3316Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
75656e7d3316Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
75666e7d3316Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
75676e7d3316Smrg      #done
75686e7d3316Smrg
75696e7d3316Smrg      if test -n "$xrpath"; then
75706e7d3316Smrg	# If the user specified any rpath flags, then add them.
75716e7d3316Smrg	temp_xrpath=
75726e7d3316Smrg	for libdir in $xrpath; do
757397cf2ee2Smrg	  func_replace_sysroot "$libdir"
757497cf2ee2Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
75756e7d3316Smrg	  case "$finalize_rpath " in
75766e7d3316Smrg	  *" $libdir "*) ;;
757797cf2ee2Smrg	  *) func_append finalize_rpath " $libdir" ;;
75786e7d3316Smrg	  esac
75796e7d3316Smrg	done
75806e7d3316Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
75816e7d3316Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
75826e7d3316Smrg	fi
75836e7d3316Smrg      fi
75846e7d3316Smrg
75856e7d3316Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
75866e7d3316Smrg      old_dlfiles="$dlfiles"
75876e7d3316Smrg      dlfiles=
75886e7d3316Smrg      for lib in $old_dlfiles; do
75896e7d3316Smrg	case " $dlprefiles $dlfiles " in
75906e7d3316Smrg	*" $lib "*) ;;
759197cf2ee2Smrg	*) func_append dlfiles " $lib" ;;
75926e7d3316Smrg	esac
75936e7d3316Smrg      done
75946e7d3316Smrg
75956e7d3316Smrg      # Make sure dlprefiles contains only unique files
75966e7d3316Smrg      old_dlprefiles="$dlprefiles"
75976e7d3316Smrg      dlprefiles=
75986e7d3316Smrg      for lib in $old_dlprefiles; do
75996e7d3316Smrg	case "$dlprefiles " in
76006e7d3316Smrg	*" $lib "*) ;;
760197cf2ee2Smrg	*) func_append dlprefiles " $lib" ;;
76026e7d3316Smrg	esac
76036e7d3316Smrg      done
76046e7d3316Smrg
76056e7d3316Smrg      if test "$build_libtool_libs" = yes; then
76066e7d3316Smrg	if test -n "$rpath"; then
76076e7d3316Smrg	  case $host in
76086e7d3316Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
76096e7d3316Smrg	    # these systems don't actually have a c library (as such)!
76106e7d3316Smrg	    ;;
76116e7d3316Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
76126e7d3316Smrg	    # Rhapsody C library is in the System framework
761397cf2ee2Smrg	    func_append deplibs " System.ltframework"
76146e7d3316Smrg	    ;;
76156e7d3316Smrg	  *-*-netbsd*)
76166e7d3316Smrg	    # Don't link with libc until the a.out ld.so is fixed.
76176e7d3316Smrg	    ;;
76186e7d3316Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
76196e7d3316Smrg	    # Do not include libc due to us having libc/libc_r.
76206e7d3316Smrg	    ;;
76216e7d3316Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
76226e7d3316Smrg	    # Causes problems with __ctype
76236e7d3316Smrg	    ;;
76246e7d3316Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
76256e7d3316Smrg	    # Compiler inserts libc in the correct place for threads to work
76266e7d3316Smrg	    ;;
76276e7d3316Smrg	  *)
76286e7d3316Smrg	    # Add libc to deplibs on all other systems if necessary.
76296e7d3316Smrg	    if test "$build_libtool_need_lc" = "yes"; then
763097cf2ee2Smrg	      func_append deplibs " -lc"
76316e7d3316Smrg	    fi
76326e7d3316Smrg	    ;;
76336e7d3316Smrg	  esac
76346e7d3316Smrg	fi
76356e7d3316Smrg
76366e7d3316Smrg	# Transform deplibs into only deplibs that can be linked in shared.
76376e7d3316Smrg	name_save=$name
76386e7d3316Smrg	libname_save=$libname
76396e7d3316Smrg	release_save=$release
76406e7d3316Smrg	versuffix_save=$versuffix
76416e7d3316Smrg	major_save=$major
76426e7d3316Smrg	# I'm not sure if I'm treating the release correctly.  I think
76436e7d3316Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
76446e7d3316Smrg	# add it in twice.  Is that correct?
76456e7d3316Smrg	release=""
76466e7d3316Smrg	versuffix=""
76476e7d3316Smrg	major=""
76486e7d3316Smrg	newdeplibs=
76496e7d3316Smrg	droppeddeps=no
76506e7d3316Smrg	case $deplibs_check_method in
76516e7d3316Smrg	pass_all)
76526e7d3316Smrg	  # Don't check for shared/static.  Everything works.
76536e7d3316Smrg	  # This might be a little naive.  We might want to check
76546e7d3316Smrg	  # whether the library exists or not.  But this is on
76556e7d3316Smrg	  # osf3 & osf4 and I'm not really sure... Just
76566e7d3316Smrg	  # implementing what was already the behavior.
76576e7d3316Smrg	  newdeplibs=$deplibs
76586e7d3316Smrg	  ;;
76596e7d3316Smrg	test_compile)
76606e7d3316Smrg	  # This code stresses the "libraries are programs" paradigm to its
76616e7d3316Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
76626e7d3316Smrg	  # against the deplibs as a proxy for the library.  Then we can check
76636e7d3316Smrg	  # whether they linked in statically or dynamically with ldd.
76646e7d3316Smrg	  $opt_dry_run || $RM conftest.c
76656e7d3316Smrg	  cat > conftest.c <<EOF
76666e7d3316Smrg	  int main() { return 0; }
76676e7d3316SmrgEOF
76686e7d3316Smrg	  $opt_dry_run || $RM conftest
76696e7d3316Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
76706e7d3316Smrg	    ldd_output=`ldd conftest`
76716e7d3316Smrg	    for i in $deplibs; do
76726e7d3316Smrg	      case $i in
76736e7d3316Smrg	      -l*)
76746e7d3316Smrg		func_stripname -l '' "$i"
76756e7d3316Smrg		name=$func_stripname_result
76766e7d3316Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
76776e7d3316Smrg		  case " $predeps $postdeps " in
76786e7d3316Smrg		  *" $i "*)
767997cf2ee2Smrg		    func_append newdeplibs " $i"
76806e7d3316Smrg		    i=""
76816e7d3316Smrg		    ;;
76826e7d3316Smrg		  esac
76836e7d3316Smrg		fi
76846e7d3316Smrg		if test -n "$i" ; then
76856e7d3316Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
76866e7d3316Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
76876e7d3316Smrg		  set dummy $deplib_matches; shift
76886e7d3316Smrg		  deplib_match=$1
76896e7d3316Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
769097cf2ee2Smrg		    func_append newdeplibs " $i"
76916e7d3316Smrg		  else
76926e7d3316Smrg		    droppeddeps=yes
76936e7d3316Smrg		    echo
76946e7d3316Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
76956e7d3316Smrg		    echo "*** I have the capability to make that library automatically link in when"
76966e7d3316Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
76976e7d3316Smrg		    echo "*** shared version of the library, which I believe you do not have"
76986e7d3316Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
76996e7d3316Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
77006e7d3316Smrg		  fi
77016e7d3316Smrg		fi
77026e7d3316Smrg		;;
77036e7d3316Smrg	      *)
770497cf2ee2Smrg		func_append newdeplibs " $i"
77056e7d3316Smrg		;;
77066e7d3316Smrg	      esac
77076e7d3316Smrg	    done
77086e7d3316Smrg	  else
77096e7d3316Smrg	    # Error occurred in the first compile.  Let's try to salvage
77106e7d3316Smrg	    # the situation: Compile a separate program for each library.
77116e7d3316Smrg	    for i in $deplibs; do
77126e7d3316Smrg	      case $i in
77136e7d3316Smrg	      -l*)
77146e7d3316Smrg		func_stripname -l '' "$i"
77156e7d3316Smrg		name=$func_stripname_result
77166e7d3316Smrg		$opt_dry_run || $RM conftest
77176e7d3316Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
77186e7d3316Smrg		  ldd_output=`ldd conftest`
77196e7d3316Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
77206e7d3316Smrg		    case " $predeps $postdeps " in
77216e7d3316Smrg		    *" $i "*)
772297cf2ee2Smrg		      func_append newdeplibs " $i"
77236e7d3316Smrg		      i=""
77246e7d3316Smrg		      ;;
77256e7d3316Smrg		    esac
77266e7d3316Smrg		  fi
77276e7d3316Smrg		  if test -n "$i" ; then
77286e7d3316Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
77296e7d3316Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
77306e7d3316Smrg		    set dummy $deplib_matches; shift
77316e7d3316Smrg		    deplib_match=$1
77326e7d3316Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
773397cf2ee2Smrg		      func_append newdeplibs " $i"
77346e7d3316Smrg		    else
77356e7d3316Smrg		      droppeddeps=yes
77366e7d3316Smrg		      echo
77376e7d3316Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77386e7d3316Smrg		      echo "*** I have the capability to make that library automatically link in when"
77396e7d3316Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
77406e7d3316Smrg		      echo "*** shared version of the library, which you do not appear to have"
77416e7d3316Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
77426e7d3316Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
77436e7d3316Smrg		    fi
77446e7d3316Smrg		  fi
77456e7d3316Smrg		else
77466e7d3316Smrg		  droppeddeps=yes
77476e7d3316Smrg		  echo
77486e7d3316Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
77496e7d3316Smrg		  echo "*** make it link in!  You will probably need to install it or some"
77506e7d3316Smrg		  echo "*** library that it depends on before this library will be fully"
77516e7d3316Smrg		  echo "*** functional.  Installing it before continuing would be even better."
77526e7d3316Smrg		fi
77536e7d3316Smrg		;;
77546e7d3316Smrg	      *)
775597cf2ee2Smrg		func_append newdeplibs " $i"
77566e7d3316Smrg		;;
77576e7d3316Smrg	      esac
77586e7d3316Smrg	    done
77596e7d3316Smrg	  fi
77606e7d3316Smrg	  ;;
77616e7d3316Smrg	file_magic*)
77626e7d3316Smrg	  set dummy $deplibs_check_method; shift
77636e7d3316Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
77646e7d3316Smrg	  for a_deplib in $deplibs; do
77656e7d3316Smrg	    case $a_deplib in
77666e7d3316Smrg	    -l*)
77676e7d3316Smrg	      func_stripname -l '' "$a_deplib"
77686e7d3316Smrg	      name=$func_stripname_result
77696e7d3316Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
77706e7d3316Smrg		case " $predeps $postdeps " in
77716e7d3316Smrg		*" $a_deplib "*)
777297cf2ee2Smrg		  func_append newdeplibs " $a_deplib"
77736e7d3316Smrg		  a_deplib=""
77746e7d3316Smrg		  ;;
77756e7d3316Smrg		esac
77766e7d3316Smrg	      fi
77776e7d3316Smrg	      if test -n "$a_deplib" ; then
77786e7d3316Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
777997cf2ee2Smrg		if test -n "$file_magic_glob"; then
778097cf2ee2Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
778197cf2ee2Smrg		else
778297cf2ee2Smrg		  libnameglob=$libname
778397cf2ee2Smrg		fi
778497cf2ee2Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
77856e7d3316Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
778697cf2ee2Smrg		  if test "$want_nocaseglob" = yes; then
778797cf2ee2Smrg		    shopt -s nocaseglob
778897cf2ee2Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
778997cf2ee2Smrg		    $nocaseglob
779097cf2ee2Smrg		  else
779197cf2ee2Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
779297cf2ee2Smrg		  fi
77936e7d3316Smrg		  for potent_lib in $potential_libs; do
77946e7d3316Smrg		      # Follow soft links.
77956e7d3316Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
77966e7d3316Smrg			 $GREP " -> " >/dev/null; then
77976e7d3316Smrg			continue
77986e7d3316Smrg		      fi
77996e7d3316Smrg		      # The statement above tries to avoid entering an
78006e7d3316Smrg		      # endless loop below, in case of cyclic links.
78016e7d3316Smrg		      # We might still enter an endless loop, since a link
78026e7d3316Smrg		      # loop can be closed while we follow links,
78036e7d3316Smrg		      # but so what?
78046e7d3316Smrg		      potlib="$potent_lib"
78056e7d3316Smrg		      while test -h "$potlib" 2>/dev/null; do
78066e7d3316Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
78076e7d3316Smrg			case $potliblink in
78086e7d3316Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78096e7d3316Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
78106e7d3316Smrg			esac
78116e7d3316Smrg		      done
78126e7d3316Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
78136e7d3316Smrg			 $SED -e 10q |
78146e7d3316Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
781597cf2ee2Smrg			func_append newdeplibs " $a_deplib"
78166e7d3316Smrg			a_deplib=""
78176e7d3316Smrg			break 2
78186e7d3316Smrg		      fi
78196e7d3316Smrg		  done
78206e7d3316Smrg		done
78216e7d3316Smrg	      fi
78226e7d3316Smrg	      if test -n "$a_deplib" ; then
78236e7d3316Smrg		droppeddeps=yes
78246e7d3316Smrg		echo
78256e7d3316Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78266e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
78276e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78286e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
78296e7d3316Smrg		echo "*** because I did check the linker path looking for a file starting"
78306e7d3316Smrg		if test -z "$potlib" ; then
78316e7d3316Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
78326e7d3316Smrg		else
78336e7d3316Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
78346e7d3316Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
78356e7d3316Smrg		fi
78366e7d3316Smrg	      fi
78376e7d3316Smrg	      ;;
78386e7d3316Smrg	    *)
78396e7d3316Smrg	      # Add a -L argument.
784097cf2ee2Smrg	      func_append newdeplibs " $a_deplib"
78416e7d3316Smrg	      ;;
78426e7d3316Smrg	    esac
78436e7d3316Smrg	  done # Gone through all deplibs.
78446e7d3316Smrg	  ;;
78456e7d3316Smrg	match_pattern*)
78466e7d3316Smrg	  set dummy $deplibs_check_method; shift
78476e7d3316Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
78486e7d3316Smrg	  for a_deplib in $deplibs; do
78496e7d3316Smrg	    case $a_deplib in
78506e7d3316Smrg	    -l*)
78516e7d3316Smrg	      func_stripname -l '' "$a_deplib"
78526e7d3316Smrg	      name=$func_stripname_result
78536e7d3316Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
78546e7d3316Smrg		case " $predeps $postdeps " in
78556e7d3316Smrg		*" $a_deplib "*)
785697cf2ee2Smrg		  func_append newdeplibs " $a_deplib"
78576e7d3316Smrg		  a_deplib=""
78586e7d3316Smrg		  ;;
78596e7d3316Smrg		esac
78606e7d3316Smrg	      fi
78616e7d3316Smrg	      if test -n "$a_deplib" ; then
78626e7d3316Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
78636e7d3316Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78646e7d3316Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
78656e7d3316Smrg		  for potent_lib in $potential_libs; do
78666e7d3316Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
78676e7d3316Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
78686e7d3316Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
786997cf2ee2Smrg		      func_append newdeplibs " $a_deplib"
78706e7d3316Smrg		      a_deplib=""
78716e7d3316Smrg		      break 2
78726e7d3316Smrg		    fi
78736e7d3316Smrg		  done
78746e7d3316Smrg		done
78756e7d3316Smrg	      fi
78766e7d3316Smrg	      if test -n "$a_deplib" ; then
78776e7d3316Smrg		droppeddeps=yes
78786e7d3316Smrg		echo
78796e7d3316Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78806e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
78816e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78826e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
78836e7d3316Smrg		echo "*** because I did check the linker path looking for a file starting"
78846e7d3316Smrg		if test -z "$potlib" ; then
78856e7d3316Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
78866e7d3316Smrg		else
78876e7d3316Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
78886e7d3316Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
78896e7d3316Smrg		fi
78906e7d3316Smrg	      fi
78916e7d3316Smrg	      ;;
78926e7d3316Smrg	    *)
78936e7d3316Smrg	      # Add a -L argument.
789497cf2ee2Smrg	      func_append newdeplibs " $a_deplib"
78956e7d3316Smrg	      ;;
78966e7d3316Smrg	    esac
78976e7d3316Smrg	  done # Gone through all deplibs.
78986e7d3316Smrg	  ;;
78996e7d3316Smrg	none | unknown | *)
79006e7d3316Smrg	  newdeplibs=""
79016e7d3316Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
79026e7d3316Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
79036e7d3316Smrg	    for i in $predeps $postdeps ; do
79046e7d3316Smrg	      # can't use Xsed below, because $i might contain '/'
79056e7d3316Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
79066e7d3316Smrg	    done
79076e7d3316Smrg	  fi
79086e7d3316Smrg	  case $tmp_deplibs in
79096e7d3316Smrg	  *[!\	\ ]*)
79106e7d3316Smrg	    echo
79116e7d3316Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
79126e7d3316Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
79136e7d3316Smrg	    else
79146e7d3316Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
79156e7d3316Smrg	    fi
79166e7d3316Smrg	    echo "*** All declared inter-library dependencies are being dropped."
79176e7d3316Smrg	    droppeddeps=yes
79186e7d3316Smrg	    ;;
79196e7d3316Smrg	  esac
79206e7d3316Smrg	  ;;
79216e7d3316Smrg	esac
79226e7d3316Smrg	versuffix=$versuffix_save
79236e7d3316Smrg	major=$major_save
79246e7d3316Smrg	release=$release_save
79256e7d3316Smrg	libname=$libname_save
79266e7d3316Smrg	name=$name_save
79276e7d3316Smrg
79286e7d3316Smrg	case $host in
79296e7d3316Smrg	*-*-rhapsody* | *-*-darwin1.[012])
79306e7d3316Smrg	  # On Rhapsody replace the C library with the System framework
79316e7d3316Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
79326e7d3316Smrg	  ;;
79336e7d3316Smrg	esac
79346e7d3316Smrg
79356e7d3316Smrg	if test "$droppeddeps" = yes; then
79366e7d3316Smrg	  if test "$module" = yes; then
79376e7d3316Smrg	    echo
79386e7d3316Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
79396e7d3316Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
79406e7d3316Smrg	    echo "*** a static module, that should work as long as the dlopening"
79416e7d3316Smrg	    echo "*** application is linked with the -dlopen flag."
79426e7d3316Smrg	    if test -z "$global_symbol_pipe"; then
79436e7d3316Smrg	      echo
79446e7d3316Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79456e7d3316Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
79466e7d3316Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79476e7d3316Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
79486e7d3316Smrg	    fi
79496e7d3316Smrg	    if test "$build_old_libs" = no; then
79506e7d3316Smrg	      oldlibs="$output_objdir/$libname.$libext"
79516e7d3316Smrg	      build_libtool_libs=module
79526e7d3316Smrg	      build_old_libs=yes
79536e7d3316Smrg	    else
79546e7d3316Smrg	      build_libtool_libs=no
79556e7d3316Smrg	    fi
79566e7d3316Smrg	  else
79576e7d3316Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
79586e7d3316Smrg	    echo "*** automatically added whenever a program is linked with this library"
79596e7d3316Smrg	    echo "*** or is declared to -dlopen it."
79606e7d3316Smrg
79616e7d3316Smrg	    if test "$allow_undefined" = no; then
79626e7d3316Smrg	      echo
79636e7d3316Smrg	      echo "*** Since this library must not contain undefined symbols,"
79646e7d3316Smrg	      echo "*** because either the platform does not support them or"
79656e7d3316Smrg	      echo "*** it was explicitly requested with -no-undefined,"
79666e7d3316Smrg	      echo "*** libtool will only create a static version of it."
79676e7d3316Smrg	      if test "$build_old_libs" = no; then
79686e7d3316Smrg		oldlibs="$output_objdir/$libname.$libext"
79696e7d3316Smrg		build_libtool_libs=module
79706e7d3316Smrg		build_old_libs=yes
79716e7d3316Smrg	      else
79726e7d3316Smrg		build_libtool_libs=no
79736e7d3316Smrg	      fi
79746e7d3316Smrg	    fi
79756e7d3316Smrg	  fi
79766e7d3316Smrg	fi
79776e7d3316Smrg	# Done checking deplibs!
79786e7d3316Smrg	deplibs=$newdeplibs
79796e7d3316Smrg      fi
79806e7d3316Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
79816e7d3316Smrg      case $host in
79826e7d3316Smrg	*-*-darwin*)
79836e7d3316Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79846e7d3316Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79856e7d3316Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79866e7d3316Smrg	  ;;
79876e7d3316Smrg      esac
79886e7d3316Smrg
79896e7d3316Smrg      # move library search paths that coincide with paths to not yet
79906e7d3316Smrg      # installed libraries to the beginning of the library search list
79916e7d3316Smrg      new_libs=
79926e7d3316Smrg      for path in $notinst_path; do
79936e7d3316Smrg	case " $new_libs " in
79946e7d3316Smrg	*" -L$path/$objdir "*) ;;
79956e7d3316Smrg	*)
79966e7d3316Smrg	  case " $deplibs " in
79976e7d3316Smrg	  *" -L$path/$objdir "*)
799897cf2ee2Smrg	    func_append new_libs " -L$path/$objdir" ;;
79996e7d3316Smrg	  esac
80006e7d3316Smrg	  ;;
80016e7d3316Smrg	esac
80026e7d3316Smrg      done
80036e7d3316Smrg      for deplib in $deplibs; do
80046e7d3316Smrg	case $deplib in
80056e7d3316Smrg	-L*)
80066e7d3316Smrg	  case " $new_libs " in
80076e7d3316Smrg	  *" $deplib "*) ;;
800897cf2ee2Smrg	  *) func_append new_libs " $deplib" ;;
80096e7d3316Smrg	  esac
80106e7d3316Smrg	  ;;
801197cf2ee2Smrg	*) func_append new_libs " $deplib" ;;
80126e7d3316Smrg	esac
80136e7d3316Smrg      done
80146e7d3316Smrg      deplibs="$new_libs"
80156e7d3316Smrg
80166e7d3316Smrg      # All the library-specific variables (install_libdir is set above).
80176e7d3316Smrg      library_names=
80186e7d3316Smrg      old_library=
80196e7d3316Smrg      dlname=
80206e7d3316Smrg
80216e7d3316Smrg      # Test again, we may have decided not to build it any more
80226e7d3316Smrg      if test "$build_libtool_libs" = yes; then
80236e7d3316Smrg	if test "$hardcode_into_libs" = yes; then
80246e7d3316Smrg	  # Hardcode the library paths
80256e7d3316Smrg	  hardcode_libdirs=
80266e7d3316Smrg	  dep_rpath=
80276e7d3316Smrg	  rpath="$finalize_rpath"
802897cf2ee2Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
80296e7d3316Smrg	  for libdir in $rpath; do
80306e7d3316Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
80316e7d3316Smrg	      if test -n "$hardcode_libdir_separator"; then
803297cf2ee2Smrg		func_replace_sysroot "$libdir"
803397cf2ee2Smrg		libdir=$func_replace_sysroot_result
80346e7d3316Smrg		if test -z "$hardcode_libdirs"; then
80356e7d3316Smrg		  hardcode_libdirs="$libdir"
80366e7d3316Smrg		else
80376e7d3316Smrg		  # Just accumulate the unique libdirs.
80386e7d3316Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
80396e7d3316Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
80406e7d3316Smrg		    ;;
80416e7d3316Smrg		  *)
804297cf2ee2Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
80436e7d3316Smrg		    ;;
80446e7d3316Smrg		  esac
80456e7d3316Smrg		fi
80466e7d3316Smrg	      else
80476e7d3316Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
804897cf2ee2Smrg		func_append dep_rpath " $flag"
80496e7d3316Smrg	      fi
80506e7d3316Smrg	    elif test -n "$runpath_var"; then
80516e7d3316Smrg	      case "$perm_rpath " in
80526e7d3316Smrg	      *" $libdir "*) ;;
805397cf2ee2Smrg	      *) func_apped perm_rpath " $libdir" ;;
80546e7d3316Smrg	      esac
80556e7d3316Smrg	    fi
80566e7d3316Smrg	  done
80576e7d3316Smrg	  # Substitute the hardcoded libdirs into the rpath.
80586e7d3316Smrg	  if test -n "$hardcode_libdir_separator" &&
80596e7d3316Smrg	     test -n "$hardcode_libdirs"; then
80606e7d3316Smrg	    libdir="$hardcode_libdirs"
80616e7d3316Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
80626e7d3316Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
80636e7d3316Smrg	    else
80646e7d3316Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
80656e7d3316Smrg	    fi
80666e7d3316Smrg	  fi
80676e7d3316Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
80686e7d3316Smrg	    # We should set the runpath_var.
80696e7d3316Smrg	    rpath=
80706e7d3316Smrg	    for dir in $perm_rpath; do
807197cf2ee2Smrg	      func_append rpath "$dir:"
80726e7d3316Smrg	    done
80736e7d3316Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
80746e7d3316Smrg	  fi
80756e7d3316Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
80766e7d3316Smrg	fi
8077a966c04fSmrg
80786e7d3316Smrg	shlibpath="$finalize_shlibpath"
807997cf2ee2Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
80806e7d3316Smrg	if test -n "$shlibpath"; then
80816e7d3316Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
80826e7d3316Smrg	fi
8083a966c04fSmrg
80846e7d3316Smrg	# Get the real and link names of the library.
80856e7d3316Smrg	eval shared_ext=\"$shrext_cmds\"
80866e7d3316Smrg	eval library_names=\"$library_names_spec\"
80876e7d3316Smrg	set dummy $library_names
80886e7d3316Smrg	shift
80896e7d3316Smrg	realname="$1"
80906e7d3316Smrg	shift
8091a966c04fSmrg
80926e7d3316Smrg	if test -n "$soname_spec"; then
80936e7d3316Smrg	  eval soname=\"$soname_spec\"
80946e7d3316Smrg	else
80956e7d3316Smrg	  soname="$realname"
80966e7d3316Smrg	fi
80976e7d3316Smrg	if test -z "$dlname"; then
80986e7d3316Smrg	  dlname=$soname
80996e7d3316Smrg	fi
8100a966c04fSmrg
81016e7d3316Smrg	lib="$output_objdir/$realname"
81026e7d3316Smrg	linknames=
81036e7d3316Smrg	for link
81046e7d3316Smrg	do
810597cf2ee2Smrg	  func_append linknames " $link"
81066e7d3316Smrg	done
8107a966c04fSmrg
81086e7d3316Smrg	# Use standard objects if they are pic
81096e7d3316Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
81106e7d3316Smrg	test "X$libobjs" = "X " && libobjs=
8111a966c04fSmrg
81126e7d3316Smrg	delfiles=
81136e7d3316Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
81146e7d3316Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
81156e7d3316Smrg	  export_symbols="$output_objdir/$libname.uexp"
811697cf2ee2Smrg	  func_append delfiles " $export_symbols"
81176e7d3316Smrg	fi
8118a966c04fSmrg
81196e7d3316Smrg	orig_export_symbols=
81206e7d3316Smrg	case $host_os in
81216e7d3316Smrg	cygwin* | mingw* | cegcc*)
81226e7d3316Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
81236e7d3316Smrg	    # exporting using user supplied symfile
81246e7d3316Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
81256e7d3316Smrg	      # and it's NOT already a .def file. Must figure out
81266e7d3316Smrg	      # which of the given symbols are data symbols and tag
81276e7d3316Smrg	      # them as such. So, trigger use of export_symbols_cmds.
81286e7d3316Smrg	      # export_symbols gets reassigned inside the "prepare
81296e7d3316Smrg	      # the list of exported symbols" if statement, so the
81306e7d3316Smrg	      # include_expsyms logic still works.
81316e7d3316Smrg	      orig_export_symbols="$export_symbols"
81326e7d3316Smrg	      export_symbols=
81336e7d3316Smrg	      always_export_symbols=yes
81346e7d3316Smrg	    fi
81356e7d3316Smrg	  fi
81366e7d3316Smrg	  ;;
81376e7d3316Smrg	esac
8138a966c04fSmrg
81396e7d3316Smrg	# Prepare the list of exported symbols
81406e7d3316Smrg	if test -z "$export_symbols"; then
81416e7d3316Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
81426e7d3316Smrg	    func_verbose "generating symbol list for \`$libname.la'"
81436e7d3316Smrg	    export_symbols="$output_objdir/$libname.exp"
81446e7d3316Smrg	    $opt_dry_run || $RM $export_symbols
81456e7d3316Smrg	    cmds=$export_symbols_cmds
81466e7d3316Smrg	    save_ifs="$IFS"; IFS='~'
814797cf2ee2Smrg	    for cmd1 in $cmds; do
81486e7d3316Smrg	      IFS="$save_ifs"
814997cf2ee2Smrg	      # Take the normal branch if the nm_file_list_spec branch
815097cf2ee2Smrg	      # doesn't work or if tool conversion is not needed.
815197cf2ee2Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
815297cf2ee2Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
815397cf2ee2Smrg		  try_normal_branch=yes
815497cf2ee2Smrg		  eval cmd=\"$cmd1\"
815597cf2ee2Smrg		  func_len " $cmd"
815697cf2ee2Smrg		  len=$func_len_result
815797cf2ee2Smrg		  ;;
815897cf2ee2Smrg		*)
815997cf2ee2Smrg		  try_normal_branch=no
816097cf2ee2Smrg		  ;;
816197cf2ee2Smrg	      esac
816297cf2ee2Smrg	      if test "$try_normal_branch" = yes \
816397cf2ee2Smrg		 && { test "$len" -lt "$max_cmd_len" \
816497cf2ee2Smrg		      || test "$max_cmd_len" -le -1; }
816597cf2ee2Smrg	      then
816697cf2ee2Smrg		func_show_eval "$cmd" 'exit $?'
816797cf2ee2Smrg		skipped_export=false
816897cf2ee2Smrg	      elif test -n "$nm_file_list_spec"; then
816997cf2ee2Smrg		func_basename "$output"
817097cf2ee2Smrg		output_la=$func_basename_result
817197cf2ee2Smrg		save_libobjs=$libobjs
817297cf2ee2Smrg		save_output=$output
817397cf2ee2Smrg		output=${output_objdir}/${output_la}.nm
817497cf2ee2Smrg		func_to_tool_file "$output"
817597cf2ee2Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
817697cf2ee2Smrg		func_append delfiles " $output"
817797cf2ee2Smrg		func_verbose "creating $NM input file list: $output"
817897cf2ee2Smrg		for obj in $save_libobjs; do
817997cf2ee2Smrg		  func_to_tool_file "$obj"
818097cf2ee2Smrg		  $ECHO "$func_to_tool_file_result"
818197cf2ee2Smrg		done > "$output"
818297cf2ee2Smrg		eval cmd=\"$cmd1\"
81836e7d3316Smrg		func_show_eval "$cmd" 'exit $?'
818497cf2ee2Smrg		output=$save_output
818597cf2ee2Smrg		libobjs=$save_libobjs
81866e7d3316Smrg		skipped_export=false
81876e7d3316Smrg	      else
81886e7d3316Smrg		# The command line is too long to execute in one step.
81896e7d3316Smrg		func_verbose "using reloadable object file for export list..."
81906e7d3316Smrg		skipped_export=:
81916e7d3316Smrg		# Break out early, otherwise skipped_export may be
81926e7d3316Smrg		# set to false by a later but shorter cmd.
81936e7d3316Smrg		break
81946e7d3316Smrg	      fi
81956e7d3316Smrg	    done
81966e7d3316Smrg	    IFS="$save_ifs"
81976e7d3316Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
81986e7d3316Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
81996e7d3316Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
82006e7d3316Smrg	    fi
82016e7d3316Smrg	  fi
82026e7d3316Smrg	fi
8203a966c04fSmrg
82046e7d3316Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
82056e7d3316Smrg	  tmp_export_symbols="$export_symbols"
82066e7d3316Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
82076e7d3316Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
82086e7d3316Smrg	fi
8209a966c04fSmrg
82106e7d3316Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
82116e7d3316Smrg	  # The given exports_symbols file has to be filtered, so filter it.
82126e7d3316Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
82136e7d3316Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
82146e7d3316Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
82156e7d3316Smrg	  # though. Also, the filter scales superlinearly with the number of
82166e7d3316Smrg	  # global variables. join(1) would be nice here, but unfortunately
82176e7d3316Smrg	  # isn't a blessed tool.
82186e7d3316Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
821997cf2ee2Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
82206e7d3316Smrg	  export_symbols=$output_objdir/$libname.def
82216e7d3316Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8222a966c04fSmrg	fi
8223a966c04fSmrg
82246e7d3316Smrg	tmp_deplibs=
82256e7d3316Smrg	for test_deplib in $deplibs; do
82266e7d3316Smrg	  case " $convenience " in
82276e7d3316Smrg	  *" $test_deplib "*) ;;
82286e7d3316Smrg	  *)
822997cf2ee2Smrg	    func_append tmp_deplibs " $test_deplib"
82306e7d3316Smrg	    ;;
82316e7d3316Smrg	  esac
82326e7d3316Smrg	done
82336e7d3316Smrg	deplibs="$tmp_deplibs"
8234a966c04fSmrg
82356e7d3316Smrg	if test -n "$convenience"; then
82366e7d3316Smrg	  if test -n "$whole_archive_flag_spec" &&
82376e7d3316Smrg	    test "$compiler_needs_object" = yes &&
82386e7d3316Smrg	    test -z "$libobjs"; then
82396e7d3316Smrg	    # extract the archives, so we have objects to list.
82406e7d3316Smrg	    # TODO: could optimize this to just extract one archive.
82416e7d3316Smrg	    whole_archive_flag_spec=
82426e7d3316Smrg	  fi
82436e7d3316Smrg	  if test -n "$whole_archive_flag_spec"; then
82446e7d3316Smrg	    save_libobjs=$libobjs
82456e7d3316Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
82466e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
82476e7d3316Smrg	  else
82486e7d3316Smrg	    gentop="$output_objdir/${outputname}x"
824997cf2ee2Smrg	    func_append generated " $gentop"
8250a966c04fSmrg
82516e7d3316Smrg	    func_extract_archives $gentop $convenience
825297cf2ee2Smrg	    func_append libobjs " $func_extract_archives_result"
82536e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
82546e7d3316Smrg	  fi
82556e7d3316Smrg	fi
8256a966c04fSmrg
82576e7d3316Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
82586e7d3316Smrg	  eval flag=\"$thread_safe_flag_spec\"
825997cf2ee2Smrg	  func_append linker_flags " $flag"
82606e7d3316Smrg	fi
8261a966c04fSmrg
82626e7d3316Smrg	# Make a backup of the uninstalled library when relinking
826397cf2ee2Smrg	if test "$opt_mode" = relink; then
82646e7d3316Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8265a966c04fSmrg	fi
8266a966c04fSmrg
82676e7d3316Smrg	# Do each of the archive commands.
82686e7d3316Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
82696e7d3316Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
82706e7d3316Smrg	    eval test_cmds=\"$module_expsym_cmds\"
82716e7d3316Smrg	    cmds=$module_expsym_cmds
82726e7d3316Smrg	  else
82736e7d3316Smrg	    eval test_cmds=\"$module_cmds\"
82746e7d3316Smrg	    cmds=$module_cmds
82756e7d3316Smrg	  fi
82766e7d3316Smrg	else
82776e7d3316Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
82786e7d3316Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
82796e7d3316Smrg	    cmds=$archive_expsym_cmds
82806e7d3316Smrg	  else
82816e7d3316Smrg	    eval test_cmds=\"$archive_cmds\"
82826e7d3316Smrg	    cmds=$archive_cmds
82836e7d3316Smrg	  fi
8284a966c04fSmrg	fi
8285a966c04fSmrg
82866e7d3316Smrg	if test "X$skipped_export" != "X:" &&
82876e7d3316Smrg	   func_len " $test_cmds" &&
82886e7d3316Smrg	   len=$func_len_result &&
82896e7d3316Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
82906e7d3316Smrg	  :
82916e7d3316Smrg	else
82926e7d3316Smrg	  # The command line is too long to link in one step, link piecewise
82936e7d3316Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
82946e7d3316Smrg	  # script.
8295a966c04fSmrg
82966e7d3316Smrg	  # Save the value of $output and $libobjs because we want to
82976e7d3316Smrg	  # use them later.  If we have whole_archive_flag_spec, we
82986e7d3316Smrg	  # want to use save_libobjs as it was before
82996e7d3316Smrg	  # whole_archive_flag_spec was expanded, because we can't
83006e7d3316Smrg	  # assume the linker understands whole_archive_flag_spec.
83016e7d3316Smrg	  # This may have to be revisited, in case too many
83026e7d3316Smrg	  # convenience libraries get linked in and end up exceeding
83036e7d3316Smrg	  # the spec.
83046e7d3316Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
83056e7d3316Smrg	    save_libobjs=$libobjs
83066e7d3316Smrg	  fi
83076e7d3316Smrg	  save_output=$output
83086e7d3316Smrg	  func_basename "$output"
83096e7d3316Smrg	  output_la=$func_basename_result
8310a966c04fSmrg
83116e7d3316Smrg	  # Clear the reloadable object creation command queue and
83126e7d3316Smrg	  # initialize k to one.
83136e7d3316Smrg	  test_cmds=
83146e7d3316Smrg	  concat_cmds=
83156e7d3316Smrg	  objlist=
83166e7d3316Smrg	  last_robj=
83176e7d3316Smrg	  k=1
8318a966c04fSmrg
83196e7d3316Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
83206e7d3316Smrg	    output=${output_objdir}/${output_la}.lnkscript
83216e7d3316Smrg	    func_verbose "creating GNU ld script: $output"
83226e7d3316Smrg	    echo 'INPUT (' > $output
83236e7d3316Smrg	    for obj in $save_libobjs
83246e7d3316Smrg	    do
832597cf2ee2Smrg	      func_to_tool_file "$obj"
832697cf2ee2Smrg	      $ECHO "$func_to_tool_file_result" >> $output
83276e7d3316Smrg	    done
83286e7d3316Smrg	    echo ')' >> $output
832997cf2ee2Smrg	    func_append delfiles " $output"
833097cf2ee2Smrg	    func_to_tool_file "$output"
833197cf2ee2Smrg	    output=$func_to_tool_file_result
83326e7d3316Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
83336e7d3316Smrg	    output=${output_objdir}/${output_la}.lnk
83346e7d3316Smrg	    func_verbose "creating linker input file list: $output"
83356e7d3316Smrg	    : > $output
83366e7d3316Smrg	    set x $save_libobjs
83376e7d3316Smrg	    shift
83386e7d3316Smrg	    firstobj=
83396e7d3316Smrg	    if test "$compiler_needs_object" = yes; then
83406e7d3316Smrg	      firstobj="$1 "
83416e7d3316Smrg	      shift
83426e7d3316Smrg	    fi
83436e7d3316Smrg	    for obj
83446e7d3316Smrg	    do
834597cf2ee2Smrg	      func_to_tool_file "$obj"
834697cf2ee2Smrg	      $ECHO "$func_to_tool_file_result" >> $output
83476e7d3316Smrg	    done
834897cf2ee2Smrg	    func_append delfiles " $output"
834997cf2ee2Smrg	    func_to_tool_file "$output"
835097cf2ee2Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
83516e7d3316Smrg	  else
83526e7d3316Smrg	    if test -n "$save_libobjs"; then
83536e7d3316Smrg	      func_verbose "creating reloadable object files..."
83546e7d3316Smrg	      output=$output_objdir/$output_la-${k}.$objext
83556e7d3316Smrg	      eval test_cmds=\"$reload_cmds\"
83566e7d3316Smrg	      func_len " $test_cmds"
83576e7d3316Smrg	      len0=$func_len_result
83586e7d3316Smrg	      len=$len0
83596e7d3316Smrg
83606e7d3316Smrg	      # Loop over the list of objects to be linked.
83616e7d3316Smrg	      for obj in $save_libobjs
83626e7d3316Smrg	      do
83636e7d3316Smrg		func_len " $obj"
83646e7d3316Smrg		func_arith $len + $func_len_result
83656e7d3316Smrg		len=$func_arith_result
83666e7d3316Smrg		if test "X$objlist" = X ||
83676e7d3316Smrg		   test "$len" -lt "$max_cmd_len"; then
83686e7d3316Smrg		  func_append objlist " $obj"
83696e7d3316Smrg		else
83706e7d3316Smrg		  # The command $test_cmds is almost too long, add a
83716e7d3316Smrg		  # command to the queue.
83726e7d3316Smrg		  if test "$k" -eq 1 ; then
83736e7d3316Smrg		    # The first file doesn't have a previous command to add.
83746e7d3316Smrg		    reload_objs=$objlist
83756e7d3316Smrg		    eval concat_cmds=\"$reload_cmds\"
83766e7d3316Smrg		  else
83776e7d3316Smrg		    # All subsequent reloadable object files will link in
83786e7d3316Smrg		    # the last one created.
83796e7d3316Smrg		    reload_objs="$objlist $last_robj"
83806e7d3316Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
83816e7d3316Smrg		  fi
83826e7d3316Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
83836e7d3316Smrg		  func_arith $k + 1
83846e7d3316Smrg		  k=$func_arith_result
83856e7d3316Smrg		  output=$output_objdir/$output_la-${k}.$objext
83866e7d3316Smrg		  objlist=" $obj"
83876e7d3316Smrg		  func_len " $last_robj"
83886e7d3316Smrg		  func_arith $len0 + $func_len_result
83896e7d3316Smrg		  len=$func_arith_result
83906e7d3316Smrg		fi
83916e7d3316Smrg	      done
83926e7d3316Smrg	      # Handle the remaining objects by creating one last
83936e7d3316Smrg	      # reloadable object file.  All subsequent reloadable object
83946e7d3316Smrg	      # files will link in the last one created.
83956e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
83966e7d3316Smrg	      reload_objs="$objlist $last_robj"
83976e7d3316Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
83986e7d3316Smrg	      if test -n "$last_robj"; then
83996e7d3316Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
84006e7d3316Smrg	      fi
840197cf2ee2Smrg	      func_append delfiles " $output"
84026e7d3316Smrg
84036e7d3316Smrg	    else
84046e7d3316Smrg	      output=
84056e7d3316Smrg	    fi
8406a966c04fSmrg
84076e7d3316Smrg	    if ${skipped_export-false}; then
84086e7d3316Smrg	      func_verbose "generating symbol list for \`$libname.la'"
84096e7d3316Smrg	      export_symbols="$output_objdir/$libname.exp"
84106e7d3316Smrg	      $opt_dry_run || $RM $export_symbols
84116e7d3316Smrg	      libobjs=$output
84126e7d3316Smrg	      # Append the command to create the export file.
84136e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84146e7d3316Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
84156e7d3316Smrg	      if test -n "$last_robj"; then
84166e7d3316Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
84176e7d3316Smrg	      fi
84186e7d3316Smrg	    fi
8419a966c04fSmrg
84206e7d3316Smrg	    test -n "$save_libobjs" &&
84216e7d3316Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8422a966c04fSmrg
84236e7d3316Smrg	    # Loop through the commands generated above and execute them.
84246e7d3316Smrg	    save_ifs="$IFS"; IFS='~'
84256e7d3316Smrg	    for cmd in $concat_cmds; do
84266e7d3316Smrg	      IFS="$save_ifs"
84276e7d3316Smrg	      $opt_silent || {
84286e7d3316Smrg		  func_quote_for_expand "$cmd"
84296e7d3316Smrg		  eval "func_echo $func_quote_for_expand_result"
84306e7d3316Smrg	      }
84316e7d3316Smrg	      $opt_dry_run || eval "$cmd" || {
84326e7d3316Smrg		lt_exit=$?
84336e7d3316Smrg
84346e7d3316Smrg		# Restore the uninstalled library and exit
843597cf2ee2Smrg		if test "$opt_mode" = relink; then
84366e7d3316Smrg		  ( cd "$output_objdir" && \
84376e7d3316Smrg		    $RM "${realname}T" && \
84386e7d3316Smrg		    $MV "${realname}U" "$realname" )
84396e7d3316Smrg		fi
8440a966c04fSmrg
84416e7d3316Smrg		exit $lt_exit
84426e7d3316Smrg	      }
84436e7d3316Smrg	    done
84446e7d3316Smrg	    IFS="$save_ifs"
8445a966c04fSmrg
84466e7d3316Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
84476e7d3316Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
84486e7d3316Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8449a966c04fSmrg	    fi
8450a966c04fSmrg	  fi
8451a966c04fSmrg
84526e7d3316Smrg          if ${skipped_export-false}; then
84536e7d3316Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
84546e7d3316Smrg	      tmp_export_symbols="$export_symbols"
84556e7d3316Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
84566e7d3316Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
84576e7d3316Smrg	    fi
8458a966c04fSmrg
84596e7d3316Smrg	    if test -n "$orig_export_symbols"; then
84606e7d3316Smrg	      # The given exports_symbols file has to be filtered, so filter it.
84616e7d3316Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
84626e7d3316Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
84636e7d3316Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
84646e7d3316Smrg	      # though. Also, the filter scales superlinearly with the number of
84656e7d3316Smrg	      # global variables. join(1) would be nice here, but unfortunately
84666e7d3316Smrg	      # isn't a blessed tool.
84676e7d3316Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
846897cf2ee2Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
84696e7d3316Smrg	      export_symbols=$output_objdir/$libname.def
84706e7d3316Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
84716e7d3316Smrg	    fi
84726e7d3316Smrg	  fi
8473a966c04fSmrg
84746e7d3316Smrg	  libobjs=$output
84756e7d3316Smrg	  # Restore the value of output.
84766e7d3316Smrg	  output=$save_output
8477a966c04fSmrg
84786e7d3316Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
84796e7d3316Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
84806e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
84816e7d3316Smrg	  fi
84826e7d3316Smrg	  # Expand the library linking commands again to reset the
84836e7d3316Smrg	  # value of $libobjs for piecewise linking.
84846e7d3316Smrg
84856e7d3316Smrg	  # Do each of the archive commands.
84866e7d3316Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
84876e7d3316Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
84886e7d3316Smrg	      cmds=$module_expsym_cmds
8489a966c04fSmrg	    else
84906e7d3316Smrg	      cmds=$module_cmds
8491a966c04fSmrg	    fi
8492a966c04fSmrg	  else
84936e7d3316Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
84946e7d3316Smrg	      cmds=$archive_expsym_cmds
84956e7d3316Smrg	    else
84966e7d3316Smrg	      cmds=$archive_cmds
84976e7d3316Smrg	    fi
8498a966c04fSmrg	  fi
8499a966c04fSmrg	fi
8500a966c04fSmrg
85016e7d3316Smrg	if test -n "$delfiles"; then
85026e7d3316Smrg	  # Append the command to remove temporary files to $cmds.
85036e7d3316Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
85046e7d3316Smrg	fi
8505a966c04fSmrg
85066e7d3316Smrg	# Add any objects from preloaded convenience libraries
85076e7d3316Smrg	if test -n "$dlprefiles"; then
85086e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
850997cf2ee2Smrg	  func_append generated " $gentop"
8510a966c04fSmrg
85116e7d3316Smrg	  func_extract_archives $gentop $dlprefiles
851297cf2ee2Smrg	  func_append libobjs " $func_extract_archives_result"
85136e7d3316Smrg	  test "X$libobjs" = "X " && libobjs=
8514a966c04fSmrg	fi
8515a966c04fSmrg
85166e7d3316Smrg	save_ifs="$IFS"; IFS='~'
85176e7d3316Smrg	for cmd in $cmds; do
85186e7d3316Smrg	  IFS="$save_ifs"
85196e7d3316Smrg	  eval cmd=\"$cmd\"
85206e7d3316Smrg	  $opt_silent || {
85216e7d3316Smrg	    func_quote_for_expand "$cmd"
85226e7d3316Smrg	    eval "func_echo $func_quote_for_expand_result"
85236e7d3316Smrg	  }
85246e7d3316Smrg	  $opt_dry_run || eval "$cmd" || {
85256e7d3316Smrg	    lt_exit=$?
8526a966c04fSmrg
85276e7d3316Smrg	    # Restore the uninstalled library and exit
852897cf2ee2Smrg	    if test "$opt_mode" = relink; then
85296e7d3316Smrg	      ( cd "$output_objdir" && \
85306e7d3316Smrg	        $RM "${realname}T" && \
85316e7d3316Smrg		$MV "${realname}U" "$realname" )
8532a966c04fSmrg	    fi
8533a966c04fSmrg
85346e7d3316Smrg	    exit $lt_exit
85356e7d3316Smrg	  }
85366e7d3316Smrg	done
85376e7d3316Smrg	IFS="$save_ifs"
8538a966c04fSmrg
85396e7d3316Smrg	# Restore the uninstalled library and exit
854097cf2ee2Smrg	if test "$opt_mode" = relink; then
85416e7d3316Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8542a966c04fSmrg
85436e7d3316Smrg	  if test -n "$convenience"; then
85446e7d3316Smrg	    if test -z "$whole_archive_flag_spec"; then
85456e7d3316Smrg	      func_show_eval '${RM}r "$gentop"'
85466e7d3316Smrg	    fi
85476e7d3316Smrg	  fi
8548a966c04fSmrg
85496e7d3316Smrg	  exit $EXIT_SUCCESS
85506e7d3316Smrg	fi
8551a966c04fSmrg
85526e7d3316Smrg	# Create links to the real library.
85536e7d3316Smrg	for linkname in $linknames; do
85546e7d3316Smrg	  if test "$realname" != "$linkname"; then
85556e7d3316Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
85566e7d3316Smrg	  fi
85576e7d3316Smrg	done
8558a966c04fSmrg
85596e7d3316Smrg	# If -module or -export-dynamic was specified, set the dlname.
85606e7d3316Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
85616e7d3316Smrg	  # On all known operating systems, these are identical.
85626e7d3316Smrg	  dlname="$soname"
85636e7d3316Smrg	fi
85646e7d3316Smrg      fi
85656e7d3316Smrg      ;;
8566a966c04fSmrg
85676e7d3316Smrg    obj)
85686e7d3316Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
85696e7d3316Smrg	func_warning "\`-dlopen' is ignored for objects"
85706e7d3316Smrg      fi
8571a966c04fSmrg
85726e7d3316Smrg      case " $deplibs" in
85736e7d3316Smrg      *\ -l* | *\ -L*)
85746e7d3316Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
85756e7d3316Smrg      esac
8576a966c04fSmrg
85776e7d3316Smrg      test -n "$rpath" && \
85786e7d3316Smrg	func_warning "\`-rpath' is ignored for objects"
8579a966c04fSmrg
85806e7d3316Smrg      test -n "$xrpath" && \
85816e7d3316Smrg	func_warning "\`-R' is ignored for objects"
85826e7d3316Smrg
85836e7d3316Smrg      test -n "$vinfo" && \
85846e7d3316Smrg	func_warning "\`-version-info' is ignored for objects"
8585a966c04fSmrg
85866e7d3316Smrg      test -n "$release" && \
85876e7d3316Smrg	func_warning "\`-release' is ignored for objects"
8588a966c04fSmrg
85896e7d3316Smrg      case $output in
85906e7d3316Smrg      *.lo)
85916e7d3316Smrg	test -n "$objs$old_deplibs" && \
85926e7d3316Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
85936e7d3316Smrg
85946e7d3316Smrg	libobj=$output
85956e7d3316Smrg	func_lo2o "$libobj"
85966e7d3316Smrg	obj=$func_lo2o_result
85976e7d3316Smrg	;;
85986e7d3316Smrg      *)
85996e7d3316Smrg	libobj=
86006e7d3316Smrg	obj="$output"
8601a966c04fSmrg	;;
8602a966c04fSmrg      esac
8603a966c04fSmrg
86046e7d3316Smrg      # Delete the old objects.
86056e7d3316Smrg      $opt_dry_run || $RM $obj $libobj
8606a966c04fSmrg
86076e7d3316Smrg      # Objects from convenience libraries.  This assumes
86086e7d3316Smrg      # single-version convenience libraries.  Whenever we create
86096e7d3316Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
86106e7d3316Smrg      # the extraction.
86116e7d3316Smrg      reload_conv_objs=
86126e7d3316Smrg      gentop=
86136e7d3316Smrg      # reload_cmds runs $LD directly, so let us get rid of
86146e7d3316Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
86156e7d3316Smrg      # turning comma into space..
86166e7d3316Smrg      wl=
8617a966c04fSmrg
86186e7d3316Smrg      if test -n "$convenience"; then
86196e7d3316Smrg	if test -n "$whole_archive_flag_spec"; then
86206e7d3316Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86216e7d3316Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8622a966c04fSmrg	else
86236e7d3316Smrg	  gentop="$output_objdir/${obj}x"
862497cf2ee2Smrg	  func_append generated " $gentop"
86256e7d3316Smrg
86266e7d3316Smrg	  func_extract_archives $gentop $convenience
86276e7d3316Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8628a966c04fSmrg	fi
86296e7d3316Smrg      fi
8630a966c04fSmrg
863197cf2ee2Smrg      # If we're not building shared, we need to use non_pic_objs
863297cf2ee2Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
863397cf2ee2Smrg
86346e7d3316Smrg      # Create the old-style object.
86356e7d3316Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8636a966c04fSmrg
86376e7d3316Smrg      output="$obj"
86386e7d3316Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8639a966c04fSmrg
86406e7d3316Smrg      # Exit if we aren't doing a library object file.
86416e7d3316Smrg      if test -z "$libobj"; then
86426e7d3316Smrg	if test -n "$gentop"; then
86436e7d3316Smrg	  func_show_eval '${RM}r "$gentop"'
86446e7d3316Smrg	fi
8645a966c04fSmrg
86466e7d3316Smrg	exit $EXIT_SUCCESS
8647a966c04fSmrg      fi
8648a966c04fSmrg
86496e7d3316Smrg      if test "$build_libtool_libs" != yes; then
86506e7d3316Smrg	if test -n "$gentop"; then
86516e7d3316Smrg	  func_show_eval '${RM}r "$gentop"'
86526e7d3316Smrg	fi
8653a966c04fSmrg
86546e7d3316Smrg	# Create an invalid libtool object if no PIC, so that we don't
86556e7d3316Smrg	# accidentally link it into a program.
86566e7d3316Smrg	# $show "echo timestamp > $libobj"
86576e7d3316Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
86586e7d3316Smrg	exit $EXIT_SUCCESS
86596e7d3316Smrg      fi
8660a966c04fSmrg
86616e7d3316Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
86626e7d3316Smrg	# Only do commands if we really have different PIC objects.
86636e7d3316Smrg	reload_objs="$libobjs $reload_conv_objs"
86646e7d3316Smrg	output="$libobj"
86656e7d3316Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8666a966c04fSmrg      fi
86676e7d3316Smrg
86686e7d3316Smrg      if test -n "$gentop"; then
86696e7d3316Smrg	func_show_eval '${RM}r "$gentop"'
86706e7d3316Smrg      fi
86716e7d3316Smrg
86726e7d3316Smrg      exit $EXIT_SUCCESS
8673a966c04fSmrg      ;;
8674a966c04fSmrg
86756e7d3316Smrg    prog)
86766e7d3316Smrg      case $host in
86776e7d3316Smrg	*cygwin*) func_stripname '' '.exe' "$output"
86786e7d3316Smrg	          output=$func_stripname_result.exe;;
86796e7d3316Smrg      esac
86806e7d3316Smrg      test -n "$vinfo" && \
86816e7d3316Smrg	func_warning "\`-version-info' is ignored for programs"
8682a966c04fSmrg
86836e7d3316Smrg      test -n "$release" && \
86846e7d3316Smrg	func_warning "\`-release' is ignored for programs"
8685a966c04fSmrg
86866e7d3316Smrg      test "$preload" = yes \
86876e7d3316Smrg        && test "$dlopen_support" = unknown \
86886e7d3316Smrg	&& test "$dlopen_self" = unknown \
86896e7d3316Smrg	&& test "$dlopen_self_static" = unknown && \
86906e7d3316Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
86916e7d3316Smrg
86926e7d3316Smrg      case $host in
86936e7d3316Smrg      *-*-rhapsody* | *-*-darwin1.[012])
86946e7d3316Smrg	# On Rhapsody replace the C library is the System framework
86956e7d3316Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
86966e7d3316Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8697a966c04fSmrg	;;
86986e7d3316Smrg      esac
8699a966c04fSmrg
87006e7d3316Smrg      case $host in
87016e7d3316Smrg      *-*-darwin*)
87026e7d3316Smrg	# Don't allow lazy linking, it breaks C++ global constructors
87036e7d3316Smrg	# But is supposedly fixed on 10.4 or later (yay!).
87046e7d3316Smrg	if test "$tagname" = CXX ; then
87056e7d3316Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
87066e7d3316Smrg	    10.[0123])
870797cf2ee2Smrg	      func_append compile_command " ${wl}-bind_at_load"
870897cf2ee2Smrg	      func_append finalize_command " ${wl}-bind_at_load"
87096e7d3316Smrg	    ;;
87106e7d3316Smrg	  esac
8711a966c04fSmrg	fi
87126e7d3316Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
87136e7d3316Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87146e7d3316Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87156e7d3316Smrg	;;
87166e7d3316Smrg      esac
8717a966c04fSmrg
8718a966c04fSmrg
87196e7d3316Smrg      # move library search paths that coincide with paths to not yet
87206e7d3316Smrg      # installed libraries to the beginning of the library search list
87216e7d3316Smrg      new_libs=
87226e7d3316Smrg      for path in $notinst_path; do
87236e7d3316Smrg	case " $new_libs " in
87246e7d3316Smrg	*" -L$path/$objdir "*) ;;
87256e7d3316Smrg	*)
87266e7d3316Smrg	  case " $compile_deplibs " in
87276e7d3316Smrg	  *" -L$path/$objdir "*)
872897cf2ee2Smrg	    func_append new_libs " -L$path/$objdir" ;;
8729a966c04fSmrg	  esac
87306e7d3316Smrg	  ;;
87316e7d3316Smrg	esac
87326e7d3316Smrg      done
87336e7d3316Smrg      for deplib in $compile_deplibs; do
87346e7d3316Smrg	case $deplib in
87356e7d3316Smrg	-L*)
87366e7d3316Smrg	  case " $new_libs " in
87376e7d3316Smrg	  *" $deplib "*) ;;
873897cf2ee2Smrg	  *) func_append new_libs " $deplib" ;;
8739a966c04fSmrg	  esac
87406e7d3316Smrg	  ;;
874197cf2ee2Smrg	*) func_append new_libs " $deplib" ;;
87426e7d3316Smrg	esac
87436e7d3316Smrg      done
87446e7d3316Smrg      compile_deplibs="$new_libs"
8745a966c04fSmrg
8746a966c04fSmrg
874797cf2ee2Smrg      func_append compile_command " $compile_deplibs"
874897cf2ee2Smrg      func_append finalize_command " $finalize_deplibs"
8749a966c04fSmrg
87506e7d3316Smrg      if test -n "$rpath$xrpath"; then
87516e7d3316Smrg	# If the user specified any rpath flags, then add them.
87526e7d3316Smrg	for libdir in $rpath $xrpath; do
87536e7d3316Smrg	  # This is the magic to use -rpath.
87546e7d3316Smrg	  case "$finalize_rpath " in
87556e7d3316Smrg	  *" $libdir "*) ;;
875697cf2ee2Smrg	  *) func_append finalize_rpath " $libdir" ;;
87576e7d3316Smrg	  esac
87586e7d3316Smrg	done
87596e7d3316Smrg      fi
8760a966c04fSmrg
87616e7d3316Smrg      # Now hardcode the library paths
87626e7d3316Smrg      rpath=
87636e7d3316Smrg      hardcode_libdirs=
87646e7d3316Smrg      for libdir in $compile_rpath $finalize_rpath; do
87656e7d3316Smrg	if test -n "$hardcode_libdir_flag_spec"; then
87666e7d3316Smrg	  if test -n "$hardcode_libdir_separator"; then
87676e7d3316Smrg	    if test -z "$hardcode_libdirs"; then
87686e7d3316Smrg	      hardcode_libdirs="$libdir"
87696e7d3316Smrg	    else
87706e7d3316Smrg	      # Just accumulate the unique libdirs.
87716e7d3316Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
87726e7d3316Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
87736e7d3316Smrg		;;
87746e7d3316Smrg	      *)
877597cf2ee2Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
87766e7d3316Smrg		;;
87776e7d3316Smrg	      esac
87786e7d3316Smrg	    fi
8779a966c04fSmrg	  else
87806e7d3316Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
878197cf2ee2Smrg	    func_append rpath " $flag"
8782a966c04fSmrg	  fi
87836e7d3316Smrg	elif test -n "$runpath_var"; then
87846e7d3316Smrg	  case "$perm_rpath " in
87856e7d3316Smrg	  *" $libdir "*) ;;
878697cf2ee2Smrg	  *) func_append perm_rpath " $libdir" ;;
87876e7d3316Smrg	  esac
87886e7d3316Smrg	fi
87896e7d3316Smrg	case $host in
87906e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
87916e7d3316Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
87926e7d3316Smrg	  case :$dllsearchpath: in
87936e7d3316Smrg	  *":$libdir:"*) ;;
87946e7d3316Smrg	  ::) dllsearchpath=$libdir;;
879597cf2ee2Smrg	  *) func_append dllsearchpath ":$libdir";;
87966e7d3316Smrg	  esac
87976e7d3316Smrg	  case :$dllsearchpath: in
87986e7d3316Smrg	  *":$testbindir:"*) ;;
87996e7d3316Smrg	  ::) dllsearchpath=$testbindir;;
880097cf2ee2Smrg	  *) func_append dllsearchpath ":$testbindir";;
88016e7d3316Smrg	  esac
88026e7d3316Smrg	  ;;
88036e7d3316Smrg	esac
88046e7d3316Smrg      done
88056e7d3316Smrg      # Substitute the hardcoded libdirs into the rpath.
88066e7d3316Smrg      if test -n "$hardcode_libdir_separator" &&
88076e7d3316Smrg	 test -n "$hardcode_libdirs"; then
88086e7d3316Smrg	libdir="$hardcode_libdirs"
88096e7d3316Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
88106e7d3316Smrg      fi
88116e7d3316Smrg      compile_rpath="$rpath"
8812a966c04fSmrg
88136e7d3316Smrg      rpath=
88146e7d3316Smrg      hardcode_libdirs=
88156e7d3316Smrg      for libdir in $finalize_rpath; do
88166e7d3316Smrg	if test -n "$hardcode_libdir_flag_spec"; then
88176e7d3316Smrg	  if test -n "$hardcode_libdir_separator"; then
88186e7d3316Smrg	    if test -z "$hardcode_libdirs"; then
88196e7d3316Smrg	      hardcode_libdirs="$libdir"
88206e7d3316Smrg	    else
88216e7d3316Smrg	      # Just accumulate the unique libdirs.
88226e7d3316Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
88236e7d3316Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
88246e7d3316Smrg		;;
88256e7d3316Smrg	      *)
882697cf2ee2Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
88276e7d3316Smrg		;;
88286e7d3316Smrg	      esac
88296e7d3316Smrg	    fi
8830a966c04fSmrg	  else
88316e7d3316Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
883297cf2ee2Smrg	    func_append rpath " $flag"
8833a966c04fSmrg	  fi
88346e7d3316Smrg	elif test -n "$runpath_var"; then
88356e7d3316Smrg	  case "$finalize_perm_rpath " in
88366e7d3316Smrg	  *" $libdir "*) ;;
883797cf2ee2Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
88386e7d3316Smrg	  esac
8839a966c04fSmrg	fi
88406e7d3316Smrg      done
88416e7d3316Smrg      # Substitute the hardcoded libdirs into the rpath.
88426e7d3316Smrg      if test -n "$hardcode_libdir_separator" &&
88436e7d3316Smrg	 test -n "$hardcode_libdirs"; then
88446e7d3316Smrg	libdir="$hardcode_libdirs"
88456e7d3316Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
88466e7d3316Smrg      fi
88476e7d3316Smrg      finalize_rpath="$rpath"
8848a966c04fSmrg
88496e7d3316Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
88506e7d3316Smrg	# Transform all the library objects into standard objects.
88516e7d3316Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88526e7d3316Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88536e7d3316Smrg      fi
8854a966c04fSmrg
88556e7d3316Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8856a966c04fSmrg
88576e7d3316Smrg      # template prelinking step
88586e7d3316Smrg      if test -n "$prelink_cmds"; then
88596e7d3316Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
88606e7d3316Smrg      fi
8861a966c04fSmrg
88626e7d3316Smrg      wrappers_required=yes
88636e7d3316Smrg      case $host in
88646e7d3316Smrg      *cegcc* | *mingw32ce*)
88656e7d3316Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88666e7d3316Smrg        wrappers_required=no
88676e7d3316Smrg        ;;
88686e7d3316Smrg      *cygwin* | *mingw* )
88696e7d3316Smrg        if test "$build_libtool_libs" != yes; then
88706e7d3316Smrg          wrappers_required=no
88716e7d3316Smrg        fi
88726e7d3316Smrg        ;;
88736e7d3316Smrg      *)
88746e7d3316Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
88756e7d3316Smrg          wrappers_required=no
88766e7d3316Smrg        fi
88776e7d3316Smrg        ;;
88786e7d3316Smrg      esac
88796e7d3316Smrg      if test "$wrappers_required" = no; then
88806e7d3316Smrg	# Replace the output file specification.
88816e7d3316Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
88826e7d3316Smrg	link_command="$compile_command$compile_rpath"
8883a966c04fSmrg
88846e7d3316Smrg	# We have no uninstalled library dependencies, so finalize right now.
88856e7d3316Smrg	exit_status=0
88866e7d3316Smrg	func_show_eval "$link_command" 'exit_status=$?'
8887a966c04fSmrg
888897cf2ee2Smrg	if test -n "$postlink_cmds"; then
888997cf2ee2Smrg	  func_to_tool_file "$output"
889097cf2ee2Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
889197cf2ee2Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
889297cf2ee2Smrg	fi
889397cf2ee2Smrg
88946e7d3316Smrg	# Delete the generated files.
88956e7d3316Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
88966e7d3316Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8897a966c04fSmrg	fi
8898a966c04fSmrg
88996e7d3316Smrg	exit $exit_status
89006e7d3316Smrg      fi
8901a966c04fSmrg
89026e7d3316Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
89036e7d3316Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
89046e7d3316Smrg      fi
89056e7d3316Smrg      if test -n "$finalize_shlibpath"; then
89066e7d3316Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
89076e7d3316Smrg      fi
8908a966c04fSmrg
89096e7d3316Smrg      compile_var=
89106e7d3316Smrg      finalize_var=
89116e7d3316Smrg      if test -n "$runpath_var"; then
89126e7d3316Smrg	if test -n "$perm_rpath"; then
89136e7d3316Smrg	  # We should set the runpath_var.
89146e7d3316Smrg	  rpath=
89156e7d3316Smrg	  for dir in $perm_rpath; do
891697cf2ee2Smrg	    func_append rpath "$dir:"
89176e7d3316Smrg	  done
89186e7d3316Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8919a966c04fSmrg	fi
89206e7d3316Smrg	if test -n "$finalize_perm_rpath"; then
89216e7d3316Smrg	  # We should set the runpath_var.
89226e7d3316Smrg	  rpath=
89236e7d3316Smrg	  for dir in $finalize_perm_rpath; do
892497cf2ee2Smrg	    func_append rpath "$dir:"
89256e7d3316Smrg	  done
89266e7d3316Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8927a966c04fSmrg	fi
89286e7d3316Smrg      fi
8929a966c04fSmrg
89306e7d3316Smrg      if test "$no_install" = yes; then
89316e7d3316Smrg	# We don't need to create a wrapper script.
89326e7d3316Smrg	link_command="$compile_var$compile_command$compile_rpath"
89336e7d3316Smrg	# Replace the output file specification.
89346e7d3316Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
89356e7d3316Smrg	# Delete the old output file.
89366e7d3316Smrg	$opt_dry_run || $RM $output
89376e7d3316Smrg	# Link the executable and exit
89386e7d3316Smrg	func_show_eval "$link_command" 'exit $?'
893997cf2ee2Smrg
894097cf2ee2Smrg	if test -n "$postlink_cmds"; then
894197cf2ee2Smrg	  func_to_tool_file "$output"
894297cf2ee2Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
894397cf2ee2Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
894497cf2ee2Smrg	fi
894597cf2ee2Smrg
8946a966c04fSmrg	exit $EXIT_SUCCESS
89476e7d3316Smrg      fi
8948a966c04fSmrg
89496e7d3316Smrg      if test "$hardcode_action" = relink; then
89506e7d3316Smrg	# Fast installation is not supported
89516e7d3316Smrg	link_command="$compile_var$compile_command$compile_rpath"
89526e7d3316Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
89536e7d3316Smrg
89546e7d3316Smrg	func_warning "this platform does not like uninstalled shared libraries"
89556e7d3316Smrg	func_warning "\`$output' will be relinked during installation"
89566e7d3316Smrg      else
89576e7d3316Smrg	if test "$fast_install" != no; then
89586e7d3316Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
89596e7d3316Smrg	  if test "$fast_install" = yes; then
89606e7d3316Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
89616e7d3316Smrg	  else
89626e7d3316Smrg	    # fast_install is set to needless
89636e7d3316Smrg	    relink_command=
89646e7d3316Smrg	  fi
8965a966c04fSmrg	else
89666e7d3316Smrg	  link_command="$compile_var$compile_command$compile_rpath"
89676e7d3316Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8968a966c04fSmrg	fi
89696e7d3316Smrg      fi
8970a966c04fSmrg
89716e7d3316Smrg      # Replace the output file specification.
89726e7d3316Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8973a966c04fSmrg
89746e7d3316Smrg      # Delete the old output files.
89756e7d3316Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8976a966c04fSmrg
89776e7d3316Smrg      func_show_eval "$link_command" 'exit $?'
8978a966c04fSmrg
897997cf2ee2Smrg      if test -n "$postlink_cmds"; then
898097cf2ee2Smrg	func_to_tool_file "$output_objdir/$outputname"
898197cf2ee2Smrg	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'`
898297cf2ee2Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
898397cf2ee2Smrg      fi
898497cf2ee2Smrg
89856e7d3316Smrg      # Now create the wrapper script.
89866e7d3316Smrg      func_verbose "creating $output"
8987a966c04fSmrg
89886e7d3316Smrg      # Quote the relink command for shipping.
89896e7d3316Smrg      if test -n "$relink_command"; then
89906e7d3316Smrg	# Preserve any variables that may affect compiler behavior
89916e7d3316Smrg	for var in $variables_saved_for_relink; do
89926e7d3316Smrg	  if eval test -z \"\${$var+set}\"; then
89936e7d3316Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
89946e7d3316Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
89956e7d3316Smrg	    relink_command="$var=; export $var; $relink_command"
8996a966c04fSmrg	  else
89976e7d3316Smrg	    func_quote_for_eval "$var_value"
89986e7d3316Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
8999a966c04fSmrg	  fi
90006e7d3316Smrg	done
90016e7d3316Smrg	relink_command="(cd `pwd`; $relink_command)"
90026e7d3316Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
90036e7d3316Smrg      fi
9004a966c04fSmrg
90056e7d3316Smrg      # Only actually do things if not in dry run mode.
90066e7d3316Smrg      $opt_dry_run || {
90076e7d3316Smrg	# win32 will think the script is a binary if it has
90086e7d3316Smrg	# a .exe suffix, so we strip it off here.
90096e7d3316Smrg	case $output in
90106e7d3316Smrg	  *.exe) func_stripname '' '.exe' "$output"
90116e7d3316Smrg	         output=$func_stripname_result ;;
90126e7d3316Smrg	esac
90136e7d3316Smrg	# test for cygwin because mv fails w/o .exe extensions
90146e7d3316Smrg	case $host in
90156e7d3316Smrg	  *cygwin*)
90166e7d3316Smrg	    exeext=.exe
90176e7d3316Smrg	    func_stripname '' '.exe' "$outputname"
90186e7d3316Smrg	    outputname=$func_stripname_result ;;
90196e7d3316Smrg	  *) exeext= ;;
9020a966c04fSmrg	esac
90216e7d3316Smrg	case $host in
90226e7d3316Smrg	  *cygwin* | *mingw* )
90236e7d3316Smrg	    func_dirname_and_basename "$output" "" "."
90246e7d3316Smrg	    output_name=$func_basename_result
90256e7d3316Smrg	    output_path=$func_dirname_result
90266e7d3316Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
90276e7d3316Smrg	    cwrapper="$output_path/$output_name.exe"
90286e7d3316Smrg	    $RM $cwrappersource $cwrapper
90296e7d3316Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
90306e7d3316Smrg
90316e7d3316Smrg	    func_emit_cwrapperexe_src > $cwrappersource
90326e7d3316Smrg
90336e7d3316Smrg	    # The wrapper executable is built using the $host compiler,
90346e7d3316Smrg	    # because it contains $host paths and files. If cross-
90356e7d3316Smrg	    # compiling, it, like the target executable, must be
90366e7d3316Smrg	    # executed on the $host or under an emulation environment.
90376e7d3316Smrg	    $opt_dry_run || {
90386e7d3316Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
90396e7d3316Smrg	      $STRIP $cwrapper
90406e7d3316Smrg	    }
9041a966c04fSmrg
90426e7d3316Smrg	    # Now, create the wrapper script for func_source use:
90436e7d3316Smrg	    func_ltwrapper_scriptname $cwrapper
90446e7d3316Smrg	    $RM $func_ltwrapper_scriptname_result
90456e7d3316Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
90466e7d3316Smrg	    $opt_dry_run || {
90476e7d3316Smrg	      # note: this script will not be executed, so do not chmod.
90486e7d3316Smrg	      if test "x$build" = "x$host" ; then
90496e7d3316Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
90506e7d3316Smrg	      else
90516e7d3316Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
90526e7d3316Smrg	      fi
90536e7d3316Smrg	    }
90546e7d3316Smrg	  ;;
90556e7d3316Smrg	  * )
90566e7d3316Smrg	    $RM $output
90576e7d3316Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9058a966c04fSmrg
90596e7d3316Smrg	    func_emit_wrapper no > $output
90606e7d3316Smrg	    chmod +x $output
90616e7d3316Smrg	  ;;
90626e7d3316Smrg	esac
90636e7d3316Smrg      }
90646e7d3316Smrg      exit $EXIT_SUCCESS
90656e7d3316Smrg      ;;
90666e7d3316Smrg    esac
9067a966c04fSmrg
90686e7d3316Smrg    # See if we need to build an old-fashioned archive.
90696e7d3316Smrg    for oldlib in $oldlibs; do
9070a966c04fSmrg
90716e7d3316Smrg      if test "$build_libtool_libs" = convenience; then
90726e7d3316Smrg	oldobjs="$libobjs_save $symfileobj"
90736e7d3316Smrg	addlibs="$convenience"
90746e7d3316Smrg	build_libtool_libs=no
90756e7d3316Smrg      else
90766e7d3316Smrg	if test "$build_libtool_libs" = module; then
90776e7d3316Smrg	  oldobjs="$libobjs_save"
90786e7d3316Smrg	  build_libtool_libs=no
90796e7d3316Smrg	else
90806e7d3316Smrg	  oldobjs="$old_deplibs $non_pic_objects"
90816e7d3316Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
908297cf2ee2Smrg	    func_append oldobjs " $symfileobj"
90836e7d3316Smrg	  fi
90846e7d3316Smrg	fi
90856e7d3316Smrg	addlibs="$old_convenience"
9086a966c04fSmrg      fi
9087a966c04fSmrg
90886e7d3316Smrg      if test -n "$addlibs"; then
90896e7d3316Smrg	gentop="$output_objdir/${outputname}x"
909097cf2ee2Smrg	func_append generated " $gentop"
9091a966c04fSmrg
90926e7d3316Smrg	func_extract_archives $gentop $addlibs
909397cf2ee2Smrg	func_append oldobjs " $func_extract_archives_result"
90946e7d3316Smrg      fi
9095a966c04fSmrg
90966e7d3316Smrg      # Do each command in the archive commands.
90976e7d3316Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
90986e7d3316Smrg	cmds=$old_archive_from_new_cmds
90996e7d3316Smrg      else
9100a966c04fSmrg
91016e7d3316Smrg	# Add any objects from preloaded convenience libraries
91026e7d3316Smrg	if test -n "$dlprefiles"; then
91036e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
910497cf2ee2Smrg	  func_append generated " $gentop"
9105a966c04fSmrg
91066e7d3316Smrg	  func_extract_archives $gentop $dlprefiles
910797cf2ee2Smrg	  func_append oldobjs " $func_extract_archives_result"
91086e7d3316Smrg	fi
9109a966c04fSmrg
91106e7d3316Smrg	# POSIX demands no paths to be encoded in archives.  We have
91116e7d3316Smrg	# to avoid creating archives with duplicate basenames if we
91126e7d3316Smrg	# might have to extract them afterwards, e.g., when creating a
91136e7d3316Smrg	# static archive out of a convenience library, or when linking
91146e7d3316Smrg	# the entirety of a libtool archive into another (currently
91156e7d3316Smrg	# not supported by libtool).
91166e7d3316Smrg	if (for obj in $oldobjs
91176e7d3316Smrg	    do
91186e7d3316Smrg	      func_basename "$obj"
91196e7d3316Smrg	      $ECHO "$func_basename_result"
91206e7d3316Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
91216e7d3316Smrg	  :
91226e7d3316Smrg	else
91236e7d3316Smrg	  echo "copying selected object files to avoid basename conflicts..."
91246e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
912597cf2ee2Smrg	  func_append generated " $gentop"
91266e7d3316Smrg	  func_mkdir_p "$gentop"
91276e7d3316Smrg	  save_oldobjs=$oldobjs
91286e7d3316Smrg	  oldobjs=
91296e7d3316Smrg	  counter=1
91306e7d3316Smrg	  for obj in $save_oldobjs
91316e7d3316Smrg	  do
91326e7d3316Smrg	    func_basename "$obj"
91336e7d3316Smrg	    objbase="$func_basename_result"
91346e7d3316Smrg	    case " $oldobjs " in
91356e7d3316Smrg	    " ") oldobjs=$obj ;;
91366e7d3316Smrg	    *[\ /]"$objbase "*)
91376e7d3316Smrg	      while :; do
91386e7d3316Smrg		# Make sure we don't pick an alternate name that also
91396e7d3316Smrg		# overlaps.
91406e7d3316Smrg		newobj=lt$counter-$objbase
91416e7d3316Smrg		func_arith $counter + 1
91426e7d3316Smrg		counter=$func_arith_result
91436e7d3316Smrg		case " $oldobjs " in
91446e7d3316Smrg		*[\ /]"$newobj "*) ;;
91456e7d3316Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
91466e7d3316Smrg		esac
91476e7d3316Smrg	      done
91486e7d3316Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
914997cf2ee2Smrg	      func_append oldobjs " $gentop/$newobj"
91506e7d3316Smrg	      ;;
915197cf2ee2Smrg	    *) func_append oldobjs " $obj" ;;
91526e7d3316Smrg	    esac
9153a966c04fSmrg	  done
9154a966c04fSmrg	fi
91556e7d3316Smrg	eval cmds=\"$old_archive_cmds\"
9156a966c04fSmrg
91576e7d3316Smrg	func_len " $cmds"
91586e7d3316Smrg	len=$func_len_result
91596e7d3316Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
91606e7d3316Smrg	  cmds=$old_archive_cmds
916197cf2ee2Smrg	elif test -n "$archiver_list_spec"; then
916297cf2ee2Smrg	  func_verbose "using command file archive linking..."
916397cf2ee2Smrg	  for obj in $oldobjs
916497cf2ee2Smrg	  do
916597cf2ee2Smrg	    func_to_tool_file "$obj"
916697cf2ee2Smrg	    $ECHO "$func_to_tool_file_result"
916797cf2ee2Smrg	  done > $output_objdir/$libname.libcmd
916897cf2ee2Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
916997cf2ee2Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
917097cf2ee2Smrg	  cmds=$old_archive_cmds
91716e7d3316Smrg	else
91726e7d3316Smrg	  # the command line is too long to link in one step, link in parts
91736e7d3316Smrg	  func_verbose "using piecewise archive linking..."
91746e7d3316Smrg	  save_RANLIB=$RANLIB
91756e7d3316Smrg	  RANLIB=:
91766e7d3316Smrg	  objlist=
91776e7d3316Smrg	  concat_cmds=
91786e7d3316Smrg	  save_oldobjs=$oldobjs
91796e7d3316Smrg	  oldobjs=
91806e7d3316Smrg	  # Is there a better way of finding the last object in the list?
91816e7d3316Smrg	  for obj in $save_oldobjs
91826e7d3316Smrg	  do
91836e7d3316Smrg	    last_oldobj=$obj
91846e7d3316Smrg	  done
91856e7d3316Smrg	  eval test_cmds=\"$old_archive_cmds\"
91866e7d3316Smrg	  func_len " $test_cmds"
91876e7d3316Smrg	  len0=$func_len_result
91886e7d3316Smrg	  len=$len0
91896e7d3316Smrg	  for obj in $save_oldobjs
91906e7d3316Smrg	  do
91916e7d3316Smrg	    func_len " $obj"
91926e7d3316Smrg	    func_arith $len + $func_len_result
91936e7d3316Smrg	    len=$func_arith_result
91946e7d3316Smrg	    func_append objlist " $obj"
91956e7d3316Smrg	    if test "$len" -lt "$max_cmd_len"; then
91966e7d3316Smrg	      :
91976e7d3316Smrg	    else
91986e7d3316Smrg	      # the above command should be used before it gets too long
91996e7d3316Smrg	      oldobjs=$objlist
92006e7d3316Smrg	      if test "$obj" = "$last_oldobj" ; then
92016e7d3316Smrg		RANLIB=$save_RANLIB
92026e7d3316Smrg	      fi
92036e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
92046e7d3316Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
92056e7d3316Smrg	      objlist=
92066e7d3316Smrg	      len=$len0
92076e7d3316Smrg	    fi
92086e7d3316Smrg	  done
92096e7d3316Smrg	  RANLIB=$save_RANLIB
92106e7d3316Smrg	  oldobjs=$objlist
92116e7d3316Smrg	  if test "X$oldobjs" = "X" ; then
92126e7d3316Smrg	    eval cmds=\"\$concat_cmds\"
92136e7d3316Smrg	  else
92146e7d3316Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
92156e7d3316Smrg	  fi
92166e7d3316Smrg	fi
92176e7d3316Smrg      fi
92186e7d3316Smrg      func_execute_cmds "$cmds" 'exit $?'
9219a966c04fSmrg    done
9220a966c04fSmrg
92216e7d3316Smrg    test -n "$generated" && \
92226e7d3316Smrg      func_show_eval "${RM}r$generated"
9223a966c04fSmrg
92246e7d3316Smrg    # Now create the libtool archive.
92256e7d3316Smrg    case $output in
92266e7d3316Smrg    *.la)
92276e7d3316Smrg      old_library=
92286e7d3316Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
92296e7d3316Smrg      func_verbose "creating $output"
9230a966c04fSmrg
92316e7d3316Smrg      # Preserve any variables that may affect compiler behavior
92326e7d3316Smrg      for var in $variables_saved_for_relink; do
92336e7d3316Smrg	if eval test -z \"\${$var+set}\"; then
92346e7d3316Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
92356e7d3316Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
92366e7d3316Smrg	  relink_command="$var=; export $var; $relink_command"
9237a966c04fSmrg	else
92386e7d3316Smrg	  func_quote_for_eval "$var_value"
92396e7d3316Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9240a966c04fSmrg	fi
92416e7d3316Smrg      done
92426e7d3316Smrg      # Quote the link command for shipping.
92436e7d3316Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
92446e7d3316Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
92456e7d3316Smrg      if test "$hardcode_automatic" = yes ; then
92466e7d3316Smrg	relink_command=
92476e7d3316Smrg      fi
9248a966c04fSmrg
92496e7d3316Smrg      # Only create the output if not a dry run.
92506e7d3316Smrg      $opt_dry_run || {
92516e7d3316Smrg	for installed in no yes; do
92526e7d3316Smrg	  if test "$installed" = yes; then
92536e7d3316Smrg	    if test -z "$install_libdir"; then
92546e7d3316Smrg	      break
92556e7d3316Smrg	    fi
92566e7d3316Smrg	    output="$output_objdir/$outputname"i
92576e7d3316Smrg	    # Replace all uninstalled libtool libraries with the installed ones
92586e7d3316Smrg	    newdependency_libs=
92596e7d3316Smrg	    for deplib in $dependency_libs; do
92606e7d3316Smrg	      case $deplib in
92616e7d3316Smrg	      *.la)
92626e7d3316Smrg		func_basename "$deplib"
92636e7d3316Smrg		name="$func_basename_result"
92646e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
92656e7d3316Smrg		test -z "$libdir" && \
92666e7d3316Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
926797cf2ee2Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
926897cf2ee2Smrg		;;
926997cf2ee2Smrg	      -L*)
927097cf2ee2Smrg		func_stripname -L '' "$deplib"
927197cf2ee2Smrg		func_replace_sysroot "$func_stripname_result"
927297cf2ee2Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
927397cf2ee2Smrg		;;
927497cf2ee2Smrg	      -R*)
927597cf2ee2Smrg		func_stripname -R '' "$deplib"
927697cf2ee2Smrg		func_replace_sysroot "$func_stripname_result"
927797cf2ee2Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
92786e7d3316Smrg		;;
927997cf2ee2Smrg	      *) func_append newdependency_libs " $deplib" ;;
92806e7d3316Smrg	      esac
92816e7d3316Smrg	    done
92826e7d3316Smrg	    dependency_libs="$newdependency_libs"
92836e7d3316Smrg	    newdlfiles=
92846e7d3316Smrg
92856e7d3316Smrg	    for lib in $dlfiles; do
92866e7d3316Smrg	      case $lib in
92876e7d3316Smrg	      *.la)
92886e7d3316Smrg	        func_basename "$lib"
92896e7d3316Smrg		name="$func_basename_result"
92906e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
92916e7d3316Smrg		test -z "$libdir" && \
92926e7d3316Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
929397cf2ee2Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
92946e7d3316Smrg		;;
929597cf2ee2Smrg	      *) func_append newdlfiles " $lib" ;;
92966e7d3316Smrg	      esac
92976e7d3316Smrg	    done
92986e7d3316Smrg	    dlfiles="$newdlfiles"
92996e7d3316Smrg	    newdlprefiles=
93006e7d3316Smrg	    for lib in $dlprefiles; do
93016e7d3316Smrg	      case $lib in
93026e7d3316Smrg	      *.la)
93036e7d3316Smrg		# Only pass preopened files to the pseudo-archive (for
93046e7d3316Smrg		# eventual linking with the app. that links it) if we
93056e7d3316Smrg		# didn't already link the preopened objects directly into
93066e7d3316Smrg		# the library:
93076e7d3316Smrg		func_basename "$lib"
93086e7d3316Smrg		name="$func_basename_result"
93096e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
93106e7d3316Smrg		test -z "$libdir" && \
93116e7d3316Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
931297cf2ee2Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
93136e7d3316Smrg		;;
93146e7d3316Smrg	      esac
93156e7d3316Smrg	    done
93166e7d3316Smrg	    dlprefiles="$newdlprefiles"
93176e7d3316Smrg	  else
93186e7d3316Smrg	    newdlfiles=
93196e7d3316Smrg	    for lib in $dlfiles; do
93206e7d3316Smrg	      case $lib in
93216e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
93226e7d3316Smrg		*) abs=`pwd`"/$lib" ;;
93236e7d3316Smrg	      esac
932497cf2ee2Smrg	      func_append newdlfiles " $abs"
93256e7d3316Smrg	    done
93266e7d3316Smrg	    dlfiles="$newdlfiles"
93276e7d3316Smrg	    newdlprefiles=
93286e7d3316Smrg	    for lib in $dlprefiles; do
93296e7d3316Smrg	      case $lib in
93306e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
93316e7d3316Smrg		*) abs=`pwd`"/$lib" ;;
93326e7d3316Smrg	      esac
933397cf2ee2Smrg	      func_append newdlprefiles " $abs"
93346e7d3316Smrg	    done
93356e7d3316Smrg	    dlprefiles="$newdlprefiles"
93366e7d3316Smrg	  fi
93376e7d3316Smrg	  $RM $output
93386e7d3316Smrg	  # place dlname in correct position for cygwin
93396e7d3316Smrg	  # In fact, it would be nice if we could use this code for all target
93406e7d3316Smrg	  # systems that can't hard-code library paths into their executables
93416e7d3316Smrg	  # and that have no shared library path variable independent of PATH,
93426e7d3316Smrg	  # but it turns out we can't easily determine that from inspecting
93436e7d3316Smrg	  # libtool variables, so we have to hard-code the OSs to which it
93446e7d3316Smrg	  # applies here; at the moment, that means platforms that use the PE
93456e7d3316Smrg	  # object format with DLL files.  See the long comment at the top of
93466e7d3316Smrg	  # tests/bindir.at for full details.
93476e7d3316Smrg	  tdlname=$dlname
93486e7d3316Smrg	  case $host,$output,$installed,$module,$dlname in
93496e7d3316Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
93506e7d3316Smrg	      # If a -bindir argument was supplied, place the dll there.
93516e7d3316Smrg	      if test "x$bindir" != x ;
93526e7d3316Smrg	      then
93536e7d3316Smrg		func_relative_path "$install_libdir" "$bindir"
93546e7d3316Smrg		tdlname=$func_relative_path_result$dlname
93556e7d3316Smrg	      else
93566e7d3316Smrg		# Otherwise fall back on heuristic.
93576e7d3316Smrg		tdlname=../bin/$dlname
93586e7d3316Smrg	      fi
93596e7d3316Smrg	      ;;
93606e7d3316Smrg	  esac
93616e7d3316Smrg	  $ECHO > $output "\
93626e7d3316Smrg# $outputname - a libtool library file
93636e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
93646e7d3316Smrg#
93656e7d3316Smrg# Please DO NOT delete this file!
93666e7d3316Smrg# It is necessary for linking the library.
9367a966c04fSmrg
93686e7d3316Smrg# The name that we can dlopen(3).
93696e7d3316Smrgdlname='$tdlname'
9370a966c04fSmrg
93716e7d3316Smrg# Names of this library.
93726e7d3316Smrglibrary_names='$library_names'
9373a966c04fSmrg
93746e7d3316Smrg# The name of the static archive.
93756e7d3316Smrgold_library='$old_library'
9376a966c04fSmrg
93776e7d3316Smrg# Linker flags that can not go in dependency_libs.
93786e7d3316Smrginherited_linker_flags='$new_inherited_linker_flags'
9379a966c04fSmrg
93806e7d3316Smrg# Libraries that this one depends upon.
93816e7d3316Smrgdependency_libs='$dependency_libs'
9382a966c04fSmrg
93836e7d3316Smrg# Names of additional weak libraries provided by this library
93846e7d3316Smrgweak_library_names='$weak_libs'
9385a966c04fSmrg
93866e7d3316Smrg# Version information for $libname.
93876e7d3316Smrgcurrent=$current
93886e7d3316Smrgage=$age
93896e7d3316Smrgrevision=$revision
9390a966c04fSmrg
93916e7d3316Smrg# Is this an already installed library?
93926e7d3316Smrginstalled=$installed
9393a966c04fSmrg
93946e7d3316Smrg# Should we warn about portability when linking against -modules?
93956e7d3316Smrgshouldnotlink=$module
9396a966c04fSmrg
93976e7d3316Smrg# Files to dlopen/dlpreopen
93986e7d3316Smrgdlopen='$dlfiles'
93996e7d3316Smrgdlpreopen='$dlprefiles'
9400a966c04fSmrg
94016e7d3316Smrg# Directory that this library needs to be installed in:
94026e7d3316Smrglibdir='$install_libdir'"
94036e7d3316Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
94046e7d3316Smrg	    $ECHO >> $output "\
94056e7d3316Smrgrelink_command=\"$relink_command\""
94066e7d3316Smrg	  fi
94076e7d3316Smrg	done
94086e7d3316Smrg      }
9409a966c04fSmrg
94106e7d3316Smrg      # Do a symbolic link so that the libtool archive can be found in
94116e7d3316Smrg      # LD_LIBRARY_PATH before the program is installed.
94126e7d3316Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
94136e7d3316Smrg      ;;
94146e7d3316Smrg    esac
94156e7d3316Smrg    exit $EXIT_SUCCESS
94166e7d3316Smrg}
9417a966c04fSmrg
941897cf2ee2Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
94196e7d3316Smrg    func_mode_link ${1+"$@"}
9420a966c04fSmrg
9421a966c04fSmrg
94226e7d3316Smrg# func_mode_uninstall arg...
94236e7d3316Smrgfunc_mode_uninstall ()
94246e7d3316Smrg{
94256e7d3316Smrg    $opt_debug
94266e7d3316Smrg    RM="$nonopt"
9427a966c04fSmrg    files=
9428a966c04fSmrg    rmforce=
9429a966c04fSmrg    exit_status=0
9430a966c04fSmrg
9431a966c04fSmrg    # This variable tells wrapper scripts just to set variables rather
9432a966c04fSmrg    # than running their programs.
9433a966c04fSmrg    libtool_install_magic="$magic"
9434a966c04fSmrg
9435a966c04fSmrg    for arg
9436a966c04fSmrg    do
9437a966c04fSmrg      case $arg in
943897cf2ee2Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
943997cf2ee2Smrg      -*) func_append RM " $arg" ;;
944097cf2ee2Smrg      *) func_append files " $arg" ;;
9441a966c04fSmrg      esac
9442a966c04fSmrg    done
9443a966c04fSmrg
94446e7d3316Smrg    test -z "$RM" && \
94456e7d3316Smrg      func_fatal_help "you must specify an RM program"
9446a966c04fSmrg
9447a966c04fSmrg    rmdirs=
9448a966c04fSmrg
9449a966c04fSmrg    for file in $files; do
94506e7d3316Smrg      func_dirname "$file" "" "."
94516e7d3316Smrg      dir="$func_dirname_result"
94526e7d3316Smrg      if test "X$dir" = X.; then
945397cf2ee2Smrg	odir="$objdir"
9454a966c04fSmrg      else
945597cf2ee2Smrg	odir="$dir/$objdir"
9456a966c04fSmrg      fi
94576e7d3316Smrg      func_basename "$file"
94586e7d3316Smrg      name="$func_basename_result"
945997cf2ee2Smrg      test "$opt_mode" = uninstall && odir="$dir"
9460a966c04fSmrg
946197cf2ee2Smrg      # Remember odir for removal later, being careful to avoid duplicates
946297cf2ee2Smrg      if test "$opt_mode" = clean; then
9463a966c04fSmrg	case " $rmdirs " in
946497cf2ee2Smrg	  *" $odir "*) ;;
946597cf2ee2Smrg	  *) func_append rmdirs " $odir" ;;
9466a966c04fSmrg	esac
9467a966c04fSmrg      fi
9468a966c04fSmrg
9469a966c04fSmrg      # Don't error if the file doesn't exist and rm -f was used.
94706e7d3316Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
94716e7d3316Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
94726e7d3316Smrg	 test -f "$file"; then
9473a966c04fSmrg	:
9474a966c04fSmrg      elif test -d "$file"; then
9475a966c04fSmrg	exit_status=1
9476a966c04fSmrg	continue
9477a966c04fSmrg      elif test "$rmforce" = yes; then
9478a966c04fSmrg	continue
9479a966c04fSmrg      fi
9480a966c04fSmrg
9481a966c04fSmrg      rmfiles="$file"
9482a966c04fSmrg
9483a966c04fSmrg      case $name in
9484a966c04fSmrg      *.la)
9485a966c04fSmrg	# Possibly a libtool archive, so verify it.
94866e7d3316Smrg	if func_lalib_p "$file"; then
94876e7d3316Smrg	  func_source $dir/$name
9488a966c04fSmrg
9489a966c04fSmrg	  # Delete the libtool libraries and symlinks.
9490a966c04fSmrg	  for n in $library_names; do
949197cf2ee2Smrg	    func_append rmfiles " $odir/$n"
9492a966c04fSmrg	  done
949397cf2ee2Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9494a966c04fSmrg
949597cf2ee2Smrg	  case "$opt_mode" in
9496a966c04fSmrg	  clean)
949797cf2ee2Smrg	    case " $library_names " in
9498a966c04fSmrg	    *" $dlname "*) ;;
949997cf2ee2Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9500a966c04fSmrg	    esac
950197cf2ee2Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9502a966c04fSmrg	    ;;
9503a966c04fSmrg	  uninstall)
9504a966c04fSmrg	    if test -n "$library_names"; then
9505a966c04fSmrg	      # Do each command in the postuninstall commands.
95066e7d3316Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9507a966c04fSmrg	    fi
9508a966c04fSmrg
9509a966c04fSmrg	    if test -n "$old_library"; then
9510a966c04fSmrg	      # Do each command in the old_postuninstall commands.
95116e7d3316Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9512a966c04fSmrg	    fi
9513a966c04fSmrg	    # FIXME: should reinstall the best remaining shared library.
9514a966c04fSmrg	    ;;
9515a966c04fSmrg	  esac
9516a966c04fSmrg	fi
9517a966c04fSmrg	;;
9518a966c04fSmrg
9519a966c04fSmrg      *.lo)
9520a966c04fSmrg	# Possibly a libtool object, so verify it.
95216e7d3316Smrg	if func_lalib_p "$file"; then
9522a966c04fSmrg
9523a966c04fSmrg	  # Read the .lo file
95246e7d3316Smrg	  func_source $dir/$name
9525a966c04fSmrg
9526a966c04fSmrg	  # Add PIC object to the list of files to remove.
95276e7d3316Smrg	  if test -n "$pic_object" &&
95286e7d3316Smrg	     test "$pic_object" != none; then
952997cf2ee2Smrg	    func_append rmfiles " $dir/$pic_object"
9530a966c04fSmrg	  fi
9531a966c04fSmrg
9532a966c04fSmrg	  # Add non-PIC object to the list of files to remove.
95336e7d3316Smrg	  if test -n "$non_pic_object" &&
95346e7d3316Smrg	     test "$non_pic_object" != none; then
953597cf2ee2Smrg	    func_append rmfiles " $dir/$non_pic_object"
9536a966c04fSmrg	  fi
9537a966c04fSmrg	fi
9538a966c04fSmrg	;;
9539a966c04fSmrg
9540a966c04fSmrg      *)
954197cf2ee2Smrg	if test "$opt_mode" = clean ; then
9542a966c04fSmrg	  noexename=$name
9543a966c04fSmrg	  case $file in
9544a966c04fSmrg	  *.exe)
95456e7d3316Smrg	    func_stripname '' '.exe' "$file"
95466e7d3316Smrg	    file=$func_stripname_result
95476e7d3316Smrg	    func_stripname '' '.exe' "$name"
95486e7d3316Smrg	    noexename=$func_stripname_result
9549a966c04fSmrg	    # $file with .exe has already been added to rmfiles,
9550a966c04fSmrg	    # add $file without .exe
955197cf2ee2Smrg	    func_append rmfiles " $file"
9552a966c04fSmrg	    ;;
9553a966c04fSmrg	  esac
9554a966c04fSmrg	  # Do a test to see if this is a libtool program.
95556e7d3316Smrg	  if func_ltwrapper_p "$file"; then
95566e7d3316Smrg	    if func_ltwrapper_executable_p "$file"; then
95576e7d3316Smrg	      func_ltwrapper_scriptname "$file"
95586e7d3316Smrg	      relink_command=
95596e7d3316Smrg	      func_source $func_ltwrapper_scriptname_result
956097cf2ee2Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
95616e7d3316Smrg	    else
95626e7d3316Smrg	      relink_command=
95636e7d3316Smrg	      func_source $dir/$noexename
95646e7d3316Smrg	    fi
9565a966c04fSmrg
9566a966c04fSmrg	    # note $name still contains .exe if it was in $file originally
9567a966c04fSmrg	    # as does the version of $file that was added into $rmfiles
956897cf2ee2Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9569a966c04fSmrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
957097cf2ee2Smrg	      func_append rmfiles " $odir/lt-$name"
9571a966c04fSmrg	    fi
9572a966c04fSmrg	    if test "X$noexename" != "X$name" ; then
957397cf2ee2Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9574a966c04fSmrg	    fi
9575a966c04fSmrg	  fi
9576a966c04fSmrg	fi
9577a966c04fSmrg	;;
9578a966c04fSmrg      esac
95796e7d3316Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9580a966c04fSmrg    done
9581a966c04fSmrg
9582a966c04fSmrg    # Try to remove the ${objdir}s in the directories where we deleted files
9583a966c04fSmrg    for dir in $rmdirs; do
9584a966c04fSmrg      if test -d "$dir"; then
95856e7d3316Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9586a966c04fSmrg      fi
9587a966c04fSmrg    done
9588a966c04fSmrg
9589a966c04fSmrg    exit $exit_status
95906e7d3316Smrg}
9591a966c04fSmrg
959297cf2ee2Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
95936e7d3316Smrg    func_mode_uninstall ${1+"$@"}
9594a966c04fSmrg
959597cf2ee2Smrgtest -z "$opt_mode" && {
95966e7d3316Smrg  help="$generic_help"
95976e7d3316Smrg  func_fatal_help "you must specify a MODE"
95986e7d3316Smrg}
95996e7d3316Smrg
96006e7d3316Smrgtest -z "$exec_cmd" && \
960197cf2ee2Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9602a966c04fSmrg
9603a966c04fSmrgif test -n "$exec_cmd"; then
96046e7d3316Smrg  eval exec "$exec_cmd"
9605a966c04fSmrg  exit $EXIT_FAILURE
9606a966c04fSmrgfi
9607a966c04fSmrg
96086e7d3316Smrgexit $exit_status
9609a966c04fSmrg
9610a966c04fSmrg
9611a966c04fSmrg# The TAGs below are defined such that we never get into a situation
9612a966c04fSmrg# in which we disable both kinds of libraries.  Given conflicting
9613a966c04fSmrg# choices, we go for a static library, that is the most portable,
9614a966c04fSmrg# since we can't tell whether shared libraries were disabled because
9615a966c04fSmrg# the user asked for that or because the platform doesn't support
9616a966c04fSmrg# them.  This is particularly important on AIX, because we don't
9617a966c04fSmrg# support having both static and shared libraries enabled at the same
9618a966c04fSmrg# time on that platform, so we default to a shared-only configuration.
9619a966c04fSmrg# If a disable-shared tag is given, we'll fallback to a static-only
9620a966c04fSmrg# configuration.  But we'll never go from static-only to shared-only.
9621a966c04fSmrg
9622a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
96236e7d3316Smrgbuild_libtool_libs=no
96246e7d3316Smrgbuild_old_libs=yes
9625a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-shared
9626a966c04fSmrg
9627a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
96286e7d3316Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9629a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-static
9630a966c04fSmrg
9631a966c04fSmrg# Local Variables:
9632a966c04fSmrg# mode:shell-script
9633a966c04fSmrg# sh-indentation:2
9634a966c04fSmrg# End:
96356e7d3316Smrg# vi:sw=2
96366e7d3316Smrg
9637