ltmain.sh revision ac92798b
16e7d3316Smrg
2ac92798bSmrg# libtool (GNU libtool) 2.4.2
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,
6ac92798bSmrg# 2007, 2008, 2009, 2010, 2011 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)
44ac92798bSmrg#       --no-warn            don't display warning messages
456e7d3316Smrg#       --tag=TAG            use configuration variables from tag TAG
466e7d3316Smrg#   -v, --verbose            print more informational messages than default
476e7d3316Smrg#       --no-verbose         don't print the extra informational messages
486e7d3316Smrg#       --version            print version information
496e7d3316Smrg#   -h, --help, --help-all   print short, long, or detailed help message
506e7d3316Smrg#
516e7d3316Smrg# MODE must be one of the following:
526e7d3316Smrg#
536e7d3316Smrg#         clean              remove files from the build directory
546e7d3316Smrg#         compile            compile a source file into a libtool object
556e7d3316Smrg#         execute            automatically set library path, then run a program
566e7d3316Smrg#         finish             complete the installation of libtool libraries
576e7d3316Smrg#         install            install libraries or executables
586e7d3316Smrg#         link               create a library or an executable
596e7d3316Smrg#         uninstall          remove libraries from an installed directory
606e7d3316Smrg#
616e7d3316Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
626e7d3316Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
636e7d3316Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
646e7d3316Smrg#
656e7d3316Smrg# When reporting a bug, please describe a test case to reproduce it and
666e7d3316Smrg# include the following information:
676e7d3316Smrg#
686e7d3316Smrg#         host-triplet:	$host
696e7d3316Smrg#         shell:		$SHELL
706e7d3316Smrg#         compiler:		$LTCC
716e7d3316Smrg#         compiler flags:		$LTCFLAGS
726e7d3316Smrg#         linker:		$LD (gnu? $with_gnu_ld)
73ac92798bSmrg#         $progname:	(GNU libtool) 2.4.2
746e7d3316Smrg#         automake:	$automake_version
756e7d3316Smrg#         autoconf:	$autoconf_version
766e7d3316Smrg#
776e7d3316Smrg# Report bugs to <bug-libtool@gnu.org>.
7897cf2ee2Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
7997cf2ee2Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
80a966c04fSmrg
816e7d3316SmrgPROGRAM=libtool
82a966c04fSmrgPACKAGE=libtool
83ac92798bSmrgVERSION=2.4.2
846e7d3316SmrgTIMESTAMP=""
85ac92798bSmrgpackage_revision=1.3337
862e2dd055Smrg
876e7d3316Smrg# Be Bourne compatible
882e2dd055Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
892e2dd055Smrg  emulate sh
902e2dd055Smrg  NULLCMD=:
912e2dd055Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
922e2dd055Smrg  # is contrary to our usage.  Disable this feature.
932e2dd055Smrg  alias -g '${1+"$@"}'='"$@"'
94a966c04fSmrg  setopt NO_GLOB_SUBST
952e2dd055Smrgelse
962e2dd055Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
97a966c04fSmrgfi
982e2dd055SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
992e2dd055SmrgDUALCASE=1; export DUALCASE # for MKS sh
100a966c04fSmrg
1016e7d3316Smrg# A function that is used when there is no print builtin or printf.
1026e7d3316Smrgfunc_fallback_echo ()
1036e7d3316Smrg{
1046e7d3316Smrg  eval 'cat <<_LTECHO_EOF
1056e7d3316Smrg$1
1066e7d3316Smrg_LTECHO_EOF'
1076e7d3316Smrg}
108a966c04fSmrg
1096e7d3316Smrg# NLS nuisances: We save the old values to restore during execute mode.
1106e7d3316Smrglt_user_locale=
1116e7d3316Smrglt_safe_locale=
1122e2dd055Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1132e2dd055Smrgdo
1142e2dd055Smrg  eval "if test \"\${$lt_var+set}\" = set; then
1156e7d3316Smrg          save_$lt_var=\$$lt_var
1166e7d3316Smrg          $lt_var=C
1172e2dd055Smrg	  export $lt_var
1186e7d3316Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
1196e7d3316Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1202e2dd055Smrg	fi"
1212e2dd055Smrgdone
1226e7d3316SmrgLC_ALL=C
1236e7d3316SmrgLANGUAGE=C
1246e7d3316Smrgexport LANGUAGE LC_ALL
1252e2dd055Smrg
1266e7d3316Smrg$lt_unset CDPATH
1276e7d3316Smrg
1286e7d3316Smrg
1296e7d3316Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1306e7d3316Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1316e7d3316Smrg# the _XPG environment variable is not equal to 1 (one), the special
1326e7d3316Smrg# positional parameter $0, within a function call, is the name of the
1336e7d3316Smrg# function.
1346e7d3316Smrgprogpath="$0"
1356e7d3316Smrg
1366e7d3316Smrg
1376e7d3316Smrg
1386e7d3316Smrg: ${CP="cp -f"}
1396e7d3316Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
1406e7d3316Smrg: ${MAKE="make"}
1416e7d3316Smrg: ${MKDIR="mkdir"}
1426e7d3316Smrg: ${MV="mv -f"}
1436e7d3316Smrg: ${RM="rm -f"}
1446e7d3316Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
1456e7d3316Smrg: ${Xsed="$SED -e 1s/^X//"}
1466e7d3316Smrg
1476e7d3316Smrg# Global variables:
1486e7d3316SmrgEXIT_SUCCESS=0
1496e7d3316SmrgEXIT_FAILURE=1
1506e7d3316SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
1516e7d3316SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
1526e7d3316Smrg
1536e7d3316Smrgexit_status=$EXIT_SUCCESS
154a966c04fSmrg
155a966c04fSmrg# Make sure IFS has a sensible default
156a966c04fSmrglt_nl='
157a966c04fSmrg'
158a966c04fSmrgIFS=" 	$lt_nl"
159a966c04fSmrg
1606e7d3316Smrgdirname="s,/[^/]*$,,"
1616e7d3316Smrgbasename="s,^.*/,,"
1626e7d3316Smrg
16397cf2ee2Smrg# func_dirname file append nondir_replacement
16497cf2ee2Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
16597cf2ee2Smrg# otherwise set result to NONDIR_REPLACEMENT.
16697cf2ee2Smrgfunc_dirname ()
16797cf2ee2Smrg{
16897cf2ee2Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
16997cf2ee2Smrg    if test "X$func_dirname_result" = "X${1}"; then
17097cf2ee2Smrg      func_dirname_result="${3}"
17197cf2ee2Smrg    else
17297cf2ee2Smrg      func_dirname_result="$func_dirname_result${2}"
17397cf2ee2Smrg    fi
17497cf2ee2Smrg} # func_dirname may be replaced by extended shell implementation
17597cf2ee2Smrg
17697cf2ee2Smrg
17797cf2ee2Smrg# func_basename file
17897cf2ee2Smrgfunc_basename ()
17997cf2ee2Smrg{
18097cf2ee2Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
18197cf2ee2Smrg} # func_basename may be replaced by extended shell implementation
18297cf2ee2Smrg
18397cf2ee2Smrg
1846e7d3316Smrg# func_dirname_and_basename file append nondir_replacement
1856e7d3316Smrg# perform func_basename and func_dirname in a single function
1866e7d3316Smrg# call:
1876e7d3316Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
1886e7d3316Smrg#             add APPEND to the result, otherwise set result
1896e7d3316Smrg#             to NONDIR_REPLACEMENT.
1906e7d3316Smrg#             value returned in "$func_dirname_result"
1916e7d3316Smrg#   basename: Compute filename of FILE.
1926e7d3316Smrg#             value retuned in "$func_basename_result"
1936e7d3316Smrg# Implementation must be kept synchronized with func_dirname
1946e7d3316Smrg# and func_basename. For efficiency, we do not delegate to
1956e7d3316Smrg# those functions but instead duplicate the functionality here.
1966e7d3316Smrgfunc_dirname_and_basename ()
1976e7d3316Smrg{
19897cf2ee2Smrg    # Extract subdirectory from the argument.
19997cf2ee2Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
20097cf2ee2Smrg    if test "X$func_dirname_result" = "X${1}"; then
20197cf2ee2Smrg      func_dirname_result="${3}"
20297cf2ee2Smrg    else
20397cf2ee2Smrg      func_dirname_result="$func_dirname_result${2}"
20497cf2ee2Smrg    fi
20597cf2ee2Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
20697cf2ee2Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
20797cf2ee2Smrg
20897cf2ee2Smrg
20997cf2ee2Smrg# func_stripname prefix suffix name
21097cf2ee2Smrg# strip PREFIX and SUFFIX off of NAME.
21197cf2ee2Smrg# PREFIX and SUFFIX must not contain globbing or regex special
21297cf2ee2Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
21397cf2ee2Smrg# dot (in which case that matches only a dot).
21497cf2ee2Smrg# func_strip_suffix prefix name
21597cf2ee2Smrgfunc_stripname ()
21697cf2ee2Smrg{
21797cf2ee2Smrg    case ${2} in
21897cf2ee2Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
21997cf2ee2Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
22097cf2ee2Smrg    esac
22197cf2ee2Smrg} # func_stripname may be replaced by extended shell implementation
222a966c04fSmrg
2236e7d3316Smrg
2246e7d3316Smrg# These SED scripts presuppose an absolute path with a trailing slash.
2256e7d3316Smrgpathcar='s,^/\([^/]*\).*$,\1,'
2266e7d3316Smrgpathcdr='s,^/[^/]*,,'
2276e7d3316Smrgremovedotparts=':dotsl
2286e7d3316Smrg		s@/\./@/@g
2296e7d3316Smrg		t dotsl
2306e7d3316Smrg		s,/\.$,/,'
2316e7d3316Smrgcollapseslashes='s@/\{1,\}@/@g'
2326e7d3316Smrgfinalslash='s,/*$,/,'
2336e7d3316Smrg
2346e7d3316Smrg# func_normal_abspath PATH
2356e7d3316Smrg# Remove doubled-up and trailing slashes, "." path components,
2366e7d3316Smrg# and cancel out any ".." path components in PATH after making
2376e7d3316Smrg# it an absolute path.
2386e7d3316Smrg#             value returned in "$func_normal_abspath_result"
2396e7d3316Smrgfunc_normal_abspath ()
2406e7d3316Smrg{
2416e7d3316Smrg  # Start from root dir and reassemble the path.
2426e7d3316Smrg  func_normal_abspath_result=
2436e7d3316Smrg  func_normal_abspath_tpath=$1
2446e7d3316Smrg  func_normal_abspath_altnamespace=
2456e7d3316Smrg  case $func_normal_abspath_tpath in
2466e7d3316Smrg    "")
2476e7d3316Smrg      # Empty path, that just means $cwd.
2486e7d3316Smrg      func_stripname '' '/' "`pwd`"
2496e7d3316Smrg      func_normal_abspath_result=$func_stripname_result
2506e7d3316Smrg      return
2516e7d3316Smrg    ;;
2526e7d3316Smrg    # The next three entries are used to spot a run of precisely
2536e7d3316Smrg    # two leading slashes without using negated character classes;
2546e7d3316Smrg    # we take advantage of case's first-match behaviour.
2556e7d3316Smrg    ///*)
2566e7d3316Smrg      # Unusual form of absolute path, do nothing.
2576e7d3316Smrg    ;;
2586e7d3316Smrg    //*)
2596e7d3316Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2606e7d3316Smrg      # and for example Cygwin uses it to access remote file shares
2616e7d3316Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2626e7d3316Smrg      func_normal_abspath_altnamespace=/
2636e7d3316Smrg    ;;
2646e7d3316Smrg    /*)
2656e7d3316Smrg      # Absolute path, do nothing.
2666e7d3316Smrg    ;;
2676e7d3316Smrg    *)
2686e7d3316Smrg      # Relative path, prepend $cwd.
2696e7d3316Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2706e7d3316Smrg    ;;
2716e7d3316Smrg  esac
2726e7d3316Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2736e7d3316Smrg  # the path to end with a slash for ease of parsing, so make sure
2746e7d3316Smrg  # there is one (and only one) here.
2756e7d3316Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2766e7d3316Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2776e7d3316Smrg  while :; do
2786e7d3316Smrg    # Processed it all yet?
2796e7d3316Smrg    if test "$func_normal_abspath_tpath" = / ; then
2806e7d3316Smrg      # If we ascended to the root using ".." the result may be empty now.
2816e7d3316Smrg      if test -z "$func_normal_abspath_result" ; then
2826e7d3316Smrg        func_normal_abspath_result=/
2836e7d3316Smrg      fi
2846e7d3316Smrg      break
2856e7d3316Smrg    fi
2866e7d3316Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2876e7d3316Smrg        -e "$pathcar"`
2886e7d3316Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2896e7d3316Smrg        -e "$pathcdr"`
2906e7d3316Smrg    # Figure out what to do with it
2916e7d3316Smrg    case $func_normal_abspath_tcomponent in
2926e7d3316Smrg      "")
2936e7d3316Smrg        # Trailing empty path component, ignore it.
2946e7d3316Smrg      ;;
2956e7d3316Smrg      ..)
2966e7d3316Smrg        # Parent dir; strip last assembled component from result.
2976e7d3316Smrg        func_dirname "$func_normal_abspath_result"
2986e7d3316Smrg        func_normal_abspath_result=$func_dirname_result
2996e7d3316Smrg      ;;
3006e7d3316Smrg      *)
3016e7d3316Smrg        # Actual path component, append it.
3026e7d3316Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3036e7d3316Smrg      ;;
3046e7d3316Smrg    esac
3056e7d3316Smrg  done
3066e7d3316Smrg  # Restore leading double-slash if one was found on entry.
3076e7d3316Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
3086e7d3316Smrg}
3096e7d3316Smrg
3106e7d3316Smrg# func_relative_path SRCDIR DSTDIR
3116e7d3316Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3126e7d3316Smrg# slash if non-empty, suitable for immediately appending a filename
3136e7d3316Smrg# without needing to append a separator.
3146e7d3316Smrg#             value returned in "$func_relative_path_result"
3156e7d3316Smrgfunc_relative_path ()
3166e7d3316Smrg{
3176e7d3316Smrg  func_relative_path_result=
3186e7d3316Smrg  func_normal_abspath "$1"
3196e7d3316Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
3206e7d3316Smrg  func_normal_abspath "$2"
3216e7d3316Smrg  func_relative_path_tbindir=$func_normal_abspath_result
3226e7d3316Smrg
3236e7d3316Smrg  # Ascend the tree starting from libdir
3246e7d3316Smrg  while :; do
3256e7d3316Smrg    # check if we have found a prefix of bindir
3266e7d3316Smrg    case $func_relative_path_tbindir in
3276e7d3316Smrg      $func_relative_path_tlibdir)
3286e7d3316Smrg        # found an exact match
3296e7d3316Smrg        func_relative_path_tcancelled=
3306e7d3316Smrg        break
3316e7d3316Smrg        ;;
3326e7d3316Smrg      $func_relative_path_tlibdir*)
3336e7d3316Smrg        # found a matching prefix
3346e7d3316Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3356e7d3316Smrg        func_relative_path_tcancelled=$func_stripname_result
3366e7d3316Smrg        if test -z "$func_relative_path_result"; then
3376e7d3316Smrg          func_relative_path_result=.
3386e7d3316Smrg        fi
3396e7d3316Smrg        break
3406e7d3316Smrg        ;;
3416e7d3316Smrg      *)
3426e7d3316Smrg        func_dirname $func_relative_path_tlibdir
3436e7d3316Smrg        func_relative_path_tlibdir=${func_dirname_result}
3446e7d3316Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3456e7d3316Smrg          # Have to descend all the way to the root!
3466e7d3316Smrg          func_relative_path_result=../$func_relative_path_result
3476e7d3316Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3486e7d3316Smrg          break
3496e7d3316Smrg        fi
3506e7d3316Smrg        func_relative_path_result=../$func_relative_path_result
3516e7d3316Smrg        ;;
3526e7d3316Smrg    esac
3536e7d3316Smrg  done
3546e7d3316Smrg
3556e7d3316Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3566e7d3316Smrg  func_stripname '' '/' "$func_relative_path_result"
3576e7d3316Smrg  func_relative_path_result=$func_stripname_result
3586e7d3316Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3596e7d3316Smrg  if test "x$func_stripname_result" != x ; then
3606e7d3316Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3616e7d3316Smrg  fi
3626e7d3316Smrg
3636e7d3316Smrg  # Normalisation. If bindir is libdir, return empty string,
3646e7d3316Smrg  # else relative path ending with a slash; either way, target
3656e7d3316Smrg  # file name can be directly appended.
3666e7d3316Smrg  if test ! -z "$func_relative_path_result"; then
3676e7d3316Smrg    func_stripname './' '' "$func_relative_path_result/"
3686e7d3316Smrg    func_relative_path_result=$func_stripname_result
3696e7d3316Smrg  fi
3706e7d3316Smrg}
3716e7d3316Smrg
3726e7d3316Smrg# The name of this program:
3736e7d3316Smrgfunc_dirname_and_basename "$progpath"
3746e7d3316Smrgprogname=$func_basename_result
3756e7d3316Smrg
3766e7d3316Smrg# Make sure we have an absolute path for reexecution:
3776e7d3316Smrgcase $progpath in
3786e7d3316Smrg  [\\/]*|[A-Za-z]:\\*) ;;
3796e7d3316Smrg  *[\\/]*)
3806e7d3316Smrg     progdir=$func_dirname_result
3816e7d3316Smrg     progdir=`cd "$progdir" && pwd`
3826e7d3316Smrg     progpath="$progdir/$progname"
3836e7d3316Smrg     ;;
3846e7d3316Smrg  *)
3856e7d3316Smrg     save_IFS="$IFS"
386ac92798bSmrg     IFS=${PATH_SEPARATOR-:}
3876e7d3316Smrg     for progdir in $PATH; do
3886e7d3316Smrg       IFS="$save_IFS"
3896e7d3316Smrg       test -x "$progdir/$progname" && break
3906e7d3316Smrg     done
3916e7d3316Smrg     IFS="$save_IFS"
3926e7d3316Smrg     test -n "$progdir" || progdir=`pwd`
3936e7d3316Smrg     progpath="$progdir/$progname"
3946e7d3316Smrg     ;;
3956e7d3316Smrgesac
3966e7d3316Smrg
3976e7d3316Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3986e7d3316Smrg# metacharacters that are still active within double-quoted strings.
3996e7d3316SmrgXsed="${SED}"' -e 1s/^X//'
4006e7d3316Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
4016e7d3316Smrg
4026e7d3316Smrg# Same as above, but do not quote variable references.
4036e7d3316Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
4046e7d3316Smrg
40597cf2ee2Smrg# Sed substitution that turns a string into a regex matching for the
40697cf2ee2Smrg# string literally.
40797cf2ee2Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
40897cf2ee2Smrg
40997cf2ee2Smrg# Sed substitution that converts a w32 file name or path
41097cf2ee2Smrg# which contains forward slashes, into one that contains
41197cf2ee2Smrg# (escaped) backslashes.  A very naive implementation.
41297cf2ee2Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
41397cf2ee2Smrg
4146e7d3316Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
4156e7d3316Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
4166e7d3316Smrg# in input to double_quote_subst, that '$' was protected from expansion.
4176e7d3316Smrg# Since each input `\' is now two `\'s, look for any number of runs of
4186e7d3316Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
4196e7d3316Smrgbs='\\'
4206e7d3316Smrgbs2='\\\\'
4216e7d3316Smrgbs4='\\\\\\\\'
4226e7d3316Smrgdollar='\$'
4236e7d3316Smrgsed_double_backslash="\
4246e7d3316Smrg  s/$bs4/&\\
4256e7d3316Smrg/g
4266e7d3316Smrg  s/^$bs2$dollar/$bs&/
4276e7d3316Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
4286e7d3316Smrg  s/\n//g"
4296e7d3316Smrg
4306e7d3316Smrg# Standard options:
4316e7d3316Smrgopt_dry_run=false
4326e7d3316Smrgopt_help=false
4336e7d3316Smrgopt_quiet=false
4346e7d3316Smrgopt_verbose=false
4356e7d3316Smrgopt_warning=:
4366e7d3316Smrg
4376e7d3316Smrg# func_echo arg...
4386e7d3316Smrg# Echo program name prefixed message, along with the current mode
4396e7d3316Smrg# name if it has been set yet.
4406e7d3316Smrgfunc_echo ()
4416e7d3316Smrg{
44297cf2ee2Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
4436e7d3316Smrg}
4446e7d3316Smrg
4456e7d3316Smrg# func_verbose arg...
4466e7d3316Smrg# Echo program name prefixed message in verbose mode only.
4476e7d3316Smrgfunc_verbose ()
4486e7d3316Smrg{
4496e7d3316Smrg    $opt_verbose && func_echo ${1+"$@"}
4506e7d3316Smrg
4516e7d3316Smrg    # A bug in bash halts the script if the last line of a function
4526e7d3316Smrg    # fails when set -e is in force, so we need another command to
4536e7d3316Smrg    # work around that:
4546e7d3316Smrg    :
4556e7d3316Smrg}
4566e7d3316Smrg
4576e7d3316Smrg# func_echo_all arg...
4586e7d3316Smrg# Invoke $ECHO with all args, space-separated.
4596e7d3316Smrgfunc_echo_all ()
4606e7d3316Smrg{
4616e7d3316Smrg    $ECHO "$*"
4626e7d3316Smrg}
4636e7d3316Smrg
4646e7d3316Smrg# func_error arg...
4656e7d3316Smrg# Echo program name prefixed message to standard error.
4666e7d3316Smrgfunc_error ()
4676e7d3316Smrg{
46897cf2ee2Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
4696e7d3316Smrg}
4706e7d3316Smrg
4716e7d3316Smrg# func_warning arg...
4726e7d3316Smrg# Echo program name prefixed warning message to standard error.
4736e7d3316Smrgfunc_warning ()
4746e7d3316Smrg{
47597cf2ee2Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
4766e7d3316Smrg
4776e7d3316Smrg    # bash bug again:
4786e7d3316Smrg    :
4796e7d3316Smrg}
4806e7d3316Smrg
4816e7d3316Smrg# func_fatal_error arg...
4826e7d3316Smrg# Echo program name prefixed message to standard error, and exit.
4836e7d3316Smrgfunc_fatal_error ()
4846e7d3316Smrg{
4856e7d3316Smrg    func_error ${1+"$@"}
4866e7d3316Smrg    exit $EXIT_FAILURE
4876e7d3316Smrg}
4886e7d3316Smrg
4896e7d3316Smrg# func_fatal_help arg...
4906e7d3316Smrg# Echo program name prefixed message to standard error, followed by
4916e7d3316Smrg# a help hint, and exit.
4926e7d3316Smrgfunc_fatal_help ()
4936e7d3316Smrg{
4946e7d3316Smrg    func_error ${1+"$@"}
4956e7d3316Smrg    func_fatal_error "$help"
4966e7d3316Smrg}
4976e7d3316Smrghelp="Try \`$progname --help' for more information."  ## default
4986e7d3316Smrg
4996e7d3316Smrg
5006e7d3316Smrg# func_grep expression filename
5016e7d3316Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
5026e7d3316Smrgfunc_grep ()
5036e7d3316Smrg{
5046e7d3316Smrg    $GREP "$1" "$2" >/dev/null 2>&1
5056e7d3316Smrg}
5066e7d3316Smrg
5076e7d3316Smrg
5086e7d3316Smrg# func_mkdir_p directory-path
5096e7d3316Smrg# Make sure the entire path to DIRECTORY-PATH is available.
5106e7d3316Smrgfunc_mkdir_p ()
5116e7d3316Smrg{
5126e7d3316Smrg    my_directory_path="$1"
5136e7d3316Smrg    my_dir_list=
5146e7d3316Smrg
5156e7d3316Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
5166e7d3316Smrg
5176e7d3316Smrg      # Protect directory names starting with `-'
5186e7d3316Smrg      case $my_directory_path in
5196e7d3316Smrg        -*) my_directory_path="./$my_directory_path" ;;
5206e7d3316Smrg      esac
5216e7d3316Smrg
5226e7d3316Smrg      # While some portion of DIR does not yet exist...
5236e7d3316Smrg      while test ! -d "$my_directory_path"; do
5246e7d3316Smrg        # ...make a list in topmost first order.  Use a colon delimited
5256e7d3316Smrg	# list incase some portion of path contains whitespace.
5266e7d3316Smrg        my_dir_list="$my_directory_path:$my_dir_list"
5276e7d3316Smrg
5286e7d3316Smrg        # If the last portion added has no slash in it, the list is done
5296e7d3316Smrg        case $my_directory_path in */*) ;; *) break ;; esac
5306e7d3316Smrg
5316e7d3316Smrg        # ...otherwise throw away the child directory and loop
5326e7d3316Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
5336e7d3316Smrg      done
5346e7d3316Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
5356e7d3316Smrg
5366e7d3316Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
5376e7d3316Smrg      for my_dir in $my_dir_list; do
5386e7d3316Smrg	IFS="$save_mkdir_p_IFS"
5396e7d3316Smrg        # mkdir can fail with a `File exist' error if two processes
5406e7d3316Smrg        # try to create one of the directories concurrently.  Don't
5416e7d3316Smrg        # stop in that case!
5426e7d3316Smrg        $MKDIR "$my_dir" 2>/dev/null || :
5436e7d3316Smrg      done
5446e7d3316Smrg      IFS="$save_mkdir_p_IFS"
5456e7d3316Smrg
5466e7d3316Smrg      # Bail out if we (or some other process) failed to create a directory.
5476e7d3316Smrg      test -d "$my_directory_path" || \
5486e7d3316Smrg        func_fatal_error "Failed to create \`$1'"
5496e7d3316Smrg    fi
5506e7d3316Smrg}
551a966c04fSmrg
552a966c04fSmrg
553a966c04fSmrg# func_mktempdir [string]
554a966c04fSmrg# Make a temporary directory that won't clash with other running
555a966c04fSmrg# libtool processes, and avoids race conditions if possible.  If
556a966c04fSmrg# given, STRING is the basename for that directory.
557a966c04fSmrgfunc_mktempdir ()
558a966c04fSmrg{
559a966c04fSmrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
560a966c04fSmrg
5616e7d3316Smrg    if test "$opt_dry_run" = ":"; then
562a966c04fSmrg      # Return a directory name, but don't create it in dry-run mode
563a966c04fSmrg      my_tmpdir="${my_template}-$$"
564a966c04fSmrg    else
565a966c04fSmrg
566a966c04fSmrg      # If mktemp works, use that first and foremost
567a966c04fSmrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568a966c04fSmrg
569a966c04fSmrg      if test ! -d "$my_tmpdir"; then
5706e7d3316Smrg        # Failing that, at least try and use $RANDOM to avoid a race
5716e7d3316Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
572a966c04fSmrg
5736e7d3316Smrg        save_mktempdir_umask=`umask`
5746e7d3316Smrg        umask 0077
5756e7d3316Smrg        $MKDIR "$my_tmpdir"
5766e7d3316Smrg        umask $save_mktempdir_umask
577a966c04fSmrg      fi
578a966c04fSmrg
579a966c04fSmrg      # If we're not in dry-run mode, bomb out on failure
5806e7d3316Smrg      test -d "$my_tmpdir" || \
5816e7d3316Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
582a966c04fSmrg    fi
583a966c04fSmrg
5846e7d3316Smrg    $ECHO "$my_tmpdir"
585a966c04fSmrg}
586a966c04fSmrg
587a966c04fSmrg
5886e7d3316Smrg# func_quote_for_eval arg
5896e7d3316Smrg# Aesthetically quote ARG to be evaled later.
5906e7d3316Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
5916e7d3316Smrg# is double-quoted, suitable for a subsequent eval, whereas
5926e7d3316Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
5936e7d3316Smrg# which are still active within double quotes backslashified.
5946e7d3316Smrgfunc_quote_for_eval ()
595a966c04fSmrg{
5966e7d3316Smrg    case $1 in
5976e7d3316Smrg      *[\\\`\"\$]*)
5986e7d3316Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
5996e7d3316Smrg      *)
6006e7d3316Smrg        func_quote_for_eval_unquoted_result="$1" ;;
6016e7d3316Smrg    esac
6026e7d3316Smrg
6036e7d3316Smrg    case $func_quote_for_eval_unquoted_result in
6046e7d3316Smrg      # Double-quote args containing shell metacharacters to delay
6056e7d3316Smrg      # word splitting, command substitution and and variable
6066e7d3316Smrg      # expansion for a subsequent eval.
6076e7d3316Smrg      # Many Bourne shells cannot handle close brackets correctly
6086e7d3316Smrg      # in scan sets, so we specify it separately.
6096e7d3316Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6106e7d3316Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
6116e7d3316Smrg        ;;
6126e7d3316Smrg      *)
6136e7d3316Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
614a966c04fSmrg    esac
615a966c04fSmrg}
616a966c04fSmrg
617a966c04fSmrg
6186e7d3316Smrg# func_quote_for_expand arg
6196e7d3316Smrg# Aesthetically quote ARG to be evaled later; same as above,
6206e7d3316Smrg# but do not quote variable references.
6216e7d3316Smrgfunc_quote_for_expand ()
622a966c04fSmrg{
6236e7d3316Smrg    case $1 in
6246e7d3316Smrg      *[\\\`\"]*)
6256e7d3316Smrg	my_arg=`$ECHO "$1" | $SED \
6266e7d3316Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
627a966c04fSmrg      *)
6286e7d3316Smrg        my_arg="$1" ;;
6296e7d3316Smrg    esac
6306e7d3316Smrg
6316e7d3316Smrg    case $my_arg in
6326e7d3316Smrg      # Double-quote args containing shell metacharacters to delay
6336e7d3316Smrg      # word splitting and command substitution for a subsequent eval.
6346e7d3316Smrg      # Many Bourne shells cannot handle close brackets correctly
6356e7d3316Smrg      # in scan sets, so we specify it separately.
6366e7d3316Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6376e7d3316Smrg        my_arg="\"$my_arg\""
6386e7d3316Smrg        ;;
6396e7d3316Smrg    esac
6406e7d3316Smrg
6416e7d3316Smrg    func_quote_for_expand_result="$my_arg"
642a966c04fSmrg}
643a966c04fSmrg
644a966c04fSmrg
6456e7d3316Smrg# func_show_eval cmd [fail_exp]
6466e7d3316Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6476e7d3316Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6486e7d3316Smrg# is given, then evaluate it.
6496e7d3316Smrgfunc_show_eval ()
650a966c04fSmrg{
6516e7d3316Smrg    my_cmd="$1"
6526e7d3316Smrg    my_fail_exp="${2-:}"
653a966c04fSmrg
6546e7d3316Smrg    ${opt_silent-false} || {
6556e7d3316Smrg      func_quote_for_expand "$my_cmd"
6566e7d3316Smrg      eval "func_echo $func_quote_for_expand_result"
6576e7d3316Smrg    }
6586e7d3316Smrg
6596e7d3316Smrg    if ${opt_dry_run-false}; then :; else
6606e7d3316Smrg      eval "$my_cmd"
6616e7d3316Smrg      my_status=$?
6626e7d3316Smrg      if test "$my_status" -eq 0; then :; else
6636e7d3316Smrg	eval "(exit $my_status); $my_fail_exp"
6646e7d3316Smrg      fi
665a966c04fSmrg    fi
666a966c04fSmrg}
667a966c04fSmrg
6686e7d3316Smrg
6696e7d3316Smrg# func_show_eval_locale cmd [fail_exp]
6706e7d3316Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6716e7d3316Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6726e7d3316Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
6736e7d3316Smrgfunc_show_eval_locale ()
674a966c04fSmrg{
6756e7d3316Smrg    my_cmd="$1"
6766e7d3316Smrg    my_fail_exp="${2-:}"
677a966c04fSmrg
6786e7d3316Smrg    ${opt_silent-false} || {
6796e7d3316Smrg      func_quote_for_expand "$my_cmd"
6806e7d3316Smrg      eval "func_echo $func_quote_for_expand_result"
6816e7d3316Smrg    }
682a966c04fSmrg
6836e7d3316Smrg    if ${opt_dry_run-false}; then :; else
6846e7d3316Smrg      eval "$lt_user_locale
6856e7d3316Smrg	    $my_cmd"
6866e7d3316Smrg      my_status=$?
6876e7d3316Smrg      eval "$lt_safe_locale"
6886e7d3316Smrg      if test "$my_status" -eq 0; then :; else
6896e7d3316Smrg	eval "(exit $my_status); $my_fail_exp"
690a966c04fSmrg      fi
6916e7d3316Smrg    fi
692a966c04fSmrg}
693a966c04fSmrg
69497cf2ee2Smrg# func_tr_sh
69597cf2ee2Smrg# Turn $1 into a string suitable for a shell variable name.
69697cf2ee2Smrg# Result is stored in $func_tr_sh_result.  All characters
69797cf2ee2Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
69897cf2ee2Smrg# if $1 begins with a digit, a '_' is prepended as well.
69997cf2ee2Smrgfunc_tr_sh ()
70097cf2ee2Smrg{
70197cf2ee2Smrg  case $1 in
70297cf2ee2Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
70397cf2ee2Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
70497cf2ee2Smrg    ;;
70597cf2ee2Smrg  * )
70697cf2ee2Smrg    func_tr_sh_result=$1
70797cf2ee2Smrg    ;;
70897cf2ee2Smrg  esac
70997cf2ee2Smrg}
71097cf2ee2Smrg
711a966c04fSmrg
7126e7d3316Smrg# func_version
7136e7d3316Smrg# Echo version message to standard output and exit.
7146e7d3316Smrgfunc_version ()
7156e7d3316Smrg{
71697cf2ee2Smrg    $opt_debug
71797cf2ee2Smrg
7186e7d3316Smrg    $SED -n '/(C)/!b go
7196e7d3316Smrg	:more
7206e7d3316Smrg	/\./!{
7216e7d3316Smrg	  N
7226e7d3316Smrg	  s/\n# / /
7236e7d3316Smrg	  b more
7246e7d3316Smrg	}
7256e7d3316Smrg	:go
7266e7d3316Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
7276e7d3316Smrg        s/^# //
7286e7d3316Smrg	s/^# *$//
7296e7d3316Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
7306e7d3316Smrg        p
7316e7d3316Smrg     }' < "$progpath"
7326e7d3316Smrg     exit $?
7336e7d3316Smrg}
734a966c04fSmrg
7356e7d3316Smrg# func_usage
7366e7d3316Smrg# Echo short help message to standard output and exit.
7376e7d3316Smrgfunc_usage ()
7386e7d3316Smrg{
73997cf2ee2Smrg    $opt_debug
74097cf2ee2Smrg
7416e7d3316Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
7426e7d3316Smrg        s/^# //
7436e7d3316Smrg	s/^# *$//
7446e7d3316Smrg	s/\$progname/'$progname'/
7456e7d3316Smrg	p
7466e7d3316Smrg    }' < "$progpath"
7476e7d3316Smrg    echo
7486e7d3316Smrg    $ECHO "run \`$progname --help | more' for full usage"
7496e7d3316Smrg    exit $?
7506e7d3316Smrg}
751a966c04fSmrg
7526e7d3316Smrg# func_help [NOEXIT]
7536e7d3316Smrg# Echo long help message to standard output and exit,
7546e7d3316Smrg# unless 'noexit' is passed as argument.
7556e7d3316Smrgfunc_help ()
7566e7d3316Smrg{
75797cf2ee2Smrg    $opt_debug
75897cf2ee2Smrg
7596e7d3316Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
76097cf2ee2Smrg	:print
7616e7d3316Smrg        s/^# //
7626e7d3316Smrg	s/^# *$//
7636e7d3316Smrg	s*\$progname*'$progname'*
7646e7d3316Smrg	s*\$host*'"$host"'*
7656e7d3316Smrg	s*\$SHELL*'"$SHELL"'*
7666e7d3316Smrg	s*\$LTCC*'"$LTCC"'*
7676e7d3316Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
7686e7d3316Smrg	s*\$LD*'"$LD"'*
7696e7d3316Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
770ac92798bSmrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
771ac92798bSmrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
7726e7d3316Smrg	p
77397cf2ee2Smrg	d
77497cf2ee2Smrg     }
77597cf2ee2Smrg     /^# .* home page:/b print
77697cf2ee2Smrg     /^# General help using/b print
77797cf2ee2Smrg     ' < "$progpath"
7786e7d3316Smrg    ret=$?
7796e7d3316Smrg    if test -z "$1"; then
7806e7d3316Smrg      exit $ret
7816e7d3316Smrg    fi
7826e7d3316Smrg}
783a966c04fSmrg
7846e7d3316Smrg# func_missing_arg argname
7856e7d3316Smrg# Echo program name prefixed message to standard error and set global
7866e7d3316Smrg# exit_cmd.
7876e7d3316Smrgfunc_missing_arg ()
7886e7d3316Smrg{
78997cf2ee2Smrg    $opt_debug
79097cf2ee2Smrg
7916e7d3316Smrg    func_error "missing argument for $1."
7926e7d3316Smrg    exit_cmd=exit
7936e7d3316Smrg}
794a966c04fSmrg
795a966c04fSmrg
79697cf2ee2Smrg# func_split_short_opt shortopt
79797cf2ee2Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
79897cf2ee2Smrg# variables after splitting SHORTOPT after the 2nd character.
79997cf2ee2Smrgfunc_split_short_opt ()
80097cf2ee2Smrg{
80197cf2ee2Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
80297cf2ee2Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
80397cf2ee2Smrg
80497cf2ee2Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
80597cf2ee2Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
80697cf2ee2Smrg} # func_split_short_opt may be replaced by extended shell implementation
80797cf2ee2Smrg
80897cf2ee2Smrg
80997cf2ee2Smrg# func_split_long_opt longopt
81097cf2ee2Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
81197cf2ee2Smrg# variables after splitting LONGOPT at the `=' sign.
81297cf2ee2Smrgfunc_split_long_opt ()
81397cf2ee2Smrg{
81497cf2ee2Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
81597cf2ee2Smrg    my_sed_long_arg='1s/^--[^=]*=//'
81697cf2ee2Smrg
81797cf2ee2Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
81897cf2ee2Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
81997cf2ee2Smrg} # func_split_long_opt may be replaced by extended shell implementation
82097cf2ee2Smrg
82197cf2ee2Smrgexit_cmd=:
822a966c04fSmrg
823a966c04fSmrg
8242e2dd055Smrg
825a966c04fSmrg
8266e7d3316Smrg
8276e7d3316Smrgmagic="%%%MAGIC variable%%%"
8286e7d3316Smrgmagic_exe="%%%MAGIC EXE variable%%%"
8296e7d3316Smrg
8306e7d3316Smrg# Global variables.
8316e7d3316Smrgnonopt=
8326e7d3316Smrgpreserve_args=
8336e7d3316Smrglo2o="s/\\.lo\$/.${objext}/"
8346e7d3316Smrgo2lo="s/\\.${objext}\$/.lo/"
8356e7d3316Smrgextracted_archives=
8366e7d3316Smrgextracted_serial=0
8376e7d3316Smrg
8386e7d3316Smrg# If this variable is set in any of the actions, the command in it
8396e7d3316Smrg# will be execed at the end.  This prevents here-documents from being
8406e7d3316Smrg# left over by shells.
8416e7d3316Smrgexec_cmd=
8426e7d3316Smrg
84397cf2ee2Smrg# func_append var value
84497cf2ee2Smrg# Append VALUE to the end of shell variable VAR.
84597cf2ee2Smrgfunc_append ()
84697cf2ee2Smrg{
84797cf2ee2Smrg    eval "${1}=\$${1}\${2}"
84897cf2ee2Smrg} # func_append may be replaced by extended shell implementation
84997cf2ee2Smrg
85097cf2ee2Smrg# func_append_quoted var value
85197cf2ee2Smrg# Quote VALUE and append to the end of shell variable VAR, separated
85297cf2ee2Smrg# by a space.
85397cf2ee2Smrgfunc_append_quoted ()
85497cf2ee2Smrg{
85597cf2ee2Smrg    func_quote_for_eval "${2}"
85697cf2ee2Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
85797cf2ee2Smrg} # func_append_quoted may be replaced by extended shell implementation
85897cf2ee2Smrg
85997cf2ee2Smrg
86097cf2ee2Smrg# func_arith arithmetic-term...
86197cf2ee2Smrgfunc_arith ()
86297cf2ee2Smrg{
86397cf2ee2Smrg    func_arith_result=`expr "${@}"`
86497cf2ee2Smrg} # func_arith may be replaced by extended shell implementation
86597cf2ee2Smrg
86697cf2ee2Smrg
86797cf2ee2Smrg# func_len string
86897cf2ee2Smrg# STRING may not start with a hyphen.
86997cf2ee2Smrgfunc_len ()
87097cf2ee2Smrg{
87197cf2ee2Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
87297cf2ee2Smrg} # func_len may be replaced by extended shell implementation
87397cf2ee2Smrg
87497cf2ee2Smrg
87597cf2ee2Smrg# func_lo2o object
87697cf2ee2Smrgfunc_lo2o ()
87797cf2ee2Smrg{
87897cf2ee2Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
87997cf2ee2Smrg} # func_lo2o may be replaced by extended shell implementation
88097cf2ee2Smrg
88197cf2ee2Smrg
88297cf2ee2Smrg# func_xform libobj-or-source
88397cf2ee2Smrgfunc_xform ()
88497cf2ee2Smrg{
88597cf2ee2Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
88697cf2ee2Smrg} # func_xform may be replaced by extended shell implementation
88797cf2ee2Smrg
88897cf2ee2Smrg
8896e7d3316Smrg# func_fatal_configuration arg...
8906e7d3316Smrg# Echo program name prefixed message to standard error, followed by
8916e7d3316Smrg# a configuration failure hint, and exit.
8926e7d3316Smrgfunc_fatal_configuration ()
8936e7d3316Smrg{
8946e7d3316Smrg    func_error ${1+"$@"}
8956e7d3316Smrg    func_error "See the $PACKAGE documentation for more information."
8966e7d3316Smrg    func_fatal_error "Fatal configuration error."
8976e7d3316Smrg}
8986e7d3316Smrg
8996e7d3316Smrg
9006e7d3316Smrg# func_config
9016e7d3316Smrg# Display the configuration for all the tags in this script.
9026e7d3316Smrgfunc_config ()
9036e7d3316Smrg{
9046e7d3316Smrg    re_begincf='^# ### BEGIN LIBTOOL'
9056e7d3316Smrg    re_endcf='^# ### END LIBTOOL'
9066e7d3316Smrg
9076e7d3316Smrg    # Default configuration.
9086e7d3316Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
9096e7d3316Smrg
910a966c04fSmrg    # Now print the configurations for the tags.
911a966c04fSmrg    for tagname in $taglist; do
9126e7d3316Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913a966c04fSmrg    done
914a966c04fSmrg
9156e7d3316Smrg    exit $?
9166e7d3316Smrg}
917a966c04fSmrg
9186e7d3316Smrg# func_features
9196e7d3316Smrg# Display the features supported by this script.
9206e7d3316Smrgfunc_features ()
9216e7d3316Smrg{
9226e7d3316Smrg    echo "host: $host"
923a966c04fSmrg    if test "$build_libtool_libs" = yes; then
9246e7d3316Smrg      echo "enable shared libraries"
925a966c04fSmrg    else
9266e7d3316Smrg      echo "disable shared libraries"
927a966c04fSmrg    fi
928a966c04fSmrg    if test "$build_old_libs" = yes; then
9296e7d3316Smrg      echo "enable static libraries"
930a966c04fSmrg    else
9316e7d3316Smrg      echo "disable static libraries"
932a966c04fSmrg    fi
9336e7d3316Smrg
934a966c04fSmrg    exit $?
9356e7d3316Smrg}
936a966c04fSmrg
9376e7d3316Smrg# func_enable_tag tagname
9386e7d3316Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
9396e7d3316Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
9406e7d3316Smrg# variable here.
9416e7d3316Smrgfunc_enable_tag ()
9426e7d3316Smrg{
9436e7d3316Smrg  # Global variable:
9446e7d3316Smrg  tagname="$1"
945a966c04fSmrg
9466e7d3316Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
9476e7d3316Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
9486e7d3316Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949a966c04fSmrg
9506e7d3316Smrg  # Validate tagname.
9516e7d3316Smrg  case $tagname in
9526e7d3316Smrg    *[!-_A-Za-z0-9,/]*)
9536e7d3316Smrg      func_fatal_error "invalid tag name: $tagname"
9546e7d3316Smrg      ;;
9556e7d3316Smrg  esac
956a966c04fSmrg
9576e7d3316Smrg  # Don't test for the "default" C tag, as we know it's
9586e7d3316Smrg  # there but not specially marked.
9596e7d3316Smrg  case $tagname in
9606e7d3316Smrg    CC) ;;
9616e7d3316Smrg    *)
9626e7d3316Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
9636e7d3316Smrg	taglist="$taglist $tagname"
9646e7d3316Smrg
9656e7d3316Smrg	# Evaluate the configuration.  Be careful to quote the path
9666e7d3316Smrg	# and the sed script, to avoid splitting on whitespace, but
9676e7d3316Smrg	# also don't use non-portable quotes within backquotes within
9686e7d3316Smrg	# quotes we have to do it in 2 steps:
9696e7d3316Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
9706e7d3316Smrg	eval "$extractedcf"
9716e7d3316Smrg      else
9726e7d3316Smrg	func_error "ignoring unknown tag $tagname"
9736e7d3316Smrg      fi
9746e7d3316Smrg      ;;
9756e7d3316Smrg  esac
9766e7d3316Smrg}
9776e7d3316Smrg
97897cf2ee2Smrg# func_check_version_match
97997cf2ee2Smrg# Ensure that we are using m4 macros, and libtool script from the same
98097cf2ee2Smrg# release of libtool.
98197cf2ee2Smrgfunc_check_version_match ()
9826e7d3316Smrg{
98397cf2ee2Smrg  if test "$package_revision" != "$macro_revision"; then
98497cf2ee2Smrg    if test "$VERSION" != "$macro_version"; then
98597cf2ee2Smrg      if test -z "$macro_version"; then
98697cf2ee2Smrg        cat >&2 <<_LT_EOF
98797cf2ee2Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
98897cf2ee2Smrg$progname: definition of this LT_INIT comes from an older release.
98997cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
99097cf2ee2Smrg$progname: and run autoconf again.
99197cf2ee2Smrg_LT_EOF
99297cf2ee2Smrg      else
99397cf2ee2Smrg        cat >&2 <<_LT_EOF
99497cf2ee2Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
99597cf2ee2Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
99697cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
99797cf2ee2Smrg$progname: and run autoconf again.
99897cf2ee2Smrg_LT_EOF
99997cf2ee2Smrg      fi
100097cf2ee2Smrg    else
100197cf2ee2Smrg      cat >&2 <<_LT_EOF
100297cf2ee2Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
100397cf2ee2Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
100497cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
100597cf2ee2Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
100697cf2ee2Smrg_LT_EOF
100797cf2ee2Smrg    fi
1008a966c04fSmrg
100997cf2ee2Smrg    exit $EXIT_MISMATCH
101097cf2ee2Smrg  fi
101197cf2ee2Smrg}
101297cf2ee2Smrg
101397cf2ee2Smrg
101497cf2ee2Smrg# Shorthand for --mode=foo, only valid as the first argument
101597cf2ee2Smrgcase $1 in
101697cf2ee2Smrgclean|clea|cle|cl)
101797cf2ee2Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
101897cf2ee2Smrg  ;;
101997cf2ee2Smrgcompile|compil|compi|comp|com|co|c)
102097cf2ee2Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
102197cf2ee2Smrg  ;;
102297cf2ee2Smrgexecute|execut|execu|exec|exe|ex|e)
102397cf2ee2Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
102497cf2ee2Smrg  ;;
102597cf2ee2Smrgfinish|finis|fini|fin|fi|f)
102697cf2ee2Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
102797cf2ee2Smrg  ;;
102897cf2ee2Smrginstall|instal|insta|inst|ins|in|i)
102997cf2ee2Smrg  shift; set dummy --mode install ${1+"$@"}; shift
103097cf2ee2Smrg  ;;
103197cf2ee2Smrglink|lin|li|l)
103297cf2ee2Smrg  shift; set dummy --mode link ${1+"$@"}; shift
103397cf2ee2Smrg  ;;
103497cf2ee2Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
103597cf2ee2Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
103697cf2ee2Smrg  ;;
103797cf2ee2Smrgesac
1038a966c04fSmrg
103997cf2ee2Smrg
104097cf2ee2Smrg
104197cf2ee2Smrg# Option defaults:
104297cf2ee2Smrgopt_debug=:
104397cf2ee2Smrgopt_dry_run=false
104497cf2ee2Smrgopt_config=false
104597cf2ee2Smrgopt_preserve_dup_deps=false
104697cf2ee2Smrgopt_features=false
104797cf2ee2Smrgopt_finish=false
104897cf2ee2Smrgopt_help=false
104997cf2ee2Smrgopt_help_all=false
105097cf2ee2Smrgopt_silent=:
1051ac92798bSmrgopt_warning=:
105297cf2ee2Smrgopt_verbose=:
105397cf2ee2Smrgopt_silent=false
105497cf2ee2Smrgopt_verbose=false
105597cf2ee2Smrg
105697cf2ee2Smrg
105797cf2ee2Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
105897cf2ee2Smrg# script to make things like `--version' happen as quickly as we can.
105997cf2ee2Smrg{
106097cf2ee2Smrg  # this just eases exit handling
106197cf2ee2Smrg  while test $# -gt 0; do
10626e7d3316Smrg    opt="$1"
10636e7d3316Smrg    shift
10646e7d3316Smrg    case $opt in
106597cf2ee2Smrg      --debug|-x)	opt_debug='set -x'
10666e7d3316Smrg			func_echo "enabling shell trace mode"
10676e7d3316Smrg			$opt_debug
10686e7d3316Smrg			;;
106997cf2ee2Smrg      --dry-run|--dryrun|-n)
107097cf2ee2Smrg			opt_dry_run=:
10716e7d3316Smrg			;;
107297cf2ee2Smrg      --config)
107397cf2ee2Smrg			opt_config=:
107497cf2ee2Smrgfunc_config
107597cf2ee2Smrg			;;
107697cf2ee2Smrg      --dlopen|-dlopen)
107797cf2ee2Smrg			optarg="$1"
107897cf2ee2Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
107997cf2ee2Smrg}$optarg"
10806e7d3316Smrg			shift
10816e7d3316Smrg			;;
10826e7d3316Smrg      --preserve-dup-deps)
108397cf2ee2Smrg			opt_preserve_dup_deps=:
10846e7d3316Smrg			;;
108597cf2ee2Smrg      --features)
108697cf2ee2Smrg			opt_features=:
108797cf2ee2Smrgfunc_features
10886e7d3316Smrg			;;
108997cf2ee2Smrg      --finish)
109097cf2ee2Smrg			opt_finish=:
109197cf2ee2Smrgset dummy --mode finish ${1+"$@"}; shift
109297cf2ee2Smrg			;;
109397cf2ee2Smrg      --help)
109497cf2ee2Smrg			opt_help=:
109597cf2ee2Smrg			;;
109697cf2ee2Smrg      --help-all)
109797cf2ee2Smrg			opt_help_all=:
109897cf2ee2Smrgopt_help=': help-all'
109997cf2ee2Smrg			;;
110097cf2ee2Smrg      --mode)
110197cf2ee2Smrg			test $# = 0 && func_missing_arg $opt && break
110297cf2ee2Smrg			optarg="$1"
110397cf2ee2Smrg			opt_mode="$optarg"
110497cf2ee2Smrgcase $optarg in
110597cf2ee2Smrg  # Valid mode arguments:
110697cf2ee2Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
110797cf2ee2Smrg
110897cf2ee2Smrg  # Catch anything else as an error
110997cf2ee2Smrg  *) func_error "invalid argument for $opt"
111097cf2ee2Smrg     exit_cmd=exit
111197cf2ee2Smrg     break
111297cf2ee2Smrg     ;;
111397cf2ee2Smrgesac
111497cf2ee2Smrg			shift
111597cf2ee2Smrg			;;
111697cf2ee2Smrg      --no-silent|--no-quiet)
11176e7d3316Smrg			opt_silent=false
1118ac92798bSmrgfunc_append preserve_args " $opt"
1119ac92798bSmrg			;;
1120ac92798bSmrg      --no-warning|--no-warn)
1121ac92798bSmrg			opt_warning=false
112297cf2ee2Smrgfunc_append preserve_args " $opt"
11236e7d3316Smrg			;;
112497cf2ee2Smrg      --no-verbose)
11256e7d3316Smrg			opt_verbose=false
112697cf2ee2Smrgfunc_append preserve_args " $opt"
11276e7d3316Smrg			;;
112897cf2ee2Smrg      --silent|--quiet)
112997cf2ee2Smrg			opt_silent=:
113097cf2ee2Smrgfunc_append preserve_args " $opt"
113197cf2ee2Smrg        opt_verbose=false
113297cf2ee2Smrg			;;
113397cf2ee2Smrg      --verbose|-v)
113497cf2ee2Smrg			opt_verbose=:
113597cf2ee2Smrgfunc_append preserve_args " $opt"
113697cf2ee2Smrgopt_silent=false
113797cf2ee2Smrg			;;
113897cf2ee2Smrg      --tag)
113997cf2ee2Smrg			test $# = 0 && func_missing_arg $opt && break
114097cf2ee2Smrg			optarg="$1"
114197cf2ee2Smrg			opt_tag="$optarg"
114297cf2ee2Smrgfunc_append preserve_args " $opt $optarg"
114397cf2ee2Smrgfunc_enable_tag "$optarg"
11446e7d3316Smrg			shift
11456e7d3316Smrg			;;
11466e7d3316Smrg
114797cf2ee2Smrg      -\?|-h)		func_usage				;;
114897cf2ee2Smrg      --help)		func_help				;;
114997cf2ee2Smrg      --version)	func_version				;;
115097cf2ee2Smrg
11516e7d3316Smrg      # Separate optargs to long options:
115297cf2ee2Smrg      --*=*)
115397cf2ee2Smrg			func_split_long_opt "$opt"
115497cf2ee2Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
11556e7d3316Smrg			shift
11566e7d3316Smrg			;;
11576e7d3316Smrg
115897cf2ee2Smrg      # Separate non-argument short options:
115997cf2ee2Smrg      -\?*|-h*|-n*|-v*)
116097cf2ee2Smrg			func_split_short_opt "$opt"
116197cf2ee2Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
116297cf2ee2Smrg			shift
11636e7d3316Smrg			;;
116497cf2ee2Smrg
116597cf2ee2Smrg      --)		break					;;
116697cf2ee2Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
116797cf2ee2Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
11686e7d3316Smrg    esac
11696e7d3316Smrg  done
11706e7d3316Smrg
117197cf2ee2Smrg  # Validate options:
117297cf2ee2Smrg
117397cf2ee2Smrg  # save first non-option argument
117497cf2ee2Smrg  if test "$#" -gt 0; then
117597cf2ee2Smrg    nonopt="$opt"
117697cf2ee2Smrg    shift
117797cf2ee2Smrg  fi
117897cf2ee2Smrg
117997cf2ee2Smrg  # preserve --debug
118097cf2ee2Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
11816e7d3316Smrg
11826e7d3316Smrg  case $host in
11836e7d3316Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
11846e7d3316Smrg      # don't eliminate duplications in $postdeps and $predeps
11856e7d3316Smrg      opt_duplicate_compiler_generated_deps=:
1186a966c04fSmrg      ;;
1187a966c04fSmrg    *)
118897cf2ee2Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
11896e7d3316Smrg      ;;
11906e7d3316Smrg  esac
1191a966c04fSmrg
119297cf2ee2Smrg  $opt_help || {
119397cf2ee2Smrg    # Sanity checks first:
119497cf2ee2Smrg    func_check_version_match
11956e7d3316Smrg
119697cf2ee2Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
119797cf2ee2Smrg      func_fatal_configuration "not configured to build any kind of library"
11986e7d3316Smrg    fi
11996e7d3316Smrg
120097cf2ee2Smrg    # Darwin sucks
120197cf2ee2Smrg    eval std_shrext=\"$shrext_cmds\"
12026e7d3316Smrg
120397cf2ee2Smrg    # Only execute mode is allowed to have -dlopen flags.
120497cf2ee2Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
120597cf2ee2Smrg      func_error "unrecognized option \`-dlopen'"
120697cf2ee2Smrg      $ECHO "$help" 1>&2
120797cf2ee2Smrg      exit $EXIT_FAILURE
120897cf2ee2Smrg    fi
12096e7d3316Smrg
121097cf2ee2Smrg    # Change the help message to a mode-specific one.
121197cf2ee2Smrg    generic_help="$help"
121297cf2ee2Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
121397cf2ee2Smrg  }
12146e7d3316Smrg
12156e7d3316Smrg
121697cf2ee2Smrg  # Bail if the options were screwed
121797cf2ee2Smrg  $exit_cmd $EXIT_FAILURE
121897cf2ee2Smrg}
12196e7d3316Smrg
12206e7d3316Smrg
1221a966c04fSmrg
1222a966c04fSmrg
122397cf2ee2Smrg## ----------- ##
122497cf2ee2Smrg##    Main.    ##
122597cf2ee2Smrg## ----------- ##
1226a966c04fSmrg
12276e7d3316Smrg# func_lalib_p file
12286e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
12296e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12306e7d3316Smrg# determined imposters.
12316e7d3316Smrgfunc_lalib_p ()
12326e7d3316Smrg{
12336e7d3316Smrg    test -f "$1" &&
12346e7d3316Smrg      $SED -e 4q "$1" 2>/dev/null \
12356e7d3316Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
12366e7d3316Smrg}
1237a966c04fSmrg
12386e7d3316Smrg# func_lalib_unsafe_p file
12396e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
12406e7d3316Smrg# This function implements the same check as func_lalib_p without
12416e7d3316Smrg# resorting to external programs.  To this end, it redirects stdin and
12426e7d3316Smrg# closes it afterwards, without saving the original file descriptor.
12436e7d3316Smrg# As a safety measure, use it only where a negative result would be
12446e7d3316Smrg# fatal anyway.  Works if `file' does not exist.
12456e7d3316Smrgfunc_lalib_unsafe_p ()
12466e7d3316Smrg{
12476e7d3316Smrg    lalib_p=no
12486e7d3316Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
12496e7d3316Smrg	for lalib_p_l in 1 2 3 4
12506e7d3316Smrg	do
12516e7d3316Smrg	    read lalib_p_line
12526e7d3316Smrg	    case "$lalib_p_line" in
12536e7d3316Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
12546e7d3316Smrg	    esac
12556e7d3316Smrg	done
12566e7d3316Smrg	exec 0<&5 5<&-
12576e7d3316Smrg    fi
12586e7d3316Smrg    test "$lalib_p" = yes
12596e7d3316Smrg}
1260a966c04fSmrg
12616e7d3316Smrg# func_ltwrapper_script_p file
12626e7d3316Smrg# True iff FILE is a libtool wrapper script
12636e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12646e7d3316Smrg# determined imposters.
12656e7d3316Smrgfunc_ltwrapper_script_p ()
12666e7d3316Smrg{
12676e7d3316Smrg    func_lalib_p "$1"
12686e7d3316Smrg}
1269a966c04fSmrg
12706e7d3316Smrg# func_ltwrapper_executable_p file
12716e7d3316Smrg# True iff FILE is a libtool wrapper executable
12726e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12736e7d3316Smrg# determined imposters.
12746e7d3316Smrgfunc_ltwrapper_executable_p ()
12756e7d3316Smrg{
12766e7d3316Smrg    func_ltwrapper_exec_suffix=
12776e7d3316Smrg    case $1 in
12786e7d3316Smrg    *.exe) ;;
12796e7d3316Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
12806e7d3316Smrg    esac
12816e7d3316Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
12826e7d3316Smrg}
12836e7d3316Smrg
12846e7d3316Smrg# func_ltwrapper_scriptname file
12856e7d3316Smrg# Assumes file is an ltwrapper_executable
12866e7d3316Smrg# uses $file to determine the appropriate filename for a
12876e7d3316Smrg# temporary ltwrapper_script.
12886e7d3316Smrgfunc_ltwrapper_scriptname ()
12896e7d3316Smrg{
129097cf2ee2Smrg    func_dirname_and_basename "$1" "" "."
129197cf2ee2Smrg    func_stripname '' '.exe' "$func_basename_result"
129297cf2ee2Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
12936e7d3316Smrg}
12946e7d3316Smrg
12956e7d3316Smrg# func_ltwrapper_p file
12966e7d3316Smrg# True iff FILE is a libtool wrapper script or wrapper executable
12976e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
12986e7d3316Smrg# determined imposters.
12996e7d3316Smrgfunc_ltwrapper_p ()
13006e7d3316Smrg{
13016e7d3316Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
13026e7d3316Smrg}
13036e7d3316Smrg
13046e7d3316Smrg
13056e7d3316Smrg# func_execute_cmds commands fail_cmd
13066e7d3316Smrg# Execute tilde-delimited COMMANDS.
13076e7d3316Smrg# If FAIL_CMD is given, eval that upon failure.
13086e7d3316Smrg# FAIL_CMD may read-access the current command in variable CMD!
13096e7d3316Smrgfunc_execute_cmds ()
13106e7d3316Smrg{
13116e7d3316Smrg    $opt_debug
13126e7d3316Smrg    save_ifs=$IFS; IFS='~'
13136e7d3316Smrg    for cmd in $1; do
13146e7d3316Smrg      IFS=$save_ifs
13156e7d3316Smrg      eval cmd=\"$cmd\"
13166e7d3316Smrg      func_show_eval "$cmd" "${2-:}"
13176e7d3316Smrg    done
13186e7d3316Smrg    IFS=$save_ifs
13196e7d3316Smrg}
13206e7d3316Smrg
13216e7d3316Smrg
13226e7d3316Smrg# func_source file
13236e7d3316Smrg# Source FILE, adding directory component if necessary.
13246e7d3316Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
13256e7d3316Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
13266e7d3316Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
13276e7d3316Smrg# `FILE.' does not work on cygwin managed mounts.
13286e7d3316Smrgfunc_source ()
13296e7d3316Smrg{
13306e7d3316Smrg    $opt_debug
13316e7d3316Smrg    case $1 in
13326e7d3316Smrg    */* | *\\*)	. "$1" ;;
13336e7d3316Smrg    *)		. "./$1" ;;
13346e7d3316Smrg    esac
13356e7d3316Smrg}
13366e7d3316Smrg
13376e7d3316Smrg
133897cf2ee2Smrg# func_resolve_sysroot PATH
133997cf2ee2Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
134097cf2ee2Smrg# func_resolve_sysroot_result
134197cf2ee2Smrgfunc_resolve_sysroot ()
134297cf2ee2Smrg{
134397cf2ee2Smrg  func_resolve_sysroot_result=$1
134497cf2ee2Smrg  case $func_resolve_sysroot_result in
134597cf2ee2Smrg  =*)
134697cf2ee2Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
134797cf2ee2Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
134897cf2ee2Smrg    ;;
134997cf2ee2Smrg  esac
135097cf2ee2Smrg}
135197cf2ee2Smrg
135297cf2ee2Smrg# func_replace_sysroot PATH
135397cf2ee2Smrg# If PATH begins with the sysroot, replace it with = and
135497cf2ee2Smrg# store the result into func_replace_sysroot_result.
135597cf2ee2Smrgfunc_replace_sysroot ()
135697cf2ee2Smrg{
135797cf2ee2Smrg  case "$lt_sysroot:$1" in
135897cf2ee2Smrg  ?*:"$lt_sysroot"*)
135997cf2ee2Smrg    func_stripname "$lt_sysroot" '' "$1"
136097cf2ee2Smrg    func_replace_sysroot_result="=$func_stripname_result"
136197cf2ee2Smrg    ;;
136297cf2ee2Smrg  *)
136397cf2ee2Smrg    # Including no sysroot.
136497cf2ee2Smrg    func_replace_sysroot_result=$1
136597cf2ee2Smrg    ;;
136697cf2ee2Smrg  esac
136797cf2ee2Smrg}
136897cf2ee2Smrg
13696e7d3316Smrg# func_infer_tag arg
13706e7d3316Smrg# Infer tagged configuration to use if any are available and
13716e7d3316Smrg# if one wasn't chosen via the "--tag" command line option.
13726e7d3316Smrg# Only attempt this if the compiler in the base compile
13736e7d3316Smrg# command doesn't match the default compiler.
13746e7d3316Smrg# arg is usually of the form 'gcc ...'
13756e7d3316Smrgfunc_infer_tag ()
13766e7d3316Smrg{
13776e7d3316Smrg    $opt_debug
13786e7d3316Smrg    if test -n "$available_tags" && test -z "$tagname"; then
13796e7d3316Smrg      CC_quoted=
13806e7d3316Smrg      for arg in $CC; do
138197cf2ee2Smrg	func_append_quoted CC_quoted "$arg"
13826e7d3316Smrg      done
13836e7d3316Smrg      CC_expanded=`func_echo_all $CC`
13846e7d3316Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
13856e7d3316Smrg      case $@ in
13866e7d3316Smrg      # Blanks in the command may have been stripped by the calling shell,
13876e7d3316Smrg      # but not from the CC environment variable when configure was run.
13886e7d3316Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
13896e7d3316Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
13906e7d3316Smrg      # Blanks at the start of $base_compile will cause this to fail
13916e7d3316Smrg      # if we don't check for them as well.
13926e7d3316Smrg      *)
13936e7d3316Smrg	for z in $available_tags; do
13946e7d3316Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
13956e7d3316Smrg	    # Evaluate the configuration.
13966e7d3316Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
13976e7d3316Smrg	    CC_quoted=
13986e7d3316Smrg	    for arg in $CC; do
13996e7d3316Smrg	      # Double-quote args containing other shell metacharacters.
140097cf2ee2Smrg	      func_append_quoted CC_quoted "$arg"
14016e7d3316Smrg	    done
14026e7d3316Smrg	    CC_expanded=`func_echo_all $CC`
14036e7d3316Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
14046e7d3316Smrg	    case "$@ " in
14056e7d3316Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
14066e7d3316Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
14076e7d3316Smrg	      # The compiler in the base compile command matches
14086e7d3316Smrg	      # the one in the tagged configuration.
14096e7d3316Smrg	      # Assume this is the tagged configuration we want.
14106e7d3316Smrg	      tagname=$z
14116e7d3316Smrg	      break
14126e7d3316Smrg	      ;;
14136e7d3316Smrg	    esac
14146e7d3316Smrg	  fi
14156e7d3316Smrg	done
14166e7d3316Smrg	# If $tagname still isn't set, then no tagged configuration
14176e7d3316Smrg	# was found and let the user know that the "--tag" command
14186e7d3316Smrg	# line option must be used.
14196e7d3316Smrg	if test -z "$tagname"; then
14206e7d3316Smrg	  func_echo "unable to infer tagged configuration"
14216e7d3316Smrg	  func_fatal_error "specify a tag with \`--tag'"
14226e7d3316Smrg#	else
14236e7d3316Smrg#	  func_verbose "using $tagname tagged configuration"
14246e7d3316Smrg	fi
14256e7d3316Smrg	;;
14266e7d3316Smrg      esac
14276e7d3316Smrg    fi
14286e7d3316Smrg}
14296e7d3316Smrg
14306e7d3316Smrg
14316e7d3316Smrg
143297cf2ee2Smrg# func_write_libtool_object output_name pic_name nonpic_name
143397cf2ee2Smrg# Create a libtool object file (analogous to a ".la" file),
143497cf2ee2Smrg# but don't create it if we're doing a dry run.
143597cf2ee2Smrgfunc_write_libtool_object ()
143697cf2ee2Smrg{
143797cf2ee2Smrg    write_libobj=${1}
143897cf2ee2Smrg    if test "$build_libtool_libs" = yes; then
143997cf2ee2Smrg      write_lobj=\'${2}\'
144097cf2ee2Smrg    else
144197cf2ee2Smrg      write_lobj=none
144297cf2ee2Smrg    fi
144397cf2ee2Smrg
144497cf2ee2Smrg    if test "$build_old_libs" = yes; then
144597cf2ee2Smrg      write_oldobj=\'${3}\'
144697cf2ee2Smrg    else
144797cf2ee2Smrg      write_oldobj=none
144897cf2ee2Smrg    fi
144997cf2ee2Smrg
145097cf2ee2Smrg    $opt_dry_run || {
145197cf2ee2Smrg      cat >${write_libobj}T <<EOF
145297cf2ee2Smrg# $write_libobj - a libtool object file
145397cf2ee2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
145497cf2ee2Smrg#
145597cf2ee2Smrg# Please DO NOT delete this file!
145697cf2ee2Smrg# It is necessary for linking the library.
145797cf2ee2Smrg
145897cf2ee2Smrg# Name of the PIC object.
145997cf2ee2Smrgpic_object=$write_lobj
146097cf2ee2Smrg
146197cf2ee2Smrg# Name of the non-PIC object
146297cf2ee2Smrgnon_pic_object=$write_oldobj
146397cf2ee2Smrg
146497cf2ee2SmrgEOF
146597cf2ee2Smrg      $MV "${write_libobj}T" "${write_libobj}"
146697cf2ee2Smrg    }
146797cf2ee2Smrg}
146897cf2ee2Smrg
146997cf2ee2Smrg
147097cf2ee2Smrg##################################################
147197cf2ee2Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
147297cf2ee2Smrg##################################################
147397cf2ee2Smrg
147497cf2ee2Smrg# func_convert_core_file_wine_to_w32 ARG
147597cf2ee2Smrg# Helper function used by file name conversion functions when $build is *nix,
147697cf2ee2Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
147797cf2ee2Smrg# correctly configured wine environment available, with the winepath program
147897cf2ee2Smrg# in $build's $PATH.
147997cf2ee2Smrg#
148097cf2ee2Smrg# ARG is the $build file name to be converted to w32 format.
148197cf2ee2Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
148297cf2ee2Smrg# be empty on error (or when ARG is empty)
148397cf2ee2Smrgfunc_convert_core_file_wine_to_w32 ()
148497cf2ee2Smrg{
148597cf2ee2Smrg  $opt_debug
148697cf2ee2Smrg  func_convert_core_file_wine_to_w32_result="$1"
148797cf2ee2Smrg  if test -n "$1"; then
148897cf2ee2Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
148997cf2ee2Smrg    # are forced to check the contents of stdout. On the other hand, if the
149097cf2ee2Smrg    # command is not found, the shell will set an exit code of 127 and print
149197cf2ee2Smrg    # *an error message* to stdout. So we must check for both error code of
149297cf2ee2Smrg    # zero AND non-empty stdout, which explains the odd construction:
149397cf2ee2Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
149497cf2ee2Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
149597cf2ee2Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
149697cf2ee2Smrg        $SED -e "$lt_sed_naive_backslashify"`
149797cf2ee2Smrg    else
149897cf2ee2Smrg      func_convert_core_file_wine_to_w32_result=
149997cf2ee2Smrg    fi
150097cf2ee2Smrg  fi
150197cf2ee2Smrg}
150297cf2ee2Smrg# end: func_convert_core_file_wine_to_w32
150397cf2ee2Smrg
150497cf2ee2Smrg
150597cf2ee2Smrg# func_convert_core_path_wine_to_w32 ARG
150697cf2ee2Smrg# Helper function used by path conversion functions when $build is *nix, and
150797cf2ee2Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
150897cf2ee2Smrg# configured wine environment available, with the winepath program in $build's
150997cf2ee2Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
151097cf2ee2Smrg#
151197cf2ee2Smrg# ARG is path to be converted from $build format to win32.
151297cf2ee2Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
151397cf2ee2Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
151497cf2ee2Smrg# are convertible, then the result may be empty.
151597cf2ee2Smrgfunc_convert_core_path_wine_to_w32 ()
151697cf2ee2Smrg{
151797cf2ee2Smrg  $opt_debug
151897cf2ee2Smrg  # unfortunately, winepath doesn't convert paths, only file names
151997cf2ee2Smrg  func_convert_core_path_wine_to_w32_result=""
152097cf2ee2Smrg  if test -n "$1"; then
152197cf2ee2Smrg    oldIFS=$IFS
152297cf2ee2Smrg    IFS=:
152397cf2ee2Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
152497cf2ee2Smrg      IFS=$oldIFS
152597cf2ee2Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
152697cf2ee2Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
152797cf2ee2Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
152897cf2ee2Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
152997cf2ee2Smrg        else
153097cf2ee2Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
153197cf2ee2Smrg        fi
153297cf2ee2Smrg      fi
153397cf2ee2Smrg    done
153497cf2ee2Smrg    IFS=$oldIFS
153597cf2ee2Smrg  fi
153697cf2ee2Smrg}
153797cf2ee2Smrg# end: func_convert_core_path_wine_to_w32
153897cf2ee2Smrg
153997cf2ee2Smrg
154097cf2ee2Smrg# func_cygpath ARGS...
154197cf2ee2Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
154297cf2ee2Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
154397cf2ee2Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
154497cf2ee2Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
154597cf2ee2Smrg# file name or path is assumed to be in w32 format, as previously converted
154697cf2ee2Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
154797cf2ee2Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
154897cf2ee2Smrg# Cygwin format). Returns an empty string on error.
154997cf2ee2Smrg#
155097cf2ee2Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
155197cf2ee2Smrg# be converted.
155297cf2ee2Smrg#
155397cf2ee2Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
155497cf2ee2Smrg# environment variable; do not put it in $PATH.
155597cf2ee2Smrgfunc_cygpath ()
155697cf2ee2Smrg{
155797cf2ee2Smrg  $opt_debug
155897cf2ee2Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
155997cf2ee2Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
156097cf2ee2Smrg    if test "$?" -ne 0; then
156197cf2ee2Smrg      # on failure, ensure result is empty
156297cf2ee2Smrg      func_cygpath_result=
156397cf2ee2Smrg    fi
156497cf2ee2Smrg  else
156597cf2ee2Smrg    func_cygpath_result=
156697cf2ee2Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
156797cf2ee2Smrg  fi
156897cf2ee2Smrg}
156997cf2ee2Smrg#end: func_cygpath
157097cf2ee2Smrg
157197cf2ee2Smrg
157297cf2ee2Smrg# func_convert_core_msys_to_w32 ARG
157397cf2ee2Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
157497cf2ee2Smrg# result in func_convert_core_msys_to_w32_result.
157597cf2ee2Smrgfunc_convert_core_msys_to_w32 ()
157697cf2ee2Smrg{
157797cf2ee2Smrg  $opt_debug
157897cf2ee2Smrg  # awkward: cmd appends spaces to result
157997cf2ee2Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
158097cf2ee2Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
158197cf2ee2Smrg}
158297cf2ee2Smrg#end: func_convert_core_msys_to_w32
158397cf2ee2Smrg
158497cf2ee2Smrg
158597cf2ee2Smrg# func_convert_file_check ARG1 ARG2
158697cf2ee2Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
158797cf2ee2Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
158897cf2ee2Smrg# func_to_host_file_result to ARG1).
158997cf2ee2Smrgfunc_convert_file_check ()
159097cf2ee2Smrg{
159197cf2ee2Smrg  $opt_debug
159297cf2ee2Smrg  if test -z "$2" && test -n "$1" ; then
159397cf2ee2Smrg    func_error "Could not determine host file name corresponding to"
159497cf2ee2Smrg    func_error "  \`$1'"
159597cf2ee2Smrg    func_error "Continuing, but uninstalled executables may not work."
159697cf2ee2Smrg    # Fallback:
159797cf2ee2Smrg    func_to_host_file_result="$1"
159897cf2ee2Smrg  fi
159997cf2ee2Smrg}
160097cf2ee2Smrg# end func_convert_file_check
160197cf2ee2Smrg
160297cf2ee2Smrg
160397cf2ee2Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
160497cf2ee2Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
160597cf2ee2Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
160697cf2ee2Smrg# func_to_host_file_result to a simplistic fallback value (see below).
160797cf2ee2Smrgfunc_convert_path_check ()
160897cf2ee2Smrg{
160997cf2ee2Smrg  $opt_debug
161097cf2ee2Smrg  if test -z "$4" && test -n "$3"; then
161197cf2ee2Smrg    func_error "Could not determine the host path corresponding to"
161297cf2ee2Smrg    func_error "  \`$3'"
161397cf2ee2Smrg    func_error "Continuing, but uninstalled executables may not work."
161497cf2ee2Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
161597cf2ee2Smrg    # should not be "improved".  See libtool.info.
161697cf2ee2Smrg    if test "x$1" != "x$2"; then
161797cf2ee2Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
161897cf2ee2Smrg      func_to_host_path_result=`echo "$3" |
161997cf2ee2Smrg        $SED -e "$lt_replace_pathsep_chars"`
162097cf2ee2Smrg    else
162197cf2ee2Smrg      func_to_host_path_result="$3"
162297cf2ee2Smrg    fi
162397cf2ee2Smrg  fi
162497cf2ee2Smrg}
162597cf2ee2Smrg# end func_convert_path_check
162697cf2ee2Smrg
162797cf2ee2Smrg
162897cf2ee2Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
162997cf2ee2Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
163097cf2ee2Smrg# and appending REPL if ORIG matches BACKPAT.
163197cf2ee2Smrgfunc_convert_path_front_back_pathsep ()
163297cf2ee2Smrg{
163397cf2ee2Smrg  $opt_debug
163497cf2ee2Smrg  case $4 in
163597cf2ee2Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
163697cf2ee2Smrg    ;;
163797cf2ee2Smrg  esac
163897cf2ee2Smrg  case $4 in
163997cf2ee2Smrg  $2 ) func_append func_to_host_path_result "$3"
164097cf2ee2Smrg    ;;
164197cf2ee2Smrg  esac
164297cf2ee2Smrg}
164397cf2ee2Smrg# end func_convert_path_front_back_pathsep
164497cf2ee2Smrg
164597cf2ee2Smrg
164697cf2ee2Smrg##################################################
164797cf2ee2Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
164897cf2ee2Smrg##################################################
164997cf2ee2Smrg# invoked via `$to_host_file_cmd ARG'
165097cf2ee2Smrg#
165197cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format.
165297cf2ee2Smrg# Result will be available in $func_to_host_file_result.
165397cf2ee2Smrg
165497cf2ee2Smrg
165597cf2ee2Smrg# func_to_host_file ARG
165697cf2ee2Smrg# Converts the file name ARG from $build format to $host format. Return result
165797cf2ee2Smrg# in func_to_host_file_result.
165897cf2ee2Smrgfunc_to_host_file ()
165997cf2ee2Smrg{
166097cf2ee2Smrg  $opt_debug
166197cf2ee2Smrg  $to_host_file_cmd "$1"
166297cf2ee2Smrg}
166397cf2ee2Smrg# end func_to_host_file
166497cf2ee2Smrg
166597cf2ee2Smrg
166697cf2ee2Smrg# func_to_tool_file ARG LAZY
166797cf2ee2Smrg# converts the file name ARG from $build format to toolchain format. Return
166897cf2ee2Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
166997cf2ee2Smrg# in (the comma separated) LAZY, no conversion takes place.
167097cf2ee2Smrgfunc_to_tool_file ()
167197cf2ee2Smrg{
167297cf2ee2Smrg  $opt_debug
167397cf2ee2Smrg  case ,$2, in
167497cf2ee2Smrg    *,"$to_tool_file_cmd",*)
167597cf2ee2Smrg      func_to_tool_file_result=$1
167697cf2ee2Smrg      ;;
167797cf2ee2Smrg    *)
167897cf2ee2Smrg      $to_tool_file_cmd "$1"
167997cf2ee2Smrg      func_to_tool_file_result=$func_to_host_file_result
168097cf2ee2Smrg      ;;
168197cf2ee2Smrg  esac
168297cf2ee2Smrg}
168397cf2ee2Smrg# end func_to_tool_file
168497cf2ee2Smrg
168597cf2ee2Smrg
168697cf2ee2Smrg# func_convert_file_noop ARG
168797cf2ee2Smrg# Copy ARG to func_to_host_file_result.
168897cf2ee2Smrgfunc_convert_file_noop ()
168997cf2ee2Smrg{
169097cf2ee2Smrg  func_to_host_file_result="$1"
169197cf2ee2Smrg}
169297cf2ee2Smrg# end func_convert_file_noop
169397cf2ee2Smrg
169497cf2ee2Smrg
169597cf2ee2Smrg# func_convert_file_msys_to_w32 ARG
169697cf2ee2Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
169797cf2ee2Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
169897cf2ee2Smrg# func_to_host_file_result.
169997cf2ee2Smrgfunc_convert_file_msys_to_w32 ()
170097cf2ee2Smrg{
170197cf2ee2Smrg  $opt_debug
170297cf2ee2Smrg  func_to_host_file_result="$1"
170397cf2ee2Smrg  if test -n "$1"; then
170497cf2ee2Smrg    func_convert_core_msys_to_w32 "$1"
170597cf2ee2Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
170697cf2ee2Smrg  fi
170797cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
170897cf2ee2Smrg}
170997cf2ee2Smrg# end func_convert_file_msys_to_w32
171097cf2ee2Smrg
171197cf2ee2Smrg
171297cf2ee2Smrg# func_convert_file_cygwin_to_w32 ARG
171397cf2ee2Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
171497cf2ee2Smrg# func_to_host_file_result.
171597cf2ee2Smrgfunc_convert_file_cygwin_to_w32 ()
171697cf2ee2Smrg{
171797cf2ee2Smrg  $opt_debug
171897cf2ee2Smrg  func_to_host_file_result="$1"
171997cf2ee2Smrg  if test -n "$1"; then
172097cf2ee2Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
172197cf2ee2Smrg    # LT_CYGPATH in this case.
172297cf2ee2Smrg    func_to_host_file_result=`cygpath -m "$1"`
172397cf2ee2Smrg  fi
172497cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
172597cf2ee2Smrg}
172697cf2ee2Smrg# end func_convert_file_cygwin_to_w32
172797cf2ee2Smrg
172897cf2ee2Smrg
172997cf2ee2Smrg# func_convert_file_nix_to_w32 ARG
173097cf2ee2Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
173197cf2ee2Smrg# and a working winepath. Returns result in func_to_host_file_result.
173297cf2ee2Smrgfunc_convert_file_nix_to_w32 ()
173397cf2ee2Smrg{
173497cf2ee2Smrg  $opt_debug
173597cf2ee2Smrg  func_to_host_file_result="$1"
173697cf2ee2Smrg  if test -n "$1"; then
173797cf2ee2Smrg    func_convert_core_file_wine_to_w32 "$1"
173897cf2ee2Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
173997cf2ee2Smrg  fi
174097cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
174197cf2ee2Smrg}
174297cf2ee2Smrg# end func_convert_file_nix_to_w32
174397cf2ee2Smrg
174497cf2ee2Smrg
174597cf2ee2Smrg# func_convert_file_msys_to_cygwin ARG
174697cf2ee2Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
174797cf2ee2Smrg# Returns result in func_to_host_file_result.
174897cf2ee2Smrgfunc_convert_file_msys_to_cygwin ()
174997cf2ee2Smrg{
175097cf2ee2Smrg  $opt_debug
175197cf2ee2Smrg  func_to_host_file_result="$1"
175297cf2ee2Smrg  if test -n "$1"; then
175397cf2ee2Smrg    func_convert_core_msys_to_w32 "$1"
175497cf2ee2Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
175597cf2ee2Smrg    func_to_host_file_result="$func_cygpath_result"
175697cf2ee2Smrg  fi
175797cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
175897cf2ee2Smrg}
175997cf2ee2Smrg# end func_convert_file_msys_to_cygwin
176097cf2ee2Smrg
176197cf2ee2Smrg
176297cf2ee2Smrg# func_convert_file_nix_to_cygwin ARG
176397cf2ee2Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
176497cf2ee2Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
176597cf2ee2Smrg# in func_to_host_file_result.
176697cf2ee2Smrgfunc_convert_file_nix_to_cygwin ()
176797cf2ee2Smrg{
176897cf2ee2Smrg  $opt_debug
176997cf2ee2Smrg  func_to_host_file_result="$1"
177097cf2ee2Smrg  if test -n "$1"; then
177197cf2ee2Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
177297cf2ee2Smrg    func_convert_core_file_wine_to_w32 "$1"
177397cf2ee2Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
177497cf2ee2Smrg    func_to_host_file_result="$func_cygpath_result"
177597cf2ee2Smrg  fi
177697cf2ee2Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
177797cf2ee2Smrg}
177897cf2ee2Smrg# end func_convert_file_nix_to_cygwin
177997cf2ee2Smrg
178097cf2ee2Smrg
178197cf2ee2Smrg#############################################
178297cf2ee2Smrg# $build to $host PATH CONVERSION FUNCTIONS #
178397cf2ee2Smrg#############################################
178497cf2ee2Smrg# invoked via `$to_host_path_cmd ARG'
178597cf2ee2Smrg#
178697cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format.
178797cf2ee2Smrg# The result will be available in $func_to_host_path_result.
178897cf2ee2Smrg#
178997cf2ee2Smrg# Path separators are also converted from $build format to $host format.  If
179097cf2ee2Smrg# ARG begins or ends with a path separator character, it is preserved (but
179197cf2ee2Smrg# converted to $host format) on output.
179297cf2ee2Smrg#
179397cf2ee2Smrg# All path conversion functions are named using the following convention:
179497cf2ee2Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
179597cf2ee2Smrg#   path conversion function         : func_convert_path_X_to_Y ()
179697cf2ee2Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
179797cf2ee2Smrg# same.  If conversion functions are added for new $build/$host combinations,
179897cf2ee2Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
179997cf2ee2Smrg# will break.
180097cf2ee2Smrg
180197cf2ee2Smrg
180297cf2ee2Smrg# func_init_to_host_path_cmd
180397cf2ee2Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
180497cf2ee2Smrg# appropriate value, based on the value of $to_host_file_cmd.
180597cf2ee2Smrgto_host_path_cmd=
180697cf2ee2Smrgfunc_init_to_host_path_cmd ()
180797cf2ee2Smrg{
180897cf2ee2Smrg  $opt_debug
180997cf2ee2Smrg  if test -z "$to_host_path_cmd"; then
181097cf2ee2Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
181197cf2ee2Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
181297cf2ee2Smrg  fi
181397cf2ee2Smrg}
181497cf2ee2Smrg
181597cf2ee2Smrg
181697cf2ee2Smrg# func_to_host_path ARG
181797cf2ee2Smrg# Converts the path ARG from $build format to $host format. Return result
181897cf2ee2Smrg# in func_to_host_path_result.
181997cf2ee2Smrgfunc_to_host_path ()
182097cf2ee2Smrg{
182197cf2ee2Smrg  $opt_debug
182297cf2ee2Smrg  func_init_to_host_path_cmd
182397cf2ee2Smrg  $to_host_path_cmd "$1"
182497cf2ee2Smrg}
182597cf2ee2Smrg# end func_to_host_path
182697cf2ee2Smrg
182797cf2ee2Smrg
182897cf2ee2Smrg# func_convert_path_noop ARG
182997cf2ee2Smrg# Copy ARG to func_to_host_path_result.
183097cf2ee2Smrgfunc_convert_path_noop ()
183197cf2ee2Smrg{
183297cf2ee2Smrg  func_to_host_path_result="$1"
183397cf2ee2Smrg}
183497cf2ee2Smrg# end func_convert_path_noop
183597cf2ee2Smrg
183697cf2ee2Smrg
183797cf2ee2Smrg# func_convert_path_msys_to_w32 ARG
183897cf2ee2Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
183997cf2ee2Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
184097cf2ee2Smrg# func_to_host_path_result.
184197cf2ee2Smrgfunc_convert_path_msys_to_w32 ()
18426e7d3316Smrg{
184397cf2ee2Smrg  $opt_debug
184497cf2ee2Smrg  func_to_host_path_result="$1"
184597cf2ee2Smrg  if test -n "$1"; then
184697cf2ee2Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
184797cf2ee2Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
184897cf2ee2Smrg    # and winepath ignores them completely.
184997cf2ee2Smrg    func_stripname : : "$1"
185097cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
185197cf2ee2Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
185297cf2ee2Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
185397cf2ee2Smrg    func_convert_path_check : ";" \
185497cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
185597cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
185697cf2ee2Smrg  fi
185797cf2ee2Smrg}
185897cf2ee2Smrg# end func_convert_path_msys_to_w32
18596e7d3316Smrg
18606e7d3316Smrg
186197cf2ee2Smrg# func_convert_path_cygwin_to_w32 ARG
186297cf2ee2Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
186397cf2ee2Smrg# func_to_host_file_result.
186497cf2ee2Smrgfunc_convert_path_cygwin_to_w32 ()
186597cf2ee2Smrg{
186697cf2ee2Smrg  $opt_debug
186797cf2ee2Smrg  func_to_host_path_result="$1"
186897cf2ee2Smrg  if test -n "$1"; then
186997cf2ee2Smrg    # See func_convert_path_msys_to_w32:
187097cf2ee2Smrg    func_stripname : : "$1"
187197cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
187297cf2ee2Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
187397cf2ee2Smrg    func_convert_path_check : ";" \
187497cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
187597cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
187697cf2ee2Smrg  fi
187797cf2ee2Smrg}
187897cf2ee2Smrg# end func_convert_path_cygwin_to_w32
18796e7d3316Smrg
18806e7d3316Smrg
188197cf2ee2Smrg# func_convert_path_nix_to_w32 ARG
188297cf2ee2Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
188397cf2ee2Smrg# a working winepath.  Returns result in func_to_host_file_result.
188497cf2ee2Smrgfunc_convert_path_nix_to_w32 ()
188597cf2ee2Smrg{
188697cf2ee2Smrg  $opt_debug
188797cf2ee2Smrg  func_to_host_path_result="$1"
188897cf2ee2Smrg  if test -n "$1"; then
188997cf2ee2Smrg    # See func_convert_path_msys_to_w32:
189097cf2ee2Smrg    func_stripname : : "$1"
189197cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
189297cf2ee2Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
189397cf2ee2Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
189497cf2ee2Smrg    func_convert_path_check : ";" \
189597cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
189697cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
189797cf2ee2Smrg  fi
189897cf2ee2Smrg}
189997cf2ee2Smrg# end func_convert_path_nix_to_w32
19006e7d3316Smrg
190197cf2ee2Smrg
190297cf2ee2Smrg# func_convert_path_msys_to_cygwin ARG
190397cf2ee2Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
190497cf2ee2Smrg# Returns result in func_to_host_file_result.
190597cf2ee2Smrgfunc_convert_path_msys_to_cygwin ()
190697cf2ee2Smrg{
190797cf2ee2Smrg  $opt_debug
190897cf2ee2Smrg  func_to_host_path_result="$1"
190997cf2ee2Smrg  if test -n "$1"; then
191097cf2ee2Smrg    # See func_convert_path_msys_to_w32:
191197cf2ee2Smrg    func_stripname : : "$1"
191297cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
191397cf2ee2Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
191497cf2ee2Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
191597cf2ee2Smrg    func_to_host_path_result="$func_cygpath_result"
191697cf2ee2Smrg    func_convert_path_check : : \
191797cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
191897cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
191997cf2ee2Smrg  fi
192097cf2ee2Smrg}
192197cf2ee2Smrg# end func_convert_path_msys_to_cygwin
192297cf2ee2Smrg
192397cf2ee2Smrg
192497cf2ee2Smrg# func_convert_path_nix_to_cygwin ARG
192597cf2ee2Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
192697cf2ee2Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
192797cf2ee2Smrg# func_to_host_file_result.
192897cf2ee2Smrgfunc_convert_path_nix_to_cygwin ()
192997cf2ee2Smrg{
193097cf2ee2Smrg  $opt_debug
193197cf2ee2Smrg  func_to_host_path_result="$1"
193297cf2ee2Smrg  if test -n "$1"; then
193397cf2ee2Smrg    # Remove leading and trailing path separator characters from
193497cf2ee2Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
193597cf2ee2Smrg    # into '.;' and ';.', and winepath ignores them completely.
193697cf2ee2Smrg    func_stripname : : "$1"
193797cf2ee2Smrg    func_to_host_path_tmp1=$func_stripname_result
193897cf2ee2Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
193997cf2ee2Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
194097cf2ee2Smrg    func_to_host_path_result="$func_cygpath_result"
194197cf2ee2Smrg    func_convert_path_check : : \
194297cf2ee2Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
194397cf2ee2Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
194497cf2ee2Smrg  fi
19456e7d3316Smrg}
194697cf2ee2Smrg# end func_convert_path_nix_to_cygwin
194797cf2ee2Smrg
19486e7d3316Smrg
19496e7d3316Smrg# func_mode_compile arg...
19506e7d3316Smrgfunc_mode_compile ()
19516e7d3316Smrg{
19526e7d3316Smrg    $opt_debug
19536e7d3316Smrg    # Get the compilation command and the source file.
19546e7d3316Smrg    base_compile=
19556e7d3316Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
19566e7d3316Smrg    suppress_opt=yes
19576e7d3316Smrg    suppress_output=
19586e7d3316Smrg    arg_mode=normal
19596e7d3316Smrg    libobj=
19606e7d3316Smrg    later=
19616e7d3316Smrg    pie_flag=
19626e7d3316Smrg
19636e7d3316Smrg    for arg
19646e7d3316Smrg    do
19656e7d3316Smrg      case $arg_mode in
19666e7d3316Smrg      arg  )
19676e7d3316Smrg	# do not "continue".  Instead, add this to base_compile
19686e7d3316Smrg	lastarg="$arg"
19696e7d3316Smrg	arg_mode=normal
19706e7d3316Smrg	;;
19716e7d3316Smrg
19726e7d3316Smrg      target )
19736e7d3316Smrg	libobj="$arg"
19746e7d3316Smrg	arg_mode=normal
19756e7d3316Smrg	continue
19766e7d3316Smrg	;;
19776e7d3316Smrg
19786e7d3316Smrg      normal )
19796e7d3316Smrg	# Accept any command-line options.
19806e7d3316Smrg	case $arg in
19816e7d3316Smrg	-o)
19826e7d3316Smrg	  test -n "$libobj" && \
19836e7d3316Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
19846e7d3316Smrg	  arg_mode=target
19856e7d3316Smrg	  continue
19866e7d3316Smrg	  ;;
19876e7d3316Smrg
19886e7d3316Smrg	-pie | -fpie | -fPIE)
198997cf2ee2Smrg          func_append pie_flag " $arg"
19906e7d3316Smrg	  continue
19916e7d3316Smrg	  ;;
19926e7d3316Smrg
19936e7d3316Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
199497cf2ee2Smrg	  func_append later " $arg"
19956e7d3316Smrg	  continue
19966e7d3316Smrg	  ;;
1997a966c04fSmrg
1998a966c04fSmrg	-no-suppress)
1999a966c04fSmrg	  suppress_opt=no
2000a966c04fSmrg	  continue
2001a966c04fSmrg	  ;;
2002a966c04fSmrg
2003a966c04fSmrg	-Xcompiler)
2004a966c04fSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005a966c04fSmrg	  continue      #  The current "srcfile" will either be retained or
2006a966c04fSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007a966c04fSmrg
2008a966c04fSmrg	-Wc,*)
20096e7d3316Smrg	  func_stripname '-Wc,' '' "$arg"
20106e7d3316Smrg	  args=$func_stripname_result
2011a966c04fSmrg	  lastarg=
2012a966c04fSmrg	  save_ifs="$IFS"; IFS=','
20136e7d3316Smrg	  for arg in $args; do
2014a966c04fSmrg	    IFS="$save_ifs"
201597cf2ee2Smrg	    func_append_quoted lastarg "$arg"
2016a966c04fSmrg	  done
2017a966c04fSmrg	  IFS="$save_ifs"
20186e7d3316Smrg	  func_stripname ' ' '' "$lastarg"
20196e7d3316Smrg	  lastarg=$func_stripname_result
2020a966c04fSmrg
2021a966c04fSmrg	  # Add the arguments to base_compile.
202297cf2ee2Smrg	  func_append base_compile " $lastarg"
2023a966c04fSmrg	  continue
2024a966c04fSmrg	  ;;
2025a966c04fSmrg
20266e7d3316Smrg	*)
2027a966c04fSmrg	  # Accept the current argument as the source file.
2028a966c04fSmrg	  # The previous "srcfile" becomes the current argument.
2029a966c04fSmrg	  #
2030a966c04fSmrg	  lastarg="$srcfile"
2031a966c04fSmrg	  srcfile="$arg"
2032a966c04fSmrg	  ;;
2033a966c04fSmrg	esac  #  case $arg
2034a966c04fSmrg	;;
2035a966c04fSmrg      esac    #  case $arg_mode
2036a966c04fSmrg
2037a966c04fSmrg      # Aesthetically quote the previous argument.
203897cf2ee2Smrg      func_append_quoted base_compile "$lastarg"
2039a966c04fSmrg    done # for arg
2040a966c04fSmrg
2041a966c04fSmrg    case $arg_mode in
2042a966c04fSmrg    arg)
20436e7d3316Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2044a966c04fSmrg      ;;
2045a966c04fSmrg    target)
20466e7d3316Smrg      func_fatal_error "you must specify a target with \`-o'"
2047a966c04fSmrg      ;;
2048a966c04fSmrg    *)
2049a966c04fSmrg      # Get the name of the library object.
20506e7d3316Smrg      test -z "$libobj" && {
20516e7d3316Smrg	func_basename "$srcfile"
20526e7d3316Smrg	libobj="$func_basename_result"
20536e7d3316Smrg      }
2054a966c04fSmrg      ;;
2055a966c04fSmrg    esac
2056a966c04fSmrg
2057a966c04fSmrg    # Recognize several different file suffixes.
2058a966c04fSmrg    # If the user specifies -o file.o, it is replaced with file.lo
2059a966c04fSmrg    case $libobj in
20606e7d3316Smrg    *.[cCFSifmso] | \
20616e7d3316Smrg    *.ada | *.adb | *.ads | *.asm | \
20626e7d3316Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063ac92798bSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
20646e7d3316Smrg      func_xform "$libobj"
20656e7d3316Smrg      libobj=$func_xform_result
20666e7d3316Smrg      ;;
2067a966c04fSmrg    esac
2068a966c04fSmrg
2069a966c04fSmrg    case $libobj in
20706e7d3316Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071a966c04fSmrg    *)
20726e7d3316Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073a966c04fSmrg      ;;
2074a966c04fSmrg    esac
2075a966c04fSmrg
2076a966c04fSmrg    func_infer_tag $base_compile
2077a966c04fSmrg
2078a966c04fSmrg    for arg in $later; do
2079a966c04fSmrg      case $arg in
20806e7d3316Smrg      -shared)
20816e7d3316Smrg	test "$build_libtool_libs" != yes && \
20826e7d3316Smrg	  func_fatal_configuration "can not build a shared library"
20836e7d3316Smrg	build_old_libs=no
20846e7d3316Smrg	continue
20856e7d3316Smrg	;;
20866e7d3316Smrg
2087a966c04fSmrg      -static)
20886e7d3316Smrg	build_libtool_libs=no
2089a966c04fSmrg	build_old_libs=yes
2090a966c04fSmrg	continue
2091a966c04fSmrg	;;
2092a966c04fSmrg
2093a966c04fSmrg      -prefer-pic)
2094a966c04fSmrg	pic_mode=yes
2095a966c04fSmrg	continue
2096a966c04fSmrg	;;
2097a966c04fSmrg
2098a966c04fSmrg      -prefer-non-pic)
2099a966c04fSmrg	pic_mode=no
2100a966c04fSmrg	continue
2101a966c04fSmrg	;;
2102a966c04fSmrg      esac
2103a966c04fSmrg    done
2104a966c04fSmrg
21056e7d3316Smrg    func_quote_for_eval "$libobj"
21066e7d3316Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
21076e7d3316Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
21086e7d3316Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
21096e7d3316Smrg    func_dirname_and_basename "$obj" "/" ""
21106e7d3316Smrg    objname="$func_basename_result"
21116e7d3316Smrg    xdir="$func_dirname_result"
2112a966c04fSmrg    lobj=${xdir}$objdir/$objname
2113a966c04fSmrg
21146e7d3316Smrg    test -z "$base_compile" && \
21156e7d3316Smrg      func_fatal_help "you must specify a compilation command"
2116a966c04fSmrg
2117a966c04fSmrg    # Delete any leftover library objects.
2118a966c04fSmrg    if test "$build_old_libs" = yes; then
2119a966c04fSmrg      removelist="$obj $lobj $libobj ${libobj}T"
2120a966c04fSmrg    else
2121a966c04fSmrg      removelist="$lobj $libobj ${libobj}T"
2122a966c04fSmrg    fi
2123a966c04fSmrg
2124a966c04fSmrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2125a966c04fSmrg    case $host_os in
21266e7d3316Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127a966c04fSmrg      pic_mode=default
2128a966c04fSmrg      ;;
2129a966c04fSmrg    esac
2130a966c04fSmrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131a966c04fSmrg      # non-PIC code in shared libraries is not supported
2132a966c04fSmrg      pic_mode=default
2133a966c04fSmrg    fi
2134a966c04fSmrg
2135a966c04fSmrg    # Calculate the filename of the output object if compiler does
2136a966c04fSmrg    # not support -o with -c
2137a966c04fSmrg    if test "$compiler_c_o" = no; then
21386e7d3316Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2139a966c04fSmrg      lockfile="$output_obj.lock"
2140a966c04fSmrg    else
2141a966c04fSmrg      output_obj=
2142a966c04fSmrg      need_locks=no
2143a966c04fSmrg      lockfile=
2144a966c04fSmrg    fi
2145a966c04fSmrg
2146a966c04fSmrg    # Lock this critical section if it is needed
2147a966c04fSmrg    # We use this script file to make the link, it avoids creating a new file
2148a966c04fSmrg    if test "$need_locks" = yes; then
21496e7d3316Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
21506e7d3316Smrg	func_echo "Waiting for $lockfile to be removed"
2151a966c04fSmrg	sleep 2
2152a966c04fSmrg      done
2153a966c04fSmrg    elif test "$need_locks" = warn; then
2154a966c04fSmrg      if test -f "$lockfile"; then
21556e7d3316Smrg	$ECHO "\
2156a966c04fSmrg*** ERROR, $lockfile exists and contains:
2157a966c04fSmrg`cat $lockfile 2>/dev/null`
2158a966c04fSmrg
2159a966c04fSmrgThis indicates that another process is trying to use the same
2160a966c04fSmrgtemporary object file, and libtool could not work around it because
2161a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2162a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
2163a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
2164a966c04fSmrgcompiler."
2165a966c04fSmrg
21666e7d3316Smrg	$opt_dry_run || $RM $removelist
2167a966c04fSmrg	exit $EXIT_FAILURE
2168a966c04fSmrg      fi
216997cf2ee2Smrg      func_append removelist " $output_obj"
21706e7d3316Smrg      $ECHO "$srcfile" > "$lockfile"
2171a966c04fSmrg    fi
2172a966c04fSmrg
21736e7d3316Smrg    $opt_dry_run || $RM $removelist
217497cf2ee2Smrg    func_append removelist " $lockfile"
21756e7d3316Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
21766e7d3316Smrg
217797cf2ee2Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
217897cf2ee2Smrg    srcfile=$func_to_tool_file_result
21796e7d3316Smrg    func_quote_for_eval "$srcfile"
21806e7d3316Smrg    qsrcfile=$func_quote_for_eval_result
2181a966c04fSmrg
2182a966c04fSmrg    # Only build a PIC object if we are building libtool libraries.
2183a966c04fSmrg    if test "$build_libtool_libs" = yes; then
2184a966c04fSmrg      # Without this assignment, base_compile gets emptied.
2185a966c04fSmrg      fbsd_hideous_sh_bug=$base_compile
2186a966c04fSmrg
2187a966c04fSmrg      if test "$pic_mode" != no; then
2188a966c04fSmrg	command="$base_compile $qsrcfile $pic_flag"
2189a966c04fSmrg      else
2190a966c04fSmrg	# Don't build PIC code
2191a966c04fSmrg	command="$base_compile $qsrcfile"
2192a966c04fSmrg      fi
2193a966c04fSmrg
21946e7d3316Smrg      func_mkdir_p "$xdir$objdir"
2195a966c04fSmrg
2196a966c04fSmrg      if test -z "$output_obj"; then
2197a966c04fSmrg	# Place PIC objects in $objdir
219897cf2ee2Smrg	func_append command " -o $lobj"
2199a966c04fSmrg      fi
2200a966c04fSmrg
22016e7d3316Smrg      func_show_eval_locale "$command"	\
22026e7d3316Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203a966c04fSmrg
2204a966c04fSmrg      if test "$need_locks" = warn &&
2205a966c04fSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
22066e7d3316Smrg	$ECHO "\
2207a966c04fSmrg*** ERROR, $lockfile contains:
2208a966c04fSmrg`cat $lockfile 2>/dev/null`
2209a966c04fSmrg
2210a966c04fSmrgbut it should contain:
2211a966c04fSmrg$srcfile
2212a966c04fSmrg
2213a966c04fSmrgThis indicates that another process is trying to use the same
2214a966c04fSmrgtemporary object file, and libtool could not work around it because
2215a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2216a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
2217a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
2218a966c04fSmrgcompiler."
2219a966c04fSmrg
22206e7d3316Smrg	$opt_dry_run || $RM $removelist
2221a966c04fSmrg	exit $EXIT_FAILURE
2222a966c04fSmrg      fi
2223a966c04fSmrg
2224a966c04fSmrg      # Just move the object if needed, then go on to compile the next one
2225a966c04fSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
22266e7d3316Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
22276e7d3316Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228a966c04fSmrg      fi
2229a966c04fSmrg
2230a966c04fSmrg      # Allow error messages only from the first compilation.
2231a966c04fSmrg      if test "$suppress_opt" = yes; then
22326e7d3316Smrg	suppress_output=' >/dev/null 2>&1'
2233a966c04fSmrg      fi
2234a966c04fSmrg    fi
2235a966c04fSmrg
2236a966c04fSmrg    # Only build a position-dependent object if we build old libraries.
2237a966c04fSmrg    if test "$build_old_libs" = yes; then
2238a966c04fSmrg      if test "$pic_mode" != yes; then
2239a966c04fSmrg	# Don't build PIC code
22406e7d3316Smrg	command="$base_compile $qsrcfile$pie_flag"
2241a966c04fSmrg      else
2242a966c04fSmrg	command="$base_compile $qsrcfile $pic_flag"
2243a966c04fSmrg      fi
2244a966c04fSmrg      if test "$compiler_c_o" = yes; then
224597cf2ee2Smrg	func_append command " -o $obj"
2246a966c04fSmrg      fi
2247a966c04fSmrg
2248a966c04fSmrg      # Suppress compiler output if we already did a PIC compilation.
224997cf2ee2Smrg      func_append command "$suppress_output"
22506e7d3316Smrg      func_show_eval_locale "$command" \
22516e7d3316Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252a966c04fSmrg
2253a966c04fSmrg      if test "$need_locks" = warn &&
2254a966c04fSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
22556e7d3316Smrg	$ECHO "\
2256a966c04fSmrg*** ERROR, $lockfile contains:
2257a966c04fSmrg`cat $lockfile 2>/dev/null`
2258a966c04fSmrg
2259a966c04fSmrgbut it should contain:
2260a966c04fSmrg$srcfile
2261a966c04fSmrg
2262a966c04fSmrgThis indicates that another process is trying to use the same
2263a966c04fSmrgtemporary object file, and libtool could not work around it because
2264a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2265a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
2266a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
2267a966c04fSmrgcompiler."
2268a966c04fSmrg
22696e7d3316Smrg	$opt_dry_run || $RM $removelist
2270a966c04fSmrg	exit $EXIT_FAILURE
2271a966c04fSmrg      fi
2272a966c04fSmrg
2273a966c04fSmrg      # Just move the object if needed
2274a966c04fSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
22756e7d3316Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
22766e7d3316Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277a966c04fSmrg      fi
2278a966c04fSmrg    fi
2279a966c04fSmrg
22806e7d3316Smrg    $opt_dry_run || {
22816e7d3316Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282a966c04fSmrg
22836e7d3316Smrg      # Unlock the critical section if it was locked
22846e7d3316Smrg      if test "$need_locks" != no; then
22856e7d3316Smrg	removelist=$lockfile
22866e7d3316Smrg        $RM "$lockfile"
22876e7d3316Smrg      fi
22886e7d3316Smrg    }
2289a966c04fSmrg
2290a966c04fSmrg    exit $EXIT_SUCCESS
22916e7d3316Smrg}
2292a966c04fSmrg
22936e7d3316Smrg$opt_help || {
229497cf2ee2Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
22956e7d3316Smrg}
2296a966c04fSmrg
22976e7d3316Smrgfunc_mode_help ()
22986e7d3316Smrg{
22996e7d3316Smrg    # We need to display help for each of the modes.
230097cf2ee2Smrg    case $opt_mode in
23016e7d3316Smrg      "")
23026e7d3316Smrg        # Generic help is extracted from the usage comments
23036e7d3316Smrg        # at the start of this file.
23046e7d3316Smrg        func_help
23056e7d3316Smrg        ;;
2306a966c04fSmrg
23076e7d3316Smrg      clean)
23086e7d3316Smrg        $ECHO \
23096e7d3316Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310a966c04fSmrg
23116e7d3316SmrgRemove files from the build directory.
2312a966c04fSmrg
23136e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE
23146e7d3316Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
23156e7d3316Smrgto RM.
2316a966c04fSmrg
23176e7d3316SmrgIf FILE is a libtool library, object or program, all the files associated
23186e7d3316Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
23196e7d3316Smrg        ;;
2320a966c04fSmrg
23216e7d3316Smrg      compile)
23226e7d3316Smrg      $ECHO \
23236e7d3316Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324a966c04fSmrg
23256e7d3316SmrgCompile a source file into a libtool library object.
2326a966c04fSmrg
23276e7d3316SmrgThis mode accepts the following additional options:
2328a966c04fSmrg
23296e7d3316Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
23306e7d3316Smrg  -no-suppress      do not suppress compiler output for multiple passes
23316e7d3316Smrg  -prefer-pic       try to build PIC objects only
23326e7d3316Smrg  -prefer-non-pic   try to build non-PIC objects only
23336e7d3316Smrg  -shared           do not build a \`.o' file suitable for static linking
23346e7d3316Smrg  -static           only build a \`.o' file suitable for static linking
23356e7d3316Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2336a966c04fSmrg
23376e7d3316SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
23386e7d3316Smrgfrom the given SOURCEFILE.
2339a966c04fSmrg
23406e7d3316SmrgThe output file name is determined by removing the directory component from
23416e7d3316SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
23426e7d3316Smrglibrary object suffix, \`.lo'."
23436e7d3316Smrg        ;;
2344a966c04fSmrg
23456e7d3316Smrg      execute)
23466e7d3316Smrg        $ECHO \
23476e7d3316Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348a966c04fSmrg
23496e7d3316SmrgAutomatically set library path, then run a program.
2350a966c04fSmrg
23516e7d3316SmrgThis mode accepts the following additional options:
2352a966c04fSmrg
23536e7d3316Smrg  -dlopen FILE      add the directory containing FILE to the library path
2354a966c04fSmrg
23556e7d3316SmrgThis mode sets the library path environment variable according to \`-dlopen'
23566e7d3316Smrgflags.
2357a966c04fSmrg
23586e7d3316SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
23596e7d3316Smrginto their corresponding uninstalled binary, and any of their required library
23606e7d3316Smrgdirectories are added to the library path.
2361a966c04fSmrg
23626e7d3316SmrgThen, COMMAND is executed, with ARGS as arguments."
23636e7d3316Smrg        ;;
2364a966c04fSmrg
23656e7d3316Smrg      finish)
23666e7d3316Smrg        $ECHO \
23676e7d3316Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368a966c04fSmrg
23696e7d3316SmrgComplete the installation of libtool libraries.
2370a966c04fSmrg
23716e7d3316SmrgEach LIBDIR is a directory that contains libtool libraries.
2372a966c04fSmrg
23736e7d3316SmrgThe commands that this mode executes may require superuser privileges.  Use
23746e7d3316Smrgthe \`--dry-run' option if you just want to see what would be executed."
23756e7d3316Smrg        ;;
2376a966c04fSmrg
23776e7d3316Smrg      install)
23786e7d3316Smrg        $ECHO \
23796e7d3316Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380a966c04fSmrg
23816e7d3316SmrgInstall executables or libraries.
2382a966c04fSmrg
23836e7d3316SmrgINSTALL-COMMAND is the installation command.  The first component should be
23846e7d3316Smrgeither the \`install' or \`cp' program.
2385a966c04fSmrg
23866e7d3316SmrgThe following components of INSTALL-COMMAND are treated specially:
2387a966c04fSmrg
23886e7d3316Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389a966c04fSmrg
23906e7d3316SmrgThe rest of the components are interpreted as arguments to that command (only
23916e7d3316SmrgBSD-compatible install options are recognized)."
23926e7d3316Smrg        ;;
2393a966c04fSmrg
23946e7d3316Smrg      link)
23956e7d3316Smrg        $ECHO \
23966e7d3316Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397a966c04fSmrg
23986e7d3316SmrgLink object files or libraries together to form another library, or to
23996e7d3316Smrgcreate an executable program.
2400a966c04fSmrg
24016e7d3316SmrgLINK-COMMAND is a command using the C compiler that you would use to create
24026e7d3316Smrga program from several object files.
2403a966c04fSmrg
24046e7d3316SmrgThe following components of LINK-COMMAND are treated specially:
2405a966c04fSmrg
24066e7d3316Smrg  -all-static       do not do any dynamic linking at all
24076e7d3316Smrg  -avoid-version    do not add a version suffix if possible
24086e7d3316Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
24096e7d3316Smrg                    libraries must be found in the PATH setting at runtime)
24106e7d3316Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
24116e7d3316Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
24126e7d3316Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
24136e7d3316Smrg  -export-symbols SYMFILE
24146e7d3316Smrg                    try to export only the symbols listed in SYMFILE
24156e7d3316Smrg  -export-symbols-regex REGEX
24166e7d3316Smrg                    try to export only the symbols matching REGEX
24176e7d3316Smrg  -LLIBDIR          search LIBDIR for required installed libraries
24186e7d3316Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
24196e7d3316Smrg  -module           build a library that can dlopened
24206e7d3316Smrg  -no-fast-install  disable the fast-install mode
24216e7d3316Smrg  -no-install       link a not-installable executable
24226e7d3316Smrg  -no-undefined     declare that a library does not refer to external symbols
24236e7d3316Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
24246e7d3316Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
24256e7d3316Smrg  -precious-files-regex REGEX
24266e7d3316Smrg                    don't remove output files matching REGEX
24276e7d3316Smrg  -release RELEASE  specify package release information
24286e7d3316Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
24296e7d3316Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
24306e7d3316Smrg  -shared           only do dynamic linking of libtool libraries
24316e7d3316Smrg  -shrext SUFFIX    override the standard shared library file extension
24326e7d3316Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
24336e7d3316Smrg  -static-libtool-libs
24346e7d3316Smrg                    do not do any dynamic linking of libtool libraries
24356e7d3316Smrg  -version-info CURRENT[:REVISION[:AGE]]
24366e7d3316Smrg                    specify library version info [each variable defaults to 0]
24376e7d3316Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
24386e7d3316Smrg  -Wc,FLAG
24396e7d3316Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
24406e7d3316Smrg  -Wl,FLAG
24416e7d3316Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
24426e7d3316Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443a966c04fSmrg
24446e7d3316SmrgAll other options (arguments beginning with \`-') are ignored.
2445a966c04fSmrg
24466e7d3316SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
24476e7d3316Smrgtreated as uninstalled libtool libraries, other files are standard or library
24486e7d3316Smrgobject files.
2449a966c04fSmrg
24506e7d3316SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
24516e7d3316Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
24526e7d3316Smrgrequired, except when creating a convenience library.
2453a966c04fSmrg
24546e7d3316SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
24556e7d3316Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
24562e2dd055Smrg
24576e7d3316SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
24586e7d3316Smrgis created, otherwise an executable program is created."
24596e7d3316Smrg        ;;
2460a966c04fSmrg
24616e7d3316Smrg      uninstall)
24626e7d3316Smrg        $ECHO \
24636e7d3316Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464a966c04fSmrg
24656e7d3316SmrgRemove libraries from an installation directory.
2466a966c04fSmrg
24676e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE
24686e7d3316Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
24696e7d3316Smrgto RM.
2470a966c04fSmrg
24716e7d3316SmrgIf FILE is a libtool library, all the files associated with it are deleted.
24726e7d3316SmrgOtherwise, only FILE itself is deleted using RM."
24736e7d3316Smrg        ;;
2474a966c04fSmrg
24756e7d3316Smrg      *)
247697cf2ee2Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
24776e7d3316Smrg        ;;
24786e7d3316Smrg    esac
2479a966c04fSmrg
24806e7d3316Smrg    echo
24816e7d3316Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
24826e7d3316Smrg}
2483a966c04fSmrg
24846e7d3316Smrg# Now that we've collected a possible --mode arg, show help if necessary
24856e7d3316Smrgif $opt_help; then
24866e7d3316Smrg  if test "$opt_help" = :; then
24876e7d3316Smrg    func_mode_help
24886e7d3316Smrg  else
24896e7d3316Smrg    {
24906e7d3316Smrg      func_help noexit
249197cf2ee2Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24926e7d3316Smrg	func_mode_help
24936e7d3316Smrg      done
24946e7d3316Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
24956e7d3316Smrg    {
24966e7d3316Smrg      func_help noexit
249797cf2ee2Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24986e7d3316Smrg	echo
24996e7d3316Smrg	func_mode_help
25006e7d3316Smrg      done
25016e7d3316Smrg    } |
25026e7d3316Smrg    sed '1d
25036e7d3316Smrg      /^When reporting/,/^Report/{
25046e7d3316Smrg	H
25056e7d3316Smrg	d
25066e7d3316Smrg      }
25076e7d3316Smrg      $x
25086e7d3316Smrg      /information about other modes/d
25096e7d3316Smrg      /more detailed .*MODE/d
25106e7d3316Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
25116e7d3316Smrg  fi
25126e7d3316Smrg  exit $?
25136e7d3316Smrgfi
2514a966c04fSmrg
2515a966c04fSmrg
25166e7d3316Smrg# func_mode_execute arg...
25176e7d3316Smrgfunc_mode_execute ()
25186e7d3316Smrg{
25196e7d3316Smrg    $opt_debug
25206e7d3316Smrg    # The first argument is the command name.
25216e7d3316Smrg    cmd="$nonopt"
25226e7d3316Smrg    test -z "$cmd" && \
25236e7d3316Smrg      func_fatal_help "you must specify a COMMAND"
2524a966c04fSmrg
25256e7d3316Smrg    # Handle -dlopen flags immediately.
252697cf2ee2Smrg    for file in $opt_dlopen; do
25276e7d3316Smrg      test -f "$file" \
25286e7d3316Smrg	|| func_fatal_help "\`$file' is not a file"
2529a966c04fSmrg
25306e7d3316Smrg      dir=
25316e7d3316Smrg      case $file in
25326e7d3316Smrg      *.la)
253397cf2ee2Smrg	func_resolve_sysroot "$file"
253497cf2ee2Smrg	file=$func_resolve_sysroot_result
253597cf2ee2Smrg
25366e7d3316Smrg	# Check to see that this really is a libtool archive.
25376e7d3316Smrg	func_lalib_unsafe_p "$file" \
25386e7d3316Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539a966c04fSmrg
25406e7d3316Smrg	# Read the libtool library.
25416e7d3316Smrg	dlname=
25426e7d3316Smrg	library_names=
25436e7d3316Smrg	func_source "$file"
2544a966c04fSmrg
25456e7d3316Smrg	# Skip this library if it cannot be dlopened.
25466e7d3316Smrg	if test -z "$dlname"; then
25476e7d3316Smrg	  # Warn if it was a shared library.
25486e7d3316Smrg	  test -n "$library_names" && \
25496e7d3316Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
25506e7d3316Smrg	  continue
25516e7d3316Smrg	fi
2552a966c04fSmrg
25536e7d3316Smrg	func_dirname "$file" "" "."
25546e7d3316Smrg	dir="$func_dirname_result"
2555a966c04fSmrg
25566e7d3316Smrg	if test -f "$dir/$objdir/$dlname"; then
255797cf2ee2Smrg	  func_append dir "/$objdir"
25586e7d3316Smrg	else
25596e7d3316Smrg	  if test ! -f "$dir/$dlname"; then
25606e7d3316Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
25616e7d3316Smrg	  fi
25626e7d3316Smrg	fi
2563a966c04fSmrg	;;
2564a966c04fSmrg
25656e7d3316Smrg      *.lo)
25666e7d3316Smrg	# Just add the directory containing the .lo file.
25676e7d3316Smrg	func_dirname "$file" "" "."
25686e7d3316Smrg	dir="$func_dirname_result"
2569a966c04fSmrg	;;
25706e7d3316Smrg
25716e7d3316Smrg      *)
25726e7d3316Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573a966c04fSmrg	continue
2574a966c04fSmrg	;;
25756e7d3316Smrg      esac
2576a966c04fSmrg
25776e7d3316Smrg      # Get the absolute pathname.
25786e7d3316Smrg      absdir=`cd "$dir" && pwd`
25796e7d3316Smrg      test -n "$absdir" && dir="$absdir"
2580a966c04fSmrg
25816e7d3316Smrg      # Now add the directory to shlibpath_var.
25826e7d3316Smrg      if eval "test -z \"\$$shlibpath_var\""; then
25836e7d3316Smrg	eval "$shlibpath_var=\"\$dir\""
25846e7d3316Smrg      else
25856e7d3316Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
25866e7d3316Smrg      fi
25876e7d3316Smrg    done
2588a966c04fSmrg
25896e7d3316Smrg    # This variable tells wrapper scripts just to set shlibpath_var
25906e7d3316Smrg    # rather than running their programs.
25916e7d3316Smrg    libtool_execute_magic="$magic"
2592a966c04fSmrg
25936e7d3316Smrg    # Check if any of the arguments is a wrapper script.
25946e7d3316Smrg    args=
25956e7d3316Smrg    for file
25966e7d3316Smrg    do
25976e7d3316Smrg      case $file in
25986e7d3316Smrg      -* | *.la | *.lo ) ;;
25996e7d3316Smrg      *)
26006e7d3316Smrg	# Do a test to see if this is really a libtool program.
26016e7d3316Smrg	if func_ltwrapper_script_p "$file"; then
26026e7d3316Smrg	  func_source "$file"
26036e7d3316Smrg	  # Transform arg to wrapped name.
26046e7d3316Smrg	  file="$progdir/$program"
26056e7d3316Smrg	elif func_ltwrapper_executable_p "$file"; then
26066e7d3316Smrg	  func_ltwrapper_scriptname "$file"
26076e7d3316Smrg	  func_source "$func_ltwrapper_scriptname_result"
26086e7d3316Smrg	  # Transform arg to wrapped name.
26096e7d3316Smrg	  file="$progdir/$program"
26106e7d3316Smrg	fi
2611a966c04fSmrg	;;
26126e7d3316Smrg      esac
26136e7d3316Smrg      # Quote arguments (to preserve shell metacharacters).
261497cf2ee2Smrg      func_append_quoted args "$file"
26156e7d3316Smrg    done
2616a966c04fSmrg
26176e7d3316Smrg    if test "X$opt_dry_run" = Xfalse; then
26186e7d3316Smrg      if test -n "$shlibpath_var"; then
26196e7d3316Smrg	# Export the shlibpath_var.
26206e7d3316Smrg	eval "export $shlibpath_var"
26216e7d3316Smrg      fi
2622a966c04fSmrg
26236e7d3316Smrg      # Restore saved environment variables
26246e7d3316Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
26256e7d3316Smrg      do
26266e7d3316Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
26276e7d3316Smrg                $lt_var=\$save_$lt_var; export $lt_var
26286e7d3316Smrg	      else
26296e7d3316Smrg		$lt_unset $lt_var
26306e7d3316Smrg	      fi"
26316e7d3316Smrg      done
2632a966c04fSmrg
26336e7d3316Smrg      # Now prepare to actually exec the command.
26346e7d3316Smrg      exec_cmd="\$cmd$args"
26356e7d3316Smrg    else
26366e7d3316Smrg      # Display what would be done.
26376e7d3316Smrg      if test -n "$shlibpath_var"; then
26386e7d3316Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26396e7d3316Smrg	echo "export $shlibpath_var"
26406e7d3316Smrg      fi
26416e7d3316Smrg      $ECHO "$cmd$args"
26426e7d3316Smrg      exit $EXIT_SUCCESS
26436e7d3316Smrg    fi
26446e7d3316Smrg}
2645a966c04fSmrg
264697cf2ee2Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647a966c04fSmrg
2648a966c04fSmrg
26496e7d3316Smrg# func_mode_finish arg...
26506e7d3316Smrgfunc_mode_finish ()
26516e7d3316Smrg{
26526e7d3316Smrg    $opt_debug
265397cf2ee2Smrg    libs=
265497cf2ee2Smrg    libdirs=
26556e7d3316Smrg    admincmds=
2656a966c04fSmrg
265797cf2ee2Smrg    for opt in "$nonopt" ${1+"$@"}
265897cf2ee2Smrg    do
265997cf2ee2Smrg      if test -d "$opt"; then
266097cf2ee2Smrg	func_append libdirs " $opt"
266197cf2ee2Smrg
266297cf2ee2Smrg      elif test -f "$opt"; then
266397cf2ee2Smrg	if func_lalib_unsafe_p "$opt"; then
266497cf2ee2Smrg	  func_append libs " $opt"
266597cf2ee2Smrg	else
266697cf2ee2Smrg	  func_warning "\`$opt' is not a valid libtool archive"
266797cf2ee2Smrg	fi
266897cf2ee2Smrg
266997cf2ee2Smrg      else
267097cf2ee2Smrg	func_fatal_error "invalid argument \`$opt'"
267197cf2ee2Smrg      fi
267297cf2ee2Smrg    done
267397cf2ee2Smrg
267497cf2ee2Smrg    if test -n "$libs"; then
267597cf2ee2Smrg      if test -n "$lt_sysroot"; then
267697cf2ee2Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
267797cf2ee2Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
267897cf2ee2Smrg      else
267997cf2ee2Smrg        sysroot_cmd=
268097cf2ee2Smrg      fi
268197cf2ee2Smrg
268297cf2ee2Smrg      # Remove sysroot references
268397cf2ee2Smrg      if $opt_dry_run; then
268497cf2ee2Smrg        for lib in $libs; do
268597cf2ee2Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
268697cf2ee2Smrg        done
268797cf2ee2Smrg      else
268897cf2ee2Smrg        tmpdir=`func_mktempdir`
268997cf2ee2Smrg        for lib in $libs; do
269097cf2ee2Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
269197cf2ee2Smrg	    > $tmpdir/tmp-la
269297cf2ee2Smrg	  mv -f $tmpdir/tmp-la $lib
269397cf2ee2Smrg	done
269497cf2ee2Smrg        ${RM}r "$tmpdir"
269597cf2ee2Smrg      fi
269697cf2ee2Smrg    fi
2697a966c04fSmrg
269897cf2ee2Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
26996e7d3316Smrg      for libdir in $libdirs; do
27006e7d3316Smrg	if test -n "$finish_cmds"; then
27016e7d3316Smrg	  # Do each command in the finish commands.
27026e7d3316Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
27036e7d3316Smrg'"$cmd"'"'
27046e7d3316Smrg	fi
27056e7d3316Smrg	if test -n "$finish_eval"; then
27066e7d3316Smrg	  # Do the single finish_eval.
27076e7d3316Smrg	  eval cmds=\"$finish_eval\"
270897cf2ee2Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
27096e7d3316Smrg       $cmds"
27106e7d3316Smrg	fi
27116e7d3316Smrg      done
27126e7d3316Smrg    fi
2713a966c04fSmrg
27146e7d3316Smrg    # Exit here if they wanted silent mode.
27156e7d3316Smrg    $opt_silent && exit $EXIT_SUCCESS
2716a966c04fSmrg
271797cf2ee2Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
271897cf2ee2Smrg      echo "----------------------------------------------------------------------"
271997cf2ee2Smrg      echo "Libraries have been installed in:"
272097cf2ee2Smrg      for libdir in $libdirs; do
272197cf2ee2Smrg	$ECHO "   $libdir"
272297cf2ee2Smrg      done
272397cf2ee2Smrg      echo
272497cf2ee2Smrg      echo "If you ever happen to want to link against installed libraries"
272597cf2ee2Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
272697cf2ee2Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
272797cf2ee2Smrg      echo "flag during linking and do at least one of the following:"
272897cf2ee2Smrg      if test -n "$shlibpath_var"; then
272997cf2ee2Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
273097cf2ee2Smrg	echo "     during execution"
273197cf2ee2Smrg      fi
273297cf2ee2Smrg      if test -n "$runpath_var"; then
273397cf2ee2Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
273497cf2ee2Smrg	echo "     during linking"
273597cf2ee2Smrg      fi
273697cf2ee2Smrg      if test -n "$hardcode_libdir_flag_spec"; then
273797cf2ee2Smrg	libdir=LIBDIR
273897cf2ee2Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739a966c04fSmrg
274097cf2ee2Smrg	$ECHO "   - use the \`$flag' linker flag"
274197cf2ee2Smrg      fi
274297cf2ee2Smrg      if test -n "$admincmds"; then
274397cf2ee2Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
274497cf2ee2Smrg      fi
274597cf2ee2Smrg      if test -f /etc/ld.so.conf; then
274697cf2ee2Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
274797cf2ee2Smrg      fi
274897cf2ee2Smrg      echo
2749a966c04fSmrg
275097cf2ee2Smrg      echo "See any operating system documentation about shared libraries for"
275197cf2ee2Smrg      case $host in
275297cf2ee2Smrg	solaris2.[6789]|solaris2.1[0-9])
275397cf2ee2Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
275497cf2ee2Smrg	  echo "pages."
275597cf2ee2Smrg	  ;;
275697cf2ee2Smrg	*)
275797cf2ee2Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
275897cf2ee2Smrg	  ;;
275997cf2ee2Smrg      esac
276097cf2ee2Smrg      echo "----------------------------------------------------------------------"
276197cf2ee2Smrg    fi
27626e7d3316Smrg    exit $EXIT_SUCCESS
27636e7d3316Smrg}
2764a966c04fSmrg
276597cf2ee2Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766a966c04fSmrg
2767a966c04fSmrg
27686e7d3316Smrg# func_mode_install arg...
27696e7d3316Smrgfunc_mode_install ()
27706e7d3316Smrg{
27716e7d3316Smrg    $opt_debug
27726e7d3316Smrg    # There may be an optional sh(1) argument at the beginning of
27736e7d3316Smrg    # install_prog (especially on Windows NT).
27746e7d3316Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
27756e7d3316Smrg       # Allow the use of GNU shtool's install command.
27766e7d3316Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
27776e7d3316Smrg      # Aesthetically quote it.
27786e7d3316Smrg      func_quote_for_eval "$nonopt"
27796e7d3316Smrg      install_prog="$func_quote_for_eval_result "
27806e7d3316Smrg      arg=$1
27816e7d3316Smrg      shift
27826e7d3316Smrg    else
27836e7d3316Smrg      install_prog=
27846e7d3316Smrg      arg=$nonopt
27856e7d3316Smrg    fi
2786a966c04fSmrg
27876e7d3316Smrg    # The real first argument should be the name of the installation program.
27886e7d3316Smrg    # Aesthetically quote it.
27896e7d3316Smrg    func_quote_for_eval "$arg"
279097cf2ee2Smrg    func_append install_prog "$func_quote_for_eval_result"
27916e7d3316Smrg    install_shared_prog=$install_prog
27926e7d3316Smrg    case " $install_prog " in
27936e7d3316Smrg      *[\\\ /]cp\ *) install_cp=: ;;
27946e7d3316Smrg      *) install_cp=false ;;
27956e7d3316Smrg    esac
2796a966c04fSmrg
27976e7d3316Smrg    # We need to accept at least all the BSD install flags.
27986e7d3316Smrg    dest=
27996e7d3316Smrg    files=
28006e7d3316Smrg    opts=
28016e7d3316Smrg    prev=
28026e7d3316Smrg    install_type=
28036e7d3316Smrg    isdir=no
28046e7d3316Smrg    stripme=
28056e7d3316Smrg    no_mode=:
28066e7d3316Smrg    for arg
28076e7d3316Smrg    do
28086e7d3316Smrg      arg2=
28096e7d3316Smrg      if test -n "$dest"; then
281097cf2ee2Smrg	func_append files " $dest"
28116e7d3316Smrg	dest=$arg
2812a966c04fSmrg	continue
28136e7d3316Smrg      fi
2814a966c04fSmrg
28156e7d3316Smrg      case $arg in
28166e7d3316Smrg      -d) isdir=yes ;;
28176e7d3316Smrg      -f)
28186e7d3316Smrg	if $install_cp; then :; else
28196e7d3316Smrg	  prev=$arg
2820a966c04fSmrg	fi
28216e7d3316Smrg	;;
28226e7d3316Smrg      -g | -m | -o)
28236e7d3316Smrg	prev=$arg
28246e7d3316Smrg	;;
28256e7d3316Smrg      -s)
28266e7d3316Smrg	stripme=" -s"
2827a966c04fSmrg	continue
2828a966c04fSmrg	;;
28296e7d3316Smrg      -*)
28306e7d3316Smrg	;;
2831a966c04fSmrg      *)
28326e7d3316Smrg	# If the previous option needed an argument, then skip it.
28336e7d3316Smrg	if test -n "$prev"; then
28346e7d3316Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
28356e7d3316Smrg	    arg2=$install_override_mode
28366e7d3316Smrg	    no_mode=false
28376e7d3316Smrg	  fi
28386e7d3316Smrg	  prev=
28396e7d3316Smrg	else
28406e7d3316Smrg	  dest=$arg
28416e7d3316Smrg	  continue
28426e7d3316Smrg	fi
2843a966c04fSmrg	;;
28446e7d3316Smrg      esac
2845a966c04fSmrg
28466e7d3316Smrg      # Aesthetically quote the argument.
28476e7d3316Smrg      func_quote_for_eval "$arg"
284897cf2ee2Smrg      func_append install_prog " $func_quote_for_eval_result"
28496e7d3316Smrg      if test -n "$arg2"; then
28506e7d3316Smrg	func_quote_for_eval "$arg2"
2851a966c04fSmrg      fi
285297cf2ee2Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
28536e7d3316Smrg    done
2854a966c04fSmrg
28556e7d3316Smrg    test -z "$install_prog" && \
28566e7d3316Smrg      func_fatal_help "you must specify an install program"
2857a966c04fSmrg
28586e7d3316Smrg    test -n "$prev" && \
28596e7d3316Smrg      func_fatal_help "the \`$prev' option requires an argument"
2860a966c04fSmrg
28616e7d3316Smrg    if test -n "$install_override_mode" && $no_mode; then
28626e7d3316Smrg      if $install_cp; then :; else
28636e7d3316Smrg	func_quote_for_eval "$install_override_mode"
286497cf2ee2Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
28656e7d3316Smrg      fi
2866a966c04fSmrg    fi
2867a966c04fSmrg
28686e7d3316Smrg    if test -z "$files"; then
28696e7d3316Smrg      if test -z "$dest"; then
28706e7d3316Smrg	func_fatal_help "no file or destination specified"
28716e7d3316Smrg      else
28726e7d3316Smrg	func_fatal_help "you must specify a destination"
2873a966c04fSmrg      fi
2874a966c04fSmrg    fi
2875a966c04fSmrg
28766e7d3316Smrg    # Strip any trailing slash from the destination.
28776e7d3316Smrg    func_stripname '' '/' "$dest"
28786e7d3316Smrg    dest=$func_stripname_result
2879a966c04fSmrg
28806e7d3316Smrg    # Check to see that the destination is a directory.
28816e7d3316Smrg    test -d "$dest" && isdir=yes
28826e7d3316Smrg    if test "$isdir" = yes; then
28836e7d3316Smrg      destdir="$dest"
28846e7d3316Smrg      destname=
28856e7d3316Smrg    else
28866e7d3316Smrg      func_dirname_and_basename "$dest" "" "."
28876e7d3316Smrg      destdir="$func_dirname_result"
28886e7d3316Smrg      destname="$func_basename_result"
28896e7d3316Smrg
28906e7d3316Smrg      # Not a directory, so check to see that there is only one file specified.
28916e7d3316Smrg      set dummy $files; shift
28926e7d3316Smrg      test "$#" -gt 1 && \
28936e7d3316Smrg	func_fatal_help "\`$dest' is not a directory"
28946e7d3316Smrg    fi
28956e7d3316Smrg    case $destdir in
28966e7d3316Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897a966c04fSmrg    *)
28986e7d3316Smrg      for file in $files; do
28996e7d3316Smrg	case $file in
29006e7d3316Smrg	*.lo) ;;
29016e7d3316Smrg	*)
29026e7d3316Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
29036e7d3316Smrg	  ;;
29046e7d3316Smrg	esac
29056e7d3316Smrg      done
2906a966c04fSmrg      ;;
2907a966c04fSmrg    esac
2908a966c04fSmrg
29096e7d3316Smrg    # This variable tells wrapper scripts just to set variables rather
29106e7d3316Smrg    # than running their programs.
29116e7d3316Smrg    libtool_install_magic="$magic"
2912a966c04fSmrg
29136e7d3316Smrg    staticlibs=
29146e7d3316Smrg    future_libdirs=
29156e7d3316Smrg    current_libdirs=
29166e7d3316Smrg    for file in $files; do
2917a966c04fSmrg
29186e7d3316Smrg      # Do each installation.
29196e7d3316Smrg      case $file in
29206e7d3316Smrg      *.$libext)
29216e7d3316Smrg	# Do the static libraries later.
292297cf2ee2Smrg	func_append staticlibs " $file"
29236e7d3316Smrg	;;
29246e7d3316Smrg
29256e7d3316Smrg      *.la)
292697cf2ee2Smrg	func_resolve_sysroot "$file"
292797cf2ee2Smrg	file=$func_resolve_sysroot_result
292897cf2ee2Smrg
29296e7d3316Smrg	# Check to see that this really is a libtool archive.
29306e7d3316Smrg	func_lalib_unsafe_p "$file" \
29316e7d3316Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
29326e7d3316Smrg
29336e7d3316Smrg	library_names=
29346e7d3316Smrg	old_library=
29356e7d3316Smrg	relink_command=
29366e7d3316Smrg	func_source "$file"
29376e7d3316Smrg
29386e7d3316Smrg	# Add the libdir to current_libdirs if it is the destination.
29396e7d3316Smrg	if test "X$destdir" = "X$libdir"; then
29406e7d3316Smrg	  case "$current_libdirs " in
29416e7d3316Smrg	  *" $libdir "*) ;;
294297cf2ee2Smrg	  *) func_append current_libdirs " $libdir" ;;
2943a966c04fSmrg	  esac
29446e7d3316Smrg	else
29456e7d3316Smrg	  # Note the libdir as a future libdir.
29466e7d3316Smrg	  case "$future_libdirs " in
29476e7d3316Smrg	  *" $libdir "*) ;;
294897cf2ee2Smrg	  *) func_append future_libdirs " $libdir" ;;
29496e7d3316Smrg	  esac
29506e7d3316Smrg	fi
2951a966c04fSmrg
29526e7d3316Smrg	func_dirname "$file" "/" ""
29536e7d3316Smrg	dir="$func_dirname_result"
295497cf2ee2Smrg	func_append dir "$objdir"
29556e7d3316Smrg
29566e7d3316Smrg	if test -n "$relink_command"; then
29576e7d3316Smrg	  # Determine the prefix the user has applied to our future dir.
29586e7d3316Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
29596e7d3316Smrg
29606e7d3316Smrg	  # Don't allow the user to place us outside of our expected
29616e7d3316Smrg	  # location b/c this prevents finding dependent libraries that
29626e7d3316Smrg	  # are installed to the same prefix.
29636e7d3316Smrg	  # At present, this check doesn't affect windows .dll's that
29646e7d3316Smrg	  # are installed into $libdir/../bin (currently, that works fine)
29656e7d3316Smrg	  # but it's something to keep an eye on.
29666e7d3316Smrg	  test "$inst_prefix_dir" = "$destdir" && \
29676e7d3316Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
29686e7d3316Smrg
29696e7d3316Smrg	  if test -n "$inst_prefix_dir"; then
29706e7d3316Smrg	    # Stick the inst_prefix_dir data into the link command.
29716e7d3316Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
29726e7d3316Smrg	  else
29736e7d3316Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
29746e7d3316Smrg	  fi
29756e7d3316Smrg
29766e7d3316Smrg	  func_warning "relinking \`$file'"
29776e7d3316Smrg	  func_show_eval "$relink_command" \
29786e7d3316Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
29796e7d3316Smrg	fi
29806e7d3316Smrg
29816e7d3316Smrg	# See the names of the shared library.
29826e7d3316Smrg	set dummy $library_names; shift
29836e7d3316Smrg	if test -n "$1"; then
29846e7d3316Smrg	  realname="$1"
29856e7d3316Smrg	  shift
29866e7d3316Smrg
29876e7d3316Smrg	  srcname="$realname"
29886e7d3316Smrg	  test -n "$relink_command" && srcname="$realname"T
29896e7d3316Smrg
29906e7d3316Smrg	  # Install the shared library and build the symlinks.
29916e7d3316Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
29926e7d3316Smrg	      'exit $?'
29936e7d3316Smrg	  tstripme="$stripme"
29946e7d3316Smrg	  case $host_os in
29956e7d3316Smrg	  cygwin* | mingw* | pw32* | cegcc*)
29966e7d3316Smrg	    case $realname in
29976e7d3316Smrg	    *.dll.a)
29986e7d3316Smrg	      tstripme=""
29996e7d3316Smrg	      ;;
30006e7d3316Smrg	    esac
3001a966c04fSmrg	    ;;
3002a966c04fSmrg	  esac
30036e7d3316Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
30046e7d3316Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
30056e7d3316Smrg	  fi
30066e7d3316Smrg
30076e7d3316Smrg	  if test "$#" -gt 0; then
30086e7d3316Smrg	    # Delete the old symlinks, and create new ones.
30096e7d3316Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
30106e7d3316Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
30116e7d3316Smrg	    # so we also need to try rm && ln -s.
30126e7d3316Smrg	    for linkname
30136e7d3316Smrg	    do
30146e7d3316Smrg	      test "$linkname" != "$realname" \
30156e7d3316Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
30166e7d3316Smrg	    done
30176e7d3316Smrg	  fi
30186e7d3316Smrg
30196e7d3316Smrg	  # Do each command in the postinstall commands.
30206e7d3316Smrg	  lib="$destdir/$realname"
30216e7d3316Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
30226e7d3316Smrg	fi
30236e7d3316Smrg
30246e7d3316Smrg	# Install the pseudo-library for information purposes.
30256e7d3316Smrg	func_basename "$file"
30266e7d3316Smrg	name="$func_basename_result"
30276e7d3316Smrg	instname="$dir/$name"i
30286e7d3316Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
30296e7d3316Smrg
30306e7d3316Smrg	# Maybe install the static library, too.
303197cf2ee2Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032a966c04fSmrg	;;
30336e7d3316Smrg
30346e7d3316Smrg      *.lo)
30356e7d3316Smrg	# Install (i.e. copy) a libtool object.
30366e7d3316Smrg
30376e7d3316Smrg	# Figure out destination file name, if it wasn't already specified.
30386e7d3316Smrg	if test -n "$destname"; then
30396e7d3316Smrg	  destfile="$destdir/$destname"
30406e7d3316Smrg	else
30416e7d3316Smrg	  func_basename "$file"
30426e7d3316Smrg	  destfile="$func_basename_result"
30436e7d3316Smrg	  destfile="$destdir/$destfile"
30446e7d3316Smrg	fi
30456e7d3316Smrg
30466e7d3316Smrg	# Deduce the name of the destination old-style object file.
30476e7d3316Smrg	case $destfile in
30486e7d3316Smrg	*.lo)
30496e7d3316Smrg	  func_lo2o "$destfile"
30506e7d3316Smrg	  staticdest=$func_lo2o_result
3051a966c04fSmrg	  ;;
30526e7d3316Smrg	*.$objext)
30536e7d3316Smrg	  staticdest="$destfile"
30546e7d3316Smrg	  destfile=
3055a966c04fSmrg	  ;;
30566e7d3316Smrg	*)
30576e7d3316Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058a966c04fSmrg	  ;;
30596e7d3316Smrg	esac
30606e7d3316Smrg
30616e7d3316Smrg	# Install the libtool object if requested.
30626e7d3316Smrg	test -n "$destfile" && \
30636e7d3316Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
30646e7d3316Smrg
30656e7d3316Smrg	# Install the old object if enabled.
30666e7d3316Smrg	if test "$build_old_libs" = yes; then
30676e7d3316Smrg	  # Deduce the name of the old-style object file.
30686e7d3316Smrg	  func_lo2o "$file"
30696e7d3316Smrg	  staticobj=$func_lo2o_result
30706e7d3316Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071a966c04fSmrg	fi
30726e7d3316Smrg	exit $EXIT_SUCCESS
30736e7d3316Smrg	;;
3074a966c04fSmrg
30756e7d3316Smrg      *)
30766e7d3316Smrg	# Figure out destination file name, if it wasn't already specified.
30776e7d3316Smrg	if test -n "$destname"; then
30786e7d3316Smrg	  destfile="$destdir/$destname"
3079a966c04fSmrg	else
30806e7d3316Smrg	  func_basename "$file"
30816e7d3316Smrg	  destfile="$func_basename_result"
30826e7d3316Smrg	  destfile="$destdir/$destfile"
3083a966c04fSmrg	fi
3084a966c04fSmrg
30856e7d3316Smrg	# If the file is missing, and there is a .exe on the end, strip it
30866e7d3316Smrg	# because it is most likely a libtool script we actually want to
30876e7d3316Smrg	# install
30886e7d3316Smrg	stripped_ext=""
30896e7d3316Smrg	case $file in
30906e7d3316Smrg	  *.exe)
30916e7d3316Smrg	    if test ! -f "$file"; then
30926e7d3316Smrg	      func_stripname '' '.exe' "$file"
30936e7d3316Smrg	      file=$func_stripname_result
30946e7d3316Smrg	      stripped_ext=".exe"
30956e7d3316Smrg	    fi
30966e7d3316Smrg	    ;;
30976e7d3316Smrg	esac
3098a966c04fSmrg
30996e7d3316Smrg	# Do a test to see if this is really a libtool program.
31006e7d3316Smrg	case $host in
31016e7d3316Smrg	*cygwin* | *mingw*)
31026e7d3316Smrg	    if func_ltwrapper_executable_p "$file"; then
31036e7d3316Smrg	      func_ltwrapper_scriptname "$file"
31046e7d3316Smrg	      wrapper=$func_ltwrapper_scriptname_result
31056e7d3316Smrg	    else
31066e7d3316Smrg	      func_stripname '' '.exe' "$file"
31076e7d3316Smrg	      wrapper=$func_stripname_result
31086e7d3316Smrg	    fi
31096e7d3316Smrg	    ;;
31106e7d3316Smrg	*)
31116e7d3316Smrg	    wrapper=$file
31126e7d3316Smrg	    ;;
31136e7d3316Smrg	esac
31146e7d3316Smrg	if func_ltwrapper_script_p "$wrapper"; then
31156e7d3316Smrg	  notinst_deplibs=
31166e7d3316Smrg	  relink_command=
3117a966c04fSmrg
31186e7d3316Smrg	  func_source "$wrapper"
3119a966c04fSmrg
31206e7d3316Smrg	  # Check the variables that should have been set.
31216e7d3316Smrg	  test -z "$generated_by_libtool_version" && \
31226e7d3316Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123a966c04fSmrg
31246e7d3316Smrg	  finalize=yes
31256e7d3316Smrg	  for lib in $notinst_deplibs; do
31266e7d3316Smrg	    # Check to see that each library is installed.
31276e7d3316Smrg	    libdir=
31286e7d3316Smrg	    if test -f "$lib"; then
31296e7d3316Smrg	      func_source "$lib"
3130a966c04fSmrg	    fi
31316e7d3316Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
31326e7d3316Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
31336e7d3316Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
31346e7d3316Smrg	      finalize=no
31356e7d3316Smrg	    fi
31366e7d3316Smrg	  done
3137a966c04fSmrg
31386e7d3316Smrg	  relink_command=
31396e7d3316Smrg	  func_source "$wrapper"
3140a966c04fSmrg
31416e7d3316Smrg	  outputname=
31426e7d3316Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
31436e7d3316Smrg	    $opt_dry_run || {
31446e7d3316Smrg	      if test "$finalize" = yes; then
31456e7d3316Smrg	        tmpdir=`func_mktempdir`
31466e7d3316Smrg		func_basename "$file$stripped_ext"
31476e7d3316Smrg		file="$func_basename_result"
31486e7d3316Smrg	        outputname="$tmpdir/$file"
31496e7d3316Smrg	        # Replace the output file specification.
31506e7d3316Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
31516e7d3316Smrg
31526e7d3316Smrg	        $opt_silent || {
31536e7d3316Smrg	          func_quote_for_expand "$relink_command"
31546e7d3316Smrg		  eval "func_echo $func_quote_for_expand_result"
31556e7d3316Smrg	        }
31566e7d3316Smrg	        if eval "$relink_command"; then :
31576e7d3316Smrg	          else
31586e7d3316Smrg		  func_error "error: relink \`$file' with the above command before installing it"
31596e7d3316Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
31606e7d3316Smrg		  continue
31616e7d3316Smrg	        fi
31626e7d3316Smrg	        file="$outputname"
31636e7d3316Smrg	      else
31646e7d3316Smrg	        func_warning "cannot relink \`$file'"
31656e7d3316Smrg	      fi
31666e7d3316Smrg	    }
3167a966c04fSmrg	  else
31686e7d3316Smrg	    # Install the binary that we compiled earlier.
31696e7d3316Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170a966c04fSmrg	  fi
31716e7d3316Smrg	fi
3172a966c04fSmrg
31736e7d3316Smrg	# remove .exe since cygwin /usr/bin/install will append another
31746e7d3316Smrg	# one anyway
31756e7d3316Smrg	case $install_prog,$host in
31766e7d3316Smrg	*/usr/bin/install*,*cygwin*)
31776e7d3316Smrg	  case $file:$destfile in
31786e7d3316Smrg	  *.exe:*.exe)
31796e7d3316Smrg	    # this is ok
31806e7d3316Smrg	    ;;
31816e7d3316Smrg	  *.exe:*)
31826e7d3316Smrg	    destfile=$destfile.exe
31836e7d3316Smrg	    ;;
31846e7d3316Smrg	  *:*.exe)
31856e7d3316Smrg	    func_stripname '' '.exe' "$destfile"
31866e7d3316Smrg	    destfile=$func_stripname_result
31876e7d3316Smrg	    ;;
31886e7d3316Smrg	  esac
3189a966c04fSmrg	  ;;
3190a966c04fSmrg	esac
31916e7d3316Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
31926e7d3316Smrg	$opt_dry_run || if test -n "$outputname"; then
31936e7d3316Smrg	  ${RM}r "$tmpdir"
31946e7d3316Smrg	fi
31956e7d3316Smrg	;;
31966e7d3316Smrg      esac
31976e7d3316Smrg    done
3198a966c04fSmrg
31996e7d3316Smrg    for file in $staticlibs; do
32006e7d3316Smrg      func_basename "$file"
32016e7d3316Smrg      name="$func_basename_result"
32026e7d3316Smrg
32036e7d3316Smrg      # Set up the ranlib parameters.
32046e7d3316Smrg      oldlib="$destdir/$name"
3205ac92798bSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206ac92798bSmrg      tool_oldlib=$func_to_tool_file_result
32076e7d3316Smrg
32086e7d3316Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
32096e7d3316Smrg
32106e7d3316Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
3211ac92798bSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
32126e7d3316Smrg      fi
32136e7d3316Smrg
32146e7d3316Smrg      # Do each command in the postinstall commands.
32156e7d3316Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
32166e7d3316Smrg    done
32176e7d3316Smrg
32186e7d3316Smrg    test -n "$future_libdirs" && \
32196e7d3316Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
32206e7d3316Smrg
32216e7d3316Smrg    if test -n "$current_libdirs"; then
32226e7d3316Smrg      # Maybe just do a dry run.
32236e7d3316Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
32246e7d3316Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
32256e7d3316Smrg    else
32266e7d3316Smrg      exit $EXIT_SUCCESS
32276e7d3316Smrg    fi
32286e7d3316Smrg}
32296e7d3316Smrg
323097cf2ee2Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
32316e7d3316Smrg
32326e7d3316Smrg
32336e7d3316Smrg# func_generate_dlsyms outputname originator pic_p
32346e7d3316Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
32356e7d3316Smrg# a dlpreopen symbol table.
32366e7d3316Smrgfunc_generate_dlsyms ()
32376e7d3316Smrg{
32386e7d3316Smrg    $opt_debug
32396e7d3316Smrg    my_outputname="$1"
32406e7d3316Smrg    my_originator="$2"
32416e7d3316Smrg    my_pic_p="${3-no}"
32426e7d3316Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
32436e7d3316Smrg    my_dlsyms=
32446e7d3316Smrg
32456e7d3316Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
32466e7d3316Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
32476e7d3316Smrg	my_dlsyms="${my_outputname}S.c"
32486e7d3316Smrg      else
32496e7d3316Smrg	func_error "not configured to extract global symbols from dlpreopened files"
32506e7d3316Smrg      fi
32516e7d3316Smrg    fi
32526e7d3316Smrg
32536e7d3316Smrg    if test -n "$my_dlsyms"; then
32546e7d3316Smrg      case $my_dlsyms in
32556e7d3316Smrg      "") ;;
32566e7d3316Smrg      *.c)
32576e7d3316Smrg	# Discover the nlist of each of the dlfiles.
32586e7d3316Smrg	nlist="$output_objdir/${my_outputname}.nm"
32596e7d3316Smrg
32606e7d3316Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
32616e7d3316Smrg
32626e7d3316Smrg	# Parse the name list into a source file.
32636e7d3316Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
32646e7d3316Smrg
32656e7d3316Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
32666e7d3316Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
32676e7d3316Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
32686e7d3316Smrg
32696e7d3316Smrg#ifdef __cplusplus
32706e7d3316Smrgextern \"C\" {
32716e7d3316Smrg#endif
32726e7d3316Smrg
32736e7d3316Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
32746e7d3316Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
32756e7d3316Smrg#endif
32766e7d3316Smrg
327797cf2ee2Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
327897cf2ee2Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
327997cf2ee2Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
328097cf2ee2Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
328197cf2ee2Smrg# define LT_DLSYM_CONST
328297cf2ee2Smrg#elif defined(__osf__)
328397cf2ee2Smrg/* This system does not cope well with relocations in const data.  */
328497cf2ee2Smrg# define LT_DLSYM_CONST
328597cf2ee2Smrg#else
328697cf2ee2Smrg# define LT_DLSYM_CONST const
328797cf2ee2Smrg#endif
328897cf2ee2Smrg
32896e7d3316Smrg/* External symbol declarations for the compiler. */\
32906e7d3316Smrg"
32916e7d3316Smrg
32926e7d3316Smrg	if test "$dlself" = yes; then
32936e7d3316Smrg	  func_verbose "generating symbol list for \`$output'"
32946e7d3316Smrg
32956e7d3316Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
32966e7d3316Smrg
32976e7d3316Smrg	  # Add our own program objects to the symbol list.
32986e7d3316Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
32996e7d3316Smrg	  for progfile in $progfiles; do
330097cf2ee2Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
330197cf2ee2Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
330297cf2ee2Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
33036e7d3316Smrg	  done
33046e7d3316Smrg
33056e7d3316Smrg	  if test -n "$exclude_expsyms"; then
33066e7d3316Smrg	    $opt_dry_run || {
33076e7d3316Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
33086e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
33096e7d3316Smrg	    }
3310a966c04fSmrg	  fi
33116e7d3316Smrg
33126e7d3316Smrg	  if test -n "$export_symbols_regex"; then
33136e7d3316Smrg	    $opt_dry_run || {
33146e7d3316Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
33156e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
33166e7d3316Smrg	    }
33176e7d3316Smrg	  fi
33186e7d3316Smrg
33196e7d3316Smrg	  # Prepare the list of exported symbols
33206e7d3316Smrg	  if test -z "$export_symbols"; then
33216e7d3316Smrg	    export_symbols="$output_objdir/$outputname.exp"
33226e7d3316Smrg	    $opt_dry_run || {
33236e7d3316Smrg	      $RM $export_symbols
33246e7d3316Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
33256e7d3316Smrg	      case $host in
33266e7d3316Smrg	      *cygwin* | *mingw* | *cegcc* )
33276e7d3316Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
33286e7d3316Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
33296e7d3316Smrg	        ;;
33306e7d3316Smrg	      esac
33316e7d3316Smrg	    }
3332a966c04fSmrg	  else
33336e7d3316Smrg	    $opt_dry_run || {
33346e7d3316Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
33356e7d3316Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
33366e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
33376e7d3316Smrg	      case $host in
33386e7d3316Smrg	        *cygwin* | *mingw* | *cegcc* )
33396e7d3316Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
33406e7d3316Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
33416e7d3316Smrg	          ;;
33426e7d3316Smrg	      esac
33436e7d3316Smrg	    }
3344a966c04fSmrg	  fi
33456e7d3316Smrg	fi
3346a966c04fSmrg
33476e7d3316Smrg	for dlprefile in $dlprefiles; do
33486e7d3316Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
33496e7d3316Smrg	  func_basename "$dlprefile"
33506e7d3316Smrg	  name="$func_basename_result"
335197cf2ee2Smrg          case $host in
335297cf2ee2Smrg	    *cygwin* | *mingw* | *cegcc* )
335397cf2ee2Smrg	      # if an import library, we need to obtain dlname
335497cf2ee2Smrg	      if func_win32_import_lib_p "$dlprefile"; then
335597cf2ee2Smrg	        func_tr_sh "$dlprefile"
335697cf2ee2Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
335797cf2ee2Smrg	        dlprefile_dlbasename=""
335897cf2ee2Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
335997cf2ee2Smrg	          # Use subshell, to avoid clobbering current variable values
336097cf2ee2Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
336197cf2ee2Smrg	          if test -n "$dlprefile_dlname" ; then
336297cf2ee2Smrg	            func_basename "$dlprefile_dlname"
336397cf2ee2Smrg	            dlprefile_dlbasename="$func_basename_result"
336497cf2ee2Smrg	          else
336597cf2ee2Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
336697cf2ee2Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
336797cf2ee2Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
336897cf2ee2Smrg	          fi
336997cf2ee2Smrg	        fi
337097cf2ee2Smrg	        $opt_dry_run || {
337197cf2ee2Smrg	          if test -n "$dlprefile_dlbasename" ; then
337297cf2ee2Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
337397cf2ee2Smrg	          else
337497cf2ee2Smrg	            func_warning "Could not compute DLL name from $name"
337597cf2ee2Smrg	            eval '$ECHO ": $name " >> "$nlist"'
337697cf2ee2Smrg	          fi
337797cf2ee2Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
337897cf2ee2Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
337997cf2ee2Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
338097cf2ee2Smrg	        }
338197cf2ee2Smrg	      else # not an import lib
338297cf2ee2Smrg	        $opt_dry_run || {
338397cf2ee2Smrg	          eval '$ECHO ": $name " >> "$nlist"'
338497cf2ee2Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
338597cf2ee2Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
338697cf2ee2Smrg	        }
338797cf2ee2Smrg	      fi
338897cf2ee2Smrg	    ;;
338997cf2ee2Smrg	    *)
339097cf2ee2Smrg	      $opt_dry_run || {
339197cf2ee2Smrg	        eval '$ECHO ": $name " >> "$nlist"'
339297cf2ee2Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
339397cf2ee2Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
339497cf2ee2Smrg	      }
339597cf2ee2Smrg	    ;;
339697cf2ee2Smrg          esac
33976e7d3316Smrg	done
33986e7d3316Smrg
33996e7d3316Smrg	$opt_dry_run || {
34006e7d3316Smrg	  # Make sure we have at least an empty file.
34016e7d3316Smrg	  test -f "$nlist" || : > "$nlist"
34026e7d3316Smrg
34036e7d3316Smrg	  if test -n "$exclude_expsyms"; then
34046e7d3316Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
34056e7d3316Smrg	    $MV "$nlist"T "$nlist"
3406a966c04fSmrg	  fi
34076e7d3316Smrg
34086e7d3316Smrg	  # Try sorting and uniquifying the output.
34096e7d3316Smrg	  if $GREP -v "^: " < "$nlist" |
34106e7d3316Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
34116e7d3316Smrg		sort -k 3
34126e7d3316Smrg	      else
34136e7d3316Smrg		sort +2
34146e7d3316Smrg	      fi |
34156e7d3316Smrg	      uniq > "$nlist"S; then
34166e7d3316Smrg	    :
3417a966c04fSmrg	  else
34186e7d3316Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419a966c04fSmrg	  fi
3420a966c04fSmrg
34216e7d3316Smrg	  if test -f "$nlist"S; then
34226e7d3316Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423a966c04fSmrg	  else
34246e7d3316Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425a966c04fSmrg	  fi
3426a966c04fSmrg
34276e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3428a966c04fSmrg
34296e7d3316Smrg/* The mapping between symbol names and symbols.  */
34306e7d3316Smrgtypedef struct {
34316e7d3316Smrg  const char *name;
34326e7d3316Smrg  void *address;
34336e7d3316Smrg} lt_dlsymlist;
343497cf2ee2Smrgextern LT_DLSYM_CONST lt_dlsymlist
34356e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[];
343697cf2ee2SmrgLT_DLSYM_CONST lt_dlsymlist
34376e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
34386e7d3316Smrg{\
34396e7d3316Smrg  { \"$my_originator\", (void *) 0 },"
3440a966c04fSmrg
34416e7d3316Smrg	  case $need_lib_prefix in
34426e7d3316Smrg	  no)
34436e7d3316Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
34446e7d3316Smrg	    ;;
34456e7d3316Smrg	  *)
34466e7d3316Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
34476e7d3316Smrg	    ;;
34486e7d3316Smrg	  esac
34496e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
34506e7d3316Smrg  {0, (void *) 0}
34516e7d3316Smrg};
3452a966c04fSmrg
34536e7d3316Smrg/* This works around a problem in FreeBSD linker */
34546e7d3316Smrg#ifdef FREEBSD_WORKAROUND
34556e7d3316Smrgstatic const void *lt_preloaded_setup() {
34566e7d3316Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
34576e7d3316Smrg}
34586e7d3316Smrg#endif
3459a966c04fSmrg
34606e7d3316Smrg#ifdef __cplusplus
34616e7d3316Smrg}
34626e7d3316Smrg#endif\
34636e7d3316Smrg"
34646e7d3316Smrg	} # !$opt_dry_run
3465a966c04fSmrg
34666e7d3316Smrg	pic_flag_for_symtable=
34676e7d3316Smrg	case "$compile_command " in
34686e7d3316Smrg	*" -static "*) ;;
34696e7d3316Smrg	*)
34706e7d3316Smrg	  case $host in
34716e7d3316Smrg	  # compiling the symbol table file with pic_flag works around
34726e7d3316Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
34736e7d3316Smrg	  # linked before any other PIC object.  But we must not use
34746e7d3316Smrg	  # pic_flag when linking with -static.  The problem exists in
34756e7d3316Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476ac92798bSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
34776e7d3316Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
34786e7d3316Smrg	  *-*-hpux*)
34796e7d3316Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
34806e7d3316Smrg	  *)
34816e7d3316Smrg	    if test "X$my_pic_p" != Xno; then
34826e7d3316Smrg	      pic_flag_for_symtable=" $pic_flag"
34836e7d3316Smrg	    fi
34846e7d3316Smrg	    ;;
34856e7d3316Smrg	  esac
34866e7d3316Smrg	  ;;
34876e7d3316Smrg	esac
34886e7d3316Smrg	symtab_cflags=
34896e7d3316Smrg	for arg in $LTCFLAGS; do
34906e7d3316Smrg	  case $arg in
34916e7d3316Smrg	  -pie | -fpie | -fPIE) ;;
349297cf2ee2Smrg	  *) func_append symtab_cflags " $arg" ;;
34936e7d3316Smrg	  esac
34946e7d3316Smrg	done
3495a966c04fSmrg
34966e7d3316Smrg	# Now compile the dynamic symbol file.
34976e7d3316Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498a966c04fSmrg
34996e7d3316Smrg	# Clean up the generated files.
35006e7d3316Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501a966c04fSmrg
35026e7d3316Smrg	# Transform the symbol file into the correct name.
35036e7d3316Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
35046e7d3316Smrg	case $host in
35056e7d3316Smrg	*cygwin* | *mingw* | *cegcc* )
35066e7d3316Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
35076e7d3316Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35086e7d3316Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35096e7d3316Smrg	  else
35106e7d3316Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35116e7d3316Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35126e7d3316Smrg	  fi
35136e7d3316Smrg	  ;;
35146e7d3316Smrg	*)
35156e7d3316Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35166e7d3316Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35176e7d3316Smrg	  ;;
35186e7d3316Smrg	esac
35196e7d3316Smrg	;;
35206e7d3316Smrg      *)
35216e7d3316Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
35226e7d3316Smrg	;;
35236e7d3316Smrg      esac
35246e7d3316Smrg    else
35256e7d3316Smrg      # We keep going just in case the user didn't refer to
35266e7d3316Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
35276e7d3316Smrg      # really was required.
3528a966c04fSmrg
35296e7d3316Smrg      # Nullify the symbol file.
35306e7d3316Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
35316e7d3316Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
35326e7d3316Smrg    fi
35336e7d3316Smrg}
3534a966c04fSmrg
35356e7d3316Smrg# func_win32_libid arg
35366e7d3316Smrg# return the library type of file 'arg'
35376e7d3316Smrg#
35386e7d3316Smrg# Need a lot of goo to handle *both* DLLs and import libs
35396e7d3316Smrg# Has to be a shell function in order to 'eat' the argument
35406e7d3316Smrg# that is supplied when $file_magic_command is called.
35416e7d3316Smrg# Despite the name, also deal with 64 bit binaries.
35426e7d3316Smrgfunc_win32_libid ()
35436e7d3316Smrg{
35446e7d3316Smrg  $opt_debug
35456e7d3316Smrg  win32_libid_type="unknown"
35466e7d3316Smrg  win32_fileres=`file -L $1 2>/dev/null`
35476e7d3316Smrg  case $win32_fileres in
35486e7d3316Smrg  *ar\ archive\ import\ library*) # definitely import
35496e7d3316Smrg    win32_libid_type="x86 archive import"
35506e7d3316Smrg    ;;
35516e7d3316Smrg  *ar\ archive*) # could be an import, or static
35526e7d3316Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
35536e7d3316Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
35546e7d3316Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
355597cf2ee2Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
355697cf2ee2Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
35576e7d3316Smrg	$SED -n -e '
35586e7d3316Smrg	    1,100{
35596e7d3316Smrg		/ I /{
35606e7d3316Smrg		    s,.*,import,
35616e7d3316Smrg		    p
35626e7d3316Smrg		    q
35636e7d3316Smrg		}
35646e7d3316Smrg	    }'`
35656e7d3316Smrg      case $win32_nmres in
35666e7d3316Smrg      import*)  win32_libid_type="x86 archive import";;
35676e7d3316Smrg      *)        win32_libid_type="x86 archive static";;
35686e7d3316Smrg      esac
35696e7d3316Smrg    fi
35706e7d3316Smrg    ;;
35716e7d3316Smrg  *DLL*)
35726e7d3316Smrg    win32_libid_type="x86 DLL"
35736e7d3316Smrg    ;;
35746e7d3316Smrg  *executable*) # but shell scripts are "executable" too...
35756e7d3316Smrg    case $win32_fileres in
35766e7d3316Smrg    *MS\ Windows\ PE\ Intel*)
35776e7d3316Smrg      win32_libid_type="x86 DLL"
35786e7d3316Smrg      ;;
35796e7d3316Smrg    esac
35806e7d3316Smrg    ;;
35816e7d3316Smrg  esac
35826e7d3316Smrg  $ECHO "$win32_libid_type"
35836e7d3316Smrg}
3584a966c04fSmrg
358597cf2ee2Smrg# func_cygming_dll_for_implib ARG
358697cf2ee2Smrg#
358797cf2ee2Smrg# Platform-specific function to extract the
358897cf2ee2Smrg# name of the DLL associated with the specified
358997cf2ee2Smrg# import library ARG.
359097cf2ee2Smrg# Invoked by eval'ing the libtool variable
359197cf2ee2Smrg#    $sharedlib_from_linklib_cmd
359297cf2ee2Smrg# Result is available in the variable
359397cf2ee2Smrg#    $sharedlib_from_linklib_result
359497cf2ee2Smrgfunc_cygming_dll_for_implib ()
359597cf2ee2Smrg{
359697cf2ee2Smrg  $opt_debug
359797cf2ee2Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
359897cf2ee2Smrg}
359997cf2ee2Smrg
360097cf2ee2Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
360197cf2ee2Smrg#
360297cf2ee2Smrg# The is the core of a fallback implementation of a
360397cf2ee2Smrg# platform-specific function to extract the name of the
360497cf2ee2Smrg# DLL associated with the specified import library LIBNAME.
360597cf2ee2Smrg#
360697cf2ee2Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
360797cf2ee2Smrg# on the platform and compiler that created the implib.
360897cf2ee2Smrg#
360997cf2ee2Smrg# Echos the name of the DLL associated with the
361097cf2ee2Smrg# specified import library.
361197cf2ee2Smrgfunc_cygming_dll_for_implib_fallback_core ()
361297cf2ee2Smrg{
361397cf2ee2Smrg  $opt_debug
361497cf2ee2Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
361597cf2ee2Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
361697cf2ee2Smrg    $SED '/^Contents of section '"$match_literal"':/{
361797cf2ee2Smrg      # Place marker at beginning of archive member dllname section
361897cf2ee2Smrg      s/.*/====MARK====/
361997cf2ee2Smrg      p
362097cf2ee2Smrg      d
362197cf2ee2Smrg    }
362297cf2ee2Smrg    # These lines can sometimes be longer than 43 characters, but
362397cf2ee2Smrg    # are always uninteresting
362497cf2ee2Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
362597cf2ee2Smrg    /^In archive [^:]*:/d
362697cf2ee2Smrg    # Ensure marker is printed
362797cf2ee2Smrg    /^====MARK====/p
362897cf2ee2Smrg    # Remove all lines with less than 43 characters
362997cf2ee2Smrg    /^.\{43\}/!d
363097cf2ee2Smrg    # From remaining lines, remove first 43 characters
363197cf2ee2Smrg    s/^.\{43\}//' |
363297cf2ee2Smrg    $SED -n '
363397cf2ee2Smrg      # Join marker and all lines until next marker into a single line
363497cf2ee2Smrg      /^====MARK====/ b para
363597cf2ee2Smrg      H
363697cf2ee2Smrg      $ b para
363797cf2ee2Smrg      b
363897cf2ee2Smrg      :para
363997cf2ee2Smrg      x
364097cf2ee2Smrg      s/\n//g
364197cf2ee2Smrg      # Remove the marker
364297cf2ee2Smrg      s/^====MARK====//
364397cf2ee2Smrg      # Remove trailing dots and whitespace
364497cf2ee2Smrg      s/[\. \t]*$//
364597cf2ee2Smrg      # Print
364697cf2ee2Smrg      /./p' |
364797cf2ee2Smrg    # we now have a list, one entry per line, of the stringified
364897cf2ee2Smrg    # contents of the appropriate section of all members of the
364997cf2ee2Smrg    # archive which possess that section. Heuristic: eliminate
365097cf2ee2Smrg    # all those which have a first or second character that is
365197cf2ee2Smrg    # a '.' (that is, objdump's representation of an unprintable
365297cf2ee2Smrg    # character.) This should work for all archives with less than
365397cf2ee2Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
365497cf2ee2Smrg    # begins with a literal '.' or a single character followed by
365597cf2ee2Smrg    # a '.'.
365697cf2ee2Smrg    #
365797cf2ee2Smrg    # Of those that remain, print the first one.
365897cf2ee2Smrg    $SED -e '/^\./d;/^.\./d;q'
365997cf2ee2Smrg}
366097cf2ee2Smrg
366197cf2ee2Smrg# func_cygming_gnu_implib_p ARG
366297cf2ee2Smrg# This predicate returns with zero status (TRUE) if
366397cf2ee2Smrg# ARG is a GNU/binutils-style import library. Returns
366497cf2ee2Smrg# with nonzero status (FALSE) otherwise.
366597cf2ee2Smrgfunc_cygming_gnu_implib_p ()
366697cf2ee2Smrg{
366797cf2ee2Smrg  $opt_debug
366897cf2ee2Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
366997cf2ee2Smrg  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)$'`
367097cf2ee2Smrg  test -n "$func_cygming_gnu_implib_tmp"
367197cf2ee2Smrg}
367297cf2ee2Smrg
367397cf2ee2Smrg# func_cygming_ms_implib_p ARG
367497cf2ee2Smrg# This predicate returns with zero status (TRUE) if
367597cf2ee2Smrg# ARG is an MS-style import library. Returns
367697cf2ee2Smrg# with nonzero status (FALSE) otherwise.
367797cf2ee2Smrgfunc_cygming_ms_implib_p ()
367897cf2ee2Smrg{
367997cf2ee2Smrg  $opt_debug
368097cf2ee2Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
368197cf2ee2Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
368297cf2ee2Smrg  test -n "$func_cygming_ms_implib_tmp"
368397cf2ee2Smrg}
368497cf2ee2Smrg
368597cf2ee2Smrg# func_cygming_dll_for_implib_fallback ARG
368697cf2ee2Smrg# Platform-specific function to extract the
368797cf2ee2Smrg# name of the DLL associated with the specified
368897cf2ee2Smrg# import library ARG.
368997cf2ee2Smrg#
369097cf2ee2Smrg# This fallback implementation is for use when $DLLTOOL
369197cf2ee2Smrg# does not support the --identify-strict option.
369297cf2ee2Smrg# Invoked by eval'ing the libtool variable
369397cf2ee2Smrg#    $sharedlib_from_linklib_cmd
369497cf2ee2Smrg# Result is available in the variable
369597cf2ee2Smrg#    $sharedlib_from_linklib_result
369697cf2ee2Smrgfunc_cygming_dll_for_implib_fallback ()
369797cf2ee2Smrg{
369897cf2ee2Smrg  $opt_debug
369997cf2ee2Smrg  if func_cygming_gnu_implib_p "$1" ; then
370097cf2ee2Smrg    # binutils import library
370197cf2ee2Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
370297cf2ee2Smrg  elif func_cygming_ms_implib_p "$1" ; then
370397cf2ee2Smrg    # ms-generated import library
370497cf2ee2Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
370597cf2ee2Smrg  else
370697cf2ee2Smrg    # unknown
370797cf2ee2Smrg    sharedlib_from_linklib_result=""
370897cf2ee2Smrg  fi
370997cf2ee2Smrg}
3710a966c04fSmrg
3711a966c04fSmrg
37126e7d3316Smrg# func_extract_an_archive dir oldlib
37136e7d3316Smrgfunc_extract_an_archive ()
37146e7d3316Smrg{
37156e7d3316Smrg    $opt_debug
37166e7d3316Smrg    f_ex_an_ar_dir="$1"; shift
37176e7d3316Smrg    f_ex_an_ar_oldlib="$1"
37186e7d3316Smrg    if test "$lock_old_archive_extraction" = yes; then
37196e7d3316Smrg      lockfile=$f_ex_an_ar_oldlib.lock
37206e7d3316Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
37216e7d3316Smrg	func_echo "Waiting for $lockfile to be removed"
37226e7d3316Smrg	sleep 2
37236e7d3316Smrg      done
37246e7d3316Smrg    fi
37256e7d3316Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
37266e7d3316Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37276e7d3316Smrg    if test "$lock_old_archive_extraction" = yes; then
37286e7d3316Smrg      $opt_dry_run || rm -f "$lockfile"
37296e7d3316Smrg    fi
37306e7d3316Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
37316e7d3316Smrg     :
37326e7d3316Smrg    else
37336e7d3316Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
37346e7d3316Smrg    fi
37356e7d3316Smrg}
3736a966c04fSmrg
3737a966c04fSmrg
37386e7d3316Smrg# func_extract_archives gentop oldlib ...
37396e7d3316Smrgfunc_extract_archives ()
37406e7d3316Smrg{
37416e7d3316Smrg    $opt_debug
37426e7d3316Smrg    my_gentop="$1"; shift
37436e7d3316Smrg    my_oldlibs=${1+"$@"}
37446e7d3316Smrg    my_oldobjs=""
37456e7d3316Smrg    my_xlib=""
37466e7d3316Smrg    my_xabs=""
37476e7d3316Smrg    my_xdir=""
3748a966c04fSmrg
37496e7d3316Smrg    for my_xlib in $my_oldlibs; do
37506e7d3316Smrg      # Extract the objects.
37516e7d3316Smrg      case $my_xlib in
37526e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
37536e7d3316Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
37546e7d3316Smrg      esac
37556e7d3316Smrg      func_basename "$my_xlib"
37566e7d3316Smrg      my_xlib="$func_basename_result"
37576e7d3316Smrg      my_xlib_u=$my_xlib
37586e7d3316Smrg      while :; do
37596e7d3316Smrg        case " $extracted_archives " in
37606e7d3316Smrg	*" $my_xlib_u "*)
37616e7d3316Smrg	  func_arith $extracted_serial + 1
37626e7d3316Smrg	  extracted_serial=$func_arith_result
37636e7d3316Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
37646e7d3316Smrg	*) break ;;
37656e7d3316Smrg	esac
37666e7d3316Smrg      done
37676e7d3316Smrg      extracted_archives="$extracted_archives $my_xlib_u"
37686e7d3316Smrg      my_xdir="$my_gentop/$my_xlib_u"
3769a966c04fSmrg
37706e7d3316Smrg      func_mkdir_p "$my_xdir"
37716e7d3316Smrg
37726e7d3316Smrg      case $host in
37736e7d3316Smrg      *-darwin*)
37746e7d3316Smrg	func_verbose "Extracting $my_xabs"
37756e7d3316Smrg	# Do not bother doing anything if just a dry run
37766e7d3316Smrg	$opt_dry_run || {
37776e7d3316Smrg	  darwin_orig_dir=`pwd`
37786e7d3316Smrg	  cd $my_xdir || exit $?
37796e7d3316Smrg	  darwin_archive=$my_xabs
37806e7d3316Smrg	  darwin_curdir=`pwd`
37816e7d3316Smrg	  darwin_base_archive=`basename "$darwin_archive"`
37826e7d3316Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
37836e7d3316Smrg	  if test -n "$darwin_arches"; then
37846e7d3316Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
37856e7d3316Smrg	    darwin_arch=
37866e7d3316Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
37876e7d3316Smrg	    for darwin_arch in  $darwin_arches ; do
37886e7d3316Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37896e7d3316Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
37906e7d3316Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37916e7d3316Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
37926e7d3316Smrg	      cd "$darwin_curdir"
37936e7d3316Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
37946e7d3316Smrg	    done # $darwin_arches
37956e7d3316Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
37966e7d3316Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
37976e7d3316Smrg	    darwin_file=
37986e7d3316Smrg	    darwin_files=
37996e7d3316Smrg	    for darwin_file in $darwin_filelist; do
38006e7d3316Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
38016e7d3316Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
38026e7d3316Smrg	    done # $darwin_filelist
38036e7d3316Smrg	    $RM -rf unfat-$$
38046e7d3316Smrg	    cd "$darwin_orig_dir"
3805a966c04fSmrg	  else
38066e7d3316Smrg	    cd $darwin_orig_dir
38076e7d3316Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
38086e7d3316Smrg	  fi # $darwin_arches
38096e7d3316Smrg	} # !$opt_dry_run
38106e7d3316Smrg	;;
38116e7d3316Smrg      *)
38126e7d3316Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
38136e7d3316Smrg	;;
38146e7d3316Smrg      esac
38156e7d3316Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
38166e7d3316Smrg    done
3817a966c04fSmrg
38186e7d3316Smrg    func_extract_archives_result="$my_oldobjs"
38196e7d3316Smrg}
3820a966c04fSmrg
3821a966c04fSmrg
38226e7d3316Smrg# func_emit_wrapper [arg=no]
38236e7d3316Smrg#
38246e7d3316Smrg# Emit a libtool wrapper script on stdout.
38256e7d3316Smrg# Don't directly open a file because we may want to
38266e7d3316Smrg# incorporate the script contents within a cygwin/mingw
38276e7d3316Smrg# wrapper executable.  Must ONLY be called from within
38286e7d3316Smrg# func_mode_link because it depends on a number of variables
38296e7d3316Smrg# set therein.
38306e7d3316Smrg#
38316e7d3316Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
38326e7d3316Smrg# variable will take.  If 'yes', then the emitted script
38336e7d3316Smrg# will assume that the directory in which it is stored is
38346e7d3316Smrg# the $objdir directory.  This is a cygwin/mingw-specific
38356e7d3316Smrg# behavior.
38366e7d3316Smrgfunc_emit_wrapper ()
38376e7d3316Smrg{
38386e7d3316Smrg	func_emit_wrapper_arg1=${1-no}
3839a966c04fSmrg
38406e7d3316Smrg	$ECHO "\
38416e7d3316Smrg#! $SHELL
3842a966c04fSmrg
38436e7d3316Smrg# $output - temporary wrapper script for $objdir/$outputname
38446e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
38456e7d3316Smrg#
38466e7d3316Smrg# The $output program cannot be directly executed until all the libtool
38476e7d3316Smrg# libraries that it depends on are installed.
38486e7d3316Smrg#
38496e7d3316Smrg# This wrapper script should never be moved out of the build directory.
38506e7d3316Smrg# If it is, it will not operate correctly.
3851a966c04fSmrg
38526e7d3316Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
38536e7d3316Smrg# metacharacters that are still active within double-quoted strings.
38546e7d3316Smrgsed_quote_subst='$sed_quote_subst'
3855a966c04fSmrg
38566e7d3316Smrg# Be Bourne compatible
38576e7d3316Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
38586e7d3316Smrg  emulate sh
38596e7d3316Smrg  NULLCMD=:
38606e7d3316Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
38616e7d3316Smrg  # is contrary to our usage.  Disable this feature.
38626e7d3316Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
38636e7d3316Smrg  setopt NO_GLOB_SUBST
38646e7d3316Smrgelse
38656e7d3316Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
38666e7d3316Smrgfi
38676e7d3316SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
38686e7d3316SmrgDUALCASE=1; export DUALCASE # for MKS sh
3869a966c04fSmrg
38706e7d3316Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
38716e7d3316Smrg# if CDPATH is set.
38726e7d3316Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873a966c04fSmrg
38746e7d3316Smrgrelink_command=\"$relink_command\"
3875a966c04fSmrg
38766e7d3316Smrg# This environment variable determines our operation mode.
38776e7d3316Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
38786e7d3316Smrg  # install mode needs the following variables:
38796e7d3316Smrg  generated_by_libtool_version='$macro_version'
38806e7d3316Smrg  notinst_deplibs='$notinst_deplibs'
38816e7d3316Smrgelse
38826e7d3316Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
38836e7d3316Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
38846e7d3316Smrg    file=\"\$0\""
3885a966c04fSmrg
38866e7d3316Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
38876e7d3316Smrg    $ECHO "\
3888a966c04fSmrg
38896e7d3316Smrg# A function that is used when there is no print builtin or printf.
38906e7d3316Smrgfunc_fallback_echo ()
38916e7d3316Smrg{
38926e7d3316Smrg  eval 'cat <<_LTECHO_EOF
38936e7d3316Smrg\$1
38946e7d3316Smrg_LTECHO_EOF'
38956e7d3316Smrg}
38966e7d3316Smrg    ECHO=\"$qECHO\"
38976e7d3316Smrg  fi
38986e7d3316Smrg
38996e7d3316Smrg# Very basic option parsing. These options are (a) specific to
39006e7d3316Smrg# the libtool wrapper, (b) are identical between the wrapper
39016e7d3316Smrg# /script/ and the wrapper /executable/ which is used only on
39026e7d3316Smrg# windows platforms, and (c) all begin with the string "--lt-"
39036e7d3316Smrg# (application programs are unlikely to have options which match
39046e7d3316Smrg# this pattern).
39056e7d3316Smrg#
39066e7d3316Smrg# There are only two supported options: --lt-debug and
39076e7d3316Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
39086e7d3316Smrg#
39096e7d3316Smrg# The first argument to this parsing function should be the
39106e7d3316Smrg# script's $0 value, followed by "$@".
39116e7d3316Smrglt_option_debug=
39126e7d3316Smrgfunc_parse_lt_options ()
39136e7d3316Smrg{
39146e7d3316Smrg  lt_script_arg0=\$0
39156e7d3316Smrg  shift
39166e7d3316Smrg  for lt_opt
39176e7d3316Smrg  do
39186e7d3316Smrg    case \"\$lt_opt\" in
39196e7d3316Smrg    --lt-debug) lt_option_debug=1 ;;
39206e7d3316Smrg    --lt-dump-script)
39216e7d3316Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
39226e7d3316Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
39236e7d3316Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
39246e7d3316Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
39256e7d3316Smrg        exit 0
39266e7d3316Smrg      ;;
39276e7d3316Smrg    --lt-*)
39286e7d3316Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
39296e7d3316Smrg        exit 1
3930a966c04fSmrg      ;;
39316e7d3316Smrg    esac
39326e7d3316Smrg  done
3933a966c04fSmrg
39346e7d3316Smrg  # Print the debug banner immediately:
39356e7d3316Smrg  if test -n \"\$lt_option_debug\"; then
39366e7d3316Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
39376e7d3316Smrg  fi
39386e7d3316Smrg}
3939a966c04fSmrg
39406e7d3316Smrg# Used when --lt-debug. Prints its arguments to stdout
39416e7d3316Smrg# (redirection is the responsibility of the caller)
39426e7d3316Smrgfunc_lt_dump_args ()
39436e7d3316Smrg{
39446e7d3316Smrg  lt_dump_args_N=1;
39456e7d3316Smrg  for lt_arg
39466e7d3316Smrg  do
39476e7d3316Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
39486e7d3316Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
39496e7d3316Smrg  done
39506e7d3316Smrg}
3951a966c04fSmrg
39526e7d3316Smrg# Core function for launching the target application
39536e7d3316Smrgfunc_exec_program_core ()
39546e7d3316Smrg{
39556e7d3316Smrg"
39566e7d3316Smrg  case $host in
39576e7d3316Smrg  # Backslashes separate directories on plain windows
39586e7d3316Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
39596e7d3316Smrg    $ECHO "\
39606e7d3316Smrg      if test -n \"\$lt_option_debug\"; then
39616e7d3316Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
39626e7d3316Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3963a966c04fSmrg      fi
39646e7d3316Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
39656e7d3316Smrg"
39666e7d3316Smrg    ;;
3967a966c04fSmrg
39686e7d3316Smrg  *)
39696e7d3316Smrg    $ECHO "\
39706e7d3316Smrg      if test -n \"\$lt_option_debug\"; then
39716e7d3316Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
39726e7d3316Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3973a966c04fSmrg      fi
39746e7d3316Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
39756e7d3316Smrg"
39766e7d3316Smrg    ;;
39776e7d3316Smrg  esac
39786e7d3316Smrg  $ECHO "\
39796e7d3316Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
39806e7d3316Smrg      exit 1
39816e7d3316Smrg}
3982a966c04fSmrg
39836e7d3316Smrg# A function to encapsulate launching the target application
39846e7d3316Smrg# Strips options in the --lt-* namespace from \$@ and
39856e7d3316Smrg# launches target application with the remaining arguments.
39866e7d3316Smrgfunc_exec_program ()
39876e7d3316Smrg{
3988ac92798bSmrg  case \" \$* \" in
3989ac92798bSmrg  *\\ --lt-*)
3990ac92798bSmrg    for lt_wr_arg
3991ac92798bSmrg    do
3992ac92798bSmrg      case \$lt_wr_arg in
3993ac92798bSmrg      --lt-*) ;;
3994ac92798bSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995ac92798bSmrg      esac
3996ac92798bSmrg      shift
3997ac92798bSmrg    done ;;
3998ac92798bSmrg  esac
39996e7d3316Smrg  func_exec_program_core \${1+\"\$@\"}
40006e7d3316Smrg}
4001a966c04fSmrg
40026e7d3316Smrg  # Parse options
40036e7d3316Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004a966c04fSmrg
40056e7d3316Smrg  # Find the directory that this script lives in.
40066e7d3316Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
40076e7d3316Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008a966c04fSmrg
40096e7d3316Smrg  # Follow symbolic links until we get to the real thisdir.
40106e7d3316Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
40116e7d3316Smrg  while test -n \"\$file\"; do
40126e7d3316Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013a966c04fSmrg
40146e7d3316Smrg    # If there was a directory component, then change thisdir.
40156e7d3316Smrg    if test \"x\$destdir\" != \"x\$file\"; then
40166e7d3316Smrg      case \"\$destdir\" in
40176e7d3316Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
40186e7d3316Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
40196e7d3316Smrg      esac
40206e7d3316Smrg    fi
4021a966c04fSmrg
40226e7d3316Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
40236e7d3316Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
40246e7d3316Smrg  done
4025a966c04fSmrg
40266e7d3316Smrg  # Usually 'no', except on cygwin/mingw when embedded into
40276e7d3316Smrg  # the cwrapper.
40286e7d3316Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
40296e7d3316Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
40306e7d3316Smrg    # special case for '.'
40316e7d3316Smrg    if test \"\$thisdir\" = \".\"; then
40326e7d3316Smrg      thisdir=\`pwd\`
40336e7d3316Smrg    fi
40346e7d3316Smrg    # remove .libs from thisdir
40356e7d3316Smrg    case \"\$thisdir\" in
40366e7d3316Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
40376e7d3316Smrg    $objdir )   thisdir=. ;;
40386e7d3316Smrg    esac
40396e7d3316Smrg  fi
4040a966c04fSmrg
40416e7d3316Smrg  # Try to get the absolute directory name.
40426e7d3316Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
40436e7d3316Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
40446e7d3316Smrg"
4045a966c04fSmrg
40466e7d3316Smrg	if test "$fast_install" = yes; then
40476e7d3316Smrg	  $ECHO "\
40486e7d3316Smrg  program=lt-'$outputname'$exeext
40496e7d3316Smrg  progdir=\"\$thisdir/$objdir\"
4050a966c04fSmrg
40516e7d3316Smrg  if test ! -f \"\$progdir/\$program\" ||
40526e7d3316Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
40536e7d3316Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054a966c04fSmrg
40556e7d3316Smrg    file=\"\$\$-\$program\"
4056a966c04fSmrg
40576e7d3316Smrg    if test ! -d \"\$progdir\"; then
40586e7d3316Smrg      $MKDIR \"\$progdir\"
40596e7d3316Smrg    else
40606e7d3316Smrg      $RM \"\$progdir/\$file\"
40616e7d3316Smrg    fi"
4062a966c04fSmrg
40636e7d3316Smrg	  $ECHO "\
4064a966c04fSmrg
40656e7d3316Smrg    # relink executable if necessary
40666e7d3316Smrg    if test -n \"\$relink_command\"; then
40676e7d3316Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
40686e7d3316Smrg      else
40696e7d3316Smrg	$ECHO \"\$relink_command_output\" >&2
40706e7d3316Smrg	$RM \"\$progdir/\$file\"
40716e7d3316Smrg	exit 1
40726e7d3316Smrg      fi
40736e7d3316Smrg    fi
4074a966c04fSmrg
40756e7d3316Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
40766e7d3316Smrg    { $RM \"\$progdir/\$program\";
40776e7d3316Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
40786e7d3316Smrg    $RM \"\$progdir/\$file\"
40796e7d3316Smrg  fi"
40806e7d3316Smrg	else
40816e7d3316Smrg	  $ECHO "\
40826e7d3316Smrg  program='$outputname'
40836e7d3316Smrg  progdir=\"\$thisdir/$objdir\"
40846e7d3316Smrg"
40856e7d3316Smrg	fi
4086a966c04fSmrg
40876e7d3316Smrg	$ECHO "\
4088a966c04fSmrg
40896e7d3316Smrg  if test -f \"\$progdir/\$program\"; then"
4090a966c04fSmrg
409197cf2ee2Smrg	# fixup the dll searchpath if we need to.
409297cf2ee2Smrg	#
409397cf2ee2Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
409497cf2ee2Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
409597cf2ee2Smrg	# libraries must come first.
409697cf2ee2Smrg	if test -n "$dllsearchpath"; then
409797cf2ee2Smrg	  $ECHO "\
409897cf2ee2Smrg    # Add the dll search path components to the executable PATH
409997cf2ee2Smrg    PATH=$dllsearchpath:\$PATH
410097cf2ee2Smrg"
410197cf2ee2Smrg	fi
410297cf2ee2Smrg
41036e7d3316Smrg	# Export our shlibpath_var if we have one.
41046e7d3316Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
41056e7d3316Smrg	  $ECHO "\
41066e7d3316Smrg    # Add our own library path to $shlibpath_var
41076e7d3316Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108a966c04fSmrg
41096e7d3316Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
41106e7d3316Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
41116e7d3316Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112a966c04fSmrg
41136e7d3316Smrg    export $shlibpath_var
41146e7d3316Smrg"
41156e7d3316Smrg	fi
4116a966c04fSmrg
41176e7d3316Smrg	$ECHO "\
41186e7d3316Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
41196e7d3316Smrg      # Run the actual program with our arguments.
41206e7d3316Smrg      func_exec_program \${1+\"\$@\"}
41216e7d3316Smrg    fi
41226e7d3316Smrg  else
41236e7d3316Smrg    # The program doesn't exist.
41246e7d3316Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
41256e7d3316Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
41266e7d3316Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
41276e7d3316Smrg    exit 1
41286e7d3316Smrg  fi
41296e7d3316Smrgfi\
41306e7d3316Smrg"
41316e7d3316Smrg}
4132a966c04fSmrg
4133a966c04fSmrg
41346e7d3316Smrg# func_emit_cwrapperexe_src
41356e7d3316Smrg# emit the source code for a wrapper executable on stdout
41366e7d3316Smrg# Must ONLY be called from within func_mode_link because
41376e7d3316Smrg# it depends on a number of variable set therein.
41386e7d3316Smrgfunc_emit_cwrapperexe_src ()
41396e7d3316Smrg{
41406e7d3316Smrg	cat <<EOF
4141a966c04fSmrg
41426e7d3316Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
41436e7d3316Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144a966c04fSmrg
41456e7d3316Smrg   The $output program cannot be directly executed until all the libtool
41466e7d3316Smrg   libraries that it depends on are installed.
4147a966c04fSmrg
41486e7d3316Smrg   This wrapper executable should never be moved out of the build directory.
41496e7d3316Smrg   If it is, it will not operate correctly.
41506e7d3316Smrg*/
41516e7d3316SmrgEOF
41526e7d3316Smrg	    cat <<"EOF"
41536e7d3316Smrg#ifdef _MSC_VER
41546e7d3316Smrg# define _CRT_SECURE_NO_DEPRECATE 1
41556e7d3316Smrg#endif
41566e7d3316Smrg#include <stdio.h>
41576e7d3316Smrg#include <stdlib.h>
41586e7d3316Smrg#ifdef _MSC_VER
41596e7d3316Smrg# include <direct.h>
41606e7d3316Smrg# include <process.h>
41616e7d3316Smrg# include <io.h>
41626e7d3316Smrg#else
41636e7d3316Smrg# include <unistd.h>
41646e7d3316Smrg# include <stdint.h>
41656e7d3316Smrg# ifdef __CYGWIN__
41666e7d3316Smrg#  include <io.h>
41676e7d3316Smrg# endif
41686e7d3316Smrg#endif
41696e7d3316Smrg#include <malloc.h>
41706e7d3316Smrg#include <stdarg.h>
41716e7d3316Smrg#include <assert.h>
41726e7d3316Smrg#include <string.h>
41736e7d3316Smrg#include <ctype.h>
41746e7d3316Smrg#include <errno.h>
41756e7d3316Smrg#include <fcntl.h>
41766e7d3316Smrg#include <sys/stat.h>
4177a966c04fSmrg
41786e7d3316Smrg/* declarations of non-ANSI functions */
41796e7d3316Smrg#if defined(__MINGW32__)
41806e7d3316Smrg# ifdef __STRICT_ANSI__
41816e7d3316Smrgint _putenv (const char *);
41826e7d3316Smrg# endif
41836e7d3316Smrg#elif defined(__CYGWIN__)
41846e7d3316Smrg# ifdef __STRICT_ANSI__
41856e7d3316Smrgchar *realpath (const char *, char *);
41866e7d3316Smrgint putenv (char *);
41876e7d3316Smrgint setenv (const char *, const char *, int);
41886e7d3316Smrg# endif
41896e7d3316Smrg/* #elif defined (other platforms) ... */
41906e7d3316Smrg#endif
4191a966c04fSmrg
41926e7d3316Smrg/* portability defines, excluding path handling macros */
41936e7d3316Smrg#if defined(_MSC_VER)
41946e7d3316Smrg# define setmode _setmode
41956e7d3316Smrg# define stat    _stat
41966e7d3316Smrg# define chmod   _chmod
41976e7d3316Smrg# define getcwd  _getcwd
41986e7d3316Smrg# define putenv  _putenv
41996e7d3316Smrg# define S_IXUSR _S_IEXEC
42006e7d3316Smrg# ifndef _INTPTR_T_DEFINED
42016e7d3316Smrg#  define _INTPTR_T_DEFINED
42026e7d3316Smrg#  define intptr_t int
42036e7d3316Smrg# endif
42046e7d3316Smrg#elif defined(__MINGW32__)
42056e7d3316Smrg# define setmode _setmode
42066e7d3316Smrg# define stat    _stat
42076e7d3316Smrg# define chmod   _chmod
42086e7d3316Smrg# define getcwd  _getcwd
42096e7d3316Smrg# define putenv  _putenv
42106e7d3316Smrg#elif defined(__CYGWIN__)
42116e7d3316Smrg# define HAVE_SETENV
42126e7d3316Smrg# define FOPEN_WB "wb"
42136e7d3316Smrg/* #elif defined (other platforms) ... */
42146e7d3316Smrg#endif
4215a966c04fSmrg
42166e7d3316Smrg#if defined(PATH_MAX)
42176e7d3316Smrg# define LT_PATHMAX PATH_MAX
42186e7d3316Smrg#elif defined(MAXPATHLEN)
42196e7d3316Smrg# define LT_PATHMAX MAXPATHLEN
42206e7d3316Smrg#else
42216e7d3316Smrg# define LT_PATHMAX 1024
42226e7d3316Smrg#endif
4223a966c04fSmrg
42246e7d3316Smrg#ifndef S_IXOTH
42256e7d3316Smrg# define S_IXOTH 0
42266e7d3316Smrg#endif
42276e7d3316Smrg#ifndef S_IXGRP
42286e7d3316Smrg# define S_IXGRP 0
42296e7d3316Smrg#endif
4230a966c04fSmrg
42316e7d3316Smrg/* path handling portability macros */
42326e7d3316Smrg#ifndef DIR_SEPARATOR
42336e7d3316Smrg# define DIR_SEPARATOR '/'
42346e7d3316Smrg# define PATH_SEPARATOR ':'
42356e7d3316Smrg#endif
4236a966c04fSmrg
42376e7d3316Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
42386e7d3316Smrg  defined (__OS2__)
42396e7d3316Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
42406e7d3316Smrg# define FOPEN_WB "wb"
42416e7d3316Smrg# ifndef DIR_SEPARATOR_2
42426e7d3316Smrg#  define DIR_SEPARATOR_2 '\\'
42436e7d3316Smrg# endif
42446e7d3316Smrg# ifndef PATH_SEPARATOR_2
42456e7d3316Smrg#  define PATH_SEPARATOR_2 ';'
42466e7d3316Smrg# endif
42476e7d3316Smrg#endif
4248a966c04fSmrg
42496e7d3316Smrg#ifndef DIR_SEPARATOR_2
42506e7d3316Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
42516e7d3316Smrg#else /* DIR_SEPARATOR_2 */
42526e7d3316Smrg# define IS_DIR_SEPARATOR(ch) \
42536e7d3316Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
42546e7d3316Smrg#endif /* DIR_SEPARATOR_2 */
4255a966c04fSmrg
42566e7d3316Smrg#ifndef PATH_SEPARATOR_2
42576e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
42586e7d3316Smrg#else /* PATH_SEPARATOR_2 */
42596e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
42606e7d3316Smrg#endif /* PATH_SEPARATOR_2 */
42616e7d3316Smrg
42626e7d3316Smrg#ifndef FOPEN_WB
42636e7d3316Smrg# define FOPEN_WB "w"
42646e7d3316Smrg#endif
42656e7d3316Smrg#ifndef _O_BINARY
42666e7d3316Smrg# define _O_BINARY 0
42676e7d3316Smrg#endif
42686e7d3316Smrg
42696e7d3316Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
42706e7d3316Smrg#define XFREE(stale) do { \
42716e7d3316Smrg  if (stale) { free ((void *) stale); stale = 0; } \
42726e7d3316Smrg} while (0)
42736e7d3316Smrg
42746e7d3316Smrg#if defined(LT_DEBUGWRAPPER)
42756e7d3316Smrgstatic int lt_debug = 1;
42766e7d3316Smrg#else
42776e7d3316Smrgstatic int lt_debug = 0;
42786e7d3316Smrg#endif
42796e7d3316Smrg
42806e7d3316Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
42816e7d3316Smrg
42826e7d3316Smrgvoid *xmalloc (size_t num);
42836e7d3316Smrgchar *xstrdup (const char *string);
42846e7d3316Smrgconst char *base_name (const char *name);
42856e7d3316Smrgchar *find_executable (const char *wrapper);
42866e7d3316Smrgchar *chase_symlinks (const char *pathspec);
42876e7d3316Smrgint make_executable (const char *path);
42886e7d3316Smrgint check_executable (const char *path);
42896e7d3316Smrgchar *strendzap (char *str, const char *pat);
42906e7d3316Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
42916e7d3316Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
42926e7d3316Smrgstatic const char *nonnull (const char *s);
42936e7d3316Smrgstatic const char *nonempty (const char *s);
42946e7d3316Smrgvoid lt_setenv (const char *name, const char *value);
42956e7d3316Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
42966e7d3316Smrgvoid lt_update_exe_path (const char *name, const char *value);
42976e7d3316Smrgvoid lt_update_lib_path (const char *name, const char *value);
42986e7d3316Smrgchar **prepare_spawn (char **argv);
42996e7d3316Smrgvoid lt_dump_script (FILE *f);
43006e7d3316SmrgEOF
43016e7d3316Smrg
43026e7d3316Smrg	    cat <<EOF
430397cf2ee2Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
43046e7d3316Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
43056e7d3316SmrgEOF
43066e7d3316Smrg
43076e7d3316Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
430897cf2ee2Smrg              func_to_host_path "$temp_rpath"
43096e7d3316Smrg	      cat <<EOF
431097cf2ee2Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311a966c04fSmrgEOF
4312a966c04fSmrg	    else
43136e7d3316Smrg	      cat <<"EOF"
43146e7d3316Smrgconst char * LIB_PATH_VALUE   = "";
43156e7d3316SmrgEOF
4316a966c04fSmrg	    fi
43176e7d3316Smrg
43186e7d3316Smrg	    if test -n "$dllsearchpath"; then
431997cf2ee2Smrg              func_to_host_path "$dllsearchpath:"
43206e7d3316Smrg	      cat <<EOF
43216e7d3316Smrgconst char * EXE_PATH_VARNAME = "PATH";
432297cf2ee2Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
43236e7d3316SmrgEOF
4324a966c04fSmrg	    else
43256e7d3316Smrg	      cat <<"EOF"
43266e7d3316Smrgconst char * EXE_PATH_VARNAME = "";
43276e7d3316Smrgconst char * EXE_PATH_VALUE   = "";
43286e7d3316SmrgEOF
4329a966c04fSmrg	    fi
43306e7d3316Smrg
43316e7d3316Smrg	    if test "$fast_install" = yes; then
43326e7d3316Smrg	      cat <<EOF
43336e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
43346e7d3316SmrgEOF
4335a966c04fSmrg	    else
43366e7d3316Smrg	      cat <<EOF
43376e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
43386e7d3316SmrgEOF
4339a966c04fSmrg	    fi
4340a966c04fSmrg
4341a966c04fSmrg
43426e7d3316Smrg	    cat <<"EOF"
4343a966c04fSmrg
43446e7d3316Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345a966c04fSmrg
43466e7d3316Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
43476e7d3316Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
43486e7d3316Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349a966c04fSmrg
43506e7d3316Smrgint
43516e7d3316Smrgmain (int argc, char *argv[])
43526e7d3316Smrg{
43536e7d3316Smrg  char **newargz;
43546e7d3316Smrg  int  newargc;
43556e7d3316Smrg  char *tmp_pathspec;
43566e7d3316Smrg  char *actual_cwrapper_path;
43576e7d3316Smrg  char *actual_cwrapper_name;
43586e7d3316Smrg  char *target_name;
43596e7d3316Smrg  char *lt_argv_zero;
43606e7d3316Smrg  intptr_t rval = 127;
4361a966c04fSmrg
43626e7d3316Smrg  int i;
4363a966c04fSmrg
43646e7d3316Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
43656e7d3316Smrg  newargz = XMALLOC (char *, argc + 1);
4366a966c04fSmrg
43676e7d3316Smrg  /* very simple arg parsing; don't want to rely on getopt
43686e7d3316Smrg   * also, copy all non cwrapper options to newargz, except
43696e7d3316Smrg   * argz[0], which is handled differently
43706e7d3316Smrg   */
43716e7d3316Smrg  newargc=0;
43726e7d3316Smrg  for (i = 1; i < argc; i++)
43736e7d3316Smrg    {
43746e7d3316Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
43756e7d3316Smrg	{
43766e7d3316SmrgEOF
43776e7d3316Smrg	    case "$host" in
43786e7d3316Smrg	      *mingw* | *cygwin* )
43796e7d3316Smrg		# make stdout use "unix" line endings
43806e7d3316Smrg		echo "          setmode(1,_O_BINARY);"
43816e7d3316Smrg		;;
43822e2dd055Smrg	      esac
4383a966c04fSmrg
43846e7d3316Smrg	    cat <<"EOF"
43856e7d3316Smrg	  lt_dump_script (stdout);
43866e7d3316Smrg	  return 0;
43876e7d3316Smrg	}
43886e7d3316Smrg      if (strcmp (argv[i], debug_opt) == 0)
43896e7d3316Smrg	{
43906e7d3316Smrg          lt_debug = 1;
43916e7d3316Smrg          continue;
43926e7d3316Smrg	}
43936e7d3316Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
43946e7d3316Smrg        {
43956e7d3316Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
43966e7d3316Smrg             namespace, but it is not one of the ones we know about and
43976e7d3316Smrg             have already dealt with, above (inluding dump-script), then
43986e7d3316Smrg             report an error. Otherwise, targets might begin to believe
43996e7d3316Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
44006e7d3316Smrg             namespace. The first time any user complains about this, we'll
44016e7d3316Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
44026e7d3316Smrg             or a configure.ac-settable value.
44036e7d3316Smrg           */
44046e7d3316Smrg          lt_fatal (__FILE__, __LINE__,
44056e7d3316Smrg		    "unrecognized %s option: '%s'",
44066e7d3316Smrg                    ltwrapper_option_prefix, argv[i]);
44076e7d3316Smrg        }
44086e7d3316Smrg      /* otherwise ... */
44096e7d3316Smrg      newargz[++newargc] = xstrdup (argv[i]);
44106e7d3316Smrg    }
44116e7d3316Smrg  newargz[++newargc] = NULL;
4412a966c04fSmrg
44136e7d3316SmrgEOF
44146e7d3316Smrg	    cat <<EOF
44156e7d3316Smrg  /* The GNU banner must be the first non-error debug message */
44166e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
44176e7d3316SmrgEOF
44186e7d3316Smrg	    cat <<"EOF"
44196e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
44206e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
44216e7d3316Smrg
44226e7d3316Smrg  tmp_pathspec = find_executable (argv[0]);
44236e7d3316Smrg  if (tmp_pathspec == NULL)
44246e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
44256e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
44266e7d3316Smrg                  "(main) found exe (before symlink chase) at: %s\n",
44276e7d3316Smrg		  tmp_pathspec);
44286e7d3316Smrg
44296e7d3316Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
44306e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
44316e7d3316Smrg                  "(main) found exe (after symlink chase) at: %s\n",
44326e7d3316Smrg		  actual_cwrapper_path);
44336e7d3316Smrg  XFREE (tmp_pathspec);
44346e7d3316Smrg
44356e7d3316Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
44366e7d3316Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
44376e7d3316Smrg
44386e7d3316Smrg  /* wrapper name transforms */
44396e7d3316Smrg  strendzap (actual_cwrapper_name, ".exe");
44406e7d3316Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
44416e7d3316Smrg  XFREE (actual_cwrapper_name);
44426e7d3316Smrg  actual_cwrapper_name = tmp_pathspec;
44436e7d3316Smrg  tmp_pathspec = 0;
44446e7d3316Smrg
44456e7d3316Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
44466e7d3316Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
44476e7d3316Smrg  strendzap (target_name, ".exe");
44486e7d3316Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
44496e7d3316Smrg  XFREE (target_name);
44506e7d3316Smrg  target_name = tmp_pathspec;
44516e7d3316Smrg  tmp_pathspec = 0;
44526e7d3316Smrg
44536e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
44546e7d3316Smrg		  "(main) libtool target name: %s\n",
44556e7d3316Smrg		  target_name);
44566e7d3316SmrgEOF
4457a966c04fSmrg
44586e7d3316Smrg	    cat <<EOF
44596e7d3316Smrg  newargz[0] =
44606e7d3316Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
44616e7d3316Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
44626e7d3316Smrg  strcpy (newargz[0], actual_cwrapper_path);
44636e7d3316Smrg  strcat (newargz[0], "$objdir");
44646e7d3316Smrg  strcat (newargz[0], "/");
44656e7d3316SmrgEOF
4466a966c04fSmrg
44676e7d3316Smrg	    cat <<"EOF"
44686e7d3316Smrg  /* stop here, and copy so we don't have to do this twice */
44696e7d3316Smrg  tmp_pathspec = xstrdup (newargz[0]);
4470a966c04fSmrg
44716e7d3316Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
44726e7d3316Smrg  strcat (newargz[0], actual_cwrapper_name);
4473a966c04fSmrg
44746e7d3316Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
44756e7d3316Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
44766e7d3316Smrg  XFREE (tmp_pathspec);
44776e7d3316Smrg  tmp_pathspec = NULL;
44786e7d3316SmrgEOF
4479a966c04fSmrg
44806e7d3316Smrg	    case $host_os in
44816e7d3316Smrg	      mingw*)
44826e7d3316Smrg	    cat <<"EOF"
44836e7d3316Smrg  {
44846e7d3316Smrg    char* p;
44856e7d3316Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
44866e7d3316Smrg      {
44876e7d3316Smrg	*p = '/';
44886e7d3316Smrg      }
44896e7d3316Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
44906e7d3316Smrg      {
44916e7d3316Smrg	*p = '/';
44926e7d3316Smrg      }
44936e7d3316Smrg  }
44946e7d3316SmrgEOF
44956e7d3316Smrg	    ;;
44966e7d3316Smrg	    esac
4497a966c04fSmrg
44986e7d3316Smrg	    cat <<"EOF"
44996e7d3316Smrg  XFREE (target_name);
45006e7d3316Smrg  XFREE (actual_cwrapper_path);
45016e7d3316Smrg  XFREE (actual_cwrapper_name);
4502a966c04fSmrg
45036e7d3316Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
45046e7d3316Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
450597cf2ee2Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
450697cf2ee2Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
450797cf2ee2Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
450897cf2ee2Smrg     libraries must come first. */
45096e7d3316Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
451097cf2ee2Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511a966c04fSmrg
45126e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
45136e7d3316Smrg		  nonnull (lt_argv_zero));
45146e7d3316Smrg  for (i = 0; i < newargc; i++)
45156e7d3316Smrg    {
45166e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
45176e7d3316Smrg		      i, nonnull (newargz[i]));
45186e7d3316Smrg    }
4519a966c04fSmrg
45206e7d3316SmrgEOF
4521a966c04fSmrg
45226e7d3316Smrg	    case $host_os in
45236e7d3316Smrg	      mingw*)
45246e7d3316Smrg		cat <<"EOF"
45256e7d3316Smrg  /* execv doesn't actually work on mingw as expected on unix */
45266e7d3316Smrg  newargz = prepare_spawn (newargz);
45276e7d3316Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
45286e7d3316Smrg  if (rval == -1)
45296e7d3316Smrg    {
45306e7d3316Smrg      /* failed to start process */
45316e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__,
45326e7d3316Smrg		      "(main) failed to launch target \"%s\": %s\n",
45336e7d3316Smrg		      lt_argv_zero, nonnull (strerror (errno)));
45346e7d3316Smrg      return 127;
45356e7d3316Smrg    }
45366e7d3316Smrg  return rval;
45376e7d3316SmrgEOF
45386e7d3316Smrg		;;
45396e7d3316Smrg	      *)
45406e7d3316Smrg		cat <<"EOF"
45416e7d3316Smrg  execv (lt_argv_zero, newargz);
45426e7d3316Smrg  return rval; /* =127, but avoids unused variable warning */
45436e7d3316SmrgEOF
45446e7d3316Smrg		;;
45456e7d3316Smrg	    esac
4546a966c04fSmrg
45476e7d3316Smrg	    cat <<"EOF"
45486e7d3316Smrg}
4549a966c04fSmrg
45506e7d3316Smrgvoid *
45516e7d3316Smrgxmalloc (size_t num)
45526e7d3316Smrg{
45536e7d3316Smrg  void *p = (void *) malloc (num);
45546e7d3316Smrg  if (!p)
45556e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556a966c04fSmrg
45576e7d3316Smrg  return p;
45586e7d3316Smrg}
4559a966c04fSmrg
45606e7d3316Smrgchar *
45616e7d3316Smrgxstrdup (const char *string)
45626e7d3316Smrg{
45636e7d3316Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
45646e7d3316Smrg			  string) : NULL;
45656e7d3316Smrg}
4566a966c04fSmrg
45676e7d3316Smrgconst char *
45686e7d3316Smrgbase_name (const char *name)
45696e7d3316Smrg{
45706e7d3316Smrg  const char *base;
4571a966c04fSmrg
45726e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
45736e7d3316Smrg  /* Skip over the disk name in MSDOS pathnames. */
45746e7d3316Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
45756e7d3316Smrg    name += 2;
45766e7d3316Smrg#endif
4577a966c04fSmrg
45786e7d3316Smrg  for (base = name; *name; name++)
45796e7d3316Smrg    if (IS_DIR_SEPARATOR (*name))
45806e7d3316Smrg      base = name + 1;
45816e7d3316Smrg  return base;
45826e7d3316Smrg}
4583a966c04fSmrg
45846e7d3316Smrgint
45856e7d3316Smrgcheck_executable (const char *path)
45866e7d3316Smrg{
45876e7d3316Smrg  struct stat st;
4588a966c04fSmrg
45896e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
45906e7d3316Smrg                  nonempty (path));
45916e7d3316Smrg  if ((!path) || (!*path))
45926e7d3316Smrg    return 0;
4593a966c04fSmrg
45946e7d3316Smrg  if ((stat (path, &st) >= 0)
45956e7d3316Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
45966e7d3316Smrg    return 1;
45976e7d3316Smrg  else
45986e7d3316Smrg    return 0;
45996e7d3316Smrg}
4600a966c04fSmrg
46016e7d3316Smrgint
46026e7d3316Smrgmake_executable (const char *path)
46036e7d3316Smrg{
46046e7d3316Smrg  int rval = 0;
46056e7d3316Smrg  struct stat st;
4606a966c04fSmrg
46076e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
46086e7d3316Smrg                  nonempty (path));
46096e7d3316Smrg  if ((!path) || (!*path))
46106e7d3316Smrg    return 0;
4611a966c04fSmrg
46126e7d3316Smrg  if (stat (path, &st) >= 0)
46136e7d3316Smrg    {
46146e7d3316Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
46156e7d3316Smrg    }
46166e7d3316Smrg  return rval;
46176e7d3316Smrg}
4618a966c04fSmrg
46196e7d3316Smrg/* Searches for the full path of the wrapper.  Returns
46206e7d3316Smrg   newly allocated full path name if found, NULL otherwise
46216e7d3316Smrg   Does not chase symlinks, even on platforms that support them.
46226e7d3316Smrg*/
46236e7d3316Smrgchar *
46246e7d3316Smrgfind_executable (const char *wrapper)
46256e7d3316Smrg{
46266e7d3316Smrg  int has_slash = 0;
46276e7d3316Smrg  const char *p;
46286e7d3316Smrg  const char *p_next;
46296e7d3316Smrg  /* static buffer for getcwd */
46306e7d3316Smrg  char tmp[LT_PATHMAX + 1];
46316e7d3316Smrg  int tmp_len;
46326e7d3316Smrg  char *concat_name;
4633a966c04fSmrg
46346e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
46356e7d3316Smrg                  nonempty (wrapper));
4636a966c04fSmrg
46376e7d3316Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
46386e7d3316Smrg    return NULL;
4639a966c04fSmrg
46406e7d3316Smrg  /* Absolute path? */
46416e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
46426e7d3316Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
46436e7d3316Smrg    {
46446e7d3316Smrg      concat_name = xstrdup (wrapper);
46456e7d3316Smrg      if (check_executable (concat_name))
46466e7d3316Smrg	return concat_name;
46476e7d3316Smrg      XFREE (concat_name);
46486e7d3316Smrg    }
46496e7d3316Smrg  else
46506e7d3316Smrg    {
46516e7d3316Smrg#endif
46526e7d3316Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
46536e7d3316Smrg	{
46546e7d3316Smrg	  concat_name = xstrdup (wrapper);
46556e7d3316Smrg	  if (check_executable (concat_name))
46566e7d3316Smrg	    return concat_name;
46576e7d3316Smrg	  XFREE (concat_name);
46586e7d3316Smrg	}
46596e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
46606e7d3316Smrg    }
46616e7d3316Smrg#endif
4662a966c04fSmrg
46636e7d3316Smrg  for (p = wrapper; *p; p++)
46646e7d3316Smrg    if (*p == '/')
46656e7d3316Smrg      {
46666e7d3316Smrg	has_slash = 1;
46676e7d3316Smrg	break;
46686e7d3316Smrg      }
46696e7d3316Smrg  if (!has_slash)
46706e7d3316Smrg    {
46716e7d3316Smrg      /* no slashes; search PATH */
46726e7d3316Smrg      const char *path = getenv ("PATH");
46736e7d3316Smrg      if (path != NULL)
46746e7d3316Smrg	{
46756e7d3316Smrg	  for (p = path; *p; p = p_next)
46766e7d3316Smrg	    {
46776e7d3316Smrg	      const char *q;
46786e7d3316Smrg	      size_t p_len;
46796e7d3316Smrg	      for (q = p; *q; q++)
46806e7d3316Smrg		if (IS_PATH_SEPARATOR (*q))
46816e7d3316Smrg		  break;
46826e7d3316Smrg	      p_len = q - p;
46836e7d3316Smrg	      p_next = (*q == '\0' ? q : q + 1);
46846e7d3316Smrg	      if (p_len == 0)
46856e7d3316Smrg		{
46866e7d3316Smrg		  /* empty path: current directory */
46876e7d3316Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
46886e7d3316Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
46896e7d3316Smrg                              nonnull (strerror (errno)));
46906e7d3316Smrg		  tmp_len = strlen (tmp);
46916e7d3316Smrg		  concat_name =
46926e7d3316Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
46936e7d3316Smrg		  memcpy (concat_name, tmp, tmp_len);
46946e7d3316Smrg		  concat_name[tmp_len] = '/';
46956e7d3316Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
46966e7d3316Smrg		}
46976e7d3316Smrg	      else
46986e7d3316Smrg		{
46996e7d3316Smrg		  concat_name =
47006e7d3316Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
47016e7d3316Smrg		  memcpy (concat_name, p, p_len);
47026e7d3316Smrg		  concat_name[p_len] = '/';
47036e7d3316Smrg		  strcpy (concat_name + p_len + 1, wrapper);
47046e7d3316Smrg		}
47056e7d3316Smrg	      if (check_executable (concat_name))
47066e7d3316Smrg		return concat_name;
47076e7d3316Smrg	      XFREE (concat_name);
47086e7d3316Smrg	    }
47096e7d3316Smrg	}
47106e7d3316Smrg      /* not found in PATH; assume curdir */
47116e7d3316Smrg    }
47126e7d3316Smrg  /* Relative path | not found in path: prepend cwd */
47136e7d3316Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
47146e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
47156e7d3316Smrg              nonnull (strerror (errno)));
47166e7d3316Smrg  tmp_len = strlen (tmp);
47176e7d3316Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
47186e7d3316Smrg  memcpy (concat_name, tmp, tmp_len);
47196e7d3316Smrg  concat_name[tmp_len] = '/';
47206e7d3316Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4721a966c04fSmrg
47226e7d3316Smrg  if (check_executable (concat_name))
47236e7d3316Smrg    return concat_name;
47246e7d3316Smrg  XFREE (concat_name);
47256e7d3316Smrg  return NULL;
47266e7d3316Smrg}
4727a966c04fSmrg
47286e7d3316Smrgchar *
47296e7d3316Smrgchase_symlinks (const char *pathspec)
47306e7d3316Smrg{
47316e7d3316Smrg#ifndef S_ISLNK
47326e7d3316Smrg  return xstrdup (pathspec);
47336e7d3316Smrg#else
47346e7d3316Smrg  char buf[LT_PATHMAX];
47356e7d3316Smrg  struct stat s;
47366e7d3316Smrg  char *tmp_pathspec = xstrdup (pathspec);
47376e7d3316Smrg  char *p;
47386e7d3316Smrg  int has_symlinks = 0;
47396e7d3316Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
47406e7d3316Smrg    {
47416e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__,
47426e7d3316Smrg		      "checking path component for symlinks: %s\n",
47436e7d3316Smrg		      tmp_pathspec);
47446e7d3316Smrg      if (lstat (tmp_pathspec, &s) == 0)
47456e7d3316Smrg	{
47466e7d3316Smrg	  if (S_ISLNK (s.st_mode) != 0)
47476e7d3316Smrg	    {
47486e7d3316Smrg	      has_symlinks = 1;
47496e7d3316Smrg	      break;
47506e7d3316Smrg	    }
4751a966c04fSmrg
47526e7d3316Smrg	  /* search backwards for last DIR_SEPARATOR */
47536e7d3316Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
47546e7d3316Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
47556e7d3316Smrg	    p--;
47566e7d3316Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
47576e7d3316Smrg	    {
47586e7d3316Smrg	      /* no more DIR_SEPARATORS left */
47596e7d3316Smrg	      break;
47606e7d3316Smrg	    }
47616e7d3316Smrg	  *p = '\0';
47626e7d3316Smrg	}
47636e7d3316Smrg      else
47646e7d3316Smrg	{
47656e7d3316Smrg	  lt_fatal (__FILE__, __LINE__,
47666e7d3316Smrg		    "error accessing file \"%s\": %s",
47676e7d3316Smrg		    tmp_pathspec, nonnull (strerror (errno)));
47686e7d3316Smrg	}
47696e7d3316Smrg    }
47706e7d3316Smrg  XFREE (tmp_pathspec);
4771a966c04fSmrg
47726e7d3316Smrg  if (!has_symlinks)
47736e7d3316Smrg    {
47746e7d3316Smrg      return xstrdup (pathspec);
47756e7d3316Smrg    }
4776a966c04fSmrg
47776e7d3316Smrg  tmp_pathspec = realpath (pathspec, buf);
47786e7d3316Smrg  if (tmp_pathspec == 0)
47796e7d3316Smrg    {
47806e7d3316Smrg      lt_fatal (__FILE__, __LINE__,
47816e7d3316Smrg		"could not follow symlinks for %s", pathspec);
47826e7d3316Smrg    }
47836e7d3316Smrg  return xstrdup (tmp_pathspec);
47846e7d3316Smrg#endif
47856e7d3316Smrg}
4786a966c04fSmrg
47876e7d3316Smrgchar *
47886e7d3316Smrgstrendzap (char *str, const char *pat)
47896e7d3316Smrg{
47906e7d3316Smrg  size_t len, patlen;
4791a966c04fSmrg
47926e7d3316Smrg  assert (str != NULL);
47936e7d3316Smrg  assert (pat != NULL);
4794a966c04fSmrg
47956e7d3316Smrg  len = strlen (str);
47966e7d3316Smrg  patlen = strlen (pat);
4797a966c04fSmrg
47986e7d3316Smrg  if (patlen <= len)
47996e7d3316Smrg    {
48006e7d3316Smrg      str += len - patlen;
48016e7d3316Smrg      if (strcmp (str, pat) == 0)
48026e7d3316Smrg	*str = '\0';
48036e7d3316Smrg    }
48046e7d3316Smrg  return str;
48056e7d3316Smrg}
4806a966c04fSmrg
48076e7d3316Smrgvoid
48086e7d3316Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
48096e7d3316Smrg{
48106e7d3316Smrg  va_list args;
48116e7d3316Smrg  if (lt_debug)
48126e7d3316Smrg    {
48136e7d3316Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
48146e7d3316Smrg      va_start (args, fmt);
48156e7d3316Smrg      (void) vfprintf (stderr, fmt, args);
48166e7d3316Smrg      va_end (args);
48176e7d3316Smrg    }
48186e7d3316Smrg}
4819a966c04fSmrg
48206e7d3316Smrgstatic void
48216e7d3316Smrglt_error_core (int exit_status, const char *file,
48226e7d3316Smrg	       int line, const char *mode,
48236e7d3316Smrg	       const char *message, va_list ap)
48246e7d3316Smrg{
48256e7d3316Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
48266e7d3316Smrg  vfprintf (stderr, message, ap);
48276e7d3316Smrg  fprintf (stderr, ".\n");
4828a966c04fSmrg
48296e7d3316Smrg  if (exit_status >= 0)
48306e7d3316Smrg    exit (exit_status);
48316e7d3316Smrg}
4832a966c04fSmrg
48336e7d3316Smrgvoid
48346e7d3316Smrglt_fatal (const char *file, int line, const char *message, ...)
48356e7d3316Smrg{
48366e7d3316Smrg  va_list ap;
48376e7d3316Smrg  va_start (ap, message);
48386e7d3316Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
48396e7d3316Smrg  va_end (ap);
48406e7d3316Smrg}
4841a966c04fSmrg
48426e7d3316Smrgstatic const char *
48436e7d3316Smrgnonnull (const char *s)
48446e7d3316Smrg{
48456e7d3316Smrg  return s ? s : "(null)";
48466e7d3316Smrg}
4847a966c04fSmrg
48486e7d3316Smrgstatic const char *
48496e7d3316Smrgnonempty (const char *s)
48506e7d3316Smrg{
48516e7d3316Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
48526e7d3316Smrg}
4853a966c04fSmrg
48546e7d3316Smrgvoid
48556e7d3316Smrglt_setenv (const char *name, const char *value)
48566e7d3316Smrg{
48576e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
48586e7d3316Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
48596e7d3316Smrg                  nonnull (name), nonnull (value));
48606e7d3316Smrg  {
48616e7d3316Smrg#ifdef HAVE_SETENV
48626e7d3316Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
48636e7d3316Smrg    char *str = xstrdup (value);
48646e7d3316Smrg    setenv (name, str, 1);
48656e7d3316Smrg#else
48666e7d3316Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
48676e7d3316Smrg    char *str = XMALLOC (char, len);
48686e7d3316Smrg    sprintf (str, "%s=%s", name, value);
48696e7d3316Smrg    if (putenv (str) != EXIT_SUCCESS)
48706e7d3316Smrg      {
48716e7d3316Smrg        XFREE (str);
48726e7d3316Smrg      }
48736e7d3316Smrg#endif
48746e7d3316Smrg  }
48756e7d3316Smrg}
4876a966c04fSmrg
48776e7d3316Smrgchar *
48786e7d3316Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
48796e7d3316Smrg{
48806e7d3316Smrg  char *new_value;
48816e7d3316Smrg  if (orig_value && *orig_value)
48826e7d3316Smrg    {
48836e7d3316Smrg      int orig_value_len = strlen (orig_value);
48846e7d3316Smrg      int add_len = strlen (add);
48856e7d3316Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
48866e7d3316Smrg      if (to_end)
48876e7d3316Smrg        {
48886e7d3316Smrg          strcpy (new_value, orig_value);
48896e7d3316Smrg          strcpy (new_value + orig_value_len, add);
48906e7d3316Smrg        }
48916e7d3316Smrg      else
48926e7d3316Smrg        {
48936e7d3316Smrg          strcpy (new_value, add);
48946e7d3316Smrg          strcpy (new_value + add_len, orig_value);
48956e7d3316Smrg        }
48966e7d3316Smrg    }
48976e7d3316Smrg  else
48986e7d3316Smrg    {
48996e7d3316Smrg      new_value = xstrdup (add);
49006e7d3316Smrg    }
49016e7d3316Smrg  return new_value;
49026e7d3316Smrg}
4903a966c04fSmrg
49046e7d3316Smrgvoid
49056e7d3316Smrglt_update_exe_path (const char *name, const char *value)
49066e7d3316Smrg{
49076e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
49086e7d3316Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
49096e7d3316Smrg                  nonnull (name), nonnull (value));
4910a966c04fSmrg
49116e7d3316Smrg  if (name && *name && value && *value)
49126e7d3316Smrg    {
49136e7d3316Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
49146e7d3316Smrg      /* some systems can't cope with a ':'-terminated path #' */
49156e7d3316Smrg      int len = strlen (new_value);
49166e7d3316Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
49176e7d3316Smrg        {
49186e7d3316Smrg          new_value[len-1] = '\0';
49196e7d3316Smrg        }
49206e7d3316Smrg      lt_setenv (name, new_value);
49216e7d3316Smrg      XFREE (new_value);
49226e7d3316Smrg    }
49236e7d3316Smrg}
4924a966c04fSmrg
49256e7d3316Smrgvoid
49266e7d3316Smrglt_update_lib_path (const char *name, const char *value)
49276e7d3316Smrg{
49286e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
49296e7d3316Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
49306e7d3316Smrg                  nonnull (name), nonnull (value));
4931a966c04fSmrg
49326e7d3316Smrg  if (name && *name && value && *value)
49336e7d3316Smrg    {
49346e7d3316Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
49356e7d3316Smrg      lt_setenv (name, new_value);
49366e7d3316Smrg      XFREE (new_value);
49376e7d3316Smrg    }
49386e7d3316Smrg}
4939a966c04fSmrg
49406e7d3316SmrgEOF
49416e7d3316Smrg	    case $host_os in
49426e7d3316Smrg	      mingw*)
49436e7d3316Smrg		cat <<"EOF"
49446e7d3316Smrg
49456e7d3316Smrg/* Prepares an argument vector before calling spawn().
49466e7d3316Smrg   Note that spawn() does not by itself call the command interpreter
49476e7d3316Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
49486e7d3316Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
49496e7d3316Smrg         GetVersionEx(&v);
49506e7d3316Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
49516e7d3316Smrg      }) ? "cmd.exe" : "command.com").
49526e7d3316Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
49536e7d3316Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
49546e7d3316Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
49556e7d3316Smrg   special way:
49566e7d3316Smrg   - Space and tab are interpreted as delimiters. They are not treated as
49576e7d3316Smrg     delimiters if they are surrounded by double quotes: "...".
49586e7d3316Smrg   - Unescaped double quotes are removed from the input. Their only effect is
49596e7d3316Smrg     that within double quotes, space and tab are treated like normal
49606e7d3316Smrg     characters.
49616e7d3316Smrg   - Backslashes not followed by double quotes are not special.
49626e7d3316Smrg   - But 2*n+1 backslashes followed by a double quote become
49636e7d3316Smrg     n backslashes followed by a double quote (n >= 0):
49646e7d3316Smrg       \" -> "
49656e7d3316Smrg       \\\" -> \"
49666e7d3316Smrg       \\\\\" -> \\"
49676e7d3316Smrg */
49686e7d3316Smrg#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"
49696e7d3316Smrg#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"
49706e7d3316Smrgchar **
49716e7d3316Smrgprepare_spawn (char **argv)
49726e7d3316Smrg{
49736e7d3316Smrg  size_t argc;
49746e7d3316Smrg  char **new_argv;
49756e7d3316Smrg  size_t i;
4976a966c04fSmrg
49776e7d3316Smrg  /* Count number of arguments.  */
49786e7d3316Smrg  for (argc = 0; argv[argc] != NULL; argc++)
49796e7d3316Smrg    ;
4980a966c04fSmrg
49816e7d3316Smrg  /* Allocate new argument vector.  */
49826e7d3316Smrg  new_argv = XMALLOC (char *, argc + 1);
4983a966c04fSmrg
49846e7d3316Smrg  /* Put quoted arguments into the new argument vector.  */
49856e7d3316Smrg  for (i = 0; i < argc; i++)
49866e7d3316Smrg    {
49876e7d3316Smrg      const char *string = argv[i];
49886e7d3316Smrg
49896e7d3316Smrg      if (string[0] == '\0')
49906e7d3316Smrg	new_argv[i] = xstrdup ("\"\"");
49916e7d3316Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
49926e7d3316Smrg	{
49936e7d3316Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
49946e7d3316Smrg	  size_t length;
49956e7d3316Smrg	  unsigned int backslashes;
49966e7d3316Smrg	  const char *s;
49976e7d3316Smrg	  char *quoted_string;
49986e7d3316Smrg	  char *p;
49996e7d3316Smrg
50006e7d3316Smrg	  length = 0;
50016e7d3316Smrg	  backslashes = 0;
50026e7d3316Smrg	  if (quote_around)
50036e7d3316Smrg	    length++;
50046e7d3316Smrg	  for (s = string; *s != '\0'; s++)
50056e7d3316Smrg	    {
50066e7d3316Smrg	      char c = *s;
50076e7d3316Smrg	      if (c == '"')
50086e7d3316Smrg		length += backslashes + 1;
50096e7d3316Smrg	      length++;
50106e7d3316Smrg	      if (c == '\\')
50116e7d3316Smrg		backslashes++;
50126e7d3316Smrg	      else
50136e7d3316Smrg		backslashes = 0;
50146e7d3316Smrg	    }
50156e7d3316Smrg	  if (quote_around)
50166e7d3316Smrg	    length += backslashes + 1;
50176e7d3316Smrg
50186e7d3316Smrg	  quoted_string = XMALLOC (char, length + 1);
50196e7d3316Smrg
50206e7d3316Smrg	  p = quoted_string;
50216e7d3316Smrg	  backslashes = 0;
50226e7d3316Smrg	  if (quote_around)
50236e7d3316Smrg	    *p++ = '"';
50246e7d3316Smrg	  for (s = string; *s != '\0'; s++)
50256e7d3316Smrg	    {
50266e7d3316Smrg	      char c = *s;
50276e7d3316Smrg	      if (c == '"')
50286e7d3316Smrg		{
50296e7d3316Smrg		  unsigned int j;
50306e7d3316Smrg		  for (j = backslashes + 1; j > 0; j--)
50316e7d3316Smrg		    *p++ = '\\';
50326e7d3316Smrg		}
50336e7d3316Smrg	      *p++ = c;
50346e7d3316Smrg	      if (c == '\\')
50356e7d3316Smrg		backslashes++;
50366e7d3316Smrg	      else
50376e7d3316Smrg		backslashes = 0;
50386e7d3316Smrg	    }
50396e7d3316Smrg	  if (quote_around)
50406e7d3316Smrg	    {
50416e7d3316Smrg	      unsigned int j;
50426e7d3316Smrg	      for (j = backslashes; j > 0; j--)
50436e7d3316Smrg		*p++ = '\\';
50446e7d3316Smrg	      *p++ = '"';
50456e7d3316Smrg	    }
50466e7d3316Smrg	  *p = '\0';
5047a966c04fSmrg
50486e7d3316Smrg	  new_argv[i] = quoted_string;
50496e7d3316Smrg	}
50506e7d3316Smrg      else
50516e7d3316Smrg	new_argv[i] = (char *) string;
50526e7d3316Smrg    }
50536e7d3316Smrg  new_argv[argc] = NULL;
5054a966c04fSmrg
50556e7d3316Smrg  return new_argv;
50566e7d3316Smrg}
50576e7d3316SmrgEOF
5058a966c04fSmrg		;;
50596e7d3316Smrg	    esac
5060a966c04fSmrg
50616e7d3316Smrg            cat <<"EOF"
50626e7d3316Smrgvoid lt_dump_script (FILE* f)
50636e7d3316Smrg{
50646e7d3316SmrgEOF
50656e7d3316Smrg	    func_emit_wrapper yes |
5066ac92798bSmrg	      $SED -n -e '
5067ac92798bSmrgs/^\(.\{79\}\)\(..*\)/\1\
5068ac92798bSmrg\2/
5069ac92798bSmrgh
5070ac92798bSmrgs/\([\\"]\)/\\\1/g
5071ac92798bSmrgs/$/\\n/
5072ac92798bSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
5073ac92798bSmrgg
5074ac92798bSmrgD'
50756e7d3316Smrg            cat <<"EOF"
50766e7d3316Smrg}
50776e7d3316SmrgEOF
50786e7d3316Smrg}
50796e7d3316Smrg# end: func_emit_cwrapperexe_src
5080a966c04fSmrg
50816e7d3316Smrg# func_win32_import_lib_p ARG
50826e7d3316Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
50836e7d3316Smrgfunc_win32_import_lib_p ()
50846e7d3316Smrg{
50856e7d3316Smrg    $opt_debug
50866e7d3316Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
50876e7d3316Smrg    *import*) : ;;
50886e7d3316Smrg    *) false ;;
50896e7d3316Smrg    esac
50906e7d3316Smrg}
5091a966c04fSmrg
50926e7d3316Smrg# func_mode_link arg...
50936e7d3316Smrgfunc_mode_link ()
50946e7d3316Smrg{
50956e7d3316Smrg    $opt_debug
50966e7d3316Smrg    case $host in
50976e7d3316Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
50986e7d3316Smrg      # It is impossible to link a dll without this setting, and
50996e7d3316Smrg      # we shouldn't force the makefile maintainer to figure out
51006e7d3316Smrg      # which system we are compiling for in order to pass an extra
51016e7d3316Smrg      # flag for every libtool invocation.
51026e7d3316Smrg      # allow_undefined=no
5103a966c04fSmrg
51046e7d3316Smrg      # FIXME: Unfortunately, there are problems with the above when trying
51056e7d3316Smrg      # to make a dll which has undefined symbols, in which case not
51066e7d3316Smrg      # even a static library is built.  For now, we need to specify
51076e7d3316Smrg      # -no-undefined on the libtool link line when we can be certain
51086e7d3316Smrg      # that all symbols are satisfied, otherwise we get a static library.
51096e7d3316Smrg      allow_undefined=yes
51106e7d3316Smrg      ;;
51116e7d3316Smrg    *)
51126e7d3316Smrg      allow_undefined=yes
51136e7d3316Smrg      ;;
51146e7d3316Smrg    esac
51156e7d3316Smrg    libtool_args=$nonopt
51166e7d3316Smrg    base_compile="$nonopt $@"
51176e7d3316Smrg    compile_command=$nonopt
51186e7d3316Smrg    finalize_command=$nonopt
5119a966c04fSmrg
51206e7d3316Smrg    compile_rpath=
51216e7d3316Smrg    finalize_rpath=
51226e7d3316Smrg    compile_shlibpath=
51236e7d3316Smrg    finalize_shlibpath=
51246e7d3316Smrg    convenience=
51256e7d3316Smrg    old_convenience=
51266e7d3316Smrg    deplibs=
51276e7d3316Smrg    old_deplibs=
51286e7d3316Smrg    compiler_flags=
51296e7d3316Smrg    linker_flags=
51306e7d3316Smrg    dllsearchpath=
51316e7d3316Smrg    lib_search_path=`pwd`
51326e7d3316Smrg    inst_prefix_dir=
51336e7d3316Smrg    new_inherited_linker_flags=
5134a966c04fSmrg
51356e7d3316Smrg    avoid_version=no
51366e7d3316Smrg    bindir=
51376e7d3316Smrg    dlfiles=
51386e7d3316Smrg    dlprefiles=
51396e7d3316Smrg    dlself=no
51406e7d3316Smrg    export_dynamic=no
51416e7d3316Smrg    export_symbols=
51426e7d3316Smrg    export_symbols_regex=
51436e7d3316Smrg    generated=
51446e7d3316Smrg    libobjs=
51456e7d3316Smrg    ltlibs=
51466e7d3316Smrg    module=no
51476e7d3316Smrg    no_install=no
51486e7d3316Smrg    objs=
51496e7d3316Smrg    non_pic_objects=
51506e7d3316Smrg    precious_files_regex=
51516e7d3316Smrg    prefer_static_libs=no
51526e7d3316Smrg    preload=no
51536e7d3316Smrg    prev=
51546e7d3316Smrg    prevarg=
51556e7d3316Smrg    release=
51566e7d3316Smrg    rpath=
51576e7d3316Smrg    xrpath=
51586e7d3316Smrg    perm_rpath=
51596e7d3316Smrg    temp_rpath=
51606e7d3316Smrg    thread_safe=no
51616e7d3316Smrg    vinfo=
51626e7d3316Smrg    vinfo_number=no
51636e7d3316Smrg    weak_libs=
51646e7d3316Smrg    single_module="${wl}-single_module"
51656e7d3316Smrg    func_infer_tag $base_compile
5166a966c04fSmrg
51676e7d3316Smrg    # We need to know -static, to get the right output filenames.
51686e7d3316Smrg    for arg
51696e7d3316Smrg    do
51706e7d3316Smrg      case $arg in
51716e7d3316Smrg      -shared)
51726e7d3316Smrg	test "$build_libtool_libs" != yes && \
51736e7d3316Smrg	  func_fatal_configuration "can not build a shared library"
51746e7d3316Smrg	build_old_libs=no
51756e7d3316Smrg	break
51766e7d3316Smrg	;;
51776e7d3316Smrg      -all-static | -static | -static-libtool-libs)
51786e7d3316Smrg	case $arg in
51796e7d3316Smrg	-all-static)
51806e7d3316Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
51816e7d3316Smrg	    func_warning "complete static linking is impossible in this configuration"
51826e7d3316Smrg	  fi
51836e7d3316Smrg	  if test -n "$link_static_flag"; then
51846e7d3316Smrg	    dlopen_self=$dlopen_self_static
51856e7d3316Smrg	  fi
51866e7d3316Smrg	  prefer_static_libs=yes
51876e7d3316Smrg	  ;;
51886e7d3316Smrg	-static)
51896e7d3316Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
51906e7d3316Smrg	    dlopen_self=$dlopen_self_static
51916e7d3316Smrg	  fi
51926e7d3316Smrg	  prefer_static_libs=built
51936e7d3316Smrg	  ;;
51946e7d3316Smrg	-static-libtool-libs)
51956e7d3316Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
51966e7d3316Smrg	    dlopen_self=$dlopen_self_static
51976e7d3316Smrg	  fi
51986e7d3316Smrg	  prefer_static_libs=yes
51996e7d3316Smrg	  ;;
52006e7d3316Smrg	esac
52016e7d3316Smrg	build_libtool_libs=no
52026e7d3316Smrg	build_old_libs=yes
52036e7d3316Smrg	break
52046e7d3316Smrg	;;
52056e7d3316Smrg      esac
52066e7d3316Smrg    done
5207a966c04fSmrg
52086e7d3316Smrg    # See if our shared archives depend on static archives.
52096e7d3316Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210a966c04fSmrg
52116e7d3316Smrg    # Go through the arguments, transforming them on the way.
52126e7d3316Smrg    while test "$#" -gt 0; do
52136e7d3316Smrg      arg="$1"
52146e7d3316Smrg      shift
52156e7d3316Smrg      func_quote_for_eval "$arg"
52166e7d3316Smrg      qarg=$func_quote_for_eval_unquoted_result
52176e7d3316Smrg      func_append libtool_args " $func_quote_for_eval_result"
5218a966c04fSmrg
52196e7d3316Smrg      # If the previous option needs an argument, assign it.
52206e7d3316Smrg      if test -n "$prev"; then
52216e7d3316Smrg	case $prev in
52226e7d3316Smrg	output)
52236e7d3316Smrg	  func_append compile_command " @OUTPUT@"
52246e7d3316Smrg	  func_append finalize_command " @OUTPUT@"
52256e7d3316Smrg	  ;;
52266e7d3316Smrg	esac
5227a966c04fSmrg
52286e7d3316Smrg	case $prev in
52296e7d3316Smrg	bindir)
52306e7d3316Smrg	  bindir="$arg"
52316e7d3316Smrg	  prev=
52326e7d3316Smrg	  continue
52336e7d3316Smrg	  ;;
52346e7d3316Smrg	dlfiles|dlprefiles)
52356e7d3316Smrg	  if test "$preload" = no; then
52366e7d3316Smrg	    # Add the symbol object into the linking commands.
52376e7d3316Smrg	    func_append compile_command " @SYMFILE@"
52386e7d3316Smrg	    func_append finalize_command " @SYMFILE@"
52396e7d3316Smrg	    preload=yes
5240a966c04fSmrg	  fi
52416e7d3316Smrg	  case $arg in
52426e7d3316Smrg	  *.la | *.lo) ;;  # We handle these cases below.
52436e7d3316Smrg	  force)
52446e7d3316Smrg	    if test "$dlself" = no; then
52456e7d3316Smrg	      dlself=needless
52466e7d3316Smrg	      export_dynamic=yes
5247a966c04fSmrg	    fi
52486e7d3316Smrg	    prev=
52496e7d3316Smrg	    continue
52506e7d3316Smrg	    ;;
52516e7d3316Smrg	  self)
52526e7d3316Smrg	    if test "$prev" = dlprefiles; then
52536e7d3316Smrg	      dlself=yes
52546e7d3316Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
52556e7d3316Smrg	      dlself=yes
5256a966c04fSmrg	    else
52576e7d3316Smrg	      dlself=needless
52586e7d3316Smrg	      export_dynamic=yes
5259a966c04fSmrg	    fi
52606e7d3316Smrg	    prev=
52616e7d3316Smrg	    continue
52626e7d3316Smrg	    ;;
52636e7d3316Smrg	  *)
52646e7d3316Smrg	    if test "$prev" = dlfiles; then
526597cf2ee2Smrg	      func_append dlfiles " $arg"
5266a966c04fSmrg	    else
526797cf2ee2Smrg	      func_append dlprefiles " $arg"
5268a966c04fSmrg	    fi
52696e7d3316Smrg	    prev=
52706e7d3316Smrg	    continue
52716e7d3316Smrg	    ;;
52726e7d3316Smrg	  esac
52736e7d3316Smrg	  ;;
52746e7d3316Smrg	expsyms)
52756e7d3316Smrg	  export_symbols="$arg"
52766e7d3316Smrg	  test -f "$arg" \
52776e7d3316Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
52786e7d3316Smrg	  prev=
52796e7d3316Smrg	  continue
52806e7d3316Smrg	  ;;
52816e7d3316Smrg	expsyms_regex)
52826e7d3316Smrg	  export_symbols_regex="$arg"
52836e7d3316Smrg	  prev=
52846e7d3316Smrg	  continue
52856e7d3316Smrg	  ;;
52866e7d3316Smrg	framework)
5287a966c04fSmrg	  case $host in
52886e7d3316Smrg	    *-*-darwin*)
52896e7d3316Smrg	      case "$deplibs " in
52906e7d3316Smrg		*" $qarg.ltframework "*) ;;
529197cf2ee2Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
52926e7d3316Smrg		   ;;
52936e7d3316Smrg	      esac
52946e7d3316Smrg	      ;;
5295a966c04fSmrg	  esac
52966e7d3316Smrg	  prev=
52976e7d3316Smrg	  continue
5298a966c04fSmrg	  ;;
52996e7d3316Smrg	inst_prefix)
53006e7d3316Smrg	  inst_prefix_dir="$arg"
53016e7d3316Smrg	  prev=
53026e7d3316Smrg	  continue
5303a966c04fSmrg	  ;;
53046e7d3316Smrg	objectlist)
53056e7d3316Smrg	  if test -f "$arg"; then
53066e7d3316Smrg	    save_arg=$arg
53076e7d3316Smrg	    moreargs=
53086e7d3316Smrg	    for fil in `cat "$save_arg"`
53096e7d3316Smrg	    do
531097cf2ee2Smrg#	      func_append moreargs " $fil"
53116e7d3316Smrg	      arg=$fil
53126e7d3316Smrg	      # A libtool-controlled object.
5313a966c04fSmrg
53146e7d3316Smrg	      # Check to see that this really is a libtool object.
53156e7d3316Smrg	      if func_lalib_unsafe_p "$arg"; then
53166e7d3316Smrg		pic_object=
53176e7d3316Smrg		non_pic_object=
5318a966c04fSmrg
53196e7d3316Smrg		# Read the .lo file
53206e7d3316Smrg		func_source "$arg"
5321a966c04fSmrg
53226e7d3316Smrg		if test -z "$pic_object" ||
53236e7d3316Smrg		   test -z "$non_pic_object" ||
53246e7d3316Smrg		   test "$pic_object" = none &&
53256e7d3316Smrg		   test "$non_pic_object" = none; then
53266e7d3316Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
53276e7d3316Smrg		fi
5328a966c04fSmrg
53296e7d3316Smrg		# Extract subdirectory from the argument.
53306e7d3316Smrg		func_dirname "$arg" "/" ""
53316e7d3316Smrg		xdir="$func_dirname_result"
5332a966c04fSmrg
53336e7d3316Smrg		if test "$pic_object" != none; then
53346e7d3316Smrg		  # Prepend the subdirectory the object is found in.
53356e7d3316Smrg		  pic_object="$xdir$pic_object"
5336a966c04fSmrg
53376e7d3316Smrg		  if test "$prev" = dlfiles; then
53386e7d3316Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
533997cf2ee2Smrg		      func_append dlfiles " $pic_object"
53406e7d3316Smrg		      prev=
53416e7d3316Smrg		      continue
53426e7d3316Smrg		    else
53436e7d3316Smrg		      # If libtool objects are unsupported, then we need to preload.
53446e7d3316Smrg		      prev=dlprefiles
53456e7d3316Smrg		    fi
53466e7d3316Smrg		  fi
5347a966c04fSmrg
53486e7d3316Smrg		  # CHECK ME:  I think I busted this.  -Ossama
53496e7d3316Smrg		  if test "$prev" = dlprefiles; then
53506e7d3316Smrg		    # Preload the old-style object.
535197cf2ee2Smrg		    func_append dlprefiles " $pic_object"
53526e7d3316Smrg		    prev=
53536e7d3316Smrg		  fi
5354a966c04fSmrg
53556e7d3316Smrg		  # A PIC object.
53566e7d3316Smrg		  func_append libobjs " $pic_object"
53576e7d3316Smrg		  arg="$pic_object"
53586e7d3316Smrg		fi
5359a966c04fSmrg
53606e7d3316Smrg		# Non-PIC object.
53616e7d3316Smrg		if test "$non_pic_object" != none; then
53626e7d3316Smrg		  # Prepend the subdirectory the object is found in.
53636e7d3316Smrg		  non_pic_object="$xdir$non_pic_object"
5364a966c04fSmrg
53656e7d3316Smrg		  # A standard non-PIC object
53666e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
53676e7d3316Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
53686e7d3316Smrg		    arg="$non_pic_object"
53696e7d3316Smrg		  fi
53706e7d3316Smrg		else
53716e7d3316Smrg		  # If the PIC object exists, use it instead.
53726e7d3316Smrg		  # $xdir was prepended to $pic_object above.
53736e7d3316Smrg		  non_pic_object="$pic_object"
53746e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
53756e7d3316Smrg		fi
53766e7d3316Smrg	      else
53776e7d3316Smrg		# Only an error if not doing a dry-run.
53786e7d3316Smrg		if $opt_dry_run; then
53796e7d3316Smrg		  # Extract subdirectory from the argument.
53806e7d3316Smrg		  func_dirname "$arg" "/" ""
53816e7d3316Smrg		  xdir="$func_dirname_result"
53826e7d3316Smrg
53836e7d3316Smrg		  func_lo2o "$arg"
53846e7d3316Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
53856e7d3316Smrg		  non_pic_object=$xdir$func_lo2o_result
53866e7d3316Smrg		  func_append libobjs " $pic_object"
53876e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
53886e7d3316Smrg	        else
53896e7d3316Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
53906e7d3316Smrg		fi
53916e7d3316Smrg	      fi
53926e7d3316Smrg	    done
5393a966c04fSmrg	  else
53946e7d3316Smrg	    func_fatal_error "link input file \`$arg' does not exist"
5395a966c04fSmrg	  fi
53966e7d3316Smrg	  arg=$save_arg
53976e7d3316Smrg	  prev=
53986e7d3316Smrg	  continue
53996e7d3316Smrg	  ;;
54006e7d3316Smrg	precious_regex)
54016e7d3316Smrg	  precious_files_regex="$arg"
54026e7d3316Smrg	  prev=
54036e7d3316Smrg	  continue
54046e7d3316Smrg	  ;;
54056e7d3316Smrg	release)
54066e7d3316Smrg	  release="-$arg"
54076e7d3316Smrg	  prev=
54086e7d3316Smrg	  continue
54096e7d3316Smrg	  ;;
54106e7d3316Smrg	rpath | xrpath)
54116e7d3316Smrg	  # We need an absolute path.
54126e7d3316Smrg	  case $arg in
54136e7d3316Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
54146e7d3316Smrg	  *)
54156e7d3316Smrg	    func_fatal_error "only absolute run-paths are allowed"
54166e7d3316Smrg	    ;;
54176e7d3316Smrg	  esac
54186e7d3316Smrg	  if test "$prev" = rpath; then
54196e7d3316Smrg	    case "$rpath " in
54206e7d3316Smrg	    *" $arg "*) ;;
542197cf2ee2Smrg	    *) func_append rpath " $arg" ;;
54226e7d3316Smrg	    esac
5423a966c04fSmrg	  else
54246e7d3316Smrg	    case "$xrpath " in
54256e7d3316Smrg	    *" $arg "*) ;;
542697cf2ee2Smrg	    *) func_append xrpath " $arg" ;;
54276e7d3316Smrg	    esac
5428a966c04fSmrg	  fi
54296e7d3316Smrg	  prev=
54306e7d3316Smrg	  continue
54316e7d3316Smrg	  ;;
54326e7d3316Smrg	shrext)
54336e7d3316Smrg	  shrext_cmds="$arg"
54346e7d3316Smrg	  prev=
54356e7d3316Smrg	  continue
54366e7d3316Smrg	  ;;
54376e7d3316Smrg	weak)
543897cf2ee2Smrg	  func_append weak_libs " $arg"
54396e7d3316Smrg	  prev=
54406e7d3316Smrg	  continue
54416e7d3316Smrg	  ;;
54426e7d3316Smrg	xcclinker)
544397cf2ee2Smrg	  func_append linker_flags " $qarg"
544497cf2ee2Smrg	  func_append compiler_flags " $qarg"
54456e7d3316Smrg	  prev=
54466e7d3316Smrg	  func_append compile_command " $qarg"
54476e7d3316Smrg	  func_append finalize_command " $qarg"
54486e7d3316Smrg	  continue
54496e7d3316Smrg	  ;;
54506e7d3316Smrg	xcompiler)
545197cf2ee2Smrg	  func_append compiler_flags " $qarg"
54526e7d3316Smrg	  prev=
54536e7d3316Smrg	  func_append compile_command " $qarg"
54546e7d3316Smrg	  func_append finalize_command " $qarg"
54556e7d3316Smrg	  continue
54566e7d3316Smrg	  ;;
54576e7d3316Smrg	xlinker)
545897cf2ee2Smrg	  func_append linker_flags " $qarg"
545997cf2ee2Smrg	  func_append compiler_flags " $wl$qarg"
54606e7d3316Smrg	  prev=
54616e7d3316Smrg	  func_append compile_command " $wl$qarg"
54626e7d3316Smrg	  func_append finalize_command " $wl$qarg"
54636e7d3316Smrg	  continue
54646e7d3316Smrg	  ;;
54656e7d3316Smrg	*)
54666e7d3316Smrg	  eval "$prev=\"\$arg\""
54676e7d3316Smrg	  prev=
54686e7d3316Smrg	  continue
54696e7d3316Smrg	  ;;
5470a966c04fSmrg	esac
54716e7d3316Smrg      fi # test -n "$prev"
5472a966c04fSmrg
54736e7d3316Smrg      prevarg="$arg"
5474a966c04fSmrg
54756e7d3316Smrg      case $arg in
54766e7d3316Smrg      -all-static)
54776e7d3316Smrg	if test -n "$link_static_flag"; then
54786e7d3316Smrg	  # See comment for -static flag below, for more details.
54796e7d3316Smrg	  func_append compile_command " $link_static_flag"
54806e7d3316Smrg	  func_append finalize_command " $link_static_flag"
54816e7d3316Smrg	fi
54826e7d3316Smrg	continue
54836e7d3316Smrg	;;
5484a966c04fSmrg
54856e7d3316Smrg      -allow-undefined)
54866e7d3316Smrg	# FIXME: remove this flag sometime in the future.
54876e7d3316Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
54886e7d3316Smrg	;;
5489a966c04fSmrg
54906e7d3316Smrg      -avoid-version)
54916e7d3316Smrg	avoid_version=yes
54926e7d3316Smrg	continue
54936e7d3316Smrg	;;
5494a966c04fSmrg
54956e7d3316Smrg      -bindir)
54966e7d3316Smrg	prev=bindir
54976e7d3316Smrg	continue
54986e7d3316Smrg	;;
5499a966c04fSmrg
55006e7d3316Smrg      -dlopen)
55016e7d3316Smrg	prev=dlfiles
55026e7d3316Smrg	continue
55036e7d3316Smrg	;;
5504a966c04fSmrg
55056e7d3316Smrg      -dlpreopen)
55066e7d3316Smrg	prev=dlprefiles
55076e7d3316Smrg	continue
55086e7d3316Smrg	;;
5509a966c04fSmrg
55106e7d3316Smrg      -export-dynamic)
55116e7d3316Smrg	export_dynamic=yes
55126e7d3316Smrg	continue
55136e7d3316Smrg	;;
5514a966c04fSmrg
55156e7d3316Smrg      -export-symbols | -export-symbols-regex)
55166e7d3316Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
55176e7d3316Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
55186e7d3316Smrg	fi
55196e7d3316Smrg	if test "X$arg" = "X-export-symbols"; then
55206e7d3316Smrg	  prev=expsyms
55216e7d3316Smrg	else
55226e7d3316Smrg	  prev=expsyms_regex
55236e7d3316Smrg	fi
55246e7d3316Smrg	continue
55256e7d3316Smrg	;;
5526a966c04fSmrg
55276e7d3316Smrg      -framework)
55286e7d3316Smrg	prev=framework
55296e7d3316Smrg	continue
55306e7d3316Smrg	;;
5531a966c04fSmrg
55326e7d3316Smrg      -inst-prefix-dir)
55336e7d3316Smrg	prev=inst_prefix
55346e7d3316Smrg	continue
55356e7d3316Smrg	;;
5536a966c04fSmrg
55376e7d3316Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
55386e7d3316Smrg      # so, if we see these flags be careful not to treat them like -L
55396e7d3316Smrg      -L[A-Z][A-Z]*:*)
55406e7d3316Smrg	case $with_gcc/$host in
55416e7d3316Smrg	no/*-*-irix* | /*-*-irix*)
55426e7d3316Smrg	  func_append compile_command " $arg"
55436e7d3316Smrg	  func_append finalize_command " $arg"
55446e7d3316Smrg	  ;;
55456e7d3316Smrg	esac
55466e7d3316Smrg	continue
55476e7d3316Smrg	;;
5548a966c04fSmrg
55496e7d3316Smrg      -L*)
555097cf2ee2Smrg	func_stripname "-L" '' "$arg"
555197cf2ee2Smrg	if test -z "$func_stripname_result"; then
55526e7d3316Smrg	  if test "$#" -gt 0; then
55536e7d3316Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
55546e7d3316Smrg	  else
55556e7d3316Smrg	    func_fatal_error "need path for \`-L' option"
55566e7d3316Smrg	  fi
55576e7d3316Smrg	fi
555897cf2ee2Smrg	func_resolve_sysroot "$func_stripname_result"
555997cf2ee2Smrg	dir=$func_resolve_sysroot_result
55606e7d3316Smrg	# We need an absolute path.
55616e7d3316Smrg	case $dir in
55626e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
55636e7d3316Smrg	*)
55646e7d3316Smrg	  absdir=`cd "$dir" && pwd`
55656e7d3316Smrg	  test -z "$absdir" && \
55666e7d3316Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
55676e7d3316Smrg	  dir="$absdir"
55686e7d3316Smrg	  ;;
55696e7d3316Smrg	esac
55706e7d3316Smrg	case "$deplibs " in
557197cf2ee2Smrg	*" -L$dir "* | *" $arg "*)
557297cf2ee2Smrg	  # Will only happen for absolute or sysroot arguments
557397cf2ee2Smrg	  ;;
55746e7d3316Smrg	*)
557597cf2ee2Smrg	  # Preserve sysroot, but never include relative directories
557697cf2ee2Smrg	  case $dir in
557797cf2ee2Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
557897cf2ee2Smrg	    *) func_append deplibs " -L$dir" ;;
557997cf2ee2Smrg	  esac
558097cf2ee2Smrg	  func_append lib_search_path " $dir"
55816e7d3316Smrg	  ;;
55826e7d3316Smrg	esac
55836e7d3316Smrg	case $host in
55846e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
55856e7d3316Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
55866e7d3316Smrg	  case :$dllsearchpath: in
55876e7d3316Smrg	  *":$dir:"*) ;;
55886e7d3316Smrg	  ::) dllsearchpath=$dir;;
558997cf2ee2Smrg	  *) func_append dllsearchpath ":$dir";;
55906e7d3316Smrg	  esac
55916e7d3316Smrg	  case :$dllsearchpath: in
55926e7d3316Smrg	  *":$testbindir:"*) ;;
55936e7d3316Smrg	  ::) dllsearchpath=$testbindir;;
559497cf2ee2Smrg	  *) func_append dllsearchpath ":$testbindir";;
55956e7d3316Smrg	  esac
55966e7d3316Smrg	  ;;
55976e7d3316Smrg	esac
55986e7d3316Smrg	continue
55996e7d3316Smrg	;;
5600a966c04fSmrg
56016e7d3316Smrg      -l*)
56026e7d3316Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
56036e7d3316Smrg	  case $host in
56046e7d3316Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
56056e7d3316Smrg	    # These systems don't actually have a C or math library (as such)
56066e7d3316Smrg	    continue
56076e7d3316Smrg	    ;;
56086e7d3316Smrg	  *-*-os2*)
56096e7d3316Smrg	    # These systems don't actually have a C library (as such)
56106e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56116e7d3316Smrg	    ;;
56126e7d3316Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
56136e7d3316Smrg	    # Do not include libc due to us having libc/libc_r.
56146e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56156e7d3316Smrg	    ;;
56166e7d3316Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
56176e7d3316Smrg	    # Rhapsody C and math libraries are in the System framework
561897cf2ee2Smrg	    func_append deplibs " System.ltframework"
56196e7d3316Smrg	    continue
56206e7d3316Smrg	    ;;
56216e7d3316Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
56226e7d3316Smrg	    # Causes problems with __ctype
56236e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56246e7d3316Smrg	    ;;
56256e7d3316Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
56266e7d3316Smrg	    # Compiler inserts libc in the correct place for threads to work
56276e7d3316Smrg	    test "X$arg" = "X-lc" && continue
56286e7d3316Smrg	    ;;
56296e7d3316Smrg	  esac
56306e7d3316Smrg	elif test "X$arg" = "X-lc_r"; then
56316e7d3316Smrg	 case $host in
56326e7d3316Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
56336e7d3316Smrg	   # Do not include libc_r directly, use -pthread flag.
56346e7d3316Smrg	   continue
56356e7d3316Smrg	   ;;
56366e7d3316Smrg	 esac
56376e7d3316Smrg	fi
563897cf2ee2Smrg	func_append deplibs " $arg"
56396e7d3316Smrg	continue
56406e7d3316Smrg	;;
5641a966c04fSmrg
56426e7d3316Smrg      -module)
56436e7d3316Smrg	module=yes
56446e7d3316Smrg	continue
56456e7d3316Smrg	;;
5646a966c04fSmrg
56476e7d3316Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
56486e7d3316Smrg      # classes, name mangling, and exception handling.
56496e7d3316Smrg      # Darwin uses the -arch flag to determine output architecture.
565097cf2ee2Smrg      -model|-arch|-isysroot|--sysroot)
565197cf2ee2Smrg	func_append compiler_flags " $arg"
56526e7d3316Smrg	func_append compile_command " $arg"
56536e7d3316Smrg	func_append finalize_command " $arg"
56546e7d3316Smrg	prev=xcompiler
56556e7d3316Smrg	continue
56566e7d3316Smrg	;;
5657a966c04fSmrg
5658ac92798bSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659ac92798bSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
566097cf2ee2Smrg	func_append compiler_flags " $arg"
56616e7d3316Smrg	func_append compile_command " $arg"
56626e7d3316Smrg	func_append finalize_command " $arg"
56636e7d3316Smrg	case "$new_inherited_linker_flags " in
56646e7d3316Smrg	    *" $arg "*) ;;
566597cf2ee2Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
56666e7d3316Smrg	esac
56676e7d3316Smrg	continue
56686e7d3316Smrg	;;
5669a966c04fSmrg
56706e7d3316Smrg      -multi_module)
56716e7d3316Smrg	single_module="${wl}-multi_module"
56726e7d3316Smrg	continue
56736e7d3316Smrg	;;
5674a966c04fSmrg
56756e7d3316Smrg      -no-fast-install)
56766e7d3316Smrg	fast_install=no
56776e7d3316Smrg	continue
56786e7d3316Smrg	;;
5679a966c04fSmrg
56806e7d3316Smrg      -no-install)
56816e7d3316Smrg	case $host in
56826e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
56836e7d3316Smrg	  # The PATH hackery in wrapper scripts is required on Windows
56846e7d3316Smrg	  # and Darwin in order for the loader to find any dlls it needs.
56856e7d3316Smrg	  func_warning "\`-no-install' is ignored for $host"
56866e7d3316Smrg	  func_warning "assuming \`-no-fast-install' instead"
56876e7d3316Smrg	  fast_install=no
56886e7d3316Smrg	  ;;
56896e7d3316Smrg	*) no_install=yes ;;
56906e7d3316Smrg	esac
56916e7d3316Smrg	continue
56926e7d3316Smrg	;;
5693a966c04fSmrg
56946e7d3316Smrg      -no-undefined)
56956e7d3316Smrg	allow_undefined=no
56966e7d3316Smrg	continue
56976e7d3316Smrg	;;
5698a966c04fSmrg
56996e7d3316Smrg      -objectlist)
57006e7d3316Smrg	prev=objectlist
57016e7d3316Smrg	continue
57026e7d3316Smrg	;;
5703a966c04fSmrg
57046e7d3316Smrg      -o) prev=output ;;
5705a966c04fSmrg
57066e7d3316Smrg      -precious-files-regex)
57076e7d3316Smrg	prev=precious_regex
57086e7d3316Smrg	continue
57096e7d3316Smrg	;;
5710a966c04fSmrg
57116e7d3316Smrg      -release)
57126e7d3316Smrg	prev=release
57136e7d3316Smrg	continue
57146e7d3316Smrg	;;
5715a966c04fSmrg
57166e7d3316Smrg      -rpath)
57176e7d3316Smrg	prev=rpath
57186e7d3316Smrg	continue
57196e7d3316Smrg	;;
5720a966c04fSmrg
57216e7d3316Smrg      -R)
57226e7d3316Smrg	prev=xrpath
57236e7d3316Smrg	continue
57246e7d3316Smrg	;;
5725a966c04fSmrg
57266e7d3316Smrg      -R*)
57276e7d3316Smrg	func_stripname '-R' '' "$arg"
57286e7d3316Smrg	dir=$func_stripname_result
57296e7d3316Smrg	# We need an absolute path.
57306e7d3316Smrg	case $dir in
57316e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
573297cf2ee2Smrg	=*)
573397cf2ee2Smrg	  func_stripname '=' '' "$dir"
573497cf2ee2Smrg	  dir=$lt_sysroot$func_stripname_result
573597cf2ee2Smrg	  ;;
57366e7d3316Smrg	*)
57376e7d3316Smrg	  func_fatal_error "only absolute run-paths are allowed"
57386e7d3316Smrg	  ;;
57396e7d3316Smrg	esac
57406e7d3316Smrg	case "$xrpath " in
57416e7d3316Smrg	*" $dir "*) ;;
574297cf2ee2Smrg	*) func_append xrpath " $dir" ;;
57436e7d3316Smrg	esac
57446e7d3316Smrg	continue
57456e7d3316Smrg	;;
5746a966c04fSmrg
57476e7d3316Smrg      -shared)
57486e7d3316Smrg	# The effects of -shared are defined in a previous loop.
57496e7d3316Smrg	continue
57506e7d3316Smrg	;;
5751a966c04fSmrg
57526e7d3316Smrg      -shrext)
57536e7d3316Smrg	prev=shrext
57546e7d3316Smrg	continue
57556e7d3316Smrg	;;
5756a966c04fSmrg
57576e7d3316Smrg      -static | -static-libtool-libs)
57586e7d3316Smrg	# The effects of -static are defined in a previous loop.
57596e7d3316Smrg	# We used to do the same as -all-static on platforms that
57606e7d3316Smrg	# didn't have a PIC flag, but the assumption that the effects
57616e7d3316Smrg	# would be equivalent was wrong.  It would break on at least
57626e7d3316Smrg	# Digital Unix and AIX.
57636e7d3316Smrg	continue
57646e7d3316Smrg	;;
5765a966c04fSmrg
57666e7d3316Smrg      -thread-safe)
57676e7d3316Smrg	thread_safe=yes
57686e7d3316Smrg	continue
57696e7d3316Smrg	;;
5770a966c04fSmrg
57716e7d3316Smrg      -version-info)
57726e7d3316Smrg	prev=vinfo
57736e7d3316Smrg	continue
57746e7d3316Smrg	;;
5775a966c04fSmrg
57766e7d3316Smrg      -version-number)
57776e7d3316Smrg	prev=vinfo
57786e7d3316Smrg	vinfo_number=yes
57796e7d3316Smrg	continue
57806e7d3316Smrg	;;
5781a966c04fSmrg
57826e7d3316Smrg      -weak)
57836e7d3316Smrg        prev=weak
57846e7d3316Smrg	continue
57856e7d3316Smrg	;;
5786a966c04fSmrg
57876e7d3316Smrg      -Wc,*)
57886e7d3316Smrg	func_stripname '-Wc,' '' "$arg"
57896e7d3316Smrg	args=$func_stripname_result
57906e7d3316Smrg	arg=
57916e7d3316Smrg	save_ifs="$IFS"; IFS=','
57926e7d3316Smrg	for flag in $args; do
57936e7d3316Smrg	  IFS="$save_ifs"
57946e7d3316Smrg          func_quote_for_eval "$flag"
579597cf2ee2Smrg	  func_append arg " $func_quote_for_eval_result"
579697cf2ee2Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
57976e7d3316Smrg	done
57986e7d3316Smrg	IFS="$save_ifs"
57996e7d3316Smrg	func_stripname ' ' '' "$arg"
58006e7d3316Smrg	arg=$func_stripname_result
58016e7d3316Smrg	;;
5802a966c04fSmrg
58036e7d3316Smrg      -Wl,*)
58046e7d3316Smrg	func_stripname '-Wl,' '' "$arg"
58056e7d3316Smrg	args=$func_stripname_result
58066e7d3316Smrg	arg=
58076e7d3316Smrg	save_ifs="$IFS"; IFS=','
58086e7d3316Smrg	for flag in $args; do
58096e7d3316Smrg	  IFS="$save_ifs"
58106e7d3316Smrg          func_quote_for_eval "$flag"
581197cf2ee2Smrg	  func_append arg " $wl$func_quote_for_eval_result"
581297cf2ee2Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
581397cf2ee2Smrg	  func_append linker_flags " $func_quote_for_eval_result"
58146e7d3316Smrg	done
58156e7d3316Smrg	IFS="$save_ifs"
58166e7d3316Smrg	func_stripname ' ' '' "$arg"
58176e7d3316Smrg	arg=$func_stripname_result
58186e7d3316Smrg	;;
5819a966c04fSmrg
58206e7d3316Smrg      -Xcompiler)
58216e7d3316Smrg	prev=xcompiler
58226e7d3316Smrg	continue
58236e7d3316Smrg	;;
5824a966c04fSmrg
58256e7d3316Smrg      -Xlinker)
58266e7d3316Smrg	prev=xlinker
58276e7d3316Smrg	continue
58286e7d3316Smrg	;;
5829a966c04fSmrg
58306e7d3316Smrg      -XCClinker)
58316e7d3316Smrg	prev=xcclinker
58326e7d3316Smrg	continue
58336e7d3316Smrg	;;
5834a966c04fSmrg
58356e7d3316Smrg      # -msg_* for osf cc
58366e7d3316Smrg      -msg_*)
58376e7d3316Smrg	func_quote_for_eval "$arg"
58386e7d3316Smrg	arg="$func_quote_for_eval_result"
58396e7d3316Smrg	;;
5840a966c04fSmrg
58416e7d3316Smrg      # Flags to be passed through unchanged, with rationale:
58426e7d3316Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
58436e7d3316Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
58446e7d3316Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
58456e7d3316Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
58466e7d3316Smrg      # -q*                  compiler args for the IBM compiler
58476e7d3316Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
58486e7d3316Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
58496e7d3316Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
58506e7d3316Smrg      # @file                GCC response files
58516e7d3316Smrg      # -tp=*                Portland pgcc target processor selection
585297cf2ee2Smrg      # --sysroot=*          for sysroot support
585397cf2ee2Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
58546e7d3316Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
585597cf2ee2Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
585697cf2ee2Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
58576e7d3316Smrg        func_quote_for_eval "$arg"
58586e7d3316Smrg	arg="$func_quote_for_eval_result"
58596e7d3316Smrg        func_append compile_command " $arg"
58606e7d3316Smrg        func_append finalize_command " $arg"
586197cf2ee2Smrg        func_append compiler_flags " $arg"
58626e7d3316Smrg        continue
58636e7d3316Smrg        ;;
5864a966c04fSmrg
58656e7d3316Smrg      # Some other compiler flag.
58666e7d3316Smrg      -* | +*)
58676e7d3316Smrg        func_quote_for_eval "$arg"
58686e7d3316Smrg	arg="$func_quote_for_eval_result"
58696e7d3316Smrg	;;
5870a966c04fSmrg
58716e7d3316Smrg      *.$objext)
58726e7d3316Smrg	# A standard object.
587397cf2ee2Smrg	func_append objs " $arg"
58746e7d3316Smrg	;;
5875a966c04fSmrg
58766e7d3316Smrg      *.lo)
58776e7d3316Smrg	# A libtool-controlled object.
5878a966c04fSmrg
58796e7d3316Smrg	# Check to see that this really is a libtool object.
58806e7d3316Smrg	if func_lalib_unsafe_p "$arg"; then
58816e7d3316Smrg	  pic_object=
58826e7d3316Smrg	  non_pic_object=
5883a966c04fSmrg
58846e7d3316Smrg	  # Read the .lo file
58856e7d3316Smrg	  func_source "$arg"
5886a966c04fSmrg
58876e7d3316Smrg	  if test -z "$pic_object" ||
58886e7d3316Smrg	     test -z "$non_pic_object" ||
58896e7d3316Smrg	     test "$pic_object" = none &&
58906e7d3316Smrg	     test "$non_pic_object" = none; then
58916e7d3316Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
58926e7d3316Smrg	  fi
58932e2dd055Smrg
58946e7d3316Smrg	  # Extract subdirectory from the argument.
58956e7d3316Smrg	  func_dirname "$arg" "/" ""
58966e7d3316Smrg	  xdir="$func_dirname_result"
5897a966c04fSmrg
58986e7d3316Smrg	  if test "$pic_object" != none; then
58996e7d3316Smrg	    # Prepend the subdirectory the object is found in.
59006e7d3316Smrg	    pic_object="$xdir$pic_object"
5901a966c04fSmrg
59026e7d3316Smrg	    if test "$prev" = dlfiles; then
59036e7d3316Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
590497cf2ee2Smrg		func_append dlfiles " $pic_object"
59056e7d3316Smrg		prev=
59066e7d3316Smrg		continue
59076e7d3316Smrg	      else
59086e7d3316Smrg		# If libtool objects are unsupported, then we need to preload.
59096e7d3316Smrg		prev=dlprefiles
59106e7d3316Smrg	      fi
59116e7d3316Smrg	    fi
59126e7d3316Smrg
59136e7d3316Smrg	    # CHECK ME:  I think I busted this.  -Ossama
59146e7d3316Smrg	    if test "$prev" = dlprefiles; then
59156e7d3316Smrg	      # Preload the old-style object.
591697cf2ee2Smrg	      func_append dlprefiles " $pic_object"
59176e7d3316Smrg	      prev=
59186e7d3316Smrg	    fi
59196e7d3316Smrg
59206e7d3316Smrg	    # A PIC object.
59216e7d3316Smrg	    func_append libobjs " $pic_object"
59226e7d3316Smrg	    arg="$pic_object"
59236e7d3316Smrg	  fi
59246e7d3316Smrg
59256e7d3316Smrg	  # Non-PIC object.
59266e7d3316Smrg	  if test "$non_pic_object" != none; then
59276e7d3316Smrg	    # Prepend the subdirectory the object is found in.
59286e7d3316Smrg	    non_pic_object="$xdir$non_pic_object"
59296e7d3316Smrg
59306e7d3316Smrg	    # A standard non-PIC object
59316e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
59326e7d3316Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
59336e7d3316Smrg	      arg="$non_pic_object"
59346e7d3316Smrg	    fi
59356e7d3316Smrg	  else
59366e7d3316Smrg	    # If the PIC object exists, use it instead.
59376e7d3316Smrg	    # $xdir was prepended to $pic_object above.
59386e7d3316Smrg	    non_pic_object="$pic_object"
59396e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
59406e7d3316Smrg	  fi
59416e7d3316Smrg	else
59426e7d3316Smrg	  # Only an error if not doing a dry-run.
59436e7d3316Smrg	  if $opt_dry_run; then
59446e7d3316Smrg	    # Extract subdirectory from the argument.
59456e7d3316Smrg	    func_dirname "$arg" "/" ""
59466e7d3316Smrg	    xdir="$func_dirname_result"
59476e7d3316Smrg
59486e7d3316Smrg	    func_lo2o "$arg"
59496e7d3316Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
59506e7d3316Smrg	    non_pic_object=$xdir$func_lo2o_result
59516e7d3316Smrg	    func_append libobjs " $pic_object"
59526e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
59536e7d3316Smrg	  else
59546e7d3316Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
59556e7d3316Smrg	  fi
59566e7d3316Smrg	fi
59576e7d3316Smrg	;;
59586e7d3316Smrg
59596e7d3316Smrg      *.$libext)
59606e7d3316Smrg	# An archive.
596197cf2ee2Smrg	func_append deplibs " $arg"
596297cf2ee2Smrg	func_append old_deplibs " $arg"
59636e7d3316Smrg	continue
59646e7d3316Smrg	;;
59656e7d3316Smrg
59666e7d3316Smrg      *.la)
59676e7d3316Smrg	# A libtool-controlled library.
59686e7d3316Smrg
596997cf2ee2Smrg	func_resolve_sysroot "$arg"
59706e7d3316Smrg	if test "$prev" = dlfiles; then
59716e7d3316Smrg	  # This library was specified with -dlopen.
597297cf2ee2Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
59736e7d3316Smrg	  prev=
59746e7d3316Smrg	elif test "$prev" = dlprefiles; then
59756e7d3316Smrg	  # The library was specified with -dlpreopen.
597697cf2ee2Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
59776e7d3316Smrg	  prev=
59786e7d3316Smrg	else
597997cf2ee2Smrg	  func_append deplibs " $func_resolve_sysroot_result"
59806e7d3316Smrg	fi
59816e7d3316Smrg	continue
59826e7d3316Smrg	;;
59836e7d3316Smrg
59846e7d3316Smrg      # Some other compiler argument.
59856e7d3316Smrg      *)
59866e7d3316Smrg	# Unknown arguments in both finalize_command and compile_command need
59876e7d3316Smrg	# to be aesthetically quoted because they are evaled later.
59886e7d3316Smrg	func_quote_for_eval "$arg"
59896e7d3316Smrg	arg="$func_quote_for_eval_result"
59906e7d3316Smrg	;;
59916e7d3316Smrg      esac # arg
59926e7d3316Smrg
59936e7d3316Smrg      # Now actually substitute the argument into the commands.
59946e7d3316Smrg      if test -n "$arg"; then
59956e7d3316Smrg	func_append compile_command " $arg"
59966e7d3316Smrg	func_append finalize_command " $arg"
59976e7d3316Smrg      fi
59986e7d3316Smrg    done # argument parsing loop
59996e7d3316Smrg
60006e7d3316Smrg    test -n "$prev" && \
60016e7d3316Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
60026e7d3316Smrg
60036e7d3316Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
60046e7d3316Smrg      eval arg=\"$export_dynamic_flag_spec\"
60056e7d3316Smrg      func_append compile_command " $arg"
60066e7d3316Smrg      func_append finalize_command " $arg"
60076e7d3316Smrg    fi
60086e7d3316Smrg
60096e7d3316Smrg    oldlibs=
60106e7d3316Smrg    # calculate the name of the file, without its directory
60116e7d3316Smrg    func_basename "$output"
60126e7d3316Smrg    outputname="$func_basename_result"
60136e7d3316Smrg    libobjs_save="$libobjs"
60146e7d3316Smrg
60156e7d3316Smrg    if test -n "$shlibpath_var"; then
60166e7d3316Smrg      # get the directories listed in $shlibpath_var
60176e7d3316Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018a966c04fSmrg    else
60196e7d3316Smrg      shlib_search_path=
6020a966c04fSmrg    fi
60216e7d3316Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
60226e7d3316Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023a966c04fSmrg
60246e7d3316Smrg    func_dirname "$output" "/" ""
60256e7d3316Smrg    output_objdir="$func_dirname_result$objdir"
602697cf2ee2Smrg    func_to_tool_file "$output_objdir/"
602797cf2ee2Smrg    tool_output_objdir=$func_to_tool_file_result
60286e7d3316Smrg    # Create the object directory.
60296e7d3316Smrg    func_mkdir_p "$output_objdir"
6030a966c04fSmrg
60316e7d3316Smrg    # Determine the type of output
60326e7d3316Smrg    case $output in
60336e7d3316Smrg    "")
60346e7d3316Smrg      func_fatal_help "you must specify an output file"
60356e7d3316Smrg      ;;
60366e7d3316Smrg    *.$libext) linkmode=oldlib ;;
60376e7d3316Smrg    *.lo | *.$objext) linkmode=obj ;;
60386e7d3316Smrg    *.la) linkmode=lib ;;
60396e7d3316Smrg    *) linkmode=prog ;; # Anything else should be a program.
60406e7d3316Smrg    esac
60416e7d3316Smrg
60426e7d3316Smrg    specialdeplibs=
60436e7d3316Smrg
60446e7d3316Smrg    libs=
60456e7d3316Smrg    # Find all interdependent deplibs by searching for libraries
60466e7d3316Smrg    # that are linked more than once (e.g. -la -lb -la)
60476e7d3316Smrg    for deplib in $deplibs; do
604897cf2ee2Smrg      if $opt_preserve_dup_deps ; then
60496e7d3316Smrg	case "$libs " in
605097cf2ee2Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
60516e7d3316Smrg	esac
60526e7d3316Smrg      fi
605397cf2ee2Smrg      func_append libs " $deplib"
60546e7d3316Smrg    done
60556e7d3316Smrg
60566e7d3316Smrg    if test "$linkmode" = lib; then
60576e7d3316Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
60586e7d3316Smrg
60596e7d3316Smrg      # Compute libraries that are listed more than once in $predeps
60606e7d3316Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
60616e7d3316Smrg      # not to be eliminated).
60626e7d3316Smrg      pre_post_deps=
60636e7d3316Smrg      if $opt_duplicate_compiler_generated_deps; then
60646e7d3316Smrg	for pre_post_dep in $predeps $postdeps; do
60656e7d3316Smrg	  case "$pre_post_deps " in
606697cf2ee2Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
60676e7d3316Smrg	  esac
606897cf2ee2Smrg	  func_append pre_post_deps " $pre_post_dep"
60696e7d3316Smrg	done
60706e7d3316Smrg      fi
60716e7d3316Smrg      pre_post_deps=
60726e7d3316Smrg    fi
60736e7d3316Smrg
60746e7d3316Smrg    deplibs=
60756e7d3316Smrg    newdependency_libs=
60766e7d3316Smrg    newlib_search_path=
60776e7d3316Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
60786e7d3316Smrg    notinst_deplibs= # not-installed libtool libraries
60796e7d3316Smrg    notinst_path= # paths that contain not-installed libtool libraries
60806e7d3316Smrg
60816e7d3316Smrg    case $linkmode in
60826e7d3316Smrg    lib)
60836e7d3316Smrg	passes="conv dlpreopen link"
60846e7d3316Smrg	for file in $dlfiles $dlprefiles; do
60856e7d3316Smrg	  case $file in
60866e7d3316Smrg	  *.la) ;;
60876e7d3316Smrg	  *)
60886e7d3316Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
60896e7d3316Smrg	    ;;
60906e7d3316Smrg	  esac
60916e7d3316Smrg	done
60926e7d3316Smrg	;;
60936e7d3316Smrg    prog)
60946e7d3316Smrg	compile_deplibs=
60956e7d3316Smrg	finalize_deplibs=
60966e7d3316Smrg	alldeplibs=no
60976e7d3316Smrg	newdlfiles=
60986e7d3316Smrg	newdlprefiles=
60996e7d3316Smrg	passes="conv scan dlopen dlpreopen link"
61006e7d3316Smrg	;;
61016e7d3316Smrg    *)  passes="conv"
61026e7d3316Smrg	;;
61036e7d3316Smrg    esac
61046e7d3316Smrg
61056e7d3316Smrg    for pass in $passes; do
61066e7d3316Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
61076e7d3316Smrg      # so that -L comes before libs that need it for instance...
61086e7d3316Smrg      if test "$linkmode,$pass" = "lib,link"; then
61096e7d3316Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
61106e7d3316Smrg	##        order, and fix it there properly
61116e7d3316Smrg        tmp_deplibs=
61126e7d3316Smrg	for deplib in $deplibs; do
61136e7d3316Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
61146e7d3316Smrg	done
61156e7d3316Smrg	deplibs="$tmp_deplibs"
61166e7d3316Smrg      fi
61176e7d3316Smrg
61186e7d3316Smrg      if test "$linkmode,$pass" = "lib,link" ||
61196e7d3316Smrg	 test "$linkmode,$pass" = "prog,scan"; then
61206e7d3316Smrg	libs="$deplibs"
61216e7d3316Smrg	deplibs=
61226e7d3316Smrg      fi
61236e7d3316Smrg      if test "$linkmode" = prog; then
61246e7d3316Smrg	case $pass in
61256e7d3316Smrg	dlopen) libs="$dlfiles" ;;
61266e7d3316Smrg	dlpreopen) libs="$dlprefiles" ;;
61276e7d3316Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
61286e7d3316Smrg	esac
61296e7d3316Smrg      fi
61306e7d3316Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
61316e7d3316Smrg	# Collect and forward deplibs of preopened libtool libs
61326e7d3316Smrg	for lib in $dlprefiles; do
61336e7d3316Smrg	  # Ignore non-libtool-libs
61346e7d3316Smrg	  dependency_libs=
613597cf2ee2Smrg	  func_resolve_sysroot "$lib"
61366e7d3316Smrg	  case $lib in
613797cf2ee2Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
61386e7d3316Smrg	  esac
61396e7d3316Smrg
61406e7d3316Smrg	  # Collect preopened libtool deplibs, except any this library
61416e7d3316Smrg	  # has declared as weak libs
61426e7d3316Smrg	  for deplib in $dependency_libs; do
61436e7d3316Smrg	    func_basename "$deplib"
61446e7d3316Smrg            deplib_base=$func_basename_result
61456e7d3316Smrg	    case " $weak_libs " in
61466e7d3316Smrg	    *" $deplib_base "*) ;;
614797cf2ee2Smrg	    *) func_append deplibs " $deplib" ;;
61486e7d3316Smrg	    esac
61496e7d3316Smrg	  done
61506e7d3316Smrg	done
61516e7d3316Smrg	libs="$dlprefiles"
61526e7d3316Smrg      fi
61536e7d3316Smrg      if test "$pass" = dlopen; then
61546e7d3316Smrg	# Collect dlpreopened libraries
61556e7d3316Smrg	save_deplibs="$deplibs"
61566e7d3316Smrg	deplibs=
61576e7d3316Smrg      fi
61586e7d3316Smrg
61596e7d3316Smrg      for deplib in $libs; do
61606e7d3316Smrg	lib=
61616e7d3316Smrg	found=no
61626e7d3316Smrg	case $deplib in
6163ac92798bSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6164ac92798bSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
61656e7d3316Smrg	  if test "$linkmode,$pass" = "prog,link"; then
61666e7d3316Smrg	    compile_deplibs="$deplib $compile_deplibs"
61676e7d3316Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
61686e7d3316Smrg	  else
616997cf2ee2Smrg	    func_append compiler_flags " $deplib"
61706e7d3316Smrg	    if test "$linkmode" = lib ; then
61716e7d3316Smrg		case "$new_inherited_linker_flags " in
61726e7d3316Smrg		    *" $deplib "*) ;;
617397cf2ee2Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
61746e7d3316Smrg		esac
61756e7d3316Smrg	    fi
61766e7d3316Smrg	  fi
61776e7d3316Smrg	  continue
61786e7d3316Smrg	  ;;
61796e7d3316Smrg	-l*)
61806e7d3316Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
61816e7d3316Smrg	    func_warning "\`-l' is ignored for archives/objects"
61826e7d3316Smrg	    continue
61836e7d3316Smrg	  fi
61846e7d3316Smrg	  func_stripname '-l' '' "$deplib"
61856e7d3316Smrg	  name=$func_stripname_result
61866e7d3316Smrg	  if test "$linkmode" = lib; then
61876e7d3316Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
61886e7d3316Smrg	  else
61896e7d3316Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
61906e7d3316Smrg	  fi
61916e7d3316Smrg	  for searchdir in $searchdirs; do
61926e7d3316Smrg	    for search_ext in .la $std_shrext .so .a; do
61936e7d3316Smrg	      # Search the libtool library
61946e7d3316Smrg	      lib="$searchdir/lib${name}${search_ext}"
61956e7d3316Smrg	      if test -f "$lib"; then
61966e7d3316Smrg		if test "$search_ext" = ".la"; then
61976e7d3316Smrg		  found=yes
61986e7d3316Smrg		else
61996e7d3316Smrg		  found=no
62006e7d3316Smrg		fi
62016e7d3316Smrg		break 2
62026e7d3316Smrg	      fi
62036e7d3316Smrg	    done
62046e7d3316Smrg	  done
62056e7d3316Smrg	  if test "$found" != yes; then
62066e7d3316Smrg	    # deplib doesn't seem to be a libtool library
62076e7d3316Smrg	    if test "$linkmode,$pass" = "prog,link"; then
62086e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
62096e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
62106e7d3316Smrg	    else
62116e7d3316Smrg	      deplibs="$deplib $deplibs"
62126e7d3316Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
62136e7d3316Smrg	    fi
62146e7d3316Smrg	    continue
62156e7d3316Smrg	  else # deplib is a libtool library
62166e7d3316Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
62176e7d3316Smrg	    # We need to do some special things here, and not later.
62186e7d3316Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
62196e7d3316Smrg	      case " $predeps $postdeps " in
62206e7d3316Smrg	      *" $deplib "*)
62216e7d3316Smrg		if func_lalib_p "$lib"; then
62226e7d3316Smrg		  library_names=
62236e7d3316Smrg		  old_library=
62246e7d3316Smrg		  func_source "$lib"
62256e7d3316Smrg		  for l in $old_library $library_names; do
62266e7d3316Smrg		    ll="$l"
62276e7d3316Smrg		  done
62286e7d3316Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
62296e7d3316Smrg		    found=no
62306e7d3316Smrg		    func_dirname "$lib" "" "."
62316e7d3316Smrg		    ladir="$func_dirname_result"
62326e7d3316Smrg		    lib=$ladir/$old_library
62336e7d3316Smrg		    if test "$linkmode,$pass" = "prog,link"; then
62346e7d3316Smrg		      compile_deplibs="$deplib $compile_deplibs"
62356e7d3316Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
62366e7d3316Smrg		    else
62376e7d3316Smrg		      deplibs="$deplib $deplibs"
62386e7d3316Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
62396e7d3316Smrg		    fi
62406e7d3316Smrg		    continue
62416e7d3316Smrg		  fi
62426e7d3316Smrg		fi
62436e7d3316Smrg		;;
62446e7d3316Smrg	      *) ;;
62456e7d3316Smrg	      esac
62466e7d3316Smrg	    fi
62476e7d3316Smrg	  fi
62486e7d3316Smrg	  ;; # -l
62496e7d3316Smrg	*.ltframework)
62506e7d3316Smrg	  if test "$linkmode,$pass" = "prog,link"; then
62516e7d3316Smrg	    compile_deplibs="$deplib $compile_deplibs"
62526e7d3316Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
62536e7d3316Smrg	  else
62546e7d3316Smrg	    deplibs="$deplib $deplibs"
62556e7d3316Smrg	    if test "$linkmode" = lib ; then
62566e7d3316Smrg		case "$new_inherited_linker_flags " in
62576e7d3316Smrg		    *" $deplib "*) ;;
625897cf2ee2Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
62596e7d3316Smrg		esac
62606e7d3316Smrg	    fi
62616e7d3316Smrg	  fi
62626e7d3316Smrg	  continue
62636e7d3316Smrg	  ;;
62646e7d3316Smrg	-L*)
62656e7d3316Smrg	  case $linkmode in
62666e7d3316Smrg	  lib)
62676e7d3316Smrg	    deplibs="$deplib $deplibs"
62686e7d3316Smrg	    test "$pass" = conv && continue
62696e7d3316Smrg	    newdependency_libs="$deplib $newdependency_libs"
62706e7d3316Smrg	    func_stripname '-L' '' "$deplib"
627197cf2ee2Smrg	    func_resolve_sysroot "$func_stripname_result"
627297cf2ee2Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
62736e7d3316Smrg	    ;;
62746e7d3316Smrg	  prog)
62756e7d3316Smrg	    if test "$pass" = conv; then
62766e7d3316Smrg	      deplibs="$deplib $deplibs"
62776e7d3316Smrg	      continue
62786e7d3316Smrg	    fi
62796e7d3316Smrg	    if test "$pass" = scan; then
62806e7d3316Smrg	      deplibs="$deplib $deplibs"
62816e7d3316Smrg	    else
62826e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
62836e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
62846e7d3316Smrg	    fi
62856e7d3316Smrg	    func_stripname '-L' '' "$deplib"
628697cf2ee2Smrg	    func_resolve_sysroot "$func_stripname_result"
628797cf2ee2Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
62886e7d3316Smrg	    ;;
62896e7d3316Smrg	  *)
62906e7d3316Smrg	    func_warning "\`-L' is ignored for archives/objects"
62916e7d3316Smrg	    ;;
62926e7d3316Smrg	  esac # linkmode
62936e7d3316Smrg	  continue
62946e7d3316Smrg	  ;; # -L
62956e7d3316Smrg	-R*)
62966e7d3316Smrg	  if test "$pass" = link; then
62976e7d3316Smrg	    func_stripname '-R' '' "$deplib"
629897cf2ee2Smrg	    func_resolve_sysroot "$func_stripname_result"
629997cf2ee2Smrg	    dir=$func_resolve_sysroot_result
63006e7d3316Smrg	    # Make sure the xrpath contains only unique directories.
63016e7d3316Smrg	    case "$xrpath " in
63026e7d3316Smrg	    *" $dir "*) ;;
630397cf2ee2Smrg	    *) func_append xrpath " $dir" ;;
63046e7d3316Smrg	    esac
63056e7d3316Smrg	  fi
63066e7d3316Smrg	  deplibs="$deplib $deplibs"
63076e7d3316Smrg	  continue
63086e7d3316Smrg	  ;;
630997cf2ee2Smrg	*.la)
631097cf2ee2Smrg	  func_resolve_sysroot "$deplib"
631197cf2ee2Smrg	  lib=$func_resolve_sysroot_result
631297cf2ee2Smrg	  ;;
63136e7d3316Smrg	*.$libext)
63146e7d3316Smrg	  if test "$pass" = conv; then
63156e7d3316Smrg	    deplibs="$deplib $deplibs"
63166e7d3316Smrg	    continue
63176e7d3316Smrg	  fi
63186e7d3316Smrg	  case $linkmode in
63196e7d3316Smrg	  lib)
63206e7d3316Smrg	    # Linking convenience modules into shared libraries is allowed,
63216e7d3316Smrg	    # but linking other static libraries is non-portable.
63226e7d3316Smrg	    case " $dlpreconveniencelibs " in
63236e7d3316Smrg	    *" $deplib "*) ;;
63246e7d3316Smrg	    *)
63256e7d3316Smrg	      valid_a_lib=no
63266e7d3316Smrg	      case $deplibs_check_method in
63276e7d3316Smrg		match_pattern*)
63286e7d3316Smrg		  set dummy $deplibs_check_method; shift
63296e7d3316Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
63306e7d3316Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
63316e7d3316Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
63326e7d3316Smrg		    valid_a_lib=yes
63336e7d3316Smrg		  fi
63346e7d3316Smrg		;;
63356e7d3316Smrg		pass_all)
63366e7d3316Smrg		  valid_a_lib=yes
63376e7d3316Smrg		;;
63386e7d3316Smrg	      esac
63396e7d3316Smrg	      if test "$valid_a_lib" != yes; then
63406e7d3316Smrg		echo
63416e7d3316Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
63426e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
63436e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
63446e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
63456e7d3316Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
63466e7d3316Smrg		echo "*** that it is just a static archive that I should not use here."
63476e7d3316Smrg	      else
63486e7d3316Smrg		echo
63496e7d3316Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
63506e7d3316Smrg		$ECHO "*** static library $deplib is not portable!"
63516e7d3316Smrg		deplibs="$deplib $deplibs"
63526e7d3316Smrg	      fi
63536e7d3316Smrg	      ;;
63546e7d3316Smrg	    esac
63556e7d3316Smrg	    continue
63566e7d3316Smrg	    ;;
63576e7d3316Smrg	  prog)
63586e7d3316Smrg	    if test "$pass" != link; then
63596e7d3316Smrg	      deplibs="$deplib $deplibs"
63606e7d3316Smrg	    else
63616e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
63626e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
63636e7d3316Smrg	    fi
63646e7d3316Smrg	    continue
63656e7d3316Smrg	    ;;
63666e7d3316Smrg	  esac # linkmode
63676e7d3316Smrg	  ;; # *.$libext
63686e7d3316Smrg	*.lo | *.$objext)
63696e7d3316Smrg	  if test "$pass" = conv; then
63706e7d3316Smrg	    deplibs="$deplib $deplibs"
63716e7d3316Smrg	  elif test "$linkmode" = prog; then
63726e7d3316Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
63736e7d3316Smrg	      # If there is no dlopen support or we're linking statically,
63746e7d3316Smrg	      # we need to preload.
637597cf2ee2Smrg	      func_append newdlprefiles " $deplib"
63766e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
63776e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
63786e7d3316Smrg	    else
637997cf2ee2Smrg	      func_append newdlfiles " $deplib"
63806e7d3316Smrg	    fi
63816e7d3316Smrg	  fi
63826e7d3316Smrg	  continue
63836e7d3316Smrg	  ;;
63846e7d3316Smrg	%DEPLIBS%)
63856e7d3316Smrg	  alldeplibs=yes
63866e7d3316Smrg	  continue
63876e7d3316Smrg	  ;;
63886e7d3316Smrg	esac # case $deplib
63896e7d3316Smrg
63906e7d3316Smrg	if test "$found" = yes || test -f "$lib"; then :
63916e7d3316Smrg	else
63926e7d3316Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
63936e7d3316Smrg	fi
63946e7d3316Smrg
63956e7d3316Smrg	# Check to see that this really is a libtool archive.
63966e7d3316Smrg	func_lalib_unsafe_p "$lib" \
63976e7d3316Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
63986e7d3316Smrg
63996e7d3316Smrg	func_dirname "$lib" "" "."
64006e7d3316Smrg	ladir="$func_dirname_result"
64016e7d3316Smrg
64026e7d3316Smrg	dlname=
64036e7d3316Smrg	dlopen=
64046e7d3316Smrg	dlpreopen=
64056e7d3316Smrg	libdir=
64066e7d3316Smrg	library_names=
64076e7d3316Smrg	old_library=
64086e7d3316Smrg	inherited_linker_flags=
64096e7d3316Smrg	# If the library was installed with an old release of libtool,
64106e7d3316Smrg	# it will not redefine variables installed, or shouldnotlink
64116e7d3316Smrg	installed=yes
64126e7d3316Smrg	shouldnotlink=no
64136e7d3316Smrg	avoidtemprpath=
64146e7d3316Smrg
64156e7d3316Smrg
64166e7d3316Smrg	# Read the .la file
64176e7d3316Smrg	func_source "$lib"
64186e7d3316Smrg
64196e7d3316Smrg	# Convert "-framework foo" to "foo.ltframework"
64206e7d3316Smrg	if test -n "$inherited_linker_flags"; then
64216e7d3316Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
64226e7d3316Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
64236e7d3316Smrg	    case " $new_inherited_linker_flags " in
64246e7d3316Smrg	      *" $tmp_inherited_linker_flag "*) ;;
642597cf2ee2Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
64266e7d3316Smrg	    esac
64276e7d3316Smrg	  done
64286e7d3316Smrg	fi
64296e7d3316Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
64306e7d3316Smrg	if test "$linkmode,$pass" = "lib,link" ||
64316e7d3316Smrg	   test "$linkmode,$pass" = "prog,scan" ||
64326e7d3316Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
643397cf2ee2Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
643497cf2ee2Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
64356e7d3316Smrg	fi
64366e7d3316Smrg
64376e7d3316Smrg	if test "$pass" = conv; then
64386e7d3316Smrg	  # Only check for convenience libraries
64396e7d3316Smrg	  deplibs="$lib $deplibs"
64406e7d3316Smrg	  if test -z "$libdir"; then
64416e7d3316Smrg	    if test -z "$old_library"; then
64426e7d3316Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
64436e7d3316Smrg	    fi
64446e7d3316Smrg	    # It is a libtool convenience library, so add in its objects.
644597cf2ee2Smrg	    func_append convenience " $ladir/$objdir/$old_library"
644697cf2ee2Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
64476e7d3316Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
64486e7d3316Smrg	    func_fatal_error "\`$lib' is not a convenience library"
64496e7d3316Smrg	  fi
64506e7d3316Smrg	  tmp_libs=
64516e7d3316Smrg	  for deplib in $dependency_libs; do
64526e7d3316Smrg	    deplibs="$deplib $deplibs"
645397cf2ee2Smrg	    if $opt_preserve_dup_deps ; then
64546e7d3316Smrg	      case "$tmp_libs " in
645597cf2ee2Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
64566e7d3316Smrg	      esac
64576e7d3316Smrg	    fi
645897cf2ee2Smrg	    func_append tmp_libs " $deplib"
64596e7d3316Smrg	  done
64606e7d3316Smrg	  continue
64616e7d3316Smrg	fi # $pass = conv
64626e7d3316Smrg
64636e7d3316Smrg
64646e7d3316Smrg	# Get the name of the library we link against.
64656e7d3316Smrg	linklib=
646697cf2ee2Smrg	if test -n "$old_library" &&
646797cf2ee2Smrg	   { test "$prefer_static_libs" = yes ||
646897cf2ee2Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
646997cf2ee2Smrg	  linklib=$old_library
647097cf2ee2Smrg	else
647197cf2ee2Smrg	  for l in $old_library $library_names; do
647297cf2ee2Smrg	    linklib="$l"
647397cf2ee2Smrg	  done
647497cf2ee2Smrg	fi
64756e7d3316Smrg	if test -z "$linklib"; then
64766e7d3316Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
64776e7d3316Smrg	fi
64786e7d3316Smrg
64796e7d3316Smrg	# This library was specified with -dlopen.
64806e7d3316Smrg	if test "$pass" = dlopen; then
64816e7d3316Smrg	  if test -z "$libdir"; then
64826e7d3316Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
64836e7d3316Smrg	  fi
64846e7d3316Smrg	  if test -z "$dlname" ||
64856e7d3316Smrg	     test "$dlopen_support" != yes ||
64866e7d3316Smrg	     test "$build_libtool_libs" = no; then
64876e7d3316Smrg	    # If there is no dlname, no dlopen support or we're linking
64886e7d3316Smrg	    # statically, we need to preload.  We also need to preload any
64896e7d3316Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
64906e7d3316Smrg	    # bomb out in the load deplibs phase.
649197cf2ee2Smrg	    func_append dlprefiles " $lib $dependency_libs"
64926e7d3316Smrg	  else
649397cf2ee2Smrg	    func_append newdlfiles " $lib"
64946e7d3316Smrg	  fi
64956e7d3316Smrg	  continue
64966e7d3316Smrg	fi # $pass = dlopen
64976e7d3316Smrg
64986e7d3316Smrg	# We need an absolute path.
64996e7d3316Smrg	case $ladir in
65006e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
65016e7d3316Smrg	*)
65026e7d3316Smrg	  abs_ladir=`cd "$ladir" && pwd`
65036e7d3316Smrg	  if test -z "$abs_ladir"; then
65046e7d3316Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
65056e7d3316Smrg	    func_warning "passing it literally to the linker, although it might fail"
65066e7d3316Smrg	    abs_ladir="$ladir"
65076e7d3316Smrg	  fi
65086e7d3316Smrg	  ;;
65096e7d3316Smrg	esac
65106e7d3316Smrg	func_basename "$lib"
65116e7d3316Smrg	laname="$func_basename_result"
65126e7d3316Smrg
65136e7d3316Smrg	# Find the relevant object directory and library name.
65146e7d3316Smrg	if test "X$installed" = Xyes; then
651597cf2ee2Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65166e7d3316Smrg	    func_warning "library \`$lib' was moved."
65176e7d3316Smrg	    dir="$ladir"
65186e7d3316Smrg	    absdir="$abs_ladir"
65196e7d3316Smrg	    libdir="$abs_ladir"
65206e7d3316Smrg	  else
652197cf2ee2Smrg	    dir="$lt_sysroot$libdir"
652297cf2ee2Smrg	    absdir="$lt_sysroot$libdir"
65236e7d3316Smrg	  fi
65246e7d3316Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
65256e7d3316Smrg	else
65266e7d3316Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65276e7d3316Smrg	    dir="$ladir"
65286e7d3316Smrg	    absdir="$abs_ladir"
65296e7d3316Smrg	    # Remove this search path later
653097cf2ee2Smrg	    func_append notinst_path " $abs_ladir"
65316e7d3316Smrg	  else
65326e7d3316Smrg	    dir="$ladir/$objdir"
65336e7d3316Smrg	    absdir="$abs_ladir/$objdir"
65346e7d3316Smrg	    # Remove this search path later
653597cf2ee2Smrg	    func_append notinst_path " $abs_ladir"
65366e7d3316Smrg	  fi
65376e7d3316Smrg	fi # $installed = yes
65386e7d3316Smrg	func_stripname 'lib' '.la' "$laname"
65396e7d3316Smrg	name=$func_stripname_result
65406e7d3316Smrg
65416e7d3316Smrg	# This library was specified with -dlpreopen.
65426e7d3316Smrg	if test "$pass" = dlpreopen; then
65436e7d3316Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
65446e7d3316Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
65456e7d3316Smrg	  fi
654697cf2ee2Smrg	  case "$host" in
654797cf2ee2Smrg	    # special handling for platforms with PE-DLLs.
654897cf2ee2Smrg	    *cygwin* | *mingw* | *cegcc* )
654997cf2ee2Smrg	      # Linker will automatically link against shared library if both
655097cf2ee2Smrg	      # static and shared are present.  Therefore, ensure we extract
655197cf2ee2Smrg	      # symbols from the import library if a shared library is present
655297cf2ee2Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
655397cf2ee2Smrg	      # this by putting the import library name into $newdlprefiles.
655497cf2ee2Smrg	      # We recover the dlopen module name by 'saving' the la file
655597cf2ee2Smrg	      # name in a special purpose variable, and (later) extracting the
655697cf2ee2Smrg	      # dlname from the la file.
655797cf2ee2Smrg	      if test -n "$dlname"; then
655897cf2ee2Smrg	        func_tr_sh "$dir/$linklib"
655997cf2ee2Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
656097cf2ee2Smrg	        func_append newdlprefiles " $dir/$linklib"
656197cf2ee2Smrg	      else
656297cf2ee2Smrg	        func_append newdlprefiles " $dir/$old_library"
656397cf2ee2Smrg	        # Keep a list of preopened convenience libraries to check
656497cf2ee2Smrg	        # that they are being used correctly in the link pass.
656597cf2ee2Smrg	        test -z "$libdir" && \
656697cf2ee2Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
656797cf2ee2Smrg	      fi
656897cf2ee2Smrg	    ;;
656997cf2ee2Smrg	    * )
657097cf2ee2Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
657197cf2ee2Smrg	      # are required to link).
657297cf2ee2Smrg	      if test -n "$old_library"; then
657397cf2ee2Smrg	        func_append newdlprefiles " $dir/$old_library"
657497cf2ee2Smrg	        # Keep a list of preopened convenience libraries to check
657597cf2ee2Smrg	        # that they are being used correctly in the link pass.
657697cf2ee2Smrg	        test -z "$libdir" && \
657797cf2ee2Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
657897cf2ee2Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
657997cf2ee2Smrg	      elif test -n "$dlname"; then
658097cf2ee2Smrg	        func_append newdlprefiles " $dir/$dlname"
658197cf2ee2Smrg	      else
658297cf2ee2Smrg	        func_append newdlprefiles " $dir/$linklib"
658397cf2ee2Smrg	      fi
658497cf2ee2Smrg	    ;;
658597cf2ee2Smrg	  esac
65866e7d3316Smrg	fi # $pass = dlpreopen
65876e7d3316Smrg
65886e7d3316Smrg	if test -z "$libdir"; then
65896e7d3316Smrg	  # Link the convenience library
65906e7d3316Smrg	  if test "$linkmode" = lib; then
65916e7d3316Smrg	    deplibs="$dir/$old_library $deplibs"
65926e7d3316Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
65936e7d3316Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
65946e7d3316Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
65956e7d3316Smrg	  else
65966e7d3316Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
65976e7d3316Smrg	  fi
65986e7d3316Smrg	  continue
65996e7d3316Smrg	fi
66006e7d3316Smrg
66016e7d3316Smrg
66026e7d3316Smrg	if test "$linkmode" = prog && test "$pass" != link; then
660397cf2ee2Smrg	  func_append newlib_search_path " $ladir"
66046e7d3316Smrg	  deplibs="$lib $deplibs"
66056e7d3316Smrg
66066e7d3316Smrg	  linkalldeplibs=no
66076e7d3316Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
66086e7d3316Smrg	     test "$build_libtool_libs" = no; then
66096e7d3316Smrg	    linkalldeplibs=yes
66106e7d3316Smrg	  fi
66116e7d3316Smrg
66126e7d3316Smrg	  tmp_libs=
66136e7d3316Smrg	  for deplib in $dependency_libs; do
66146e7d3316Smrg	    case $deplib in
66156e7d3316Smrg	    -L*) func_stripname '-L' '' "$deplib"
661697cf2ee2Smrg	         func_resolve_sysroot "$func_stripname_result"
661797cf2ee2Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
66186e7d3316Smrg		 ;;
66196e7d3316Smrg	    esac
66206e7d3316Smrg	    # Need to link against all dependency_libs?
66216e7d3316Smrg	    if test "$linkalldeplibs" = yes; then
66226e7d3316Smrg	      deplibs="$deplib $deplibs"
66236e7d3316Smrg	    else
66246e7d3316Smrg	      # Need to hardcode shared library paths
66256e7d3316Smrg	      # or/and link against static libraries
66266e7d3316Smrg	      newdependency_libs="$deplib $newdependency_libs"
66276e7d3316Smrg	    fi
662897cf2ee2Smrg	    if $opt_preserve_dup_deps ; then
66296e7d3316Smrg	      case "$tmp_libs " in
663097cf2ee2Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
66316e7d3316Smrg	      esac
66326e7d3316Smrg	    fi
663397cf2ee2Smrg	    func_append tmp_libs " $deplib"
66346e7d3316Smrg	  done # for deplib
66356e7d3316Smrg	  continue
66366e7d3316Smrg	fi # $linkmode = prog...
66376e7d3316Smrg
66386e7d3316Smrg	if test "$linkmode,$pass" = "prog,link"; then
66396e7d3316Smrg	  if test -n "$library_names" &&
66406e7d3316Smrg	     { { test "$prefer_static_libs" = no ||
66416e7d3316Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
66426e7d3316Smrg	       test -z "$old_library"; }; then
66436e7d3316Smrg	    # We need to hardcode the library path
66446e7d3316Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
66456e7d3316Smrg	      # Make sure the rpath contains only unique directories.
66466e7d3316Smrg	      case "$temp_rpath:" in
66476e7d3316Smrg	      *"$absdir:"*) ;;
664897cf2ee2Smrg	      *) func_append temp_rpath "$absdir:" ;;
66496e7d3316Smrg	      esac
66506e7d3316Smrg	    fi
66516e7d3316Smrg
66526e7d3316Smrg	    # Hardcode the library path.
66536e7d3316Smrg	    # Skip directories that are in the system default run-time
66546e7d3316Smrg	    # search path.
66556e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
66566e7d3316Smrg	    *" $absdir "*) ;;
66576e7d3316Smrg	    *)
66586e7d3316Smrg	      case "$compile_rpath " in
66596e7d3316Smrg	      *" $absdir "*) ;;
666097cf2ee2Smrg	      *) func_append compile_rpath " $absdir" ;;
66616e7d3316Smrg	      esac
66626e7d3316Smrg	      ;;
66636e7d3316Smrg	    esac
66646e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
66656e7d3316Smrg	    *" $libdir "*) ;;
66666e7d3316Smrg	    *)
66676e7d3316Smrg	      case "$finalize_rpath " in
66686e7d3316Smrg	      *" $libdir "*) ;;
666997cf2ee2Smrg	      *) func_append finalize_rpath " $libdir" ;;
66706e7d3316Smrg	      esac
66716e7d3316Smrg	      ;;
66726e7d3316Smrg	    esac
66736e7d3316Smrg	  fi # $linkmode,$pass = prog,link...
66746e7d3316Smrg
66756e7d3316Smrg	  if test "$alldeplibs" = yes &&
66766e7d3316Smrg	     { test "$deplibs_check_method" = pass_all ||
66776e7d3316Smrg	       { test "$build_libtool_libs" = yes &&
66786e7d3316Smrg		 test -n "$library_names"; }; }; then
66796e7d3316Smrg	    # We only need to search for static libraries
66806e7d3316Smrg	    continue
66816e7d3316Smrg	  fi
66826e7d3316Smrg	fi
66836e7d3316Smrg
66846e7d3316Smrg	link_static=no # Whether the deplib will be linked statically
66856e7d3316Smrg	use_static_libs=$prefer_static_libs
66866e7d3316Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
66876e7d3316Smrg	  use_static_libs=no
66886e7d3316Smrg	fi
66896e7d3316Smrg	if test -n "$library_names" &&
66906e7d3316Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
66916e7d3316Smrg	  case $host in
66926e7d3316Smrg	  *cygwin* | *mingw* | *cegcc*)
66936e7d3316Smrg	      # No point in relinking DLLs because paths are not encoded
669497cf2ee2Smrg	      func_append notinst_deplibs " $lib"
66956e7d3316Smrg	      need_relink=no
66966e7d3316Smrg	    ;;
66976e7d3316Smrg	  *)
66986e7d3316Smrg	    if test "$installed" = no; then
669997cf2ee2Smrg	      func_append notinst_deplibs " $lib"
67006e7d3316Smrg	      need_relink=yes
67016e7d3316Smrg	    fi
67026e7d3316Smrg	    ;;
67036e7d3316Smrg	  esac
67046e7d3316Smrg	  # This is a shared library
67056e7d3316Smrg
67066e7d3316Smrg	  # Warn about portability, can't link against -module's on some
67076e7d3316Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
67086e7d3316Smrg	  dlopenmodule=""
67096e7d3316Smrg	  for dlpremoduletest in $dlprefiles; do
67106e7d3316Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
67116e7d3316Smrg	      dlopenmodule="$dlpremoduletest"
67126e7d3316Smrg	      break
67136e7d3316Smrg	    fi
67146e7d3316Smrg	  done
67156e7d3316Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
67166e7d3316Smrg	    echo
67176e7d3316Smrg	    if test "$linkmode" = prog; then
67186e7d3316Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
67196e7d3316Smrg	    else
67206e7d3316Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
67216e7d3316Smrg	    fi
67226e7d3316Smrg	    $ECHO "*** $linklib is not portable!"
67236e7d3316Smrg	  fi
67246e7d3316Smrg	  if test "$linkmode" = lib &&
67256e7d3316Smrg	     test "$hardcode_into_libs" = yes; then
67266e7d3316Smrg	    # Hardcode the library path.
67276e7d3316Smrg	    # Skip directories that are in the system default run-time
67286e7d3316Smrg	    # search path.
67296e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
67306e7d3316Smrg	    *" $absdir "*) ;;
67316e7d3316Smrg	    *)
67326e7d3316Smrg	      case "$compile_rpath " in
67336e7d3316Smrg	      *" $absdir "*) ;;
673497cf2ee2Smrg	      *) func_append compile_rpath " $absdir" ;;
67356e7d3316Smrg	      esac
67366e7d3316Smrg	      ;;
67376e7d3316Smrg	    esac
67386e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
67396e7d3316Smrg	    *" $libdir "*) ;;
67406e7d3316Smrg	    *)
67416e7d3316Smrg	      case "$finalize_rpath " in
67426e7d3316Smrg	      *" $libdir "*) ;;
674397cf2ee2Smrg	      *) func_append finalize_rpath " $libdir" ;;
67446e7d3316Smrg	      esac
67456e7d3316Smrg	      ;;
67466e7d3316Smrg	    esac
67476e7d3316Smrg	  fi
67486e7d3316Smrg
67496e7d3316Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
67506e7d3316Smrg	    # figure out the soname
67516e7d3316Smrg	    set dummy $library_names
67526e7d3316Smrg	    shift
67536e7d3316Smrg	    realname="$1"
67546e7d3316Smrg	    shift
67556e7d3316Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
67566e7d3316Smrg	    # use dlname if we got it. it's perfectly good, no?
67576e7d3316Smrg	    if test -n "$dlname"; then
67586e7d3316Smrg	      soname="$dlname"
67596e7d3316Smrg	    elif test -n "$soname_spec"; then
67606e7d3316Smrg	      # bleh windows
67616e7d3316Smrg	      case $host in
67626e7d3316Smrg	      *cygwin* | mingw* | *cegcc*)
67636e7d3316Smrg	        func_arith $current - $age
67646e7d3316Smrg		major=$func_arith_result
67656e7d3316Smrg		versuffix="-$major"
67666e7d3316Smrg		;;
67676e7d3316Smrg	      esac
67686e7d3316Smrg	      eval soname=\"$soname_spec\"
67696e7d3316Smrg	    else
67706e7d3316Smrg	      soname="$realname"
67716e7d3316Smrg	    fi
67726e7d3316Smrg
67736e7d3316Smrg	    # Make a new name for the extract_expsyms_cmds to use
67746e7d3316Smrg	    soroot="$soname"
67756e7d3316Smrg	    func_basename "$soroot"
67766e7d3316Smrg	    soname="$func_basename_result"
67776e7d3316Smrg	    func_stripname 'lib' '.dll' "$soname"
67786e7d3316Smrg	    newlib=libimp-$func_stripname_result.a
67796e7d3316Smrg
67806e7d3316Smrg	    # If the library has no export list, then create one now
67816e7d3316Smrg	    if test -f "$output_objdir/$soname-def"; then :
67826e7d3316Smrg	    else
67836e7d3316Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
67846e7d3316Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
67856e7d3316Smrg	    fi
67866e7d3316Smrg
67876e7d3316Smrg	    # Create $newlib
67886e7d3316Smrg	    if test -f "$output_objdir/$newlib"; then :; else
67896e7d3316Smrg	      func_verbose "generating import library for \`$soname'"
67906e7d3316Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
67916e7d3316Smrg	    fi
67926e7d3316Smrg	    # make sure the library variables are pointing to the new library
67936e7d3316Smrg	    dir=$output_objdir
67946e7d3316Smrg	    linklib=$newlib
67956e7d3316Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
67966e7d3316Smrg
679797cf2ee2Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
67986e7d3316Smrg	    add_shlibpath=
67996e7d3316Smrg	    add_dir=
68006e7d3316Smrg	    add=
68016e7d3316Smrg	    lib_linked=yes
68026e7d3316Smrg	    case $hardcode_action in
68036e7d3316Smrg	    immediate | unsupported)
68046e7d3316Smrg	      if test "$hardcode_direct" = no; then
68056e7d3316Smrg		add="$dir/$linklib"
68066e7d3316Smrg		case $host in
68076e7d3316Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
68086e7d3316Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
68096e7d3316Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
68106e7d3316Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
68116e7d3316Smrg		  *-*-darwin* )
68126e7d3316Smrg		    # if the lib is a (non-dlopened) module then we can not
68136e7d3316Smrg		    # link against it, someone is ignoring the earlier warnings
68146e7d3316Smrg		    if /usr/bin/file -L $add 2> /dev/null |
68156e7d3316Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
68166e7d3316Smrg		      if test "X$dlopenmodule" != "X$lib"; then
68176e7d3316Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
68186e7d3316Smrg			if test -z "$old_library" ; then
68196e7d3316Smrg			  echo
68206e7d3316Smrg			  echo "*** And there doesn't seem to be a static archive available"
68216e7d3316Smrg			  echo "*** The link will probably fail, sorry"
68226e7d3316Smrg			else
68236e7d3316Smrg			  add="$dir/$old_library"
68246e7d3316Smrg			fi
68256e7d3316Smrg		      elif test -n "$old_library"; then
68266e7d3316Smrg			add="$dir/$old_library"
68276e7d3316Smrg		      fi
68286e7d3316Smrg		    fi
68296e7d3316Smrg		esac
68306e7d3316Smrg	      elif test "$hardcode_minus_L" = no; then
68316e7d3316Smrg		case $host in
68326e7d3316Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
68336e7d3316Smrg		esac
68346e7d3316Smrg		add_dir="-L$dir"
68356e7d3316Smrg		add="-l$name"
68366e7d3316Smrg	      elif test "$hardcode_shlibpath_var" = no; then
68376e7d3316Smrg		add_shlibpath="$dir"
68386e7d3316Smrg		add="-l$name"
68396e7d3316Smrg	      else
68406e7d3316Smrg		lib_linked=no
68416e7d3316Smrg	      fi
68426e7d3316Smrg	      ;;
68436e7d3316Smrg	    relink)
68446e7d3316Smrg	      if test "$hardcode_direct" = yes &&
68456e7d3316Smrg	         test "$hardcode_direct_absolute" = no; then
68466e7d3316Smrg		add="$dir/$linklib"
68476e7d3316Smrg	      elif test "$hardcode_minus_L" = yes; then
6848ac92798bSmrg		add_dir="-L$absdir"
68496e7d3316Smrg		# Try looking first in the location we're being installed to.
68506e7d3316Smrg		if test -n "$inst_prefix_dir"; then
68516e7d3316Smrg		  case $libdir in
68526e7d3316Smrg		    [\\/]*)
685397cf2ee2Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
68546e7d3316Smrg		      ;;
68556e7d3316Smrg		  esac
68566e7d3316Smrg		fi
68576e7d3316Smrg		add="-l$name"
68586e7d3316Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
68596e7d3316Smrg		add_shlibpath="$dir"
68606e7d3316Smrg		add="-l$name"
68616e7d3316Smrg	      else
68626e7d3316Smrg		lib_linked=no
68636e7d3316Smrg	      fi
68646e7d3316Smrg	      ;;
68656e7d3316Smrg	    *) lib_linked=no ;;
68666e7d3316Smrg	    esac
68676e7d3316Smrg
68686e7d3316Smrg	    if test "$lib_linked" != yes; then
68696e7d3316Smrg	      func_fatal_configuration "unsupported hardcode properties"
68706e7d3316Smrg	    fi
68716e7d3316Smrg
68726e7d3316Smrg	    if test -n "$add_shlibpath"; then
68736e7d3316Smrg	      case :$compile_shlibpath: in
68746e7d3316Smrg	      *":$add_shlibpath:"*) ;;
687597cf2ee2Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
68766e7d3316Smrg	      esac
68776e7d3316Smrg	    fi
68786e7d3316Smrg	    if test "$linkmode" = prog; then
68796e7d3316Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
68806e7d3316Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
68816e7d3316Smrg	    else
68826e7d3316Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
68836e7d3316Smrg	      test -n "$add" && deplibs="$add $deplibs"
68846e7d3316Smrg	      if test "$hardcode_direct" != yes &&
68856e7d3316Smrg		 test "$hardcode_minus_L" != yes &&
68866e7d3316Smrg		 test "$hardcode_shlibpath_var" = yes; then
68876e7d3316Smrg		case :$finalize_shlibpath: in
68886e7d3316Smrg		*":$libdir:"*) ;;
688997cf2ee2Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
68906e7d3316Smrg		esac
68916e7d3316Smrg	      fi
68926e7d3316Smrg	    fi
68936e7d3316Smrg	  fi
68946e7d3316Smrg
689597cf2ee2Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
68966e7d3316Smrg	    add_shlibpath=
68976e7d3316Smrg	    add_dir=
68986e7d3316Smrg	    add=
68996e7d3316Smrg	    # Finalize command for both is simple: just hardcode it.
69006e7d3316Smrg	    if test "$hardcode_direct" = yes &&
69016e7d3316Smrg	       test "$hardcode_direct_absolute" = no; then
69026e7d3316Smrg	      add="$libdir/$linklib"
69036e7d3316Smrg	    elif test "$hardcode_minus_L" = yes; then
69046e7d3316Smrg	      add_dir="-L$libdir"
69056e7d3316Smrg	      add="-l$name"
69066e7d3316Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
69076e7d3316Smrg	      case :$finalize_shlibpath: in
69086e7d3316Smrg	      *":$libdir:"*) ;;
690997cf2ee2Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
69106e7d3316Smrg	      esac
69116e7d3316Smrg	      add="-l$name"
69126e7d3316Smrg	    elif test "$hardcode_automatic" = yes; then
69136e7d3316Smrg	      if test -n "$inst_prefix_dir" &&
69146e7d3316Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
69156e7d3316Smrg		add="$inst_prefix_dir$libdir/$linklib"
69166e7d3316Smrg	      else
69176e7d3316Smrg		add="$libdir/$linklib"
69186e7d3316Smrg	      fi
69196e7d3316Smrg	    else
69206e7d3316Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
69216e7d3316Smrg	      add_dir="-L$libdir"
69226e7d3316Smrg	      # Try looking first in the location we're being installed to.
69236e7d3316Smrg	      if test -n "$inst_prefix_dir"; then
69246e7d3316Smrg		case $libdir in
69256e7d3316Smrg		  [\\/]*)
692697cf2ee2Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
69276e7d3316Smrg		    ;;
69286e7d3316Smrg		esac
69296e7d3316Smrg	      fi
69306e7d3316Smrg	      add="-l$name"
69316e7d3316Smrg	    fi
69326e7d3316Smrg
69336e7d3316Smrg	    if test "$linkmode" = prog; then
69346e7d3316Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
69356e7d3316Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
69366e7d3316Smrg	    else
69376e7d3316Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
69386e7d3316Smrg	      test -n "$add" && deplibs="$add $deplibs"
69396e7d3316Smrg	    fi
69406e7d3316Smrg	  fi
69416e7d3316Smrg	elif test "$linkmode" = prog; then
69426e7d3316Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
69436e7d3316Smrg	  # is not unsupported.  This is valid on all known static and
69446e7d3316Smrg	  # shared platforms.
69456e7d3316Smrg	  if test "$hardcode_direct" != unsupported; then
69466e7d3316Smrg	    test -n "$old_library" && linklib="$old_library"
69476e7d3316Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
69486e7d3316Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
69496e7d3316Smrg	  else
69506e7d3316Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
69516e7d3316Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
69526e7d3316Smrg	  fi
69536e7d3316Smrg	elif test "$build_libtool_libs" = yes; then
69546e7d3316Smrg	  # Not a shared library
69556e7d3316Smrg	  if test "$deplibs_check_method" != pass_all; then
69566e7d3316Smrg	    # We're trying link a shared library against a static one
69576e7d3316Smrg	    # but the system doesn't support it.
69586e7d3316Smrg
69596e7d3316Smrg	    # Just print a warning and add the library to dependency_libs so
69606e7d3316Smrg	    # that the program can be linked against the static library.
69616e7d3316Smrg	    echo
69626e7d3316Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
69636e7d3316Smrg	    echo "*** I have the capability to make that library automatically link in when"
69646e7d3316Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
69656e7d3316Smrg	    echo "*** shared version of the library, which you do not appear to have."
69666e7d3316Smrg	    if test "$module" = yes; then
69676e7d3316Smrg	      echo "*** But as you try to build a module library, libtool will still create "
69686e7d3316Smrg	      echo "*** a static module, that should work as long as the dlopening application"
69696e7d3316Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
69706e7d3316Smrg	      if test -z "$global_symbol_pipe"; then
69716e7d3316Smrg		echo
69726e7d3316Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69736e7d3316Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
69746e7d3316Smrg		echo "*** not find such a program.  So, this module is probably useless."
69756e7d3316Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
69766e7d3316Smrg	      fi
69776e7d3316Smrg	      if test "$build_old_libs" = no; then
69786e7d3316Smrg		build_libtool_libs=module
69796e7d3316Smrg		build_old_libs=yes
69806e7d3316Smrg	      else
69816e7d3316Smrg		build_libtool_libs=no
69826e7d3316Smrg	      fi
69836e7d3316Smrg	    fi
69846e7d3316Smrg	  else
69856e7d3316Smrg	    deplibs="$dir/$old_library $deplibs"
69866e7d3316Smrg	    link_static=yes
69876e7d3316Smrg	  fi
69886e7d3316Smrg	fi # link shared/static library?
69896e7d3316Smrg
69906e7d3316Smrg	if test "$linkmode" = lib; then
69916e7d3316Smrg	  if test -n "$dependency_libs" &&
69926e7d3316Smrg	     { test "$hardcode_into_libs" != yes ||
69936e7d3316Smrg	       test "$build_old_libs" = yes ||
69946e7d3316Smrg	       test "$link_static" = yes; }; then
69956e7d3316Smrg	    # Extract -R from dependency_libs
69966e7d3316Smrg	    temp_deplibs=
69976e7d3316Smrg	    for libdir in $dependency_libs; do
69986e7d3316Smrg	      case $libdir in
69996e7d3316Smrg	      -R*) func_stripname '-R' '' "$libdir"
70006e7d3316Smrg	           temp_xrpath=$func_stripname_result
70016e7d3316Smrg		   case " $xrpath " in
70026e7d3316Smrg		   *" $temp_xrpath "*) ;;
700397cf2ee2Smrg		   *) func_append xrpath " $temp_xrpath";;
70046e7d3316Smrg		   esac;;
700597cf2ee2Smrg	      *) func_append temp_deplibs " $libdir";;
70066e7d3316Smrg	      esac
70076e7d3316Smrg	    done
70086e7d3316Smrg	    dependency_libs="$temp_deplibs"
70096e7d3316Smrg	  fi
70106e7d3316Smrg
701197cf2ee2Smrg	  func_append newlib_search_path " $absdir"
70126e7d3316Smrg	  # Link against this library
70136e7d3316Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
70146e7d3316Smrg	  # ... and its dependency_libs
70156e7d3316Smrg	  tmp_libs=
70166e7d3316Smrg	  for deplib in $dependency_libs; do
70176e7d3316Smrg	    newdependency_libs="$deplib $newdependency_libs"
701897cf2ee2Smrg	    case $deplib in
701997cf2ee2Smrg              -L*) func_stripname '-L' '' "$deplib"
702097cf2ee2Smrg                   func_resolve_sysroot "$func_stripname_result";;
702197cf2ee2Smrg              *) func_resolve_sysroot "$deplib" ;;
702297cf2ee2Smrg            esac
702397cf2ee2Smrg	    if $opt_preserve_dup_deps ; then
70246e7d3316Smrg	      case "$tmp_libs " in
702597cf2ee2Smrg	      *" $func_resolve_sysroot_result "*)
702697cf2ee2Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
70276e7d3316Smrg	      esac
70286e7d3316Smrg	    fi
702997cf2ee2Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
70306e7d3316Smrg	  done
70316e7d3316Smrg
70326e7d3316Smrg	  if test "$link_all_deplibs" != no; then
70336e7d3316Smrg	    # Add the search paths of all dependency libraries
70346e7d3316Smrg	    for deplib in $dependency_libs; do
70356e7d3316Smrg	      path=
70366e7d3316Smrg	      case $deplib in
70376e7d3316Smrg	      -L*) path="$deplib" ;;
70386e7d3316Smrg	      *.la)
703997cf2ee2Smrg	        func_resolve_sysroot "$deplib"
704097cf2ee2Smrg	        deplib=$func_resolve_sysroot_result
70416e7d3316Smrg	        func_dirname "$deplib" "" "."
704297cf2ee2Smrg		dir=$func_dirname_result
70436e7d3316Smrg		# We need an absolute path.
70446e7d3316Smrg		case $dir in
70456e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
70466e7d3316Smrg		*)
70476e7d3316Smrg		  absdir=`cd "$dir" && pwd`
70486e7d3316Smrg		  if test -z "$absdir"; then
70496e7d3316Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
70506e7d3316Smrg		    absdir="$dir"
70516e7d3316Smrg		  fi
70526e7d3316Smrg		  ;;
70536e7d3316Smrg		esac
70546e7d3316Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
70556e7d3316Smrg		case $host in
70566e7d3316Smrg		*-*-darwin*)
70576e7d3316Smrg		  depdepl=
70586e7d3316Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
70596e7d3316Smrg		  if test -n "$deplibrary_names" ; then
70606e7d3316Smrg		    for tmp in $deplibrary_names ; do
70616e7d3316Smrg		      depdepl=$tmp
70626e7d3316Smrg		    done
70636e7d3316Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
70646e7d3316Smrg		      depdepl="$absdir/$objdir/$depdepl"
70656e7d3316Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
70666e7d3316Smrg                      if test -z "$darwin_install_name"; then
70676e7d3316Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
70686e7d3316Smrg                      fi
706997cf2ee2Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
707097cf2ee2Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
70716e7d3316Smrg		      path=
70726e7d3316Smrg		    fi
70736e7d3316Smrg		  fi
70746e7d3316Smrg		  ;;
70756e7d3316Smrg		*)
70766e7d3316Smrg		  path="-L$absdir/$objdir"
70776e7d3316Smrg		  ;;
70786e7d3316Smrg		esac
70796e7d3316Smrg		else
70806e7d3316Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
70816e7d3316Smrg		  test -z "$libdir" && \
70826e7d3316Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
70836e7d3316Smrg		  test "$absdir" != "$libdir" && \
70846e7d3316Smrg		    func_warning "\`$deplib' seems to be moved"
70856e7d3316Smrg
70866e7d3316Smrg		  path="-L$absdir"
70876e7d3316Smrg		fi
70886e7d3316Smrg		;;
70896e7d3316Smrg	      esac
70906e7d3316Smrg	      case " $deplibs " in
70916e7d3316Smrg	      *" $path "*) ;;
70926e7d3316Smrg	      *) deplibs="$path $deplibs" ;;
70936e7d3316Smrg	      esac
70946e7d3316Smrg	    done
70956e7d3316Smrg	  fi # link_all_deplibs != no
70966e7d3316Smrg	fi # linkmode = lib
70976e7d3316Smrg      done # for deplib in $libs
70986e7d3316Smrg      if test "$pass" = link; then
70996e7d3316Smrg	if test "$linkmode" = "prog"; then
71006e7d3316Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
71016e7d3316Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
71026e7d3316Smrg	else
71036e7d3316Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
71046e7d3316Smrg	fi
71056e7d3316Smrg      fi
71066e7d3316Smrg      dependency_libs="$newdependency_libs"
71076e7d3316Smrg      if test "$pass" = dlpreopen; then
71086e7d3316Smrg	# Link the dlpreopened libraries before other libraries
71096e7d3316Smrg	for deplib in $save_deplibs; do
71106e7d3316Smrg	  deplibs="$deplib $deplibs"
71116e7d3316Smrg	done
71126e7d3316Smrg      fi
71136e7d3316Smrg      if test "$pass" != dlopen; then
71146e7d3316Smrg	if test "$pass" != conv; then
71156e7d3316Smrg	  # Make sure lib_search_path contains only unique directories.
71166e7d3316Smrg	  lib_search_path=
71176e7d3316Smrg	  for dir in $newlib_search_path; do
71186e7d3316Smrg	    case "$lib_search_path " in
71196e7d3316Smrg	    *" $dir "*) ;;
712097cf2ee2Smrg	    *) func_append lib_search_path " $dir" ;;
71216e7d3316Smrg	    esac
71226e7d3316Smrg	  done
71236e7d3316Smrg	  newlib_search_path=
71246e7d3316Smrg	fi
71256e7d3316Smrg
71266e7d3316Smrg	if test "$linkmode,$pass" != "prog,link"; then
71276e7d3316Smrg	  vars="deplibs"
71286e7d3316Smrg	else
71296e7d3316Smrg	  vars="compile_deplibs finalize_deplibs"
71306e7d3316Smrg	fi
71316e7d3316Smrg	for var in $vars dependency_libs; do
71326e7d3316Smrg	  # Add libraries to $var in reverse order
71336e7d3316Smrg	  eval tmp_libs=\"\$$var\"
71346e7d3316Smrg	  new_libs=
71356e7d3316Smrg	  for deplib in $tmp_libs; do
71366e7d3316Smrg	    # FIXME: Pedantically, this is the right thing to do, so
71376e7d3316Smrg	    #        that some nasty dependency loop isn't accidentally
71386e7d3316Smrg	    #        broken:
71396e7d3316Smrg	    #new_libs="$deplib $new_libs"
71406e7d3316Smrg	    # Pragmatically, this seems to cause very few problems in
71416e7d3316Smrg	    # practice:
71426e7d3316Smrg	    case $deplib in
71436e7d3316Smrg	    -L*) new_libs="$deplib $new_libs" ;;
71446e7d3316Smrg	    -R*) ;;
71456e7d3316Smrg	    *)
71466e7d3316Smrg	      # And here is the reason: when a library appears more
71476e7d3316Smrg	      # than once as an explicit dependence of a library, or
71486e7d3316Smrg	      # is implicitly linked in more than once by the
71496e7d3316Smrg	      # compiler, it is considered special, and multiple
71506e7d3316Smrg	      # occurrences thereof are not removed.  Compare this
71516e7d3316Smrg	      # with having the same library being listed as a
71526e7d3316Smrg	      # dependency of multiple other libraries: in this case,
71536e7d3316Smrg	      # we know (pedantically, we assume) the library does not
71546e7d3316Smrg	      # need to be listed more than once, so we keep only the
71556e7d3316Smrg	      # last copy.  This is not always right, but it is rare
71566e7d3316Smrg	      # enough that we require users that really mean to play
71576e7d3316Smrg	      # such unportable linking tricks to link the library
71586e7d3316Smrg	      # using -Wl,-lname, so that libtool does not consider it
71596e7d3316Smrg	      # for duplicate removal.
71606e7d3316Smrg	      case " $specialdeplibs " in
71616e7d3316Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
71626e7d3316Smrg	      *)
71636e7d3316Smrg		case " $new_libs " in
71646e7d3316Smrg		*" $deplib "*) ;;
71656e7d3316Smrg		*) new_libs="$deplib $new_libs" ;;
71666e7d3316Smrg		esac
71676e7d3316Smrg		;;
71686e7d3316Smrg	      esac
71696e7d3316Smrg	      ;;
71706e7d3316Smrg	    esac
71716e7d3316Smrg	  done
71726e7d3316Smrg	  tmp_libs=
71736e7d3316Smrg	  for deplib in $new_libs; do
71746e7d3316Smrg	    case $deplib in
71756e7d3316Smrg	    -L*)
71766e7d3316Smrg	      case " $tmp_libs " in
71776e7d3316Smrg	      *" $deplib "*) ;;
717897cf2ee2Smrg	      *) func_append tmp_libs " $deplib" ;;
71796e7d3316Smrg	      esac
71806e7d3316Smrg	      ;;
718197cf2ee2Smrg	    *) func_append tmp_libs " $deplib" ;;
71826e7d3316Smrg	    esac
71836e7d3316Smrg	  done
71846e7d3316Smrg	  eval $var=\"$tmp_libs\"
71856e7d3316Smrg	done # for var
71866e7d3316Smrg      fi
71876e7d3316Smrg      # Last step: remove runtime libs from dependency_libs
71886e7d3316Smrg      # (they stay in deplibs)
71896e7d3316Smrg      tmp_libs=
71906e7d3316Smrg      for i in $dependency_libs ; do
71916e7d3316Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
71926e7d3316Smrg	*" $i "*)
71936e7d3316Smrg	  i=""
71946e7d3316Smrg	  ;;
71956e7d3316Smrg	esac
71966e7d3316Smrg	if test -n "$i" ; then
719797cf2ee2Smrg	  func_append tmp_libs " $i"
71986e7d3316Smrg	fi
71996e7d3316Smrg      done
72006e7d3316Smrg      dependency_libs=$tmp_libs
72016e7d3316Smrg    done # for pass
72026e7d3316Smrg    if test "$linkmode" = prog; then
72036e7d3316Smrg      dlfiles="$newdlfiles"
72046e7d3316Smrg    fi
72056e7d3316Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
72066e7d3316Smrg      dlprefiles="$newdlprefiles"
72076e7d3316Smrg    fi
72086e7d3316Smrg
72096e7d3316Smrg    case $linkmode in
72106e7d3316Smrg    oldlib)
72116e7d3316Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
72126e7d3316Smrg	func_warning "\`-dlopen' is ignored for archives"
72136e7d3316Smrg      fi
72146e7d3316Smrg
72156e7d3316Smrg      case " $deplibs" in
72166e7d3316Smrg      *\ -l* | *\ -L*)
72176e7d3316Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
72186e7d3316Smrg      esac
72196e7d3316Smrg
72206e7d3316Smrg      test -n "$rpath" && \
72216e7d3316Smrg	func_warning "\`-rpath' is ignored for archives"
72226e7d3316Smrg
72236e7d3316Smrg      test -n "$xrpath" && \
72246e7d3316Smrg	func_warning "\`-R' is ignored for archives"
72256e7d3316Smrg
72266e7d3316Smrg      test -n "$vinfo" && \
72276e7d3316Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
72286e7d3316Smrg
72296e7d3316Smrg      test -n "$release" && \
72306e7d3316Smrg	func_warning "\`-release' is ignored for archives"
72316e7d3316Smrg
72326e7d3316Smrg      test -n "$export_symbols$export_symbols_regex" && \
72336e7d3316Smrg	func_warning "\`-export-symbols' is ignored for archives"
72346e7d3316Smrg
72356e7d3316Smrg      # Now set the variables for building old libraries.
72366e7d3316Smrg      build_libtool_libs=no
72376e7d3316Smrg      oldlibs="$output"
723897cf2ee2Smrg      func_append objs "$old_deplibs"
72396e7d3316Smrg      ;;
72406e7d3316Smrg
72416e7d3316Smrg    lib)
72426e7d3316Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
72436e7d3316Smrg      case $outputname in
72446e7d3316Smrg      lib*)
72456e7d3316Smrg	func_stripname 'lib' '.la' "$outputname"
72466e7d3316Smrg	name=$func_stripname_result
72476e7d3316Smrg	eval shared_ext=\"$shrext_cmds\"
72486e7d3316Smrg	eval libname=\"$libname_spec\"
72496e7d3316Smrg	;;
72506e7d3316Smrg      *)
72516e7d3316Smrg	test "$module" = no && \
72526e7d3316Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
72536e7d3316Smrg
72546e7d3316Smrg	if test "$need_lib_prefix" != no; then
72556e7d3316Smrg	  # Add the "lib" prefix for modules if required
72566e7d3316Smrg	  func_stripname '' '.la' "$outputname"
72576e7d3316Smrg	  name=$func_stripname_result
72586e7d3316Smrg	  eval shared_ext=\"$shrext_cmds\"
72596e7d3316Smrg	  eval libname=\"$libname_spec\"
72606e7d3316Smrg	else
72616e7d3316Smrg	  func_stripname '' '.la' "$outputname"
72626e7d3316Smrg	  libname=$func_stripname_result
72636e7d3316Smrg	fi
72646e7d3316Smrg	;;
72656e7d3316Smrg      esac
72666e7d3316Smrg
72676e7d3316Smrg      if test -n "$objs"; then
72686e7d3316Smrg	if test "$deplibs_check_method" != pass_all; then
72696e7d3316Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
72706e7d3316Smrg	else
72716e7d3316Smrg	  echo
72726e7d3316Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
72736e7d3316Smrg	  $ECHO "*** objects $objs is not portable!"
727497cf2ee2Smrg	  func_append libobjs " $objs"
72756e7d3316Smrg	fi
72766e7d3316Smrg      fi
72776e7d3316Smrg
72786e7d3316Smrg      test "$dlself" != no && \
72796e7d3316Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
72806e7d3316Smrg
72816e7d3316Smrg      set dummy $rpath
72826e7d3316Smrg      shift
72836e7d3316Smrg      test "$#" -gt 1 && \
72846e7d3316Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
72856e7d3316Smrg
72866e7d3316Smrg      install_libdir="$1"
72876e7d3316Smrg
72886e7d3316Smrg      oldlibs=
72896e7d3316Smrg      if test -z "$rpath"; then
72906e7d3316Smrg	if test "$build_libtool_libs" = yes; then
72916e7d3316Smrg	  # Building a libtool convenience library.
72926e7d3316Smrg	  # Some compilers have problems with a `.al' extension so
72936e7d3316Smrg	  # convenience libraries should have the same extension an
72946e7d3316Smrg	  # archive normally would.
72956e7d3316Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
72966e7d3316Smrg	  build_libtool_libs=convenience
72976e7d3316Smrg	  build_old_libs=yes
72986e7d3316Smrg	fi
72996e7d3316Smrg
73006e7d3316Smrg	test -n "$vinfo" && \
73016e7d3316Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
73026e7d3316Smrg
73036e7d3316Smrg	test -n "$release" && \
73046e7d3316Smrg	  func_warning "\`-release' is ignored for convenience libraries"
73056e7d3316Smrg      else
73066e7d3316Smrg
73076e7d3316Smrg	# Parse the version information argument.
73086e7d3316Smrg	save_ifs="$IFS"; IFS=':'
73096e7d3316Smrg	set dummy $vinfo 0 0 0
73106e7d3316Smrg	shift
73116e7d3316Smrg	IFS="$save_ifs"
73126e7d3316Smrg
73136e7d3316Smrg	test -n "$7" && \
73146e7d3316Smrg	  func_fatal_help "too many parameters to \`-version-info'"
73156e7d3316Smrg
73166e7d3316Smrg	# convert absolute version numbers to libtool ages
73176e7d3316Smrg	# this retains compatibility with .la files and attempts
73186e7d3316Smrg	# to make the code below a bit more comprehensible
73196e7d3316Smrg
73206e7d3316Smrg	case $vinfo_number in
73216e7d3316Smrg	yes)
73226e7d3316Smrg	  number_major="$1"
73236e7d3316Smrg	  number_minor="$2"
73246e7d3316Smrg	  number_revision="$3"
73256e7d3316Smrg	  #
73266e7d3316Smrg	  # There are really only two kinds -- those that
73276e7d3316Smrg	  # use the current revision as the major version
73286e7d3316Smrg	  # and those that subtract age and use age as
73296e7d3316Smrg	  # a minor version.  But, then there is irix
73306e7d3316Smrg	  # which has an extra 1 added just for fun
73316e7d3316Smrg	  #
73326e7d3316Smrg	  case $version_type in
7333ac92798bSmrg	  # correct linux to gnu/linux during the next big refactor
73346e7d3316Smrg	  darwin|linux|osf|windows|none)
73356e7d3316Smrg	    func_arith $number_major + $number_minor
73366e7d3316Smrg	    current=$func_arith_result
73376e7d3316Smrg	    age="$number_minor"
73386e7d3316Smrg	    revision="$number_revision"
73396e7d3316Smrg	    ;;
73406e7d3316Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
73416e7d3316Smrg	    current="$number_major"
73426e7d3316Smrg	    revision="$number_minor"
73436e7d3316Smrg	    age="0"
73446e7d3316Smrg	    ;;
73456e7d3316Smrg	  irix|nonstopux)
73466e7d3316Smrg	    func_arith $number_major + $number_minor
73476e7d3316Smrg	    current=$func_arith_result
73486e7d3316Smrg	    age="$number_minor"
73496e7d3316Smrg	    revision="$number_minor"
73506e7d3316Smrg	    lt_irix_increment=no
73516e7d3316Smrg	    ;;
73526e7d3316Smrg	  esac
73536e7d3316Smrg	  ;;
73546e7d3316Smrg	no)
73556e7d3316Smrg	  current="$1"
73566e7d3316Smrg	  revision="$2"
73576e7d3316Smrg	  age="$3"
73586e7d3316Smrg	  ;;
73596e7d3316Smrg	esac
73606e7d3316Smrg
73616e7d3316Smrg	# Check that each of the things are valid numbers.
73626e7d3316Smrg	case $current in
73636e7d3316Smrg	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]) ;;
73646e7d3316Smrg	*)
73656e7d3316Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
73666e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73676e7d3316Smrg	  ;;
73686e7d3316Smrg	esac
73696e7d3316Smrg
73706e7d3316Smrg	case $revision in
73716e7d3316Smrg	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]) ;;
73726e7d3316Smrg	*)
73736e7d3316Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
73746e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73756e7d3316Smrg	  ;;
73766e7d3316Smrg	esac
73776e7d3316Smrg
73786e7d3316Smrg	case $age in
73796e7d3316Smrg	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]) ;;
73806e7d3316Smrg	*)
73816e7d3316Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
73826e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73836e7d3316Smrg	  ;;
73846e7d3316Smrg	esac
73856e7d3316Smrg
73866e7d3316Smrg	if test "$age" -gt "$current"; then
73876e7d3316Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
73886e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
73896e7d3316Smrg	fi
73906e7d3316Smrg
73916e7d3316Smrg	# Calculate the version variables.
73926e7d3316Smrg	major=
73936e7d3316Smrg	versuffix=
73946e7d3316Smrg	verstring=
73956e7d3316Smrg	case $version_type in
73966e7d3316Smrg	none) ;;
73976e7d3316Smrg
73986e7d3316Smrg	darwin)
73996e7d3316Smrg	  # Like Linux, but with the current version available in
74006e7d3316Smrg	  # verstring for coding it into the library header
74016e7d3316Smrg	  func_arith $current - $age
74026e7d3316Smrg	  major=.$func_arith_result
74036e7d3316Smrg	  versuffix="$major.$age.$revision"
74046e7d3316Smrg	  # Darwin ld doesn't like 0 for these options...
74056e7d3316Smrg	  func_arith $current + 1
74066e7d3316Smrg	  minor_current=$func_arith_result
74076e7d3316Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
74086e7d3316Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
74096e7d3316Smrg	  ;;
74106e7d3316Smrg
74116e7d3316Smrg	freebsd-aout)
74126e7d3316Smrg	  major=".$current"
74136e7d3316Smrg	  versuffix=".$current.$revision";
74146e7d3316Smrg	  ;;
74156e7d3316Smrg
74166e7d3316Smrg	freebsd-elf)
74176e7d3316Smrg	  major=".$current"
74186e7d3316Smrg	  versuffix=".$current"
74196e7d3316Smrg	  ;;
74206e7d3316Smrg
74216e7d3316Smrg	irix | nonstopux)
74226e7d3316Smrg	  if test "X$lt_irix_increment" = "Xno"; then
74236e7d3316Smrg	    func_arith $current - $age
74246e7d3316Smrg	  else
74256e7d3316Smrg	    func_arith $current - $age + 1
74266e7d3316Smrg	  fi
74276e7d3316Smrg	  major=$func_arith_result
74286e7d3316Smrg
74296e7d3316Smrg	  case $version_type in
74306e7d3316Smrg	    nonstopux) verstring_prefix=nonstopux ;;
74316e7d3316Smrg	    *)         verstring_prefix=sgi ;;
74326e7d3316Smrg	  esac
74336e7d3316Smrg	  verstring="$verstring_prefix$major.$revision"
74346e7d3316Smrg
74356e7d3316Smrg	  # Add in all the interfaces that we are compatible with.
74366e7d3316Smrg	  loop=$revision
74376e7d3316Smrg	  while test "$loop" -ne 0; do
74386e7d3316Smrg	    func_arith $revision - $loop
74396e7d3316Smrg	    iface=$func_arith_result
74406e7d3316Smrg	    func_arith $loop - 1
74416e7d3316Smrg	    loop=$func_arith_result
74426e7d3316Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
74436e7d3316Smrg	  done
74446e7d3316Smrg
74456e7d3316Smrg	  # Before this point, $major must not contain `.'.
74466e7d3316Smrg	  major=.$major
74476e7d3316Smrg	  versuffix="$major.$revision"
74486e7d3316Smrg	  ;;
74496e7d3316Smrg
7450ac92798bSmrg	linux) # correct to gnu/linux during the next big refactor
74516e7d3316Smrg	  func_arith $current - $age
74526e7d3316Smrg	  major=.$func_arith_result
74536e7d3316Smrg	  versuffix="$major.$age.$revision"
74546e7d3316Smrg	  ;;
74556e7d3316Smrg
74566e7d3316Smrg	osf)
74576e7d3316Smrg	  func_arith $current - $age
74586e7d3316Smrg	  major=.$func_arith_result
74596e7d3316Smrg	  versuffix=".$current.$age.$revision"
74606e7d3316Smrg	  verstring="$current.$age.$revision"
74616e7d3316Smrg
74626e7d3316Smrg	  # Add in all the interfaces that we are compatible with.
74636e7d3316Smrg	  loop=$age
74646e7d3316Smrg	  while test "$loop" -ne 0; do
74656e7d3316Smrg	    func_arith $current - $loop
74666e7d3316Smrg	    iface=$func_arith_result
74676e7d3316Smrg	    func_arith $loop - 1
74686e7d3316Smrg	    loop=$func_arith_result
74696e7d3316Smrg	    verstring="$verstring:${iface}.0"
74706e7d3316Smrg	  done
74716e7d3316Smrg
74726e7d3316Smrg	  # Make executables depend on our current version.
747397cf2ee2Smrg	  func_append verstring ":${current}.0"
74746e7d3316Smrg	  ;;
74756e7d3316Smrg
74766e7d3316Smrg	qnx)
74776e7d3316Smrg	  major=".$current"
74786e7d3316Smrg	  versuffix=".$current"
74796e7d3316Smrg	  ;;
74806e7d3316Smrg
74816e7d3316Smrg	sunos)
74826e7d3316Smrg	  major=".$current"
74836e7d3316Smrg	  versuffix=".$current.$revision"
74846e7d3316Smrg	  ;;
74856e7d3316Smrg
74866e7d3316Smrg	windows)
74876e7d3316Smrg	  # Use '-' rather than '.', since we only want one
74886e7d3316Smrg	  # extension on DOS 8.3 filesystems.
74896e7d3316Smrg	  func_arith $current - $age
74906e7d3316Smrg	  major=$func_arith_result
74916e7d3316Smrg	  versuffix="-$major"
74926e7d3316Smrg	  ;;
74936e7d3316Smrg
74946e7d3316Smrg	*)
74956e7d3316Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
74966e7d3316Smrg	  ;;
74976e7d3316Smrg	esac
74986e7d3316Smrg
74996e7d3316Smrg	# Clear the version info if we defaulted, and they specified a release.
75006e7d3316Smrg	if test -z "$vinfo" && test -n "$release"; then
75016e7d3316Smrg	  major=
75026e7d3316Smrg	  case $version_type in
75036e7d3316Smrg	  darwin)
75046e7d3316Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
75056e7d3316Smrg	    # problems, so we reset it completely
75066e7d3316Smrg	    verstring=
75076e7d3316Smrg	    ;;
75086e7d3316Smrg	  *)
75096e7d3316Smrg	    verstring="0.0"
75106e7d3316Smrg	    ;;
75116e7d3316Smrg	  esac
75126e7d3316Smrg	  if test "$need_version" = no; then
75136e7d3316Smrg	    versuffix=
75146e7d3316Smrg	  else
75156e7d3316Smrg	    versuffix=".0.0"
75166e7d3316Smrg	  fi
75176e7d3316Smrg	fi
75186e7d3316Smrg
75196e7d3316Smrg	# Remove version info from name if versioning should be avoided
75206e7d3316Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
75216e7d3316Smrg	  major=
75226e7d3316Smrg	  versuffix=
75236e7d3316Smrg	  verstring=""
75246e7d3316Smrg	fi
75256e7d3316Smrg
75266e7d3316Smrg	# Check to see if the archive will have undefined symbols.
75276e7d3316Smrg	if test "$allow_undefined" = yes; then
75286e7d3316Smrg	  if test "$allow_undefined_flag" = unsupported; then
75296e7d3316Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
75306e7d3316Smrg	    build_libtool_libs=no
75316e7d3316Smrg	    build_old_libs=yes
75326e7d3316Smrg	  fi
75336e7d3316Smrg	else
75346e7d3316Smrg	  # Don't allow undefined symbols.
75356e7d3316Smrg	  allow_undefined_flag="$no_undefined_flag"
75366e7d3316Smrg	fi
75376e7d3316Smrg
75386e7d3316Smrg      fi
75396e7d3316Smrg
75406e7d3316Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
754197cf2ee2Smrg      func_append libobjs " $symfileobj"
75426e7d3316Smrg      test "X$libobjs" = "X " && libobjs=
75436e7d3316Smrg
754497cf2ee2Smrg      if test "$opt_mode" != relink; then
75456e7d3316Smrg	# Remove our outputs, but don't remove object files since they
75466e7d3316Smrg	# may have been created when compiling PIC objects.
75476e7d3316Smrg	removelist=
75486e7d3316Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
75496e7d3316Smrg	for p in $tempremovelist; do
75506e7d3316Smrg	  case $p in
75516e7d3316Smrg	    *.$objext | *.gcno)
75526e7d3316Smrg	       ;;
75536e7d3316Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
75546e7d3316Smrg	       if test "X$precious_files_regex" != "X"; then
75556e7d3316Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
75566e7d3316Smrg		 then
75576e7d3316Smrg		   continue
75586e7d3316Smrg		 fi
75596e7d3316Smrg	       fi
756097cf2ee2Smrg	       func_append removelist " $p"
75616e7d3316Smrg	       ;;
75626e7d3316Smrg	    *) ;;
75636e7d3316Smrg	  esac
75646e7d3316Smrg	done
75656e7d3316Smrg	test -n "$removelist" && \
75666e7d3316Smrg	  func_show_eval "${RM}r \$removelist"
75676e7d3316Smrg      fi
75686e7d3316Smrg
75696e7d3316Smrg      # Now set the variables for building old libraries.
75706e7d3316Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
757197cf2ee2Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
75726e7d3316Smrg
75736e7d3316Smrg	# Transform .lo files to .o files.
75746e7d3316Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
75756e7d3316Smrg      fi
75766e7d3316Smrg
75776e7d3316Smrg      # Eliminate all temporary directories.
75786e7d3316Smrg      #for path in $notinst_path; do
75796e7d3316Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
75806e7d3316Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
75816e7d3316Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
75826e7d3316Smrg      #done
75836e7d3316Smrg
75846e7d3316Smrg      if test -n "$xrpath"; then
75856e7d3316Smrg	# If the user specified any rpath flags, then add them.
75866e7d3316Smrg	temp_xrpath=
75876e7d3316Smrg	for libdir in $xrpath; do
758897cf2ee2Smrg	  func_replace_sysroot "$libdir"
758997cf2ee2Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
75906e7d3316Smrg	  case "$finalize_rpath " in
75916e7d3316Smrg	  *" $libdir "*) ;;
759297cf2ee2Smrg	  *) func_append finalize_rpath " $libdir" ;;
75936e7d3316Smrg	  esac
75946e7d3316Smrg	done
75956e7d3316Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
75966e7d3316Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
75976e7d3316Smrg	fi
75986e7d3316Smrg      fi
75996e7d3316Smrg
76006e7d3316Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
76016e7d3316Smrg      old_dlfiles="$dlfiles"
76026e7d3316Smrg      dlfiles=
76036e7d3316Smrg      for lib in $old_dlfiles; do
76046e7d3316Smrg	case " $dlprefiles $dlfiles " in
76056e7d3316Smrg	*" $lib "*) ;;
760697cf2ee2Smrg	*) func_append dlfiles " $lib" ;;
76076e7d3316Smrg	esac
76086e7d3316Smrg      done
76096e7d3316Smrg
76106e7d3316Smrg      # Make sure dlprefiles contains only unique files
76116e7d3316Smrg      old_dlprefiles="$dlprefiles"
76126e7d3316Smrg      dlprefiles=
76136e7d3316Smrg      for lib in $old_dlprefiles; do
76146e7d3316Smrg	case "$dlprefiles " in
76156e7d3316Smrg	*" $lib "*) ;;
761697cf2ee2Smrg	*) func_append dlprefiles " $lib" ;;
76176e7d3316Smrg	esac
76186e7d3316Smrg      done
76196e7d3316Smrg
76206e7d3316Smrg      if test "$build_libtool_libs" = yes; then
76216e7d3316Smrg	if test -n "$rpath"; then
76226e7d3316Smrg	  case $host in
76236e7d3316Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
76246e7d3316Smrg	    # these systems don't actually have a c library (as such)!
76256e7d3316Smrg	    ;;
76266e7d3316Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
76276e7d3316Smrg	    # Rhapsody C library is in the System framework
762897cf2ee2Smrg	    func_append deplibs " System.ltframework"
76296e7d3316Smrg	    ;;
76306e7d3316Smrg	  *-*-netbsd*)
76316e7d3316Smrg	    # Don't link with libc until the a.out ld.so is fixed.
76326e7d3316Smrg	    ;;
76336e7d3316Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
76346e7d3316Smrg	    # Do not include libc due to us having libc/libc_r.
76356e7d3316Smrg	    ;;
76366e7d3316Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
76376e7d3316Smrg	    # Causes problems with __ctype
76386e7d3316Smrg	    ;;
76396e7d3316Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
76406e7d3316Smrg	    # Compiler inserts libc in the correct place for threads to work
76416e7d3316Smrg	    ;;
76426e7d3316Smrg	  *)
76436e7d3316Smrg	    # Add libc to deplibs on all other systems if necessary.
76446e7d3316Smrg	    if test "$build_libtool_need_lc" = "yes"; then
764597cf2ee2Smrg	      func_append deplibs " -lc"
76466e7d3316Smrg	    fi
76476e7d3316Smrg	    ;;
76486e7d3316Smrg	  esac
76496e7d3316Smrg	fi
76506e7d3316Smrg
76516e7d3316Smrg	# Transform deplibs into only deplibs that can be linked in shared.
76526e7d3316Smrg	name_save=$name
76536e7d3316Smrg	libname_save=$libname
76546e7d3316Smrg	release_save=$release
76556e7d3316Smrg	versuffix_save=$versuffix
76566e7d3316Smrg	major_save=$major
76576e7d3316Smrg	# I'm not sure if I'm treating the release correctly.  I think
76586e7d3316Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
76596e7d3316Smrg	# add it in twice.  Is that correct?
76606e7d3316Smrg	release=""
76616e7d3316Smrg	versuffix=""
76626e7d3316Smrg	major=""
76636e7d3316Smrg	newdeplibs=
76646e7d3316Smrg	droppeddeps=no
76656e7d3316Smrg	case $deplibs_check_method in
76666e7d3316Smrg	pass_all)
76676e7d3316Smrg	  # Don't check for shared/static.  Everything works.
76686e7d3316Smrg	  # This might be a little naive.  We might want to check
76696e7d3316Smrg	  # whether the library exists or not.  But this is on
76706e7d3316Smrg	  # osf3 & osf4 and I'm not really sure... Just
76716e7d3316Smrg	  # implementing what was already the behavior.
76726e7d3316Smrg	  newdeplibs=$deplibs
76736e7d3316Smrg	  ;;
76746e7d3316Smrg	test_compile)
76756e7d3316Smrg	  # This code stresses the "libraries are programs" paradigm to its
76766e7d3316Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
76776e7d3316Smrg	  # against the deplibs as a proxy for the library.  Then we can check
76786e7d3316Smrg	  # whether they linked in statically or dynamically with ldd.
76796e7d3316Smrg	  $opt_dry_run || $RM conftest.c
76806e7d3316Smrg	  cat > conftest.c <<EOF
76816e7d3316Smrg	  int main() { return 0; }
76826e7d3316SmrgEOF
76836e7d3316Smrg	  $opt_dry_run || $RM conftest
76846e7d3316Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
76856e7d3316Smrg	    ldd_output=`ldd conftest`
76866e7d3316Smrg	    for i in $deplibs; do
76876e7d3316Smrg	      case $i in
76886e7d3316Smrg	      -l*)
76896e7d3316Smrg		func_stripname -l '' "$i"
76906e7d3316Smrg		name=$func_stripname_result
76916e7d3316Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
76926e7d3316Smrg		  case " $predeps $postdeps " in
76936e7d3316Smrg		  *" $i "*)
769497cf2ee2Smrg		    func_append newdeplibs " $i"
76956e7d3316Smrg		    i=""
76966e7d3316Smrg		    ;;
76976e7d3316Smrg		  esac
76986e7d3316Smrg		fi
76996e7d3316Smrg		if test -n "$i" ; then
77006e7d3316Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
77016e7d3316Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
77026e7d3316Smrg		  set dummy $deplib_matches; shift
77036e7d3316Smrg		  deplib_match=$1
77046e7d3316Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
770597cf2ee2Smrg		    func_append newdeplibs " $i"
77066e7d3316Smrg		  else
77076e7d3316Smrg		    droppeddeps=yes
77086e7d3316Smrg		    echo
77096e7d3316Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77106e7d3316Smrg		    echo "*** I have the capability to make that library automatically link in when"
77116e7d3316Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
77126e7d3316Smrg		    echo "*** shared version of the library, which I believe you do not have"
77136e7d3316Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
77146e7d3316Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
77156e7d3316Smrg		  fi
77166e7d3316Smrg		fi
77176e7d3316Smrg		;;
77186e7d3316Smrg	      *)
771997cf2ee2Smrg		func_append newdeplibs " $i"
77206e7d3316Smrg		;;
77216e7d3316Smrg	      esac
77226e7d3316Smrg	    done
77236e7d3316Smrg	  else
77246e7d3316Smrg	    # Error occurred in the first compile.  Let's try to salvage
77256e7d3316Smrg	    # the situation: Compile a separate program for each library.
77266e7d3316Smrg	    for i in $deplibs; do
77276e7d3316Smrg	      case $i in
77286e7d3316Smrg	      -l*)
77296e7d3316Smrg		func_stripname -l '' "$i"
77306e7d3316Smrg		name=$func_stripname_result
77316e7d3316Smrg		$opt_dry_run || $RM conftest
77326e7d3316Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
77336e7d3316Smrg		  ldd_output=`ldd conftest`
77346e7d3316Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
77356e7d3316Smrg		    case " $predeps $postdeps " in
77366e7d3316Smrg		    *" $i "*)
773797cf2ee2Smrg		      func_append newdeplibs " $i"
77386e7d3316Smrg		      i=""
77396e7d3316Smrg		      ;;
77406e7d3316Smrg		    esac
77416e7d3316Smrg		  fi
77426e7d3316Smrg		  if test -n "$i" ; then
77436e7d3316Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
77446e7d3316Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
77456e7d3316Smrg		    set dummy $deplib_matches; shift
77466e7d3316Smrg		    deplib_match=$1
77476e7d3316Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
774897cf2ee2Smrg		      func_append newdeplibs " $i"
77496e7d3316Smrg		    else
77506e7d3316Smrg		      droppeddeps=yes
77516e7d3316Smrg		      echo
77526e7d3316Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77536e7d3316Smrg		      echo "*** I have the capability to make that library automatically link in when"
77546e7d3316Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
77556e7d3316Smrg		      echo "*** shared version of the library, which you do not appear to have"
77566e7d3316Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
77576e7d3316Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
77586e7d3316Smrg		    fi
77596e7d3316Smrg		  fi
77606e7d3316Smrg		else
77616e7d3316Smrg		  droppeddeps=yes
77626e7d3316Smrg		  echo
77636e7d3316Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
77646e7d3316Smrg		  echo "*** make it link in!  You will probably need to install it or some"
77656e7d3316Smrg		  echo "*** library that it depends on before this library will be fully"
77666e7d3316Smrg		  echo "*** functional.  Installing it before continuing would be even better."
77676e7d3316Smrg		fi
77686e7d3316Smrg		;;
77696e7d3316Smrg	      *)
777097cf2ee2Smrg		func_append newdeplibs " $i"
77716e7d3316Smrg		;;
77726e7d3316Smrg	      esac
77736e7d3316Smrg	    done
77746e7d3316Smrg	  fi
77756e7d3316Smrg	  ;;
77766e7d3316Smrg	file_magic*)
77776e7d3316Smrg	  set dummy $deplibs_check_method; shift
77786e7d3316Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
77796e7d3316Smrg	  for a_deplib in $deplibs; do
77806e7d3316Smrg	    case $a_deplib in
77816e7d3316Smrg	    -l*)
77826e7d3316Smrg	      func_stripname -l '' "$a_deplib"
77836e7d3316Smrg	      name=$func_stripname_result
77846e7d3316Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
77856e7d3316Smrg		case " $predeps $postdeps " in
77866e7d3316Smrg		*" $a_deplib "*)
778797cf2ee2Smrg		  func_append newdeplibs " $a_deplib"
77886e7d3316Smrg		  a_deplib=""
77896e7d3316Smrg		  ;;
77906e7d3316Smrg		esac
77916e7d3316Smrg	      fi
77926e7d3316Smrg	      if test -n "$a_deplib" ; then
77936e7d3316Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
779497cf2ee2Smrg		if test -n "$file_magic_glob"; then
779597cf2ee2Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
779697cf2ee2Smrg		else
779797cf2ee2Smrg		  libnameglob=$libname
779897cf2ee2Smrg		fi
779997cf2ee2Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
78006e7d3316Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
780197cf2ee2Smrg		  if test "$want_nocaseglob" = yes; then
780297cf2ee2Smrg		    shopt -s nocaseglob
780397cf2ee2Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
780497cf2ee2Smrg		    $nocaseglob
780597cf2ee2Smrg		  else
780697cf2ee2Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
780797cf2ee2Smrg		  fi
78086e7d3316Smrg		  for potent_lib in $potential_libs; do
78096e7d3316Smrg		      # Follow soft links.
78106e7d3316Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
78116e7d3316Smrg			 $GREP " -> " >/dev/null; then
78126e7d3316Smrg			continue
78136e7d3316Smrg		      fi
78146e7d3316Smrg		      # The statement above tries to avoid entering an
78156e7d3316Smrg		      # endless loop below, in case of cyclic links.
78166e7d3316Smrg		      # We might still enter an endless loop, since a link
78176e7d3316Smrg		      # loop can be closed while we follow links,
78186e7d3316Smrg		      # but so what?
78196e7d3316Smrg		      potlib="$potent_lib"
78206e7d3316Smrg		      while test -h "$potlib" 2>/dev/null; do
78216e7d3316Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
78226e7d3316Smrg			case $potliblink in
78236e7d3316Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78246e7d3316Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
78256e7d3316Smrg			esac
78266e7d3316Smrg		      done
78276e7d3316Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
78286e7d3316Smrg			 $SED -e 10q |
78296e7d3316Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
783097cf2ee2Smrg			func_append newdeplibs " $a_deplib"
78316e7d3316Smrg			a_deplib=""
78326e7d3316Smrg			break 2
78336e7d3316Smrg		      fi
78346e7d3316Smrg		  done
78356e7d3316Smrg		done
78366e7d3316Smrg	      fi
78376e7d3316Smrg	      if test -n "$a_deplib" ; then
78386e7d3316Smrg		droppeddeps=yes
78396e7d3316Smrg		echo
78406e7d3316Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78416e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
78426e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78436e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
78446e7d3316Smrg		echo "*** because I did check the linker path looking for a file starting"
78456e7d3316Smrg		if test -z "$potlib" ; then
78466e7d3316Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
78476e7d3316Smrg		else
78486e7d3316Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
78496e7d3316Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
78506e7d3316Smrg		fi
78516e7d3316Smrg	      fi
78526e7d3316Smrg	      ;;
78536e7d3316Smrg	    *)
78546e7d3316Smrg	      # Add a -L argument.
785597cf2ee2Smrg	      func_append newdeplibs " $a_deplib"
78566e7d3316Smrg	      ;;
78576e7d3316Smrg	    esac
78586e7d3316Smrg	  done # Gone through all deplibs.
78596e7d3316Smrg	  ;;
78606e7d3316Smrg	match_pattern*)
78616e7d3316Smrg	  set dummy $deplibs_check_method; shift
78626e7d3316Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
78636e7d3316Smrg	  for a_deplib in $deplibs; do
78646e7d3316Smrg	    case $a_deplib in
78656e7d3316Smrg	    -l*)
78666e7d3316Smrg	      func_stripname -l '' "$a_deplib"
78676e7d3316Smrg	      name=$func_stripname_result
78686e7d3316Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
78696e7d3316Smrg		case " $predeps $postdeps " in
78706e7d3316Smrg		*" $a_deplib "*)
787197cf2ee2Smrg		  func_append newdeplibs " $a_deplib"
78726e7d3316Smrg		  a_deplib=""
78736e7d3316Smrg		  ;;
78746e7d3316Smrg		esac
78756e7d3316Smrg	      fi
78766e7d3316Smrg	      if test -n "$a_deplib" ; then
78776e7d3316Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
78786e7d3316Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78796e7d3316Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
78806e7d3316Smrg		  for potent_lib in $potential_libs; do
78816e7d3316Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
78826e7d3316Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
78836e7d3316Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
788497cf2ee2Smrg		      func_append newdeplibs " $a_deplib"
78856e7d3316Smrg		      a_deplib=""
78866e7d3316Smrg		      break 2
78876e7d3316Smrg		    fi
78886e7d3316Smrg		  done
78896e7d3316Smrg		done
78906e7d3316Smrg	      fi
78916e7d3316Smrg	      if test -n "$a_deplib" ; then
78926e7d3316Smrg		droppeddeps=yes
78936e7d3316Smrg		echo
78946e7d3316Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78956e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
78966e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78976e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
78986e7d3316Smrg		echo "*** because I did check the linker path looking for a file starting"
78996e7d3316Smrg		if test -z "$potlib" ; then
79006e7d3316Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
79016e7d3316Smrg		else
79026e7d3316Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
79036e7d3316Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
79046e7d3316Smrg		fi
79056e7d3316Smrg	      fi
79066e7d3316Smrg	      ;;
79076e7d3316Smrg	    *)
79086e7d3316Smrg	      # Add a -L argument.
790997cf2ee2Smrg	      func_append newdeplibs " $a_deplib"
79106e7d3316Smrg	      ;;
79116e7d3316Smrg	    esac
79126e7d3316Smrg	  done # Gone through all deplibs.
79136e7d3316Smrg	  ;;
79146e7d3316Smrg	none | unknown | *)
79156e7d3316Smrg	  newdeplibs=""
79166e7d3316Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
79176e7d3316Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
79186e7d3316Smrg	    for i in $predeps $postdeps ; do
79196e7d3316Smrg	      # can't use Xsed below, because $i might contain '/'
79206e7d3316Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
79216e7d3316Smrg	    done
79226e7d3316Smrg	  fi
79236e7d3316Smrg	  case $tmp_deplibs in
79246e7d3316Smrg	  *[!\	\ ]*)
79256e7d3316Smrg	    echo
79266e7d3316Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
79276e7d3316Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
79286e7d3316Smrg	    else
79296e7d3316Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
79306e7d3316Smrg	    fi
79316e7d3316Smrg	    echo "*** All declared inter-library dependencies are being dropped."
79326e7d3316Smrg	    droppeddeps=yes
79336e7d3316Smrg	    ;;
79346e7d3316Smrg	  esac
79356e7d3316Smrg	  ;;
79366e7d3316Smrg	esac
79376e7d3316Smrg	versuffix=$versuffix_save
79386e7d3316Smrg	major=$major_save
79396e7d3316Smrg	release=$release_save
79406e7d3316Smrg	libname=$libname_save
79416e7d3316Smrg	name=$name_save
79426e7d3316Smrg
79436e7d3316Smrg	case $host in
79446e7d3316Smrg	*-*-rhapsody* | *-*-darwin1.[012])
79456e7d3316Smrg	  # On Rhapsody replace the C library with the System framework
79466e7d3316Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
79476e7d3316Smrg	  ;;
79486e7d3316Smrg	esac
79496e7d3316Smrg
79506e7d3316Smrg	if test "$droppeddeps" = yes; then
79516e7d3316Smrg	  if test "$module" = yes; then
79526e7d3316Smrg	    echo
79536e7d3316Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
79546e7d3316Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
79556e7d3316Smrg	    echo "*** a static module, that should work as long as the dlopening"
79566e7d3316Smrg	    echo "*** application is linked with the -dlopen flag."
79576e7d3316Smrg	    if test -z "$global_symbol_pipe"; then
79586e7d3316Smrg	      echo
79596e7d3316Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79606e7d3316Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
79616e7d3316Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79626e7d3316Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
79636e7d3316Smrg	    fi
79646e7d3316Smrg	    if test "$build_old_libs" = no; then
79656e7d3316Smrg	      oldlibs="$output_objdir/$libname.$libext"
79666e7d3316Smrg	      build_libtool_libs=module
79676e7d3316Smrg	      build_old_libs=yes
79686e7d3316Smrg	    else
79696e7d3316Smrg	      build_libtool_libs=no
79706e7d3316Smrg	    fi
79716e7d3316Smrg	  else
79726e7d3316Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
79736e7d3316Smrg	    echo "*** automatically added whenever a program is linked with this library"
79746e7d3316Smrg	    echo "*** or is declared to -dlopen it."
79756e7d3316Smrg
79766e7d3316Smrg	    if test "$allow_undefined" = no; then
79776e7d3316Smrg	      echo
79786e7d3316Smrg	      echo "*** Since this library must not contain undefined symbols,"
79796e7d3316Smrg	      echo "*** because either the platform does not support them or"
79806e7d3316Smrg	      echo "*** it was explicitly requested with -no-undefined,"
79816e7d3316Smrg	      echo "*** libtool will only create a static version of it."
79826e7d3316Smrg	      if test "$build_old_libs" = no; then
79836e7d3316Smrg		oldlibs="$output_objdir/$libname.$libext"
79846e7d3316Smrg		build_libtool_libs=module
79856e7d3316Smrg		build_old_libs=yes
79866e7d3316Smrg	      else
79876e7d3316Smrg		build_libtool_libs=no
79886e7d3316Smrg	      fi
79896e7d3316Smrg	    fi
79906e7d3316Smrg	  fi
79916e7d3316Smrg	fi
79926e7d3316Smrg	# Done checking deplibs!
79936e7d3316Smrg	deplibs=$newdeplibs
79946e7d3316Smrg      fi
79956e7d3316Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
79966e7d3316Smrg      case $host in
79976e7d3316Smrg	*-*-darwin*)
79986e7d3316Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79996e7d3316Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80006e7d3316Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80016e7d3316Smrg	  ;;
80026e7d3316Smrg      esac
80036e7d3316Smrg
80046e7d3316Smrg      # move library search paths that coincide with paths to not yet
80056e7d3316Smrg      # installed libraries to the beginning of the library search list
80066e7d3316Smrg      new_libs=
80076e7d3316Smrg      for path in $notinst_path; do
80086e7d3316Smrg	case " $new_libs " in
80096e7d3316Smrg	*" -L$path/$objdir "*) ;;
80106e7d3316Smrg	*)
80116e7d3316Smrg	  case " $deplibs " in
80126e7d3316Smrg	  *" -L$path/$objdir "*)
801397cf2ee2Smrg	    func_append new_libs " -L$path/$objdir" ;;
80146e7d3316Smrg	  esac
80156e7d3316Smrg	  ;;
80166e7d3316Smrg	esac
80176e7d3316Smrg      done
80186e7d3316Smrg      for deplib in $deplibs; do
80196e7d3316Smrg	case $deplib in
80206e7d3316Smrg	-L*)
80216e7d3316Smrg	  case " $new_libs " in
80226e7d3316Smrg	  *" $deplib "*) ;;
802397cf2ee2Smrg	  *) func_append new_libs " $deplib" ;;
80246e7d3316Smrg	  esac
80256e7d3316Smrg	  ;;
802697cf2ee2Smrg	*) func_append new_libs " $deplib" ;;
80276e7d3316Smrg	esac
80286e7d3316Smrg      done
80296e7d3316Smrg      deplibs="$new_libs"
80306e7d3316Smrg
80316e7d3316Smrg      # All the library-specific variables (install_libdir is set above).
80326e7d3316Smrg      library_names=
80336e7d3316Smrg      old_library=
80346e7d3316Smrg      dlname=
80356e7d3316Smrg
80366e7d3316Smrg      # Test again, we may have decided not to build it any more
80376e7d3316Smrg      if test "$build_libtool_libs" = yes; then
8038ac92798bSmrg	# Remove ${wl} instances when linking with ld.
8039ac92798bSmrg	# FIXME: should test the right _cmds variable.
8040ac92798bSmrg	case $archive_cmds in
8041ac92798bSmrg	  *\$LD\ *) wl= ;;
8042ac92798bSmrg        esac
80436e7d3316Smrg	if test "$hardcode_into_libs" = yes; then
80446e7d3316Smrg	  # Hardcode the library paths
80456e7d3316Smrg	  hardcode_libdirs=
80466e7d3316Smrg	  dep_rpath=
80476e7d3316Smrg	  rpath="$finalize_rpath"
804897cf2ee2Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
80496e7d3316Smrg	  for libdir in $rpath; do
80506e7d3316Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
80516e7d3316Smrg	      if test -n "$hardcode_libdir_separator"; then
805297cf2ee2Smrg		func_replace_sysroot "$libdir"
805397cf2ee2Smrg		libdir=$func_replace_sysroot_result
80546e7d3316Smrg		if test -z "$hardcode_libdirs"; then
80556e7d3316Smrg		  hardcode_libdirs="$libdir"
80566e7d3316Smrg		else
80576e7d3316Smrg		  # Just accumulate the unique libdirs.
80586e7d3316Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
80596e7d3316Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
80606e7d3316Smrg		    ;;
80616e7d3316Smrg		  *)
806297cf2ee2Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
80636e7d3316Smrg		    ;;
80646e7d3316Smrg		  esac
80656e7d3316Smrg		fi
80666e7d3316Smrg	      else
80676e7d3316Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
806897cf2ee2Smrg		func_append dep_rpath " $flag"
80696e7d3316Smrg	      fi
80706e7d3316Smrg	    elif test -n "$runpath_var"; then
80716e7d3316Smrg	      case "$perm_rpath " in
80726e7d3316Smrg	      *" $libdir "*) ;;
8073ac92798bSmrg	      *) func_append perm_rpath " $libdir" ;;
80746e7d3316Smrg	      esac
80756e7d3316Smrg	    fi
80766e7d3316Smrg	  done
80776e7d3316Smrg	  # Substitute the hardcoded libdirs into the rpath.
80786e7d3316Smrg	  if test -n "$hardcode_libdir_separator" &&
80796e7d3316Smrg	     test -n "$hardcode_libdirs"; then
80806e7d3316Smrg	    libdir="$hardcode_libdirs"
8081ac92798bSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
80826e7d3316Smrg	  fi
80836e7d3316Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
80846e7d3316Smrg	    # We should set the runpath_var.
80856e7d3316Smrg	    rpath=
80866e7d3316Smrg	    for dir in $perm_rpath; do
808797cf2ee2Smrg	      func_append rpath "$dir:"
80886e7d3316Smrg	    done
80896e7d3316Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
80906e7d3316Smrg	  fi
80916e7d3316Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
80926e7d3316Smrg	fi
8093a966c04fSmrg
80946e7d3316Smrg	shlibpath="$finalize_shlibpath"
809597cf2ee2Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
80966e7d3316Smrg	if test -n "$shlibpath"; then
80976e7d3316Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
80986e7d3316Smrg	fi
8099a966c04fSmrg
81006e7d3316Smrg	# Get the real and link names of the library.
81016e7d3316Smrg	eval shared_ext=\"$shrext_cmds\"
81026e7d3316Smrg	eval library_names=\"$library_names_spec\"
81036e7d3316Smrg	set dummy $library_names
81046e7d3316Smrg	shift
81056e7d3316Smrg	realname="$1"
81066e7d3316Smrg	shift
8107a966c04fSmrg
81086e7d3316Smrg	if test -n "$soname_spec"; then
81096e7d3316Smrg	  eval soname=\"$soname_spec\"
81106e7d3316Smrg	else
81116e7d3316Smrg	  soname="$realname"
81126e7d3316Smrg	fi
81136e7d3316Smrg	if test -z "$dlname"; then
81146e7d3316Smrg	  dlname=$soname
81156e7d3316Smrg	fi
8116a966c04fSmrg
81176e7d3316Smrg	lib="$output_objdir/$realname"
81186e7d3316Smrg	linknames=
81196e7d3316Smrg	for link
81206e7d3316Smrg	do
812197cf2ee2Smrg	  func_append linknames " $link"
81226e7d3316Smrg	done
8123a966c04fSmrg
81246e7d3316Smrg	# Use standard objects if they are pic
81256e7d3316Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
81266e7d3316Smrg	test "X$libobjs" = "X " && libobjs=
8127a966c04fSmrg
81286e7d3316Smrg	delfiles=
81296e7d3316Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
81306e7d3316Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
81316e7d3316Smrg	  export_symbols="$output_objdir/$libname.uexp"
813297cf2ee2Smrg	  func_append delfiles " $export_symbols"
81336e7d3316Smrg	fi
8134a966c04fSmrg
81356e7d3316Smrg	orig_export_symbols=
81366e7d3316Smrg	case $host_os in
81376e7d3316Smrg	cygwin* | mingw* | cegcc*)
81386e7d3316Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
81396e7d3316Smrg	    # exporting using user supplied symfile
81406e7d3316Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
81416e7d3316Smrg	      # and it's NOT already a .def file. Must figure out
81426e7d3316Smrg	      # which of the given symbols are data symbols and tag
81436e7d3316Smrg	      # them as such. So, trigger use of export_symbols_cmds.
81446e7d3316Smrg	      # export_symbols gets reassigned inside the "prepare
81456e7d3316Smrg	      # the list of exported symbols" if statement, so the
81466e7d3316Smrg	      # include_expsyms logic still works.
81476e7d3316Smrg	      orig_export_symbols="$export_symbols"
81486e7d3316Smrg	      export_symbols=
81496e7d3316Smrg	      always_export_symbols=yes
81506e7d3316Smrg	    fi
81516e7d3316Smrg	  fi
81526e7d3316Smrg	  ;;
81536e7d3316Smrg	esac
8154a966c04fSmrg
81556e7d3316Smrg	# Prepare the list of exported symbols
81566e7d3316Smrg	if test -z "$export_symbols"; then
81576e7d3316Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
81586e7d3316Smrg	    func_verbose "generating symbol list for \`$libname.la'"
81596e7d3316Smrg	    export_symbols="$output_objdir/$libname.exp"
81606e7d3316Smrg	    $opt_dry_run || $RM $export_symbols
81616e7d3316Smrg	    cmds=$export_symbols_cmds
81626e7d3316Smrg	    save_ifs="$IFS"; IFS='~'
816397cf2ee2Smrg	    for cmd1 in $cmds; do
81646e7d3316Smrg	      IFS="$save_ifs"
816597cf2ee2Smrg	      # Take the normal branch if the nm_file_list_spec branch
816697cf2ee2Smrg	      # doesn't work or if tool conversion is not needed.
816797cf2ee2Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
816897cf2ee2Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
816997cf2ee2Smrg		  try_normal_branch=yes
817097cf2ee2Smrg		  eval cmd=\"$cmd1\"
817197cf2ee2Smrg		  func_len " $cmd"
817297cf2ee2Smrg		  len=$func_len_result
817397cf2ee2Smrg		  ;;
817497cf2ee2Smrg		*)
817597cf2ee2Smrg		  try_normal_branch=no
817697cf2ee2Smrg		  ;;
817797cf2ee2Smrg	      esac
817897cf2ee2Smrg	      if test "$try_normal_branch" = yes \
817997cf2ee2Smrg		 && { test "$len" -lt "$max_cmd_len" \
818097cf2ee2Smrg		      || test "$max_cmd_len" -le -1; }
818197cf2ee2Smrg	      then
818297cf2ee2Smrg		func_show_eval "$cmd" 'exit $?'
818397cf2ee2Smrg		skipped_export=false
818497cf2ee2Smrg	      elif test -n "$nm_file_list_spec"; then
818597cf2ee2Smrg		func_basename "$output"
818697cf2ee2Smrg		output_la=$func_basename_result
818797cf2ee2Smrg		save_libobjs=$libobjs
818897cf2ee2Smrg		save_output=$output
818997cf2ee2Smrg		output=${output_objdir}/${output_la}.nm
819097cf2ee2Smrg		func_to_tool_file "$output"
819197cf2ee2Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
819297cf2ee2Smrg		func_append delfiles " $output"
819397cf2ee2Smrg		func_verbose "creating $NM input file list: $output"
819497cf2ee2Smrg		for obj in $save_libobjs; do
819597cf2ee2Smrg		  func_to_tool_file "$obj"
819697cf2ee2Smrg		  $ECHO "$func_to_tool_file_result"
819797cf2ee2Smrg		done > "$output"
819897cf2ee2Smrg		eval cmd=\"$cmd1\"
81996e7d3316Smrg		func_show_eval "$cmd" 'exit $?'
820097cf2ee2Smrg		output=$save_output
820197cf2ee2Smrg		libobjs=$save_libobjs
82026e7d3316Smrg		skipped_export=false
82036e7d3316Smrg	      else
82046e7d3316Smrg		# The command line is too long to execute in one step.
82056e7d3316Smrg		func_verbose "using reloadable object file for export list..."
82066e7d3316Smrg		skipped_export=:
82076e7d3316Smrg		# Break out early, otherwise skipped_export may be
82086e7d3316Smrg		# set to false by a later but shorter cmd.
82096e7d3316Smrg		break
82106e7d3316Smrg	      fi
82116e7d3316Smrg	    done
82126e7d3316Smrg	    IFS="$save_ifs"
82136e7d3316Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
82146e7d3316Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
82156e7d3316Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
82166e7d3316Smrg	    fi
82176e7d3316Smrg	  fi
82186e7d3316Smrg	fi
8219a966c04fSmrg
82206e7d3316Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
82216e7d3316Smrg	  tmp_export_symbols="$export_symbols"
82226e7d3316Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
82236e7d3316Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
82246e7d3316Smrg	fi
8225a966c04fSmrg
82266e7d3316Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
82276e7d3316Smrg	  # The given exports_symbols file has to be filtered, so filter it.
82286e7d3316Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
82296e7d3316Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
82306e7d3316Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
82316e7d3316Smrg	  # though. Also, the filter scales superlinearly with the number of
82326e7d3316Smrg	  # global variables. join(1) would be nice here, but unfortunately
82336e7d3316Smrg	  # isn't a blessed tool.
82346e7d3316Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
823597cf2ee2Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
82366e7d3316Smrg	  export_symbols=$output_objdir/$libname.def
82376e7d3316Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238a966c04fSmrg	fi
8239a966c04fSmrg
82406e7d3316Smrg	tmp_deplibs=
82416e7d3316Smrg	for test_deplib in $deplibs; do
82426e7d3316Smrg	  case " $convenience " in
82436e7d3316Smrg	  *" $test_deplib "*) ;;
82446e7d3316Smrg	  *)
824597cf2ee2Smrg	    func_append tmp_deplibs " $test_deplib"
82466e7d3316Smrg	    ;;
82476e7d3316Smrg	  esac
82486e7d3316Smrg	done
82496e7d3316Smrg	deplibs="$tmp_deplibs"
8250a966c04fSmrg
82516e7d3316Smrg	if test -n "$convenience"; then
82526e7d3316Smrg	  if test -n "$whole_archive_flag_spec" &&
82536e7d3316Smrg	    test "$compiler_needs_object" = yes &&
82546e7d3316Smrg	    test -z "$libobjs"; then
82556e7d3316Smrg	    # extract the archives, so we have objects to list.
82566e7d3316Smrg	    # TODO: could optimize this to just extract one archive.
82576e7d3316Smrg	    whole_archive_flag_spec=
82586e7d3316Smrg	  fi
82596e7d3316Smrg	  if test -n "$whole_archive_flag_spec"; then
82606e7d3316Smrg	    save_libobjs=$libobjs
82616e7d3316Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
82626e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
82636e7d3316Smrg	  else
82646e7d3316Smrg	    gentop="$output_objdir/${outputname}x"
826597cf2ee2Smrg	    func_append generated " $gentop"
8266a966c04fSmrg
82676e7d3316Smrg	    func_extract_archives $gentop $convenience
826897cf2ee2Smrg	    func_append libobjs " $func_extract_archives_result"
82696e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
82706e7d3316Smrg	  fi
82716e7d3316Smrg	fi
8272a966c04fSmrg
82736e7d3316Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
82746e7d3316Smrg	  eval flag=\"$thread_safe_flag_spec\"
827597cf2ee2Smrg	  func_append linker_flags " $flag"
82766e7d3316Smrg	fi
8277a966c04fSmrg
82786e7d3316Smrg	# Make a backup of the uninstalled library when relinking
827997cf2ee2Smrg	if test "$opt_mode" = relink; then
82806e7d3316Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281a966c04fSmrg	fi
8282a966c04fSmrg
82836e7d3316Smrg	# Do each of the archive commands.
82846e7d3316Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
82856e7d3316Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
82866e7d3316Smrg	    eval test_cmds=\"$module_expsym_cmds\"
82876e7d3316Smrg	    cmds=$module_expsym_cmds
82886e7d3316Smrg	  else
82896e7d3316Smrg	    eval test_cmds=\"$module_cmds\"
82906e7d3316Smrg	    cmds=$module_cmds
82916e7d3316Smrg	  fi
82926e7d3316Smrg	else
82936e7d3316Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
82946e7d3316Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
82956e7d3316Smrg	    cmds=$archive_expsym_cmds
82966e7d3316Smrg	  else
82976e7d3316Smrg	    eval test_cmds=\"$archive_cmds\"
82986e7d3316Smrg	    cmds=$archive_cmds
82996e7d3316Smrg	  fi
8300a966c04fSmrg	fi
8301a966c04fSmrg
83026e7d3316Smrg	if test "X$skipped_export" != "X:" &&
83036e7d3316Smrg	   func_len " $test_cmds" &&
83046e7d3316Smrg	   len=$func_len_result &&
83056e7d3316Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
83066e7d3316Smrg	  :
83076e7d3316Smrg	else
83086e7d3316Smrg	  # The command line is too long to link in one step, link piecewise
83096e7d3316Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
83106e7d3316Smrg	  # script.
8311a966c04fSmrg
83126e7d3316Smrg	  # Save the value of $output and $libobjs because we want to
83136e7d3316Smrg	  # use them later.  If we have whole_archive_flag_spec, we
83146e7d3316Smrg	  # want to use save_libobjs as it was before
83156e7d3316Smrg	  # whole_archive_flag_spec was expanded, because we can't
83166e7d3316Smrg	  # assume the linker understands whole_archive_flag_spec.
83176e7d3316Smrg	  # This may have to be revisited, in case too many
83186e7d3316Smrg	  # convenience libraries get linked in and end up exceeding
83196e7d3316Smrg	  # the spec.
83206e7d3316Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
83216e7d3316Smrg	    save_libobjs=$libobjs
83226e7d3316Smrg	  fi
83236e7d3316Smrg	  save_output=$output
83246e7d3316Smrg	  func_basename "$output"
83256e7d3316Smrg	  output_la=$func_basename_result
8326a966c04fSmrg
83276e7d3316Smrg	  # Clear the reloadable object creation command queue and
83286e7d3316Smrg	  # initialize k to one.
83296e7d3316Smrg	  test_cmds=
83306e7d3316Smrg	  concat_cmds=
83316e7d3316Smrg	  objlist=
83326e7d3316Smrg	  last_robj=
83336e7d3316Smrg	  k=1
8334a966c04fSmrg
83356e7d3316Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
83366e7d3316Smrg	    output=${output_objdir}/${output_la}.lnkscript
83376e7d3316Smrg	    func_verbose "creating GNU ld script: $output"
83386e7d3316Smrg	    echo 'INPUT (' > $output
83396e7d3316Smrg	    for obj in $save_libobjs
83406e7d3316Smrg	    do
834197cf2ee2Smrg	      func_to_tool_file "$obj"
834297cf2ee2Smrg	      $ECHO "$func_to_tool_file_result" >> $output
83436e7d3316Smrg	    done
83446e7d3316Smrg	    echo ')' >> $output
834597cf2ee2Smrg	    func_append delfiles " $output"
834697cf2ee2Smrg	    func_to_tool_file "$output"
834797cf2ee2Smrg	    output=$func_to_tool_file_result
83486e7d3316Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
83496e7d3316Smrg	    output=${output_objdir}/${output_la}.lnk
83506e7d3316Smrg	    func_verbose "creating linker input file list: $output"
83516e7d3316Smrg	    : > $output
83526e7d3316Smrg	    set x $save_libobjs
83536e7d3316Smrg	    shift
83546e7d3316Smrg	    firstobj=
83556e7d3316Smrg	    if test "$compiler_needs_object" = yes; then
83566e7d3316Smrg	      firstobj="$1 "
83576e7d3316Smrg	      shift
83586e7d3316Smrg	    fi
83596e7d3316Smrg	    for obj
83606e7d3316Smrg	    do
836197cf2ee2Smrg	      func_to_tool_file "$obj"
836297cf2ee2Smrg	      $ECHO "$func_to_tool_file_result" >> $output
83636e7d3316Smrg	    done
836497cf2ee2Smrg	    func_append delfiles " $output"
836597cf2ee2Smrg	    func_to_tool_file "$output"
836697cf2ee2Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
83676e7d3316Smrg	  else
83686e7d3316Smrg	    if test -n "$save_libobjs"; then
83696e7d3316Smrg	      func_verbose "creating reloadable object files..."
83706e7d3316Smrg	      output=$output_objdir/$output_la-${k}.$objext
83716e7d3316Smrg	      eval test_cmds=\"$reload_cmds\"
83726e7d3316Smrg	      func_len " $test_cmds"
83736e7d3316Smrg	      len0=$func_len_result
83746e7d3316Smrg	      len=$len0
83756e7d3316Smrg
83766e7d3316Smrg	      # Loop over the list of objects to be linked.
83776e7d3316Smrg	      for obj in $save_libobjs
83786e7d3316Smrg	      do
83796e7d3316Smrg		func_len " $obj"
83806e7d3316Smrg		func_arith $len + $func_len_result
83816e7d3316Smrg		len=$func_arith_result
83826e7d3316Smrg		if test "X$objlist" = X ||
83836e7d3316Smrg		   test "$len" -lt "$max_cmd_len"; then
83846e7d3316Smrg		  func_append objlist " $obj"
83856e7d3316Smrg		else
83866e7d3316Smrg		  # The command $test_cmds is almost too long, add a
83876e7d3316Smrg		  # command to the queue.
83886e7d3316Smrg		  if test "$k" -eq 1 ; then
83896e7d3316Smrg		    # The first file doesn't have a previous command to add.
83906e7d3316Smrg		    reload_objs=$objlist
83916e7d3316Smrg		    eval concat_cmds=\"$reload_cmds\"
83926e7d3316Smrg		  else
83936e7d3316Smrg		    # All subsequent reloadable object files will link in
83946e7d3316Smrg		    # the last one created.
83956e7d3316Smrg		    reload_objs="$objlist $last_robj"
83966e7d3316Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
83976e7d3316Smrg		  fi
83986e7d3316Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
83996e7d3316Smrg		  func_arith $k + 1
84006e7d3316Smrg		  k=$func_arith_result
84016e7d3316Smrg		  output=$output_objdir/$output_la-${k}.$objext
84026e7d3316Smrg		  objlist=" $obj"
84036e7d3316Smrg		  func_len " $last_robj"
84046e7d3316Smrg		  func_arith $len0 + $func_len_result
84056e7d3316Smrg		  len=$func_arith_result
84066e7d3316Smrg		fi
84076e7d3316Smrg	      done
84086e7d3316Smrg	      # Handle the remaining objects by creating one last
84096e7d3316Smrg	      # reloadable object file.  All subsequent reloadable object
84106e7d3316Smrg	      # files will link in the last one created.
84116e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84126e7d3316Smrg	      reload_objs="$objlist $last_robj"
84136e7d3316Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
84146e7d3316Smrg	      if test -n "$last_robj"; then
84156e7d3316Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
84166e7d3316Smrg	      fi
841797cf2ee2Smrg	      func_append delfiles " $output"
84186e7d3316Smrg
84196e7d3316Smrg	    else
84206e7d3316Smrg	      output=
84216e7d3316Smrg	    fi
8422a966c04fSmrg
84236e7d3316Smrg	    if ${skipped_export-false}; then
84246e7d3316Smrg	      func_verbose "generating symbol list for \`$libname.la'"
84256e7d3316Smrg	      export_symbols="$output_objdir/$libname.exp"
84266e7d3316Smrg	      $opt_dry_run || $RM $export_symbols
84276e7d3316Smrg	      libobjs=$output
84286e7d3316Smrg	      # Append the command to create the export file.
84296e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84306e7d3316Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
84316e7d3316Smrg	      if test -n "$last_robj"; then
84326e7d3316Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
84336e7d3316Smrg	      fi
84346e7d3316Smrg	    fi
8435a966c04fSmrg
84366e7d3316Smrg	    test -n "$save_libobjs" &&
84376e7d3316Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8438a966c04fSmrg
84396e7d3316Smrg	    # Loop through the commands generated above and execute them.
84406e7d3316Smrg	    save_ifs="$IFS"; IFS='~'
84416e7d3316Smrg	    for cmd in $concat_cmds; do
84426e7d3316Smrg	      IFS="$save_ifs"
84436e7d3316Smrg	      $opt_silent || {
84446e7d3316Smrg		  func_quote_for_expand "$cmd"
84456e7d3316Smrg		  eval "func_echo $func_quote_for_expand_result"
84466e7d3316Smrg	      }
84476e7d3316Smrg	      $opt_dry_run || eval "$cmd" || {
84486e7d3316Smrg		lt_exit=$?
84496e7d3316Smrg
84506e7d3316Smrg		# Restore the uninstalled library and exit
845197cf2ee2Smrg		if test "$opt_mode" = relink; then
84526e7d3316Smrg		  ( cd "$output_objdir" && \
84536e7d3316Smrg		    $RM "${realname}T" && \
84546e7d3316Smrg		    $MV "${realname}U" "$realname" )
84556e7d3316Smrg		fi
8456a966c04fSmrg
84576e7d3316Smrg		exit $lt_exit
84586e7d3316Smrg	      }
84596e7d3316Smrg	    done
84606e7d3316Smrg	    IFS="$save_ifs"
8461a966c04fSmrg
84626e7d3316Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
84636e7d3316Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
84646e7d3316Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8465a966c04fSmrg	    fi
8466a966c04fSmrg	  fi
8467a966c04fSmrg
84686e7d3316Smrg          if ${skipped_export-false}; then
84696e7d3316Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
84706e7d3316Smrg	      tmp_export_symbols="$export_symbols"
84716e7d3316Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
84726e7d3316Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
84736e7d3316Smrg	    fi
8474a966c04fSmrg
84756e7d3316Smrg	    if test -n "$orig_export_symbols"; then
84766e7d3316Smrg	      # The given exports_symbols file has to be filtered, so filter it.
84776e7d3316Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
84786e7d3316Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
84796e7d3316Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
84806e7d3316Smrg	      # though. Also, the filter scales superlinearly with the number of
84816e7d3316Smrg	      # global variables. join(1) would be nice here, but unfortunately
84826e7d3316Smrg	      # isn't a blessed tool.
84836e7d3316Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
848497cf2ee2Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
84856e7d3316Smrg	      export_symbols=$output_objdir/$libname.def
84866e7d3316Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
84876e7d3316Smrg	    fi
84886e7d3316Smrg	  fi
8489a966c04fSmrg
84906e7d3316Smrg	  libobjs=$output
84916e7d3316Smrg	  # Restore the value of output.
84926e7d3316Smrg	  output=$save_output
8493a966c04fSmrg
84946e7d3316Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
84956e7d3316Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
84966e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
84976e7d3316Smrg	  fi
84986e7d3316Smrg	  # Expand the library linking commands again to reset the
84996e7d3316Smrg	  # value of $libobjs for piecewise linking.
85006e7d3316Smrg
85016e7d3316Smrg	  # Do each of the archive commands.
85026e7d3316Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
85036e7d3316Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
85046e7d3316Smrg	      cmds=$module_expsym_cmds
8505a966c04fSmrg	    else
85066e7d3316Smrg	      cmds=$module_cmds
8507a966c04fSmrg	    fi
8508a966c04fSmrg	  else
85096e7d3316Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
85106e7d3316Smrg	      cmds=$archive_expsym_cmds
85116e7d3316Smrg	    else
85126e7d3316Smrg	      cmds=$archive_cmds
85136e7d3316Smrg	    fi
8514a966c04fSmrg	  fi
8515a966c04fSmrg	fi
8516a966c04fSmrg
85176e7d3316Smrg	if test -n "$delfiles"; then
85186e7d3316Smrg	  # Append the command to remove temporary files to $cmds.
85196e7d3316Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
85206e7d3316Smrg	fi
8521a966c04fSmrg
85226e7d3316Smrg	# Add any objects from preloaded convenience libraries
85236e7d3316Smrg	if test -n "$dlprefiles"; then
85246e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
852597cf2ee2Smrg	  func_append generated " $gentop"
8526a966c04fSmrg
85276e7d3316Smrg	  func_extract_archives $gentop $dlprefiles
852897cf2ee2Smrg	  func_append libobjs " $func_extract_archives_result"
85296e7d3316Smrg	  test "X$libobjs" = "X " && libobjs=
8530a966c04fSmrg	fi
8531a966c04fSmrg
85326e7d3316Smrg	save_ifs="$IFS"; IFS='~'
85336e7d3316Smrg	for cmd in $cmds; do
85346e7d3316Smrg	  IFS="$save_ifs"
85356e7d3316Smrg	  eval cmd=\"$cmd\"
85366e7d3316Smrg	  $opt_silent || {
85376e7d3316Smrg	    func_quote_for_expand "$cmd"
85386e7d3316Smrg	    eval "func_echo $func_quote_for_expand_result"
85396e7d3316Smrg	  }
85406e7d3316Smrg	  $opt_dry_run || eval "$cmd" || {
85416e7d3316Smrg	    lt_exit=$?
8542a966c04fSmrg
85436e7d3316Smrg	    # Restore the uninstalled library and exit
854497cf2ee2Smrg	    if test "$opt_mode" = relink; then
85456e7d3316Smrg	      ( cd "$output_objdir" && \
85466e7d3316Smrg	        $RM "${realname}T" && \
85476e7d3316Smrg		$MV "${realname}U" "$realname" )
8548a966c04fSmrg	    fi
8549a966c04fSmrg
85506e7d3316Smrg	    exit $lt_exit
85516e7d3316Smrg	  }
85526e7d3316Smrg	done
85536e7d3316Smrg	IFS="$save_ifs"
8554a966c04fSmrg
85556e7d3316Smrg	# Restore the uninstalled library and exit
855697cf2ee2Smrg	if test "$opt_mode" = relink; then
85576e7d3316Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558a966c04fSmrg
85596e7d3316Smrg	  if test -n "$convenience"; then
85606e7d3316Smrg	    if test -z "$whole_archive_flag_spec"; then
85616e7d3316Smrg	      func_show_eval '${RM}r "$gentop"'
85626e7d3316Smrg	    fi
85636e7d3316Smrg	  fi
8564a966c04fSmrg
85656e7d3316Smrg	  exit $EXIT_SUCCESS
85666e7d3316Smrg	fi
8567a966c04fSmrg
85686e7d3316Smrg	# Create links to the real library.
85696e7d3316Smrg	for linkname in $linknames; do
85706e7d3316Smrg	  if test "$realname" != "$linkname"; then
85716e7d3316Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
85726e7d3316Smrg	  fi
85736e7d3316Smrg	done
8574a966c04fSmrg
85756e7d3316Smrg	# If -module or -export-dynamic was specified, set the dlname.
85766e7d3316Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
85776e7d3316Smrg	  # On all known operating systems, these are identical.
85786e7d3316Smrg	  dlname="$soname"
85796e7d3316Smrg	fi
85806e7d3316Smrg      fi
85816e7d3316Smrg      ;;
8582a966c04fSmrg
85836e7d3316Smrg    obj)
85846e7d3316Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
85856e7d3316Smrg	func_warning "\`-dlopen' is ignored for objects"
85866e7d3316Smrg      fi
8587a966c04fSmrg
85886e7d3316Smrg      case " $deplibs" in
85896e7d3316Smrg      *\ -l* | *\ -L*)
85906e7d3316Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
85916e7d3316Smrg      esac
8592a966c04fSmrg
85936e7d3316Smrg      test -n "$rpath" && \
85946e7d3316Smrg	func_warning "\`-rpath' is ignored for objects"
8595a966c04fSmrg
85966e7d3316Smrg      test -n "$xrpath" && \
85976e7d3316Smrg	func_warning "\`-R' is ignored for objects"
85986e7d3316Smrg
85996e7d3316Smrg      test -n "$vinfo" && \
86006e7d3316Smrg	func_warning "\`-version-info' is ignored for objects"
8601a966c04fSmrg
86026e7d3316Smrg      test -n "$release" && \
86036e7d3316Smrg	func_warning "\`-release' is ignored for objects"
8604a966c04fSmrg
86056e7d3316Smrg      case $output in
86066e7d3316Smrg      *.lo)
86076e7d3316Smrg	test -n "$objs$old_deplibs" && \
86086e7d3316Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
86096e7d3316Smrg
86106e7d3316Smrg	libobj=$output
86116e7d3316Smrg	func_lo2o "$libobj"
86126e7d3316Smrg	obj=$func_lo2o_result
86136e7d3316Smrg	;;
86146e7d3316Smrg      *)
86156e7d3316Smrg	libobj=
86166e7d3316Smrg	obj="$output"
8617a966c04fSmrg	;;
8618a966c04fSmrg      esac
8619a966c04fSmrg
86206e7d3316Smrg      # Delete the old objects.
86216e7d3316Smrg      $opt_dry_run || $RM $obj $libobj
8622a966c04fSmrg
86236e7d3316Smrg      # Objects from convenience libraries.  This assumes
86246e7d3316Smrg      # single-version convenience libraries.  Whenever we create
86256e7d3316Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
86266e7d3316Smrg      # the extraction.
86276e7d3316Smrg      reload_conv_objs=
86286e7d3316Smrg      gentop=
86296e7d3316Smrg      # reload_cmds runs $LD directly, so let us get rid of
86306e7d3316Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
86316e7d3316Smrg      # turning comma into space..
86326e7d3316Smrg      wl=
8633a966c04fSmrg
86346e7d3316Smrg      if test -n "$convenience"; then
86356e7d3316Smrg	if test -n "$whole_archive_flag_spec"; then
86366e7d3316Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86376e7d3316Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638a966c04fSmrg	else
86396e7d3316Smrg	  gentop="$output_objdir/${obj}x"
864097cf2ee2Smrg	  func_append generated " $gentop"
86416e7d3316Smrg
86426e7d3316Smrg	  func_extract_archives $gentop $convenience
86436e7d3316Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644a966c04fSmrg	fi
86456e7d3316Smrg      fi
8646a966c04fSmrg
864797cf2ee2Smrg      # If we're not building shared, we need to use non_pic_objs
864897cf2ee2Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
864997cf2ee2Smrg
86506e7d3316Smrg      # Create the old-style object.
86516e7d3316Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652a966c04fSmrg
86536e7d3316Smrg      output="$obj"
86546e7d3316Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8655a966c04fSmrg
86566e7d3316Smrg      # Exit if we aren't doing a library object file.
86576e7d3316Smrg      if test -z "$libobj"; then
86586e7d3316Smrg	if test -n "$gentop"; then
86596e7d3316Smrg	  func_show_eval '${RM}r "$gentop"'
86606e7d3316Smrg	fi
8661a966c04fSmrg
86626e7d3316Smrg	exit $EXIT_SUCCESS
8663a966c04fSmrg      fi
8664a966c04fSmrg
86656e7d3316Smrg      if test "$build_libtool_libs" != yes; then
86666e7d3316Smrg	if test -n "$gentop"; then
86676e7d3316Smrg	  func_show_eval '${RM}r "$gentop"'
86686e7d3316Smrg	fi
8669a966c04fSmrg
86706e7d3316Smrg	# Create an invalid libtool object if no PIC, so that we don't
86716e7d3316Smrg	# accidentally link it into a program.
86726e7d3316Smrg	# $show "echo timestamp > $libobj"
86736e7d3316Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
86746e7d3316Smrg	exit $EXIT_SUCCESS
86756e7d3316Smrg      fi
8676a966c04fSmrg
86776e7d3316Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
86786e7d3316Smrg	# Only do commands if we really have different PIC objects.
86796e7d3316Smrg	reload_objs="$libobjs $reload_conv_objs"
86806e7d3316Smrg	output="$libobj"
86816e7d3316Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682a966c04fSmrg      fi
86836e7d3316Smrg
86846e7d3316Smrg      if test -n "$gentop"; then
86856e7d3316Smrg	func_show_eval '${RM}r "$gentop"'
86866e7d3316Smrg      fi
86876e7d3316Smrg
86886e7d3316Smrg      exit $EXIT_SUCCESS
8689a966c04fSmrg      ;;
8690a966c04fSmrg
86916e7d3316Smrg    prog)
86926e7d3316Smrg      case $host in
86936e7d3316Smrg	*cygwin*) func_stripname '' '.exe' "$output"
86946e7d3316Smrg	          output=$func_stripname_result.exe;;
86956e7d3316Smrg      esac
86966e7d3316Smrg      test -n "$vinfo" && \
86976e7d3316Smrg	func_warning "\`-version-info' is ignored for programs"
8698a966c04fSmrg
86996e7d3316Smrg      test -n "$release" && \
87006e7d3316Smrg	func_warning "\`-release' is ignored for programs"
8701a966c04fSmrg
87026e7d3316Smrg      test "$preload" = yes \
87036e7d3316Smrg        && test "$dlopen_support" = unknown \
87046e7d3316Smrg	&& test "$dlopen_self" = unknown \
87056e7d3316Smrg	&& test "$dlopen_self_static" = unknown && \
87066e7d3316Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
87076e7d3316Smrg
87086e7d3316Smrg      case $host in
87096e7d3316Smrg      *-*-rhapsody* | *-*-darwin1.[012])
87106e7d3316Smrg	# On Rhapsody replace the C library is the System framework
87116e7d3316Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
87126e7d3316Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713a966c04fSmrg	;;
87146e7d3316Smrg      esac
8715a966c04fSmrg
87166e7d3316Smrg      case $host in
87176e7d3316Smrg      *-*-darwin*)
87186e7d3316Smrg	# Don't allow lazy linking, it breaks C++ global constructors
87196e7d3316Smrg	# But is supposedly fixed on 10.4 or later (yay!).
87206e7d3316Smrg	if test "$tagname" = CXX ; then
87216e7d3316Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
87226e7d3316Smrg	    10.[0123])
872397cf2ee2Smrg	      func_append compile_command " ${wl}-bind_at_load"
872497cf2ee2Smrg	      func_append finalize_command " ${wl}-bind_at_load"
87256e7d3316Smrg	    ;;
87266e7d3316Smrg	  esac
8727a966c04fSmrg	fi
87286e7d3316Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
87296e7d3316Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87306e7d3316Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87316e7d3316Smrg	;;
87326e7d3316Smrg      esac
8733a966c04fSmrg
8734a966c04fSmrg
87356e7d3316Smrg      # move library search paths that coincide with paths to not yet
87366e7d3316Smrg      # installed libraries to the beginning of the library search list
87376e7d3316Smrg      new_libs=
87386e7d3316Smrg      for path in $notinst_path; do
87396e7d3316Smrg	case " $new_libs " in
87406e7d3316Smrg	*" -L$path/$objdir "*) ;;
87416e7d3316Smrg	*)
87426e7d3316Smrg	  case " $compile_deplibs " in
87436e7d3316Smrg	  *" -L$path/$objdir "*)
874497cf2ee2Smrg	    func_append new_libs " -L$path/$objdir" ;;
8745a966c04fSmrg	  esac
87466e7d3316Smrg	  ;;
87476e7d3316Smrg	esac
87486e7d3316Smrg      done
87496e7d3316Smrg      for deplib in $compile_deplibs; do
87506e7d3316Smrg	case $deplib in
87516e7d3316Smrg	-L*)
87526e7d3316Smrg	  case " $new_libs " in
87536e7d3316Smrg	  *" $deplib "*) ;;
875497cf2ee2Smrg	  *) func_append new_libs " $deplib" ;;
8755a966c04fSmrg	  esac
87566e7d3316Smrg	  ;;
875797cf2ee2Smrg	*) func_append new_libs " $deplib" ;;
87586e7d3316Smrg	esac
87596e7d3316Smrg      done
87606e7d3316Smrg      compile_deplibs="$new_libs"
8761a966c04fSmrg
8762a966c04fSmrg
876397cf2ee2Smrg      func_append compile_command " $compile_deplibs"
876497cf2ee2Smrg      func_append finalize_command " $finalize_deplibs"
8765a966c04fSmrg
87666e7d3316Smrg      if test -n "$rpath$xrpath"; then
87676e7d3316Smrg	# If the user specified any rpath flags, then add them.
87686e7d3316Smrg	for libdir in $rpath $xrpath; do
87696e7d3316Smrg	  # This is the magic to use -rpath.
87706e7d3316Smrg	  case "$finalize_rpath " in
87716e7d3316Smrg	  *" $libdir "*) ;;
877297cf2ee2Smrg	  *) func_append finalize_rpath " $libdir" ;;
87736e7d3316Smrg	  esac
87746e7d3316Smrg	done
87756e7d3316Smrg      fi
8776a966c04fSmrg
87776e7d3316Smrg      # Now hardcode the library paths
87786e7d3316Smrg      rpath=
87796e7d3316Smrg      hardcode_libdirs=
87806e7d3316Smrg      for libdir in $compile_rpath $finalize_rpath; do
87816e7d3316Smrg	if test -n "$hardcode_libdir_flag_spec"; then
87826e7d3316Smrg	  if test -n "$hardcode_libdir_separator"; then
87836e7d3316Smrg	    if test -z "$hardcode_libdirs"; then
87846e7d3316Smrg	      hardcode_libdirs="$libdir"
87856e7d3316Smrg	    else
87866e7d3316Smrg	      # Just accumulate the unique libdirs.
87876e7d3316Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
87886e7d3316Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
87896e7d3316Smrg		;;
87906e7d3316Smrg	      *)
879197cf2ee2Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
87926e7d3316Smrg		;;
87936e7d3316Smrg	      esac
87946e7d3316Smrg	    fi
8795a966c04fSmrg	  else
87966e7d3316Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
879797cf2ee2Smrg	    func_append rpath " $flag"
8798a966c04fSmrg	  fi
87996e7d3316Smrg	elif test -n "$runpath_var"; then
88006e7d3316Smrg	  case "$perm_rpath " in
88016e7d3316Smrg	  *" $libdir "*) ;;
880297cf2ee2Smrg	  *) func_append perm_rpath " $libdir" ;;
88036e7d3316Smrg	  esac
88046e7d3316Smrg	fi
88056e7d3316Smrg	case $host in
88066e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
88076e7d3316Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
88086e7d3316Smrg	  case :$dllsearchpath: in
88096e7d3316Smrg	  *":$libdir:"*) ;;
88106e7d3316Smrg	  ::) dllsearchpath=$libdir;;
881197cf2ee2Smrg	  *) func_append dllsearchpath ":$libdir";;
88126e7d3316Smrg	  esac
88136e7d3316Smrg	  case :$dllsearchpath: in
88146e7d3316Smrg	  *":$testbindir:"*) ;;
88156e7d3316Smrg	  ::) dllsearchpath=$testbindir;;
881697cf2ee2Smrg	  *) func_append dllsearchpath ":$testbindir";;
88176e7d3316Smrg	  esac
88186e7d3316Smrg	  ;;
88196e7d3316Smrg	esac
88206e7d3316Smrg      done
88216e7d3316Smrg      # Substitute the hardcoded libdirs into the rpath.
88226e7d3316Smrg      if test -n "$hardcode_libdir_separator" &&
88236e7d3316Smrg	 test -n "$hardcode_libdirs"; then
88246e7d3316Smrg	libdir="$hardcode_libdirs"
88256e7d3316Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
88266e7d3316Smrg      fi
88276e7d3316Smrg      compile_rpath="$rpath"
8828a966c04fSmrg
88296e7d3316Smrg      rpath=
88306e7d3316Smrg      hardcode_libdirs=
88316e7d3316Smrg      for libdir in $finalize_rpath; do
88326e7d3316Smrg	if test -n "$hardcode_libdir_flag_spec"; then
88336e7d3316Smrg	  if test -n "$hardcode_libdir_separator"; then
88346e7d3316Smrg	    if test -z "$hardcode_libdirs"; then
88356e7d3316Smrg	      hardcode_libdirs="$libdir"
88366e7d3316Smrg	    else
88376e7d3316Smrg	      # Just accumulate the unique libdirs.
88386e7d3316Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
88396e7d3316Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
88406e7d3316Smrg		;;
88416e7d3316Smrg	      *)
884297cf2ee2Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
88436e7d3316Smrg		;;
88446e7d3316Smrg	      esac
88456e7d3316Smrg	    fi
8846a966c04fSmrg	  else
88476e7d3316Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
884897cf2ee2Smrg	    func_append rpath " $flag"
8849a966c04fSmrg	  fi
88506e7d3316Smrg	elif test -n "$runpath_var"; then
88516e7d3316Smrg	  case "$finalize_perm_rpath " in
88526e7d3316Smrg	  *" $libdir "*) ;;
885397cf2ee2Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
88546e7d3316Smrg	  esac
8855a966c04fSmrg	fi
88566e7d3316Smrg      done
88576e7d3316Smrg      # Substitute the hardcoded libdirs into the rpath.
88586e7d3316Smrg      if test -n "$hardcode_libdir_separator" &&
88596e7d3316Smrg	 test -n "$hardcode_libdirs"; then
88606e7d3316Smrg	libdir="$hardcode_libdirs"
88616e7d3316Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
88626e7d3316Smrg      fi
88636e7d3316Smrg      finalize_rpath="$rpath"
8864a966c04fSmrg
88656e7d3316Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
88666e7d3316Smrg	# Transform all the library objects into standard objects.
88676e7d3316Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88686e7d3316Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88696e7d3316Smrg      fi
8870a966c04fSmrg
88716e7d3316Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8872a966c04fSmrg
88736e7d3316Smrg      # template prelinking step
88746e7d3316Smrg      if test -n "$prelink_cmds"; then
88756e7d3316Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
88766e7d3316Smrg      fi
8877a966c04fSmrg
88786e7d3316Smrg      wrappers_required=yes
88796e7d3316Smrg      case $host in
88806e7d3316Smrg      *cegcc* | *mingw32ce*)
88816e7d3316Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88826e7d3316Smrg        wrappers_required=no
88836e7d3316Smrg        ;;
88846e7d3316Smrg      *cygwin* | *mingw* )
88856e7d3316Smrg        if test "$build_libtool_libs" != yes; then
88866e7d3316Smrg          wrappers_required=no
88876e7d3316Smrg        fi
88886e7d3316Smrg        ;;
88896e7d3316Smrg      *)
88906e7d3316Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
88916e7d3316Smrg          wrappers_required=no
88926e7d3316Smrg        fi
88936e7d3316Smrg        ;;
88946e7d3316Smrg      esac
88956e7d3316Smrg      if test "$wrappers_required" = no; then
88966e7d3316Smrg	# Replace the output file specification.
88976e7d3316Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
88986e7d3316Smrg	link_command="$compile_command$compile_rpath"
8899a966c04fSmrg
89006e7d3316Smrg	# We have no uninstalled library dependencies, so finalize right now.
89016e7d3316Smrg	exit_status=0
89026e7d3316Smrg	func_show_eval "$link_command" 'exit_status=$?'
8903a966c04fSmrg
890497cf2ee2Smrg	if test -n "$postlink_cmds"; then
890597cf2ee2Smrg	  func_to_tool_file "$output"
890697cf2ee2Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
890797cf2ee2Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
890897cf2ee2Smrg	fi
890997cf2ee2Smrg
89106e7d3316Smrg	# Delete the generated files.
89116e7d3316Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
89126e7d3316Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913a966c04fSmrg	fi
8914a966c04fSmrg
89156e7d3316Smrg	exit $exit_status
89166e7d3316Smrg      fi
8917a966c04fSmrg
89186e7d3316Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
89196e7d3316Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
89206e7d3316Smrg      fi
89216e7d3316Smrg      if test -n "$finalize_shlibpath"; then
89226e7d3316Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
89236e7d3316Smrg      fi
8924a966c04fSmrg
89256e7d3316Smrg      compile_var=
89266e7d3316Smrg      finalize_var=
89276e7d3316Smrg      if test -n "$runpath_var"; then
89286e7d3316Smrg	if test -n "$perm_rpath"; then
89296e7d3316Smrg	  # We should set the runpath_var.
89306e7d3316Smrg	  rpath=
89316e7d3316Smrg	  for dir in $perm_rpath; do
893297cf2ee2Smrg	    func_append rpath "$dir:"
89336e7d3316Smrg	  done
89346e7d3316Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8935a966c04fSmrg	fi
89366e7d3316Smrg	if test -n "$finalize_perm_rpath"; then
89376e7d3316Smrg	  # We should set the runpath_var.
89386e7d3316Smrg	  rpath=
89396e7d3316Smrg	  for dir in $finalize_perm_rpath; do
894097cf2ee2Smrg	    func_append rpath "$dir:"
89416e7d3316Smrg	  done
89426e7d3316Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943a966c04fSmrg	fi
89446e7d3316Smrg      fi
8945a966c04fSmrg
89466e7d3316Smrg      if test "$no_install" = yes; then
89476e7d3316Smrg	# We don't need to create a wrapper script.
89486e7d3316Smrg	link_command="$compile_var$compile_command$compile_rpath"
89496e7d3316Smrg	# Replace the output file specification.
89506e7d3316Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
89516e7d3316Smrg	# Delete the old output file.
89526e7d3316Smrg	$opt_dry_run || $RM $output
89536e7d3316Smrg	# Link the executable and exit
89546e7d3316Smrg	func_show_eval "$link_command" 'exit $?'
895597cf2ee2Smrg
895697cf2ee2Smrg	if test -n "$postlink_cmds"; then
895797cf2ee2Smrg	  func_to_tool_file "$output"
895897cf2ee2Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
895997cf2ee2Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
896097cf2ee2Smrg	fi
896197cf2ee2Smrg
8962a966c04fSmrg	exit $EXIT_SUCCESS
89636e7d3316Smrg      fi
8964a966c04fSmrg
89656e7d3316Smrg      if test "$hardcode_action" = relink; then
89666e7d3316Smrg	# Fast installation is not supported
89676e7d3316Smrg	link_command="$compile_var$compile_command$compile_rpath"
89686e7d3316Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
89696e7d3316Smrg
89706e7d3316Smrg	func_warning "this platform does not like uninstalled shared libraries"
89716e7d3316Smrg	func_warning "\`$output' will be relinked during installation"
89726e7d3316Smrg      else
89736e7d3316Smrg	if test "$fast_install" != no; then
89746e7d3316Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
89756e7d3316Smrg	  if test "$fast_install" = yes; then
89766e7d3316Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
89776e7d3316Smrg	  else
89786e7d3316Smrg	    # fast_install is set to needless
89796e7d3316Smrg	    relink_command=
89806e7d3316Smrg	  fi
8981a966c04fSmrg	else
89826e7d3316Smrg	  link_command="$compile_var$compile_command$compile_rpath"
89836e7d3316Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8984a966c04fSmrg	fi
89856e7d3316Smrg      fi
8986a966c04fSmrg
89876e7d3316Smrg      # Replace the output file specification.
89886e7d3316Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8989a966c04fSmrg
89906e7d3316Smrg      # Delete the old output files.
89916e7d3316Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8992a966c04fSmrg
89936e7d3316Smrg      func_show_eval "$link_command" 'exit $?'
8994a966c04fSmrg
899597cf2ee2Smrg      if test -n "$postlink_cmds"; then
899697cf2ee2Smrg	func_to_tool_file "$output_objdir/$outputname"
899797cf2ee2Smrg	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'`
899897cf2ee2Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
899997cf2ee2Smrg      fi
900097cf2ee2Smrg
90016e7d3316Smrg      # Now create the wrapper script.
90026e7d3316Smrg      func_verbose "creating $output"
9003a966c04fSmrg
90046e7d3316Smrg      # Quote the relink command for shipping.
90056e7d3316Smrg      if test -n "$relink_command"; then
90066e7d3316Smrg	# Preserve any variables that may affect compiler behavior
90076e7d3316Smrg	for var in $variables_saved_for_relink; do
90086e7d3316Smrg	  if eval test -z \"\${$var+set}\"; then
90096e7d3316Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
90106e7d3316Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
90116e7d3316Smrg	    relink_command="$var=; export $var; $relink_command"
9012a966c04fSmrg	  else
90136e7d3316Smrg	    func_quote_for_eval "$var_value"
90146e7d3316Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015a966c04fSmrg	  fi
90166e7d3316Smrg	done
90176e7d3316Smrg	relink_command="(cd `pwd`; $relink_command)"
90186e7d3316Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
90196e7d3316Smrg      fi
9020a966c04fSmrg
90216e7d3316Smrg      # Only actually do things if not in dry run mode.
90226e7d3316Smrg      $opt_dry_run || {
90236e7d3316Smrg	# win32 will think the script is a binary if it has
90246e7d3316Smrg	# a .exe suffix, so we strip it off here.
90256e7d3316Smrg	case $output in
90266e7d3316Smrg	  *.exe) func_stripname '' '.exe' "$output"
90276e7d3316Smrg	         output=$func_stripname_result ;;
90286e7d3316Smrg	esac
90296e7d3316Smrg	# test for cygwin because mv fails w/o .exe extensions
90306e7d3316Smrg	case $host in
90316e7d3316Smrg	  *cygwin*)
90326e7d3316Smrg	    exeext=.exe
90336e7d3316Smrg	    func_stripname '' '.exe' "$outputname"
90346e7d3316Smrg	    outputname=$func_stripname_result ;;
90356e7d3316Smrg	  *) exeext= ;;
9036a966c04fSmrg	esac
90376e7d3316Smrg	case $host in
90386e7d3316Smrg	  *cygwin* | *mingw* )
90396e7d3316Smrg	    func_dirname_and_basename "$output" "" "."
90406e7d3316Smrg	    output_name=$func_basename_result
90416e7d3316Smrg	    output_path=$func_dirname_result
90426e7d3316Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
90436e7d3316Smrg	    cwrapper="$output_path/$output_name.exe"
90446e7d3316Smrg	    $RM $cwrappersource $cwrapper
90456e7d3316Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
90466e7d3316Smrg
90476e7d3316Smrg	    func_emit_cwrapperexe_src > $cwrappersource
90486e7d3316Smrg
90496e7d3316Smrg	    # The wrapper executable is built using the $host compiler,
90506e7d3316Smrg	    # because it contains $host paths and files. If cross-
90516e7d3316Smrg	    # compiling, it, like the target executable, must be
90526e7d3316Smrg	    # executed on the $host or under an emulation environment.
90536e7d3316Smrg	    $opt_dry_run || {
90546e7d3316Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
90556e7d3316Smrg	      $STRIP $cwrapper
90566e7d3316Smrg	    }
9057a966c04fSmrg
90586e7d3316Smrg	    # Now, create the wrapper script for func_source use:
90596e7d3316Smrg	    func_ltwrapper_scriptname $cwrapper
90606e7d3316Smrg	    $RM $func_ltwrapper_scriptname_result
90616e7d3316Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
90626e7d3316Smrg	    $opt_dry_run || {
90636e7d3316Smrg	      # note: this script will not be executed, so do not chmod.
90646e7d3316Smrg	      if test "x$build" = "x$host" ; then
90656e7d3316Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
90666e7d3316Smrg	      else
90676e7d3316Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
90686e7d3316Smrg	      fi
90696e7d3316Smrg	    }
90706e7d3316Smrg	  ;;
90716e7d3316Smrg	  * )
90726e7d3316Smrg	    $RM $output
90736e7d3316Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9074a966c04fSmrg
90756e7d3316Smrg	    func_emit_wrapper no > $output
90766e7d3316Smrg	    chmod +x $output
90776e7d3316Smrg	  ;;
90786e7d3316Smrg	esac
90796e7d3316Smrg      }
90806e7d3316Smrg      exit $EXIT_SUCCESS
90816e7d3316Smrg      ;;
90826e7d3316Smrg    esac
9083a966c04fSmrg
90846e7d3316Smrg    # See if we need to build an old-fashioned archive.
90856e7d3316Smrg    for oldlib in $oldlibs; do
9086a966c04fSmrg
90876e7d3316Smrg      if test "$build_libtool_libs" = convenience; then
90886e7d3316Smrg	oldobjs="$libobjs_save $symfileobj"
90896e7d3316Smrg	addlibs="$convenience"
90906e7d3316Smrg	build_libtool_libs=no
90916e7d3316Smrg      else
90926e7d3316Smrg	if test "$build_libtool_libs" = module; then
90936e7d3316Smrg	  oldobjs="$libobjs_save"
90946e7d3316Smrg	  build_libtool_libs=no
90956e7d3316Smrg	else
90966e7d3316Smrg	  oldobjs="$old_deplibs $non_pic_objects"
90976e7d3316Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
909897cf2ee2Smrg	    func_append oldobjs " $symfileobj"
90996e7d3316Smrg	  fi
91006e7d3316Smrg	fi
91016e7d3316Smrg	addlibs="$old_convenience"
9102a966c04fSmrg      fi
9103a966c04fSmrg
91046e7d3316Smrg      if test -n "$addlibs"; then
91056e7d3316Smrg	gentop="$output_objdir/${outputname}x"
910697cf2ee2Smrg	func_append generated " $gentop"
9107a966c04fSmrg
91086e7d3316Smrg	func_extract_archives $gentop $addlibs
910997cf2ee2Smrg	func_append oldobjs " $func_extract_archives_result"
91106e7d3316Smrg      fi
9111a966c04fSmrg
91126e7d3316Smrg      # Do each command in the archive commands.
91136e7d3316Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
91146e7d3316Smrg	cmds=$old_archive_from_new_cmds
91156e7d3316Smrg      else
9116a966c04fSmrg
91176e7d3316Smrg	# Add any objects from preloaded convenience libraries
91186e7d3316Smrg	if test -n "$dlprefiles"; then
91196e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
912097cf2ee2Smrg	  func_append generated " $gentop"
9121a966c04fSmrg
91226e7d3316Smrg	  func_extract_archives $gentop $dlprefiles
912397cf2ee2Smrg	  func_append oldobjs " $func_extract_archives_result"
91246e7d3316Smrg	fi
9125a966c04fSmrg
91266e7d3316Smrg	# POSIX demands no paths to be encoded in archives.  We have
91276e7d3316Smrg	# to avoid creating archives with duplicate basenames if we
91286e7d3316Smrg	# might have to extract them afterwards, e.g., when creating a
91296e7d3316Smrg	# static archive out of a convenience library, or when linking
91306e7d3316Smrg	# the entirety of a libtool archive into another (currently
91316e7d3316Smrg	# not supported by libtool).
91326e7d3316Smrg	if (for obj in $oldobjs
91336e7d3316Smrg	    do
91346e7d3316Smrg	      func_basename "$obj"
91356e7d3316Smrg	      $ECHO "$func_basename_result"
91366e7d3316Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
91376e7d3316Smrg	  :
91386e7d3316Smrg	else
91396e7d3316Smrg	  echo "copying selected object files to avoid basename conflicts..."
91406e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
914197cf2ee2Smrg	  func_append generated " $gentop"
91426e7d3316Smrg	  func_mkdir_p "$gentop"
91436e7d3316Smrg	  save_oldobjs=$oldobjs
91446e7d3316Smrg	  oldobjs=
91456e7d3316Smrg	  counter=1
91466e7d3316Smrg	  for obj in $save_oldobjs
91476e7d3316Smrg	  do
91486e7d3316Smrg	    func_basename "$obj"
91496e7d3316Smrg	    objbase="$func_basename_result"
91506e7d3316Smrg	    case " $oldobjs " in
91516e7d3316Smrg	    " ") oldobjs=$obj ;;
91526e7d3316Smrg	    *[\ /]"$objbase "*)
91536e7d3316Smrg	      while :; do
91546e7d3316Smrg		# Make sure we don't pick an alternate name that also
91556e7d3316Smrg		# overlaps.
91566e7d3316Smrg		newobj=lt$counter-$objbase
91576e7d3316Smrg		func_arith $counter + 1
91586e7d3316Smrg		counter=$func_arith_result
91596e7d3316Smrg		case " $oldobjs " in
91606e7d3316Smrg		*[\ /]"$newobj "*) ;;
91616e7d3316Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
91626e7d3316Smrg		esac
91636e7d3316Smrg	      done
91646e7d3316Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
916597cf2ee2Smrg	      func_append oldobjs " $gentop/$newobj"
91666e7d3316Smrg	      ;;
916797cf2ee2Smrg	    *) func_append oldobjs " $obj" ;;
91686e7d3316Smrg	    esac
9169a966c04fSmrg	  done
9170a966c04fSmrg	fi
9171ac92798bSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9172ac92798bSmrg	tool_oldlib=$func_to_tool_file_result
91736e7d3316Smrg	eval cmds=\"$old_archive_cmds\"
9174a966c04fSmrg
91756e7d3316Smrg	func_len " $cmds"
91766e7d3316Smrg	len=$func_len_result
91776e7d3316Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
91786e7d3316Smrg	  cmds=$old_archive_cmds
917997cf2ee2Smrg	elif test -n "$archiver_list_spec"; then
918097cf2ee2Smrg	  func_verbose "using command file archive linking..."
918197cf2ee2Smrg	  for obj in $oldobjs
918297cf2ee2Smrg	  do
918397cf2ee2Smrg	    func_to_tool_file "$obj"
918497cf2ee2Smrg	    $ECHO "$func_to_tool_file_result"
918597cf2ee2Smrg	  done > $output_objdir/$libname.libcmd
918697cf2ee2Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
918797cf2ee2Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
918897cf2ee2Smrg	  cmds=$old_archive_cmds
91896e7d3316Smrg	else
91906e7d3316Smrg	  # the command line is too long to link in one step, link in parts
91916e7d3316Smrg	  func_verbose "using piecewise archive linking..."
91926e7d3316Smrg	  save_RANLIB=$RANLIB
91936e7d3316Smrg	  RANLIB=:
91946e7d3316Smrg	  objlist=
91956e7d3316Smrg	  concat_cmds=
91966e7d3316Smrg	  save_oldobjs=$oldobjs
91976e7d3316Smrg	  oldobjs=
91986e7d3316Smrg	  # Is there a better way of finding the last object in the list?
91996e7d3316Smrg	  for obj in $save_oldobjs
92006e7d3316Smrg	  do
92016e7d3316Smrg	    last_oldobj=$obj
92026e7d3316Smrg	  done
92036e7d3316Smrg	  eval test_cmds=\"$old_archive_cmds\"
92046e7d3316Smrg	  func_len " $test_cmds"
92056e7d3316Smrg	  len0=$func_len_result
92066e7d3316Smrg	  len=$len0
92076e7d3316Smrg	  for obj in $save_oldobjs
92086e7d3316Smrg	  do
92096e7d3316Smrg	    func_len " $obj"
92106e7d3316Smrg	    func_arith $len + $func_len_result
92116e7d3316Smrg	    len=$func_arith_result
92126e7d3316Smrg	    func_append objlist " $obj"
92136e7d3316Smrg	    if test "$len" -lt "$max_cmd_len"; then
92146e7d3316Smrg	      :
92156e7d3316Smrg	    else
92166e7d3316Smrg	      # the above command should be used before it gets too long
92176e7d3316Smrg	      oldobjs=$objlist
92186e7d3316Smrg	      if test "$obj" = "$last_oldobj" ; then
92196e7d3316Smrg		RANLIB=$save_RANLIB
92206e7d3316Smrg	      fi
92216e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
92226e7d3316Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
92236e7d3316Smrg	      objlist=
92246e7d3316Smrg	      len=$len0
92256e7d3316Smrg	    fi
92266e7d3316Smrg	  done
92276e7d3316Smrg	  RANLIB=$save_RANLIB
92286e7d3316Smrg	  oldobjs=$objlist
92296e7d3316Smrg	  if test "X$oldobjs" = "X" ; then
92306e7d3316Smrg	    eval cmds=\"\$concat_cmds\"
92316e7d3316Smrg	  else
92326e7d3316Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
92336e7d3316Smrg	  fi
92346e7d3316Smrg	fi
92356e7d3316Smrg      fi
92366e7d3316Smrg      func_execute_cmds "$cmds" 'exit $?'
9237a966c04fSmrg    done
9238a966c04fSmrg
92396e7d3316Smrg    test -n "$generated" && \
92406e7d3316Smrg      func_show_eval "${RM}r$generated"
9241a966c04fSmrg
92426e7d3316Smrg    # Now create the libtool archive.
92436e7d3316Smrg    case $output in
92446e7d3316Smrg    *.la)
92456e7d3316Smrg      old_library=
92466e7d3316Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
92476e7d3316Smrg      func_verbose "creating $output"
9248a966c04fSmrg
92496e7d3316Smrg      # Preserve any variables that may affect compiler behavior
92506e7d3316Smrg      for var in $variables_saved_for_relink; do
92516e7d3316Smrg	if eval test -z \"\${$var+set}\"; then
92526e7d3316Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
92536e7d3316Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
92546e7d3316Smrg	  relink_command="$var=; export $var; $relink_command"
9255a966c04fSmrg	else
92566e7d3316Smrg	  func_quote_for_eval "$var_value"
92576e7d3316Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258a966c04fSmrg	fi
92596e7d3316Smrg      done
92606e7d3316Smrg      # Quote the link command for shipping.
92616e7d3316Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
92626e7d3316Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
92636e7d3316Smrg      if test "$hardcode_automatic" = yes ; then
92646e7d3316Smrg	relink_command=
92656e7d3316Smrg      fi
9266a966c04fSmrg
92676e7d3316Smrg      # Only create the output if not a dry run.
92686e7d3316Smrg      $opt_dry_run || {
92696e7d3316Smrg	for installed in no yes; do
92706e7d3316Smrg	  if test "$installed" = yes; then
92716e7d3316Smrg	    if test -z "$install_libdir"; then
92726e7d3316Smrg	      break
92736e7d3316Smrg	    fi
92746e7d3316Smrg	    output="$output_objdir/$outputname"i
92756e7d3316Smrg	    # Replace all uninstalled libtool libraries with the installed ones
92766e7d3316Smrg	    newdependency_libs=
92776e7d3316Smrg	    for deplib in $dependency_libs; do
92786e7d3316Smrg	      case $deplib in
92796e7d3316Smrg	      *.la)
92806e7d3316Smrg		func_basename "$deplib"
92816e7d3316Smrg		name="$func_basename_result"
9282ac92798bSmrg		func_resolve_sysroot "$deplib"
9283ac92798bSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
92846e7d3316Smrg		test -z "$libdir" && \
92856e7d3316Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
928697cf2ee2Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
928797cf2ee2Smrg		;;
928897cf2ee2Smrg	      -L*)
928997cf2ee2Smrg		func_stripname -L '' "$deplib"
929097cf2ee2Smrg		func_replace_sysroot "$func_stripname_result"
929197cf2ee2Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
929297cf2ee2Smrg		;;
929397cf2ee2Smrg	      -R*)
929497cf2ee2Smrg		func_stripname -R '' "$deplib"
929597cf2ee2Smrg		func_replace_sysroot "$func_stripname_result"
929697cf2ee2Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
92976e7d3316Smrg		;;
929897cf2ee2Smrg	      *) func_append newdependency_libs " $deplib" ;;
92996e7d3316Smrg	      esac
93006e7d3316Smrg	    done
93016e7d3316Smrg	    dependency_libs="$newdependency_libs"
93026e7d3316Smrg	    newdlfiles=
93036e7d3316Smrg
93046e7d3316Smrg	    for lib in $dlfiles; do
93056e7d3316Smrg	      case $lib in
93066e7d3316Smrg	      *.la)
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 newdlfiles " ${lt_sysroot:+=}$libdir/$name"
93136e7d3316Smrg		;;
931497cf2ee2Smrg	      *) func_append newdlfiles " $lib" ;;
93156e7d3316Smrg	      esac
93166e7d3316Smrg	    done
93176e7d3316Smrg	    dlfiles="$newdlfiles"
93186e7d3316Smrg	    newdlprefiles=
93196e7d3316Smrg	    for lib in $dlprefiles; do
93206e7d3316Smrg	      case $lib in
93216e7d3316Smrg	      *.la)
93226e7d3316Smrg		# Only pass preopened files to the pseudo-archive (for
93236e7d3316Smrg		# eventual linking with the app. that links it) if we
93246e7d3316Smrg		# didn't already link the preopened objects directly into
93256e7d3316Smrg		# the library:
93266e7d3316Smrg		func_basename "$lib"
93276e7d3316Smrg		name="$func_basename_result"
93286e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
93296e7d3316Smrg		test -z "$libdir" && \
93306e7d3316Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
933197cf2ee2Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
93326e7d3316Smrg		;;
93336e7d3316Smrg	      esac
93346e7d3316Smrg	    done
93356e7d3316Smrg	    dlprefiles="$newdlprefiles"
93366e7d3316Smrg	  else
93376e7d3316Smrg	    newdlfiles=
93386e7d3316Smrg	    for lib in $dlfiles; do
93396e7d3316Smrg	      case $lib in
93406e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
93416e7d3316Smrg		*) abs=`pwd`"/$lib" ;;
93426e7d3316Smrg	      esac
934397cf2ee2Smrg	      func_append newdlfiles " $abs"
93446e7d3316Smrg	    done
93456e7d3316Smrg	    dlfiles="$newdlfiles"
93466e7d3316Smrg	    newdlprefiles=
93476e7d3316Smrg	    for lib in $dlprefiles; do
93486e7d3316Smrg	      case $lib in
93496e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
93506e7d3316Smrg		*) abs=`pwd`"/$lib" ;;
93516e7d3316Smrg	      esac
935297cf2ee2Smrg	      func_append newdlprefiles " $abs"
93536e7d3316Smrg	    done
93546e7d3316Smrg	    dlprefiles="$newdlprefiles"
93556e7d3316Smrg	  fi
93566e7d3316Smrg	  $RM $output
93576e7d3316Smrg	  # place dlname in correct position for cygwin
93586e7d3316Smrg	  # In fact, it would be nice if we could use this code for all target
93596e7d3316Smrg	  # systems that can't hard-code library paths into their executables
93606e7d3316Smrg	  # and that have no shared library path variable independent of PATH,
93616e7d3316Smrg	  # but it turns out we can't easily determine that from inspecting
93626e7d3316Smrg	  # libtool variables, so we have to hard-code the OSs to which it
93636e7d3316Smrg	  # applies here; at the moment, that means platforms that use the PE
93646e7d3316Smrg	  # object format with DLL files.  See the long comment at the top of
93656e7d3316Smrg	  # tests/bindir.at for full details.
93666e7d3316Smrg	  tdlname=$dlname
93676e7d3316Smrg	  case $host,$output,$installed,$module,$dlname in
93686e7d3316Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
93696e7d3316Smrg	      # If a -bindir argument was supplied, place the dll there.
93706e7d3316Smrg	      if test "x$bindir" != x ;
93716e7d3316Smrg	      then
93726e7d3316Smrg		func_relative_path "$install_libdir" "$bindir"
93736e7d3316Smrg		tdlname=$func_relative_path_result$dlname
93746e7d3316Smrg	      else
93756e7d3316Smrg		# Otherwise fall back on heuristic.
93766e7d3316Smrg		tdlname=../bin/$dlname
93776e7d3316Smrg	      fi
93786e7d3316Smrg	      ;;
93796e7d3316Smrg	  esac
93806e7d3316Smrg	  $ECHO > $output "\
93816e7d3316Smrg# $outputname - a libtool library file
93826e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
93836e7d3316Smrg#
93846e7d3316Smrg# Please DO NOT delete this file!
93856e7d3316Smrg# It is necessary for linking the library.
9386a966c04fSmrg
93876e7d3316Smrg# The name that we can dlopen(3).
93886e7d3316Smrgdlname='$tdlname'
9389a966c04fSmrg
93906e7d3316Smrg# Names of this library.
93916e7d3316Smrglibrary_names='$library_names'
9392a966c04fSmrg
93936e7d3316Smrg# The name of the static archive.
93946e7d3316Smrgold_library='$old_library'
9395a966c04fSmrg
93966e7d3316Smrg# Linker flags that can not go in dependency_libs.
93976e7d3316Smrginherited_linker_flags='$new_inherited_linker_flags'
9398a966c04fSmrg
93996e7d3316Smrg# Libraries that this one depends upon.
94006e7d3316Smrgdependency_libs='$dependency_libs'
9401a966c04fSmrg
94026e7d3316Smrg# Names of additional weak libraries provided by this library
94036e7d3316Smrgweak_library_names='$weak_libs'
9404a966c04fSmrg
94056e7d3316Smrg# Version information for $libname.
94066e7d3316Smrgcurrent=$current
94076e7d3316Smrgage=$age
94086e7d3316Smrgrevision=$revision
9409a966c04fSmrg
94106e7d3316Smrg# Is this an already installed library?
94116e7d3316Smrginstalled=$installed
9412a966c04fSmrg
94136e7d3316Smrg# Should we warn about portability when linking against -modules?
94146e7d3316Smrgshouldnotlink=$module
9415a966c04fSmrg
94166e7d3316Smrg# Files to dlopen/dlpreopen
94176e7d3316Smrgdlopen='$dlfiles'
94186e7d3316Smrgdlpreopen='$dlprefiles'
9419a966c04fSmrg
94206e7d3316Smrg# Directory that this library needs to be installed in:
94216e7d3316Smrglibdir='$install_libdir'"
94226e7d3316Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
94236e7d3316Smrg	    $ECHO >> $output "\
94246e7d3316Smrgrelink_command=\"$relink_command\""
94256e7d3316Smrg	  fi
94266e7d3316Smrg	done
94276e7d3316Smrg      }
9428a966c04fSmrg
94296e7d3316Smrg      # Do a symbolic link so that the libtool archive can be found in
94306e7d3316Smrg      # LD_LIBRARY_PATH before the program is installed.
94316e7d3316Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
94326e7d3316Smrg      ;;
94336e7d3316Smrg    esac
94346e7d3316Smrg    exit $EXIT_SUCCESS
94356e7d3316Smrg}
9436a966c04fSmrg
943797cf2ee2Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
94386e7d3316Smrg    func_mode_link ${1+"$@"}
9439a966c04fSmrg
9440a966c04fSmrg
94416e7d3316Smrg# func_mode_uninstall arg...
94426e7d3316Smrgfunc_mode_uninstall ()
94436e7d3316Smrg{
94446e7d3316Smrg    $opt_debug
94456e7d3316Smrg    RM="$nonopt"
9446a966c04fSmrg    files=
9447a966c04fSmrg    rmforce=
9448a966c04fSmrg    exit_status=0
9449a966c04fSmrg
9450a966c04fSmrg    # This variable tells wrapper scripts just to set variables rather
9451a966c04fSmrg    # than running their programs.
9452a966c04fSmrg    libtool_install_magic="$magic"
9453a966c04fSmrg
9454a966c04fSmrg    for arg
9455a966c04fSmrg    do
9456a966c04fSmrg      case $arg in
945797cf2ee2Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
945897cf2ee2Smrg      -*) func_append RM " $arg" ;;
945997cf2ee2Smrg      *) func_append files " $arg" ;;
9460a966c04fSmrg      esac
9461a966c04fSmrg    done
9462a966c04fSmrg
94636e7d3316Smrg    test -z "$RM" && \
94646e7d3316Smrg      func_fatal_help "you must specify an RM program"
9465a966c04fSmrg
9466a966c04fSmrg    rmdirs=
9467a966c04fSmrg
9468a966c04fSmrg    for file in $files; do
94696e7d3316Smrg      func_dirname "$file" "" "."
94706e7d3316Smrg      dir="$func_dirname_result"
94716e7d3316Smrg      if test "X$dir" = X.; then
947297cf2ee2Smrg	odir="$objdir"
9473a966c04fSmrg      else
947497cf2ee2Smrg	odir="$dir/$objdir"
9475a966c04fSmrg      fi
94766e7d3316Smrg      func_basename "$file"
94776e7d3316Smrg      name="$func_basename_result"
947897cf2ee2Smrg      test "$opt_mode" = uninstall && odir="$dir"
9479a966c04fSmrg
948097cf2ee2Smrg      # Remember odir for removal later, being careful to avoid duplicates
948197cf2ee2Smrg      if test "$opt_mode" = clean; then
9482a966c04fSmrg	case " $rmdirs " in
948397cf2ee2Smrg	  *" $odir "*) ;;
948497cf2ee2Smrg	  *) func_append rmdirs " $odir" ;;
9485a966c04fSmrg	esac
9486a966c04fSmrg      fi
9487a966c04fSmrg
9488a966c04fSmrg      # Don't error if the file doesn't exist and rm -f was used.
94896e7d3316Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
94906e7d3316Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
94916e7d3316Smrg	 test -f "$file"; then
9492a966c04fSmrg	:
9493a966c04fSmrg      elif test -d "$file"; then
9494a966c04fSmrg	exit_status=1
9495a966c04fSmrg	continue
9496a966c04fSmrg      elif test "$rmforce" = yes; then
9497a966c04fSmrg	continue
9498a966c04fSmrg      fi
9499a966c04fSmrg
9500a966c04fSmrg      rmfiles="$file"
9501a966c04fSmrg
9502a966c04fSmrg      case $name in
9503a966c04fSmrg      *.la)
9504a966c04fSmrg	# Possibly a libtool archive, so verify it.
95056e7d3316Smrg	if func_lalib_p "$file"; then
95066e7d3316Smrg	  func_source $dir/$name
9507a966c04fSmrg
9508a966c04fSmrg	  # Delete the libtool libraries and symlinks.
9509a966c04fSmrg	  for n in $library_names; do
951097cf2ee2Smrg	    func_append rmfiles " $odir/$n"
9511a966c04fSmrg	  done
951297cf2ee2Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9513a966c04fSmrg
951497cf2ee2Smrg	  case "$opt_mode" in
9515a966c04fSmrg	  clean)
951697cf2ee2Smrg	    case " $library_names " in
9517a966c04fSmrg	    *" $dlname "*) ;;
951897cf2ee2Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9519a966c04fSmrg	    esac
952097cf2ee2Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9521a966c04fSmrg	    ;;
9522a966c04fSmrg	  uninstall)
9523a966c04fSmrg	    if test -n "$library_names"; then
9524a966c04fSmrg	      # Do each command in the postuninstall commands.
95256e7d3316Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9526a966c04fSmrg	    fi
9527a966c04fSmrg
9528a966c04fSmrg	    if test -n "$old_library"; then
9529a966c04fSmrg	      # Do each command in the old_postuninstall commands.
95306e7d3316Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9531a966c04fSmrg	    fi
9532a966c04fSmrg	    # FIXME: should reinstall the best remaining shared library.
9533a966c04fSmrg	    ;;
9534a966c04fSmrg	  esac
9535a966c04fSmrg	fi
9536a966c04fSmrg	;;
9537a966c04fSmrg
9538a966c04fSmrg      *.lo)
9539a966c04fSmrg	# Possibly a libtool object, so verify it.
95406e7d3316Smrg	if func_lalib_p "$file"; then
9541a966c04fSmrg
9542a966c04fSmrg	  # Read the .lo file
95436e7d3316Smrg	  func_source $dir/$name
9544a966c04fSmrg
9545a966c04fSmrg	  # Add PIC object to the list of files to remove.
95466e7d3316Smrg	  if test -n "$pic_object" &&
95476e7d3316Smrg	     test "$pic_object" != none; then
954897cf2ee2Smrg	    func_append rmfiles " $dir/$pic_object"
9549a966c04fSmrg	  fi
9550a966c04fSmrg
9551a966c04fSmrg	  # Add non-PIC object to the list of files to remove.
95526e7d3316Smrg	  if test -n "$non_pic_object" &&
95536e7d3316Smrg	     test "$non_pic_object" != none; then
955497cf2ee2Smrg	    func_append rmfiles " $dir/$non_pic_object"
9555a966c04fSmrg	  fi
9556a966c04fSmrg	fi
9557a966c04fSmrg	;;
9558a966c04fSmrg
9559a966c04fSmrg      *)
956097cf2ee2Smrg	if test "$opt_mode" = clean ; then
9561a966c04fSmrg	  noexename=$name
9562a966c04fSmrg	  case $file in
9563a966c04fSmrg	  *.exe)
95646e7d3316Smrg	    func_stripname '' '.exe' "$file"
95656e7d3316Smrg	    file=$func_stripname_result
95666e7d3316Smrg	    func_stripname '' '.exe' "$name"
95676e7d3316Smrg	    noexename=$func_stripname_result
9568a966c04fSmrg	    # $file with .exe has already been added to rmfiles,
9569a966c04fSmrg	    # add $file without .exe
957097cf2ee2Smrg	    func_append rmfiles " $file"
9571a966c04fSmrg	    ;;
9572a966c04fSmrg	  esac
9573a966c04fSmrg	  # Do a test to see if this is a libtool program.
95746e7d3316Smrg	  if func_ltwrapper_p "$file"; then
95756e7d3316Smrg	    if func_ltwrapper_executable_p "$file"; then
95766e7d3316Smrg	      func_ltwrapper_scriptname "$file"
95776e7d3316Smrg	      relink_command=
95786e7d3316Smrg	      func_source $func_ltwrapper_scriptname_result
957997cf2ee2Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
95806e7d3316Smrg	    else
95816e7d3316Smrg	      relink_command=
95826e7d3316Smrg	      func_source $dir/$noexename
95836e7d3316Smrg	    fi
9584a966c04fSmrg
9585a966c04fSmrg	    # note $name still contains .exe if it was in $file originally
9586a966c04fSmrg	    # as does the version of $file that was added into $rmfiles
958797cf2ee2Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9588a966c04fSmrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
958997cf2ee2Smrg	      func_append rmfiles " $odir/lt-$name"
9590a966c04fSmrg	    fi
9591a966c04fSmrg	    if test "X$noexename" != "X$name" ; then
959297cf2ee2Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9593a966c04fSmrg	    fi
9594a966c04fSmrg	  fi
9595a966c04fSmrg	fi
9596a966c04fSmrg	;;
9597a966c04fSmrg      esac
95986e7d3316Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9599a966c04fSmrg    done
9600a966c04fSmrg
9601a966c04fSmrg    # Try to remove the ${objdir}s in the directories where we deleted files
9602a966c04fSmrg    for dir in $rmdirs; do
9603a966c04fSmrg      if test -d "$dir"; then
96046e7d3316Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9605a966c04fSmrg      fi
9606a966c04fSmrg    done
9607a966c04fSmrg
9608a966c04fSmrg    exit $exit_status
96096e7d3316Smrg}
9610a966c04fSmrg
961197cf2ee2Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
96126e7d3316Smrg    func_mode_uninstall ${1+"$@"}
9613a966c04fSmrg
961497cf2ee2Smrgtest -z "$opt_mode" && {
96156e7d3316Smrg  help="$generic_help"
96166e7d3316Smrg  func_fatal_help "you must specify a MODE"
96176e7d3316Smrg}
96186e7d3316Smrg
96196e7d3316Smrgtest -z "$exec_cmd" && \
962097cf2ee2Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9621a966c04fSmrg
9622a966c04fSmrgif test -n "$exec_cmd"; then
96236e7d3316Smrg  eval exec "$exec_cmd"
9624a966c04fSmrg  exit $EXIT_FAILURE
9625a966c04fSmrgfi
9626a966c04fSmrg
96276e7d3316Smrgexit $exit_status
9628a966c04fSmrg
9629a966c04fSmrg
9630a966c04fSmrg# The TAGs below are defined such that we never get into a situation
9631a966c04fSmrg# in which we disable both kinds of libraries.  Given conflicting
9632a966c04fSmrg# choices, we go for a static library, that is the most portable,
9633a966c04fSmrg# since we can't tell whether shared libraries were disabled because
9634a966c04fSmrg# the user asked for that or because the platform doesn't support
9635a966c04fSmrg# them.  This is particularly important on AIX, because we don't
9636a966c04fSmrg# support having both static and shared libraries enabled at the same
9637a966c04fSmrg# time on that platform, so we default to a shared-only configuration.
9638a966c04fSmrg# If a disable-shared tag is given, we'll fallback to a static-only
9639a966c04fSmrg# configuration.  But we'll never go from static-only to shared-only.
9640a966c04fSmrg
9641a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
96426e7d3316Smrgbuild_libtool_libs=no
96436e7d3316Smrgbuild_old_libs=yes
9644a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-shared
9645a966c04fSmrg
9646a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
96476e7d3316Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9648a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-static
9649a966c04fSmrg
9650a966c04fSmrg# Local Variables:
9651a966c04fSmrg# mode:shell-script
9652a966c04fSmrg# sh-indentation:2
9653a966c04fSmrg# End:
96546e7d3316Smrg# vi:sw=2
96556e7d3316Smrg
9656