ltmain.sh revision 6e7d3316
16e7d3316Smrg# Generated from ltmain.m4sh.
26e7d3316Smrg
36e7d3316Smrg# libtool (GNU libtool) 2.2.10
46e7d3316Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
56e7d3316Smrg
62e2dd055Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
76e7d3316Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
86e7d3316Smrg# This is free software; see the source for copying conditions.  There is NO
96e7d3316Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
106e7d3316Smrg
116e7d3316Smrg# GNU Libtool is free software; you can redistribute it and/or modify
12a966c04fSmrg# it under the terms of the GNU General Public License as published by
13a966c04fSmrg# the Free Software Foundation; either version 2 of the License, or
14a966c04fSmrg# (at your option) any later version.
15a966c04fSmrg#
166e7d3316Smrg# As a special exception to the GNU General Public License,
176e7d3316Smrg# if you distribute this file as part of a program or library that
186e7d3316Smrg# is built using GNU Libtool, you may include this file under the
196e7d3316Smrg# same distribution terms that you use for the rest of that program.
206e7d3316Smrg#
216e7d3316Smrg# GNU Libtool is distributed in the hope that it will be useful, but
22a966c04fSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
23a966c04fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24a966c04fSmrg# General Public License for more details.
25a966c04fSmrg#
26a966c04fSmrg# You should have received a copy of the GNU General Public License
276e7d3316Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
286e7d3316Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
296e7d3316Smrg# or obtained by writing to the Free Software Foundation, Inc.,
306e7d3316Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
31a966c04fSmrg
326e7d3316Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
336e7d3316Smrg#
346e7d3316Smrg# Provide generalized library-building support services.
356e7d3316Smrg#
366e7d3316Smrg#       --config             show all configuration variables
376e7d3316Smrg#       --debug              enable verbose shell tracing
386e7d3316Smrg#   -n, --dry-run            display commands without modifying any files
396e7d3316Smrg#       --features           display basic configuration information and exit
406e7d3316Smrg#       --mode=MODE          use operation mode MODE
416e7d3316Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
426e7d3316Smrg#       --quiet, --silent    don't print informational messages
436e7d3316Smrg#       --no-quiet, --no-silent
446e7d3316Smrg#                            print informational messages (default)
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)
736e7d3316Smrg#         $progname:	(GNU libtool) 2.2.10
746e7d3316Smrg#         automake:	$automake_version
756e7d3316Smrg#         autoconf:	$autoconf_version
766e7d3316Smrg#
776e7d3316Smrg# Report bugs to <bug-libtool@gnu.org>.
78a966c04fSmrg
796e7d3316SmrgPROGRAM=libtool
80a966c04fSmrgPACKAGE=libtool
816e7d3316SmrgVERSION=2.2.10
826e7d3316SmrgTIMESTAMP=""
836e7d3316Smrgpackage_revision=1.3175
842e2dd055Smrg
856e7d3316Smrg# Be Bourne compatible
862e2dd055Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
872e2dd055Smrg  emulate sh
882e2dd055Smrg  NULLCMD=:
892e2dd055Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
902e2dd055Smrg  # is contrary to our usage.  Disable this feature.
912e2dd055Smrg  alias -g '${1+"$@"}'='"$@"'
92a966c04fSmrg  setopt NO_GLOB_SUBST
932e2dd055Smrgelse
942e2dd055Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
95a966c04fSmrgfi
962e2dd055SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
972e2dd055SmrgDUALCASE=1; export DUALCASE # for MKS sh
98a966c04fSmrg
996e7d3316Smrg# A function that is used when there is no print builtin or printf.
1006e7d3316Smrgfunc_fallback_echo ()
1016e7d3316Smrg{
1026e7d3316Smrg  eval 'cat <<_LTECHO_EOF
1036e7d3316Smrg$1
1046e7d3316Smrg_LTECHO_EOF'
1056e7d3316Smrg}
106a966c04fSmrg
1076e7d3316Smrg# NLS nuisances: We save the old values to restore during execute mode.
1086e7d3316Smrglt_user_locale=
1096e7d3316Smrglt_safe_locale=
1102e2dd055Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1112e2dd055Smrgdo
1122e2dd055Smrg  eval "if test \"\${$lt_var+set}\" = set; then
1136e7d3316Smrg          save_$lt_var=\$$lt_var
1146e7d3316Smrg          $lt_var=C
1152e2dd055Smrg	  export $lt_var
1166e7d3316Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
1176e7d3316Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1182e2dd055Smrg	fi"
1192e2dd055Smrgdone
1206e7d3316SmrgLC_ALL=C
1216e7d3316SmrgLANGUAGE=C
1226e7d3316Smrgexport LANGUAGE LC_ALL
1232e2dd055Smrg
1246e7d3316Smrg$lt_unset CDPATH
1256e7d3316Smrg
1266e7d3316Smrg
1276e7d3316Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1286e7d3316Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1296e7d3316Smrg# the _XPG environment variable is not equal to 1 (one), the special
1306e7d3316Smrg# positional parameter $0, within a function call, is the name of the
1316e7d3316Smrg# function.
1326e7d3316Smrgprogpath="$0"
1336e7d3316Smrg
1346e7d3316Smrg
1356e7d3316Smrg
1366e7d3316Smrg: ${CP="cp -f"}
1376e7d3316Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
1386e7d3316Smrg: ${EGREP="grep -E"}
1396e7d3316Smrg: ${FGREP="grep -F"}
1406e7d3316Smrg: ${GREP="grep"}
1416e7d3316Smrg: ${LN_S="ln -s"}
1426e7d3316Smrg: ${MAKE="make"}
1436e7d3316Smrg: ${MKDIR="mkdir"}
1446e7d3316Smrg: ${MV="mv -f"}
1456e7d3316Smrg: ${RM="rm -f"}
1466e7d3316Smrg: ${SED="sed"}
1476e7d3316Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
1486e7d3316Smrg: ${Xsed="$SED -e 1s/^X//"}
1496e7d3316Smrg
1506e7d3316Smrg# Global variables:
1516e7d3316SmrgEXIT_SUCCESS=0
1526e7d3316SmrgEXIT_FAILURE=1
1536e7d3316SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
1546e7d3316SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
1556e7d3316Smrg
1566e7d3316Smrgexit_status=$EXIT_SUCCESS
157a966c04fSmrg
158a966c04fSmrg# Make sure IFS has a sensible default
159a966c04fSmrglt_nl='
160a966c04fSmrg'
161a966c04fSmrgIFS=" 	$lt_nl"
162a966c04fSmrg
1636e7d3316Smrgdirname="s,/[^/]*$,,"
1646e7d3316Smrgbasename="s,^.*/,,"
1656e7d3316Smrg
1666e7d3316Smrg# func_dirname_and_basename file append nondir_replacement
1676e7d3316Smrg# perform func_basename and func_dirname in a single function
1686e7d3316Smrg# call:
1696e7d3316Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
1706e7d3316Smrg#             add APPEND to the result, otherwise set result
1716e7d3316Smrg#             to NONDIR_REPLACEMENT.
1726e7d3316Smrg#             value returned in "$func_dirname_result"
1736e7d3316Smrg#   basename: Compute filename of FILE.
1746e7d3316Smrg#             value retuned in "$func_basename_result"
1756e7d3316Smrg# Implementation must be kept synchronized with func_dirname
1766e7d3316Smrg# and func_basename. For efficiency, we do not delegate to
1776e7d3316Smrg# those functions but instead duplicate the functionality here.
1786e7d3316Smrgfunc_dirname_and_basename ()
1796e7d3316Smrg{
1806e7d3316Smrg  # Extract subdirectory from the argument.
1816e7d3316Smrg  func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
1826e7d3316Smrg  if test "X$func_dirname_result" = "X${1}"; then
1836e7d3316Smrg    func_dirname_result="${3}"
1846e7d3316Smrg  else
1856e7d3316Smrg    func_dirname_result="$func_dirname_result${2}"
1866e7d3316Smrg  fi
1876e7d3316Smrg  func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
1886e7d3316Smrg}
189a966c04fSmrg
1906e7d3316Smrg# Generated shell functions inserted here.
1916e7d3316Smrg
1926e7d3316Smrg# These SED scripts presuppose an absolute path with a trailing slash.
1936e7d3316Smrgpathcar='s,^/\([^/]*\).*$,\1,'
1946e7d3316Smrgpathcdr='s,^/[^/]*,,'
1956e7d3316Smrgremovedotparts=':dotsl
1966e7d3316Smrg		s@/\./@/@g
1976e7d3316Smrg		t dotsl
1986e7d3316Smrg		s,/\.$,/,'
1996e7d3316Smrgcollapseslashes='s@/\{1,\}@/@g'
2006e7d3316Smrgfinalslash='s,/*$,/,'
2016e7d3316Smrg
2026e7d3316Smrg# func_normal_abspath PATH
2036e7d3316Smrg# Remove doubled-up and trailing slashes, "." path components,
2046e7d3316Smrg# and cancel out any ".." path components in PATH after making
2056e7d3316Smrg# it an absolute path.
2066e7d3316Smrg#             value returned in "$func_normal_abspath_result"
2076e7d3316Smrgfunc_normal_abspath ()
2086e7d3316Smrg{
2096e7d3316Smrg  # Start from root dir and reassemble the path.
2106e7d3316Smrg  func_normal_abspath_result=
2116e7d3316Smrg  func_normal_abspath_tpath=$1
2126e7d3316Smrg  func_normal_abspath_altnamespace=
2136e7d3316Smrg  case $func_normal_abspath_tpath in
2146e7d3316Smrg    "")
2156e7d3316Smrg      # Empty path, that just means $cwd.
2166e7d3316Smrg      func_stripname '' '/' "`pwd`"
2176e7d3316Smrg      func_normal_abspath_result=$func_stripname_result
2186e7d3316Smrg      return
2196e7d3316Smrg    ;;
2206e7d3316Smrg    # The next three entries are used to spot a run of precisely
2216e7d3316Smrg    # two leading slashes without using negated character classes;
2226e7d3316Smrg    # we take advantage of case's first-match behaviour.
2236e7d3316Smrg    ///*)
2246e7d3316Smrg      # Unusual form of absolute path, do nothing.
2256e7d3316Smrg    ;;
2266e7d3316Smrg    //*)
2276e7d3316Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2286e7d3316Smrg      # and for example Cygwin uses it to access remote file shares
2296e7d3316Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2306e7d3316Smrg      func_normal_abspath_altnamespace=/
2316e7d3316Smrg    ;;
2326e7d3316Smrg    /*)
2336e7d3316Smrg      # Absolute path, do nothing.
2346e7d3316Smrg    ;;
2356e7d3316Smrg    *)
2366e7d3316Smrg      # Relative path, prepend $cwd.
2376e7d3316Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2386e7d3316Smrg    ;;
2396e7d3316Smrg  esac
2406e7d3316Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2416e7d3316Smrg  # the path to end with a slash for ease of parsing, so make sure
2426e7d3316Smrg  # there is one (and only one) here.
2436e7d3316Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2446e7d3316Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2456e7d3316Smrg  while :; do
2466e7d3316Smrg    # Processed it all yet?
2476e7d3316Smrg    if test "$func_normal_abspath_tpath" = / ; then
2486e7d3316Smrg      # If we ascended to the root using ".." the result may be empty now.
2496e7d3316Smrg      if test -z "$func_normal_abspath_result" ; then
2506e7d3316Smrg        func_normal_abspath_result=/
2516e7d3316Smrg      fi
2526e7d3316Smrg      break
2536e7d3316Smrg    fi
2546e7d3316Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2556e7d3316Smrg        -e "$pathcar"`
2566e7d3316Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2576e7d3316Smrg        -e "$pathcdr"`
2586e7d3316Smrg    # Figure out what to do with it
2596e7d3316Smrg    case $func_normal_abspath_tcomponent in
2606e7d3316Smrg      "")
2616e7d3316Smrg        # Trailing empty path component, ignore it.
2626e7d3316Smrg      ;;
2636e7d3316Smrg      ..)
2646e7d3316Smrg        # Parent dir; strip last assembled component from result.
2656e7d3316Smrg        func_dirname "$func_normal_abspath_result"
2666e7d3316Smrg        func_normal_abspath_result=$func_dirname_result
2676e7d3316Smrg      ;;
2686e7d3316Smrg      *)
2696e7d3316Smrg        # Actual path component, append it.
2706e7d3316Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
2716e7d3316Smrg      ;;
2726e7d3316Smrg    esac
2736e7d3316Smrg  done
2746e7d3316Smrg  # Restore leading double-slash if one was found on entry.
2756e7d3316Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
2766e7d3316Smrg}
2776e7d3316Smrg
2786e7d3316Smrg# func_relative_path SRCDIR DSTDIR
2796e7d3316Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
2806e7d3316Smrg# slash if non-empty, suitable for immediately appending a filename
2816e7d3316Smrg# without needing to append a separator.
2826e7d3316Smrg#             value returned in "$func_relative_path_result"
2836e7d3316Smrgfunc_relative_path ()
2846e7d3316Smrg{
2856e7d3316Smrg  func_relative_path_result=
2866e7d3316Smrg  func_normal_abspath "$1"
2876e7d3316Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
2886e7d3316Smrg  func_normal_abspath "$2"
2896e7d3316Smrg  func_relative_path_tbindir=$func_normal_abspath_result
2906e7d3316Smrg
2916e7d3316Smrg  # Ascend the tree starting from libdir
2926e7d3316Smrg  while :; do
2936e7d3316Smrg    # check if we have found a prefix of bindir
2946e7d3316Smrg    case $func_relative_path_tbindir in
2956e7d3316Smrg      $func_relative_path_tlibdir)
2966e7d3316Smrg        # found an exact match
2976e7d3316Smrg        func_relative_path_tcancelled=
2986e7d3316Smrg        break
2996e7d3316Smrg        ;;
3006e7d3316Smrg      $func_relative_path_tlibdir*)
3016e7d3316Smrg        # found a matching prefix
3026e7d3316Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3036e7d3316Smrg        func_relative_path_tcancelled=$func_stripname_result
3046e7d3316Smrg        if test -z "$func_relative_path_result"; then
3056e7d3316Smrg          func_relative_path_result=.
3066e7d3316Smrg        fi
3076e7d3316Smrg        break
3086e7d3316Smrg        ;;
3096e7d3316Smrg      *)
3106e7d3316Smrg        func_dirname $func_relative_path_tlibdir
3116e7d3316Smrg        func_relative_path_tlibdir=${func_dirname_result}
3126e7d3316Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3136e7d3316Smrg          # Have to descend all the way to the root!
3146e7d3316Smrg          func_relative_path_result=../$func_relative_path_result
3156e7d3316Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3166e7d3316Smrg          break
3176e7d3316Smrg        fi
3186e7d3316Smrg        func_relative_path_result=../$func_relative_path_result
3196e7d3316Smrg        ;;
3206e7d3316Smrg    esac
3216e7d3316Smrg  done
3226e7d3316Smrg
3236e7d3316Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3246e7d3316Smrg  func_stripname '' '/' "$func_relative_path_result"
3256e7d3316Smrg  func_relative_path_result=$func_stripname_result
3266e7d3316Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3276e7d3316Smrg  if test "x$func_stripname_result" != x ; then
3286e7d3316Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3296e7d3316Smrg  fi
3306e7d3316Smrg
3316e7d3316Smrg  # Normalisation. If bindir is libdir, return empty string,
3326e7d3316Smrg  # else relative path ending with a slash; either way, target
3336e7d3316Smrg  # file name can be directly appended.
3346e7d3316Smrg  if test ! -z "$func_relative_path_result"; then
3356e7d3316Smrg    func_stripname './' '' "$func_relative_path_result/"
3366e7d3316Smrg    func_relative_path_result=$func_stripname_result
3376e7d3316Smrg  fi
3386e7d3316Smrg}
3396e7d3316Smrg
3406e7d3316Smrg# The name of this program:
3416e7d3316Smrgfunc_dirname_and_basename "$progpath"
3426e7d3316Smrgprogname=$func_basename_result
3436e7d3316Smrg
3446e7d3316Smrg# Make sure we have an absolute path for reexecution:
3456e7d3316Smrgcase $progpath in
3466e7d3316Smrg  [\\/]*|[A-Za-z]:\\*) ;;
3476e7d3316Smrg  *[\\/]*)
3486e7d3316Smrg     progdir=$func_dirname_result
3496e7d3316Smrg     progdir=`cd "$progdir" && pwd`
3506e7d3316Smrg     progpath="$progdir/$progname"
3516e7d3316Smrg     ;;
3526e7d3316Smrg  *)
3536e7d3316Smrg     save_IFS="$IFS"
3546e7d3316Smrg     IFS=:
3556e7d3316Smrg     for progdir in $PATH; do
3566e7d3316Smrg       IFS="$save_IFS"
3576e7d3316Smrg       test -x "$progdir/$progname" && break
3586e7d3316Smrg     done
3596e7d3316Smrg     IFS="$save_IFS"
3606e7d3316Smrg     test -n "$progdir" || progdir=`pwd`
3616e7d3316Smrg     progpath="$progdir/$progname"
3626e7d3316Smrg     ;;
3636e7d3316Smrgesac
3646e7d3316Smrg
3656e7d3316Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3666e7d3316Smrg# metacharacters that are still active within double-quoted strings.
3676e7d3316SmrgXsed="${SED}"' -e 1s/^X//'
3686e7d3316Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
3696e7d3316Smrg
3706e7d3316Smrg# Same as above, but do not quote variable references.
3716e7d3316Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
3726e7d3316Smrg
3736e7d3316Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
3746e7d3316Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
3756e7d3316Smrg# in input to double_quote_subst, that '$' was protected from expansion.
3766e7d3316Smrg# Since each input `\' is now two `\'s, look for any number of runs of
3776e7d3316Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
3786e7d3316Smrgbs='\\'
3796e7d3316Smrgbs2='\\\\'
3806e7d3316Smrgbs4='\\\\\\\\'
3816e7d3316Smrgdollar='\$'
3826e7d3316Smrgsed_double_backslash="\
3836e7d3316Smrg  s/$bs4/&\\
3846e7d3316Smrg/g
3856e7d3316Smrg  s/^$bs2$dollar/$bs&/
3866e7d3316Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
3876e7d3316Smrg  s/\n//g"
3886e7d3316Smrg
3896e7d3316Smrg# Standard options:
3906e7d3316Smrgopt_dry_run=false
3916e7d3316Smrgopt_help=false
3926e7d3316Smrgopt_quiet=false
3936e7d3316Smrgopt_verbose=false
3946e7d3316Smrgopt_warning=:
3956e7d3316Smrg
3966e7d3316Smrg# func_echo arg...
3976e7d3316Smrg# Echo program name prefixed message, along with the current mode
3986e7d3316Smrg# name if it has been set yet.
3996e7d3316Smrgfunc_echo ()
4006e7d3316Smrg{
4016e7d3316Smrg    $ECHO "$progname${mode+: }$mode: $*"
4026e7d3316Smrg}
4036e7d3316Smrg
4046e7d3316Smrg# func_verbose arg...
4056e7d3316Smrg# Echo program name prefixed message in verbose mode only.
4066e7d3316Smrgfunc_verbose ()
4076e7d3316Smrg{
4086e7d3316Smrg    $opt_verbose && func_echo ${1+"$@"}
4096e7d3316Smrg
4106e7d3316Smrg    # A bug in bash halts the script if the last line of a function
4116e7d3316Smrg    # fails when set -e is in force, so we need another command to
4126e7d3316Smrg    # work around that:
4136e7d3316Smrg    :
4146e7d3316Smrg}
4156e7d3316Smrg
4166e7d3316Smrg# func_echo_all arg...
4176e7d3316Smrg# Invoke $ECHO with all args, space-separated.
4186e7d3316Smrgfunc_echo_all ()
4196e7d3316Smrg{
4206e7d3316Smrg    $ECHO "$*"
4216e7d3316Smrg}
4226e7d3316Smrg
4236e7d3316Smrg# func_error arg...
4246e7d3316Smrg# Echo program name prefixed message to standard error.
4256e7d3316Smrgfunc_error ()
4266e7d3316Smrg{
4276e7d3316Smrg    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
4286e7d3316Smrg}
4296e7d3316Smrg
4306e7d3316Smrg# func_warning arg...
4316e7d3316Smrg# Echo program name prefixed warning message to standard error.
4326e7d3316Smrgfunc_warning ()
4336e7d3316Smrg{
4346e7d3316Smrg    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
4356e7d3316Smrg
4366e7d3316Smrg    # bash bug again:
4376e7d3316Smrg    :
4386e7d3316Smrg}
4396e7d3316Smrg
4406e7d3316Smrg# func_fatal_error arg...
4416e7d3316Smrg# Echo program name prefixed message to standard error, and exit.
4426e7d3316Smrgfunc_fatal_error ()
4436e7d3316Smrg{
4446e7d3316Smrg    func_error ${1+"$@"}
4456e7d3316Smrg    exit $EXIT_FAILURE
4466e7d3316Smrg}
4476e7d3316Smrg
4486e7d3316Smrg# func_fatal_help arg...
4496e7d3316Smrg# Echo program name prefixed message to standard error, followed by
4506e7d3316Smrg# a help hint, and exit.
4516e7d3316Smrgfunc_fatal_help ()
4526e7d3316Smrg{
4536e7d3316Smrg    func_error ${1+"$@"}
4546e7d3316Smrg    func_fatal_error "$help"
4556e7d3316Smrg}
4566e7d3316Smrghelp="Try \`$progname --help' for more information."  ## default
4576e7d3316Smrg
4586e7d3316Smrg
4596e7d3316Smrg# func_grep expression filename
4606e7d3316Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
4616e7d3316Smrgfunc_grep ()
4626e7d3316Smrg{
4636e7d3316Smrg    $GREP "$1" "$2" >/dev/null 2>&1
4646e7d3316Smrg}
4656e7d3316Smrg
4666e7d3316Smrg
4676e7d3316Smrg# func_mkdir_p directory-path
4686e7d3316Smrg# Make sure the entire path to DIRECTORY-PATH is available.
4696e7d3316Smrgfunc_mkdir_p ()
4706e7d3316Smrg{
4716e7d3316Smrg    my_directory_path="$1"
4726e7d3316Smrg    my_dir_list=
4736e7d3316Smrg
4746e7d3316Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
4756e7d3316Smrg
4766e7d3316Smrg      # Protect directory names starting with `-'
4776e7d3316Smrg      case $my_directory_path in
4786e7d3316Smrg        -*) my_directory_path="./$my_directory_path" ;;
4796e7d3316Smrg      esac
4806e7d3316Smrg
4816e7d3316Smrg      # While some portion of DIR does not yet exist...
4826e7d3316Smrg      while test ! -d "$my_directory_path"; do
4836e7d3316Smrg        # ...make a list in topmost first order.  Use a colon delimited
4846e7d3316Smrg	# list incase some portion of path contains whitespace.
4856e7d3316Smrg        my_dir_list="$my_directory_path:$my_dir_list"
4866e7d3316Smrg
4876e7d3316Smrg        # If the last portion added has no slash in it, the list is done
4886e7d3316Smrg        case $my_directory_path in */*) ;; *) break ;; esac
4896e7d3316Smrg
4906e7d3316Smrg        # ...otherwise throw away the child directory and loop
4916e7d3316Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
4926e7d3316Smrg      done
4936e7d3316Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
4946e7d3316Smrg
4956e7d3316Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
4966e7d3316Smrg      for my_dir in $my_dir_list; do
4976e7d3316Smrg	IFS="$save_mkdir_p_IFS"
4986e7d3316Smrg        # mkdir can fail with a `File exist' error if two processes
4996e7d3316Smrg        # try to create one of the directories concurrently.  Don't
5006e7d3316Smrg        # stop in that case!
5016e7d3316Smrg        $MKDIR "$my_dir" 2>/dev/null || :
5026e7d3316Smrg      done
5036e7d3316Smrg      IFS="$save_mkdir_p_IFS"
5046e7d3316Smrg
5056e7d3316Smrg      # Bail out if we (or some other process) failed to create a directory.
5066e7d3316Smrg      test -d "$my_directory_path" || \
5076e7d3316Smrg        func_fatal_error "Failed to create \`$1'"
5086e7d3316Smrg    fi
5096e7d3316Smrg}
510a966c04fSmrg
511a966c04fSmrg
512a966c04fSmrg# func_mktempdir [string]
513a966c04fSmrg# Make a temporary directory that won't clash with other running
514a966c04fSmrg# libtool processes, and avoids race conditions if possible.  If
515a966c04fSmrg# given, STRING is the basename for that directory.
516a966c04fSmrgfunc_mktempdir ()
517a966c04fSmrg{
518a966c04fSmrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
519a966c04fSmrg
5206e7d3316Smrg    if test "$opt_dry_run" = ":"; then
521a966c04fSmrg      # Return a directory name, but don't create it in dry-run mode
522a966c04fSmrg      my_tmpdir="${my_template}-$$"
523a966c04fSmrg    else
524a966c04fSmrg
525a966c04fSmrg      # If mktemp works, use that first and foremost
526a966c04fSmrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
527a966c04fSmrg
528a966c04fSmrg      if test ! -d "$my_tmpdir"; then
5296e7d3316Smrg        # Failing that, at least try and use $RANDOM to avoid a race
5306e7d3316Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
531a966c04fSmrg
5326e7d3316Smrg        save_mktempdir_umask=`umask`
5336e7d3316Smrg        umask 0077
5346e7d3316Smrg        $MKDIR "$my_tmpdir"
5356e7d3316Smrg        umask $save_mktempdir_umask
536a966c04fSmrg      fi
537a966c04fSmrg
538a966c04fSmrg      # If we're not in dry-run mode, bomb out on failure
5396e7d3316Smrg      test -d "$my_tmpdir" || \
5406e7d3316Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
541a966c04fSmrg    fi
542a966c04fSmrg
5436e7d3316Smrg    $ECHO "$my_tmpdir"
544a966c04fSmrg}
545a966c04fSmrg
546a966c04fSmrg
5476e7d3316Smrg# func_quote_for_eval arg
5486e7d3316Smrg# Aesthetically quote ARG to be evaled later.
5496e7d3316Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
5506e7d3316Smrg# is double-quoted, suitable for a subsequent eval, whereas
5516e7d3316Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
5526e7d3316Smrg# which are still active within double quotes backslashified.
5536e7d3316Smrgfunc_quote_for_eval ()
554a966c04fSmrg{
5556e7d3316Smrg    case $1 in
5566e7d3316Smrg      *[\\\`\"\$]*)
5576e7d3316Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
5586e7d3316Smrg      *)
5596e7d3316Smrg        func_quote_for_eval_unquoted_result="$1" ;;
5606e7d3316Smrg    esac
5616e7d3316Smrg
5626e7d3316Smrg    case $func_quote_for_eval_unquoted_result in
5636e7d3316Smrg      # Double-quote args containing shell metacharacters to delay
5646e7d3316Smrg      # word splitting, command substitution and and variable
5656e7d3316Smrg      # expansion for a subsequent eval.
5666e7d3316Smrg      # Many Bourne shells cannot handle close brackets correctly
5676e7d3316Smrg      # in scan sets, so we specify it separately.
5686e7d3316Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
5696e7d3316Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
5706e7d3316Smrg        ;;
5716e7d3316Smrg      *)
5726e7d3316Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
573a966c04fSmrg    esac
574a966c04fSmrg}
575a966c04fSmrg
576a966c04fSmrg
5776e7d3316Smrg# func_quote_for_expand arg
5786e7d3316Smrg# Aesthetically quote ARG to be evaled later; same as above,
5796e7d3316Smrg# but do not quote variable references.
5806e7d3316Smrgfunc_quote_for_expand ()
581a966c04fSmrg{
5826e7d3316Smrg    case $1 in
5836e7d3316Smrg      *[\\\`\"]*)
5846e7d3316Smrg	my_arg=`$ECHO "$1" | $SED \
5856e7d3316Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
586a966c04fSmrg      *)
5876e7d3316Smrg        my_arg="$1" ;;
5886e7d3316Smrg    esac
5896e7d3316Smrg
5906e7d3316Smrg    case $my_arg in
5916e7d3316Smrg      # Double-quote args containing shell metacharacters to delay
5926e7d3316Smrg      # word splitting and command substitution for a subsequent eval.
5936e7d3316Smrg      # Many Bourne shells cannot handle close brackets correctly
5946e7d3316Smrg      # in scan sets, so we specify it separately.
5956e7d3316Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
5966e7d3316Smrg        my_arg="\"$my_arg\""
5976e7d3316Smrg        ;;
5986e7d3316Smrg    esac
5996e7d3316Smrg
6006e7d3316Smrg    func_quote_for_expand_result="$my_arg"
601a966c04fSmrg}
602a966c04fSmrg
603a966c04fSmrg
6046e7d3316Smrg# func_show_eval cmd [fail_exp]
6056e7d3316Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6066e7d3316Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6076e7d3316Smrg# is given, then evaluate it.
6086e7d3316Smrgfunc_show_eval ()
609a966c04fSmrg{
6106e7d3316Smrg    my_cmd="$1"
6116e7d3316Smrg    my_fail_exp="${2-:}"
612a966c04fSmrg
6136e7d3316Smrg    ${opt_silent-false} || {
6146e7d3316Smrg      func_quote_for_expand "$my_cmd"
6156e7d3316Smrg      eval "func_echo $func_quote_for_expand_result"
6166e7d3316Smrg    }
6176e7d3316Smrg
6186e7d3316Smrg    if ${opt_dry_run-false}; then :; else
6196e7d3316Smrg      eval "$my_cmd"
6206e7d3316Smrg      my_status=$?
6216e7d3316Smrg      if test "$my_status" -eq 0; then :; else
6226e7d3316Smrg	eval "(exit $my_status); $my_fail_exp"
6236e7d3316Smrg      fi
624a966c04fSmrg    fi
625a966c04fSmrg}
626a966c04fSmrg
6276e7d3316Smrg
6286e7d3316Smrg# func_show_eval_locale cmd [fail_exp]
6296e7d3316Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6306e7d3316Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6316e7d3316Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
6326e7d3316Smrgfunc_show_eval_locale ()
633a966c04fSmrg{
6346e7d3316Smrg    my_cmd="$1"
6356e7d3316Smrg    my_fail_exp="${2-:}"
636a966c04fSmrg
6376e7d3316Smrg    ${opt_silent-false} || {
6386e7d3316Smrg      func_quote_for_expand "$my_cmd"
6396e7d3316Smrg      eval "func_echo $func_quote_for_expand_result"
6406e7d3316Smrg    }
641a966c04fSmrg
6426e7d3316Smrg    if ${opt_dry_run-false}; then :; else
6436e7d3316Smrg      eval "$lt_user_locale
6446e7d3316Smrg	    $my_cmd"
6456e7d3316Smrg      my_status=$?
6466e7d3316Smrg      eval "$lt_safe_locale"
6476e7d3316Smrg      if test "$my_status" -eq 0; then :; else
6486e7d3316Smrg	eval "(exit $my_status); $my_fail_exp"
649a966c04fSmrg      fi
6506e7d3316Smrg    fi
651a966c04fSmrg}
652a966c04fSmrg
653a966c04fSmrg
6546e7d3316Smrg# func_version
6556e7d3316Smrg# Echo version message to standard output and exit.
6566e7d3316Smrgfunc_version ()
6576e7d3316Smrg{
6586e7d3316Smrg    $SED -n '/(C)/!b go
6596e7d3316Smrg	:more
6606e7d3316Smrg	/\./!{
6616e7d3316Smrg	  N
6626e7d3316Smrg	  s/\n# / /
6636e7d3316Smrg	  b more
6646e7d3316Smrg	}
6656e7d3316Smrg	:go
6666e7d3316Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
6676e7d3316Smrg        s/^# //
6686e7d3316Smrg	s/^# *$//
6696e7d3316Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
6706e7d3316Smrg        p
6716e7d3316Smrg     }' < "$progpath"
6726e7d3316Smrg     exit $?
6736e7d3316Smrg}
674a966c04fSmrg
6756e7d3316Smrg# func_usage
6766e7d3316Smrg# Echo short help message to standard output and exit.
6776e7d3316Smrgfunc_usage ()
6786e7d3316Smrg{
6796e7d3316Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
6806e7d3316Smrg        s/^# //
6816e7d3316Smrg	s/^# *$//
6826e7d3316Smrg	s/\$progname/'$progname'/
6836e7d3316Smrg	p
6846e7d3316Smrg    }' < "$progpath"
6856e7d3316Smrg    echo
6866e7d3316Smrg    $ECHO "run \`$progname --help | more' for full usage"
6876e7d3316Smrg    exit $?
6886e7d3316Smrg}
689a966c04fSmrg
6906e7d3316Smrg# func_help [NOEXIT]
6916e7d3316Smrg# Echo long help message to standard output and exit,
6926e7d3316Smrg# unless 'noexit' is passed as argument.
6936e7d3316Smrgfunc_help ()
6946e7d3316Smrg{
6956e7d3316Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
6966e7d3316Smrg        s/^# //
6976e7d3316Smrg	s/^# *$//
6986e7d3316Smrg	s*\$progname*'$progname'*
6996e7d3316Smrg	s*\$host*'"$host"'*
7006e7d3316Smrg	s*\$SHELL*'"$SHELL"'*
7016e7d3316Smrg	s*\$LTCC*'"$LTCC"'*
7026e7d3316Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
7036e7d3316Smrg	s*\$LD*'"$LD"'*
7046e7d3316Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7056e7d3316Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
7066e7d3316Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
7076e7d3316Smrg	p
7086e7d3316Smrg     }' < "$progpath"
7096e7d3316Smrg    ret=$?
7106e7d3316Smrg    if test -z "$1"; then
7116e7d3316Smrg      exit $ret
7126e7d3316Smrg    fi
7136e7d3316Smrg}
714a966c04fSmrg
7156e7d3316Smrg# func_missing_arg argname
7166e7d3316Smrg# Echo program name prefixed message to standard error and set global
7176e7d3316Smrg# exit_cmd.
7186e7d3316Smrgfunc_missing_arg ()
7196e7d3316Smrg{
7206e7d3316Smrg    func_error "missing argument for $1."
7216e7d3316Smrg    exit_cmd=exit
7226e7d3316Smrg}
723a966c04fSmrg
7246e7d3316Smrgexit_cmd=:
725a966c04fSmrg
726a966c04fSmrg
727a966c04fSmrg
7282e2dd055Smrg
729a966c04fSmrg
7306e7d3316Smrg
7316e7d3316Smrgmagic="%%%MAGIC variable%%%"
7326e7d3316Smrgmagic_exe="%%%MAGIC EXE variable%%%"
7336e7d3316Smrg
7346e7d3316Smrg# Global variables.
7356e7d3316Smrg# $mode is unset
7366e7d3316Smrgnonopt=
7376e7d3316Smrgexecute_dlfiles=
7386e7d3316Smrgpreserve_args=
7396e7d3316Smrglo2o="s/\\.lo\$/.${objext}/"
7406e7d3316Smrgo2lo="s/\\.${objext}\$/.lo/"
7416e7d3316Smrgextracted_archives=
7426e7d3316Smrgextracted_serial=0
7436e7d3316Smrg
7446e7d3316Smrgopt_dry_run=false
7456e7d3316Smrgopt_duplicate_deps=false
7466e7d3316Smrgopt_silent=false
7476e7d3316Smrgopt_debug=:
7486e7d3316Smrg
7496e7d3316Smrg# If this variable is set in any of the actions, the command in it
7506e7d3316Smrg# will be execed at the end.  This prevents here-documents from being
7516e7d3316Smrg# left over by shells.
7526e7d3316Smrgexec_cmd=
7536e7d3316Smrg
7546e7d3316Smrg# func_fatal_configuration arg...
7556e7d3316Smrg# Echo program name prefixed message to standard error, followed by
7566e7d3316Smrg# a configuration failure hint, and exit.
7576e7d3316Smrgfunc_fatal_configuration ()
7586e7d3316Smrg{
7596e7d3316Smrg    func_error ${1+"$@"}
7606e7d3316Smrg    func_error "See the $PACKAGE documentation for more information."
7616e7d3316Smrg    func_fatal_error "Fatal configuration error."
7626e7d3316Smrg}
7636e7d3316Smrg
7646e7d3316Smrg
7656e7d3316Smrg# func_config
7666e7d3316Smrg# Display the configuration for all the tags in this script.
7676e7d3316Smrgfunc_config ()
7686e7d3316Smrg{
7696e7d3316Smrg    re_begincf='^# ### BEGIN LIBTOOL'
7706e7d3316Smrg    re_endcf='^# ### END LIBTOOL'
7716e7d3316Smrg
7726e7d3316Smrg    # Default configuration.
7736e7d3316Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
7746e7d3316Smrg
775a966c04fSmrg    # Now print the configurations for the tags.
776a966c04fSmrg    for tagname in $taglist; do
7776e7d3316Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
778a966c04fSmrg    done
779a966c04fSmrg
7806e7d3316Smrg    exit $?
7816e7d3316Smrg}
782a966c04fSmrg
7836e7d3316Smrg# func_features
7846e7d3316Smrg# Display the features supported by this script.
7856e7d3316Smrgfunc_features ()
7866e7d3316Smrg{
7876e7d3316Smrg    echo "host: $host"
788a966c04fSmrg    if test "$build_libtool_libs" = yes; then
7896e7d3316Smrg      echo "enable shared libraries"
790a966c04fSmrg    else
7916e7d3316Smrg      echo "disable shared libraries"
792a966c04fSmrg    fi
793a966c04fSmrg    if test "$build_old_libs" = yes; then
7946e7d3316Smrg      echo "enable static libraries"
795a966c04fSmrg    else
7966e7d3316Smrg      echo "disable static libraries"
797a966c04fSmrg    fi
7986e7d3316Smrg
799a966c04fSmrg    exit $?
8006e7d3316Smrg}
801a966c04fSmrg
8026e7d3316Smrg# func_enable_tag tagname
8036e7d3316Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
8046e7d3316Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
8056e7d3316Smrg# variable here.
8066e7d3316Smrgfunc_enable_tag ()
8076e7d3316Smrg{
8086e7d3316Smrg  # Global variable:
8096e7d3316Smrg  tagname="$1"
810a966c04fSmrg
8116e7d3316Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
8126e7d3316Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
8136e7d3316Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
814a966c04fSmrg
8156e7d3316Smrg  # Validate tagname.
8166e7d3316Smrg  case $tagname in
8176e7d3316Smrg    *[!-_A-Za-z0-9,/]*)
8186e7d3316Smrg      func_fatal_error "invalid tag name: $tagname"
8196e7d3316Smrg      ;;
8206e7d3316Smrg  esac
821a966c04fSmrg
8226e7d3316Smrg  # Don't test for the "default" C tag, as we know it's
8236e7d3316Smrg  # there but not specially marked.
8246e7d3316Smrg  case $tagname in
8256e7d3316Smrg    CC) ;;
8266e7d3316Smrg    *)
8276e7d3316Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
8286e7d3316Smrg	taglist="$taglist $tagname"
8296e7d3316Smrg
8306e7d3316Smrg	# Evaluate the configuration.  Be careful to quote the path
8316e7d3316Smrg	# and the sed script, to avoid splitting on whitespace, but
8326e7d3316Smrg	# also don't use non-portable quotes within backquotes within
8336e7d3316Smrg	# quotes we have to do it in 2 steps:
8346e7d3316Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
8356e7d3316Smrg	eval "$extractedcf"
8366e7d3316Smrg      else
8376e7d3316Smrg	func_error "ignoring unknown tag $tagname"
8386e7d3316Smrg      fi
8396e7d3316Smrg      ;;
8406e7d3316Smrg  esac
8416e7d3316Smrg}
8426e7d3316Smrg
8436e7d3316Smrg# Parse options once, thoroughly.  This comes as soon as possible in
8446e7d3316Smrg# the script to make things like `libtool --version' happen quickly.
8456e7d3316Smrg{
846a966c04fSmrg
8476e7d3316Smrg  # Shorthand for --mode=foo, only valid as the first argument
8486e7d3316Smrg  case $1 in
8496e7d3316Smrg  clean|clea|cle|cl)
8506e7d3316Smrg    shift; set dummy --mode clean ${1+"$@"}; shift
851a966c04fSmrg    ;;
8526e7d3316Smrg  compile|compil|compi|comp|com|co|c)
8536e7d3316Smrg    shift; set dummy --mode compile ${1+"$@"}; shift
854a966c04fSmrg    ;;
8556e7d3316Smrg  execute|execut|execu|exec|exe|ex|e)
8566e7d3316Smrg    shift; set dummy --mode execute ${1+"$@"}; shift
857a966c04fSmrg    ;;
8586e7d3316Smrg  finish|finis|fini|fin|fi|f)
8596e7d3316Smrg    shift; set dummy --mode finish ${1+"$@"}; shift
860a966c04fSmrg    ;;
8616e7d3316Smrg  install|instal|insta|inst|ins|in|i)
8626e7d3316Smrg    shift; set dummy --mode install ${1+"$@"}; shift
8636e7d3316Smrg    ;;
8646e7d3316Smrg  link|lin|li|l)
8656e7d3316Smrg    shift; set dummy --mode link ${1+"$@"}; shift
8666e7d3316Smrg    ;;
8676e7d3316Smrg  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
8686e7d3316Smrg    shift; set dummy --mode uninstall ${1+"$@"}; shift
869a966c04fSmrg    ;;
870a966c04fSmrg  esac
871a966c04fSmrg
8726e7d3316Smrg  # Parse non-mode specific arguments:
8736e7d3316Smrg  while test "$#" -gt 0; do
8746e7d3316Smrg    opt="$1"
8756e7d3316Smrg    shift
876a966c04fSmrg
8776e7d3316Smrg    case $opt in
8786e7d3316Smrg      --config)		func_config					;;
879a966c04fSmrg
8806e7d3316Smrg      --debug)		preserve_args="$preserve_args $opt"
8816e7d3316Smrg			func_echo "enabling shell trace mode"
8826e7d3316Smrg			opt_debug='set -x'
8836e7d3316Smrg			$opt_debug
8846e7d3316Smrg			;;
885a966c04fSmrg
8866e7d3316Smrg      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
8876e7d3316Smrg			execute_dlfiles="$execute_dlfiles $1"
8886e7d3316Smrg			shift
8896e7d3316Smrg			;;
890a966c04fSmrg
8916e7d3316Smrg      --dry-run | -n)	opt_dry_run=:					;;
8926e7d3316Smrg      --features)       func_features					;;
8936e7d3316Smrg      --finish)		mode="finish"					;;
8946e7d3316Smrg
8956e7d3316Smrg      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
8966e7d3316Smrg			case $1 in
8976e7d3316Smrg			  # Valid mode arguments:
8986e7d3316Smrg			  clean)	;;
8996e7d3316Smrg			  compile)	;;
9006e7d3316Smrg			  execute)	;;
9016e7d3316Smrg			  finish)	;;
9026e7d3316Smrg			  install)	;;
9036e7d3316Smrg			  link)		;;
9046e7d3316Smrg			  relink)	;;
9056e7d3316Smrg			  uninstall)	;;
9066e7d3316Smrg
9076e7d3316Smrg			  # Catch anything else as an error
9086e7d3316Smrg			  *) func_error "invalid argument for $opt"
9096e7d3316Smrg			     exit_cmd=exit
9106e7d3316Smrg			     break
9116e7d3316Smrg			     ;;
9126e7d3316Smrg		        esac
9136e7d3316Smrg
9146e7d3316Smrg			mode="$1"
9156e7d3316Smrg			shift
9166e7d3316Smrg			;;
9176e7d3316Smrg
9186e7d3316Smrg      --preserve-dup-deps)
9196e7d3316Smrg			opt_duplicate_deps=:				;;
9206e7d3316Smrg
9216e7d3316Smrg      --quiet|--silent)	preserve_args="$preserve_args $opt"
9226e7d3316Smrg			opt_silent=:
9236e7d3316Smrg			opt_verbose=false
9246e7d3316Smrg			;;
9256e7d3316Smrg
9266e7d3316Smrg      --no-quiet|--no-silent)
9276e7d3316Smrg			preserve_args="$preserve_args $opt"
9286e7d3316Smrg			opt_silent=false
9296e7d3316Smrg			;;
9306e7d3316Smrg
9316e7d3316Smrg      --verbose| -v)	preserve_args="$preserve_args $opt"
9326e7d3316Smrg			opt_silent=false
9336e7d3316Smrg			opt_verbose=:
9346e7d3316Smrg			;;
9356e7d3316Smrg
9366e7d3316Smrg      --no-verbose)	preserve_args="$preserve_args $opt"
9376e7d3316Smrg			opt_verbose=false
9386e7d3316Smrg			;;
9396e7d3316Smrg
9406e7d3316Smrg      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
9416e7d3316Smrg			preserve_args="$preserve_args $opt $1"
9426e7d3316Smrg			func_enable_tag "$1"	# tagname is set here
9436e7d3316Smrg			shift
9446e7d3316Smrg			;;
9456e7d3316Smrg
9466e7d3316Smrg      # Separate optargs to long options:
9476e7d3316Smrg      -dlopen=*|--mode=*|--tag=*)
9486e7d3316Smrg			func_opt_split "$opt"
9496e7d3316Smrg			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
9506e7d3316Smrg			shift
9516e7d3316Smrg			;;
9526e7d3316Smrg
9536e7d3316Smrg      -\?|-h)		func_usage					;;
9546e7d3316Smrg      --help)		opt_help=:					;;
9556e7d3316Smrg      --help-all)	opt_help=': help-all'				;;
9566e7d3316Smrg      --version)	func_version					;;
9576e7d3316Smrg
9586e7d3316Smrg      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
9596e7d3316Smrg
9606e7d3316Smrg      *)		nonopt="$opt"
9616e7d3316Smrg			break
9626e7d3316Smrg			;;
9636e7d3316Smrg    esac
9646e7d3316Smrg  done
9656e7d3316Smrg
9666e7d3316Smrg
9676e7d3316Smrg  case $host in
9686e7d3316Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
9696e7d3316Smrg      # don't eliminate duplications in $postdeps and $predeps
9706e7d3316Smrg      opt_duplicate_compiler_generated_deps=:
971a966c04fSmrg      ;;
972a966c04fSmrg    *)
9736e7d3316Smrg      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
9746e7d3316Smrg      ;;
9756e7d3316Smrg  esac
976a966c04fSmrg
9776e7d3316Smrg  # Having warned about all mis-specified options, bail out if
9786e7d3316Smrg  # anything was wrong.
9796e7d3316Smrg  $exit_cmd $EXIT_FAILURE
9806e7d3316Smrg}
9816e7d3316Smrg
9826e7d3316Smrg# func_check_version_match
9836e7d3316Smrg# Ensure that we are using m4 macros, and libtool script from the same
9846e7d3316Smrg# release of libtool.
9856e7d3316Smrgfunc_check_version_match ()
9866e7d3316Smrg{
9876e7d3316Smrg  if test "$package_revision" != "$macro_revision"; then
9886e7d3316Smrg    if test "$VERSION" != "$macro_version"; then
9896e7d3316Smrg      if test -z "$macro_version"; then
9906e7d3316Smrg        cat >&2 <<_LT_EOF
9916e7d3316Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9926e7d3316Smrg$progname: definition of this LT_INIT comes from an older release.
9936e7d3316Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9946e7d3316Smrg$progname: and run autoconf again.
9956e7d3316Smrg_LT_EOF
9966e7d3316Smrg      else
9976e7d3316Smrg        cat >&2 <<_LT_EOF
9986e7d3316Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9996e7d3316Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
10006e7d3316Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
10016e7d3316Smrg$progname: and run autoconf again.
10026e7d3316Smrg_LT_EOF
1003a966c04fSmrg      fi
10046e7d3316Smrg    else
10056e7d3316Smrg      cat >&2 <<_LT_EOF
10066e7d3316Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
10076e7d3316Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
10086e7d3316Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
10096e7d3316Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
10106e7d3316Smrg_LT_EOF
10116e7d3316Smrg    fi
10126e7d3316Smrg
10136e7d3316Smrg    exit $EXIT_MISMATCH
10146e7d3316Smrg  fi
10156e7d3316Smrg}
10166e7d3316Smrg
10176e7d3316Smrg
10186e7d3316Smrg## ----------- ##
10196e7d3316Smrg##    Main.    ##
10206e7d3316Smrg## ----------- ##
10216e7d3316Smrg
10226e7d3316Smrg$opt_help || {
10236e7d3316Smrg  # Sanity checks first:
10246e7d3316Smrg  func_check_version_match
10256e7d3316Smrg
10266e7d3316Smrg  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
10276e7d3316Smrg    func_fatal_configuration "not configured to build any kind of library"
1028a966c04fSmrg  fi
1029a966c04fSmrg
10306e7d3316Smrg  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
10316e7d3316Smrg
10326e7d3316Smrg
10336e7d3316Smrg  # Darwin sucks
10346e7d3316Smrg  eval std_shrext=\"$shrext_cmds\"
10356e7d3316Smrg
10366e7d3316Smrg
1037a966c04fSmrg  # Only execute mode is allowed to have -dlopen flags.
1038a966c04fSmrg  if test -n "$execute_dlfiles" && test "$mode" != execute; then
10396e7d3316Smrg    func_error "unrecognized option \`-dlopen'"
10406e7d3316Smrg    $ECHO "$help" 1>&2
1041a966c04fSmrg    exit $EXIT_FAILURE
1042a966c04fSmrg  fi
1043a966c04fSmrg
1044a966c04fSmrg  # Change the help message to a mode-specific one.
1045a966c04fSmrg  generic_help="$help"
10466e7d3316Smrg  help="Try \`$progname --help --mode=$mode' for more information."
10476e7d3316Smrg}
1048a966c04fSmrg
1049a966c04fSmrg
10506e7d3316Smrg# func_lalib_p file
10516e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
10526e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
10536e7d3316Smrg# determined imposters.
10546e7d3316Smrgfunc_lalib_p ()
10556e7d3316Smrg{
10566e7d3316Smrg    test -f "$1" &&
10576e7d3316Smrg      $SED -e 4q "$1" 2>/dev/null \
10586e7d3316Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
10596e7d3316Smrg}
1060a966c04fSmrg
10616e7d3316Smrg# func_lalib_unsafe_p file
10626e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
10636e7d3316Smrg# This function implements the same check as func_lalib_p without
10646e7d3316Smrg# resorting to external programs.  To this end, it redirects stdin and
10656e7d3316Smrg# closes it afterwards, without saving the original file descriptor.
10666e7d3316Smrg# As a safety measure, use it only where a negative result would be
10676e7d3316Smrg# fatal anyway.  Works if `file' does not exist.
10686e7d3316Smrgfunc_lalib_unsafe_p ()
10696e7d3316Smrg{
10706e7d3316Smrg    lalib_p=no
10716e7d3316Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
10726e7d3316Smrg	for lalib_p_l in 1 2 3 4
10736e7d3316Smrg	do
10746e7d3316Smrg	    read lalib_p_line
10756e7d3316Smrg	    case "$lalib_p_line" in
10766e7d3316Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
10776e7d3316Smrg	    esac
10786e7d3316Smrg	done
10796e7d3316Smrg	exec 0<&5 5<&-
10806e7d3316Smrg    fi
10816e7d3316Smrg    test "$lalib_p" = yes
10826e7d3316Smrg}
1083a966c04fSmrg
10846e7d3316Smrg# func_ltwrapper_script_p file
10856e7d3316Smrg# True iff FILE is a libtool wrapper script
10866e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
10876e7d3316Smrg# determined imposters.
10886e7d3316Smrgfunc_ltwrapper_script_p ()
10896e7d3316Smrg{
10906e7d3316Smrg    func_lalib_p "$1"
10916e7d3316Smrg}
1092a966c04fSmrg
10936e7d3316Smrg# func_ltwrapper_executable_p file
10946e7d3316Smrg# True iff FILE is a libtool wrapper executable
10956e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
10966e7d3316Smrg# determined imposters.
10976e7d3316Smrgfunc_ltwrapper_executable_p ()
10986e7d3316Smrg{
10996e7d3316Smrg    func_ltwrapper_exec_suffix=
11006e7d3316Smrg    case $1 in
11016e7d3316Smrg    *.exe) ;;
11026e7d3316Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
11036e7d3316Smrg    esac
11046e7d3316Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
11056e7d3316Smrg}
11066e7d3316Smrg
11076e7d3316Smrg# func_ltwrapper_scriptname file
11086e7d3316Smrg# Assumes file is an ltwrapper_executable
11096e7d3316Smrg# uses $file to determine the appropriate filename for a
11106e7d3316Smrg# temporary ltwrapper_script.
11116e7d3316Smrgfunc_ltwrapper_scriptname ()
11126e7d3316Smrg{
11136e7d3316Smrg    func_ltwrapper_scriptname_result=""
11146e7d3316Smrg    if func_ltwrapper_executable_p "$1"; then
11156e7d3316Smrg	func_dirname_and_basename "$1" "" "."
11166e7d3316Smrg	func_stripname '' '.exe' "$func_basename_result"
11176e7d3316Smrg	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
11186e7d3316Smrg    fi
11196e7d3316Smrg}
11206e7d3316Smrg
11216e7d3316Smrg# func_ltwrapper_p file
11226e7d3316Smrg# True iff FILE is a libtool wrapper script or wrapper executable
11236e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out
11246e7d3316Smrg# determined imposters.
11256e7d3316Smrgfunc_ltwrapper_p ()
11266e7d3316Smrg{
11276e7d3316Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
11286e7d3316Smrg}
11296e7d3316Smrg
11306e7d3316Smrg
11316e7d3316Smrg# func_execute_cmds commands fail_cmd
11326e7d3316Smrg# Execute tilde-delimited COMMANDS.
11336e7d3316Smrg# If FAIL_CMD is given, eval that upon failure.
11346e7d3316Smrg# FAIL_CMD may read-access the current command in variable CMD!
11356e7d3316Smrgfunc_execute_cmds ()
11366e7d3316Smrg{
11376e7d3316Smrg    $opt_debug
11386e7d3316Smrg    save_ifs=$IFS; IFS='~'
11396e7d3316Smrg    for cmd in $1; do
11406e7d3316Smrg      IFS=$save_ifs
11416e7d3316Smrg      eval cmd=\"$cmd\"
11426e7d3316Smrg      func_show_eval "$cmd" "${2-:}"
11436e7d3316Smrg    done
11446e7d3316Smrg    IFS=$save_ifs
11456e7d3316Smrg}
11466e7d3316Smrg
11476e7d3316Smrg
11486e7d3316Smrg# func_source file
11496e7d3316Smrg# Source FILE, adding directory component if necessary.
11506e7d3316Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
11516e7d3316Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
11526e7d3316Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
11536e7d3316Smrg# `FILE.' does not work on cygwin managed mounts.
11546e7d3316Smrgfunc_source ()
11556e7d3316Smrg{
11566e7d3316Smrg    $opt_debug
11576e7d3316Smrg    case $1 in
11586e7d3316Smrg    */* | *\\*)	. "$1" ;;
11596e7d3316Smrg    *)		. "./$1" ;;
11606e7d3316Smrg    esac
11616e7d3316Smrg}
11626e7d3316Smrg
11636e7d3316Smrg
11646e7d3316Smrg# func_infer_tag arg
11656e7d3316Smrg# Infer tagged configuration to use if any are available and
11666e7d3316Smrg# if one wasn't chosen via the "--tag" command line option.
11676e7d3316Smrg# Only attempt this if the compiler in the base compile
11686e7d3316Smrg# command doesn't match the default compiler.
11696e7d3316Smrg# arg is usually of the form 'gcc ...'
11706e7d3316Smrgfunc_infer_tag ()
11716e7d3316Smrg{
11726e7d3316Smrg    $opt_debug
11736e7d3316Smrg    if test -n "$available_tags" && test -z "$tagname"; then
11746e7d3316Smrg      CC_quoted=
11756e7d3316Smrg      for arg in $CC; do
11766e7d3316Smrg        func_quote_for_eval "$arg"
11776e7d3316Smrg	CC_quoted="$CC_quoted $func_quote_for_eval_result"
11786e7d3316Smrg      done
11796e7d3316Smrg      CC_expanded=`func_echo_all $CC`
11806e7d3316Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
11816e7d3316Smrg      case $@ in
11826e7d3316Smrg      # Blanks in the command may have been stripped by the calling shell,
11836e7d3316Smrg      # but not from the CC environment variable when configure was run.
11846e7d3316Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
11856e7d3316Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
11866e7d3316Smrg      # Blanks at the start of $base_compile will cause this to fail
11876e7d3316Smrg      # if we don't check for them as well.
11886e7d3316Smrg      *)
11896e7d3316Smrg	for z in $available_tags; do
11906e7d3316Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
11916e7d3316Smrg	    # Evaluate the configuration.
11926e7d3316Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
11936e7d3316Smrg	    CC_quoted=
11946e7d3316Smrg	    for arg in $CC; do
11956e7d3316Smrg	      # Double-quote args containing other shell metacharacters.
11966e7d3316Smrg	      func_quote_for_eval "$arg"
11976e7d3316Smrg	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
11986e7d3316Smrg	    done
11996e7d3316Smrg	    CC_expanded=`func_echo_all $CC`
12006e7d3316Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
12016e7d3316Smrg	    case "$@ " in
12026e7d3316Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
12036e7d3316Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
12046e7d3316Smrg	      # The compiler in the base compile command matches
12056e7d3316Smrg	      # the one in the tagged configuration.
12066e7d3316Smrg	      # Assume this is the tagged configuration we want.
12076e7d3316Smrg	      tagname=$z
12086e7d3316Smrg	      break
12096e7d3316Smrg	      ;;
12106e7d3316Smrg	    esac
12116e7d3316Smrg	  fi
12126e7d3316Smrg	done
12136e7d3316Smrg	# If $tagname still isn't set, then no tagged configuration
12146e7d3316Smrg	# was found and let the user know that the "--tag" command
12156e7d3316Smrg	# line option must be used.
12166e7d3316Smrg	if test -z "$tagname"; then
12176e7d3316Smrg	  func_echo "unable to infer tagged configuration"
12186e7d3316Smrg	  func_fatal_error "specify a tag with \`--tag'"
12196e7d3316Smrg#	else
12206e7d3316Smrg#	  func_verbose "using $tagname tagged configuration"
12216e7d3316Smrg	fi
12226e7d3316Smrg	;;
12236e7d3316Smrg      esac
12246e7d3316Smrg    fi
12256e7d3316Smrg}
12266e7d3316Smrg
12276e7d3316Smrg
12286e7d3316Smrg
12296e7d3316Smrg# func_write_libtool_object output_name pic_name nonpic_name
12306e7d3316Smrg# Create a libtool object file (analogous to a ".la" file),
12316e7d3316Smrg# but don't create it if we're doing a dry run.
12326e7d3316Smrgfunc_write_libtool_object ()
12336e7d3316Smrg{
12346e7d3316Smrg    write_libobj=${1}
12356e7d3316Smrg    if test "$build_libtool_libs" = yes; then
12366e7d3316Smrg      write_lobj=\'${2}\'
12376e7d3316Smrg    else
12386e7d3316Smrg      write_lobj=none
12396e7d3316Smrg    fi
12406e7d3316Smrg
12416e7d3316Smrg    if test "$build_old_libs" = yes; then
12426e7d3316Smrg      write_oldobj=\'${3}\'
12436e7d3316Smrg    else
12446e7d3316Smrg      write_oldobj=none
12456e7d3316Smrg    fi
12466e7d3316Smrg
12476e7d3316Smrg    $opt_dry_run || {
12486e7d3316Smrg      cat >${write_libobj}T <<EOF
12496e7d3316Smrg# $write_libobj - a libtool object file
12506e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
12516e7d3316Smrg#
12526e7d3316Smrg# Please DO NOT delete this file!
12536e7d3316Smrg# It is necessary for linking the library.
12546e7d3316Smrg
12556e7d3316Smrg# Name of the PIC object.
12566e7d3316Smrgpic_object=$write_lobj
12576e7d3316Smrg
12586e7d3316Smrg# Name of the non-PIC object
12596e7d3316Smrgnon_pic_object=$write_oldobj
12606e7d3316Smrg
12616e7d3316SmrgEOF
12626e7d3316Smrg      $MV "${write_libobj}T" "${write_libobj}"
12636e7d3316Smrg    }
12646e7d3316Smrg}
12656e7d3316Smrg
12666e7d3316Smrg# func_mode_compile arg...
12676e7d3316Smrgfunc_mode_compile ()
12686e7d3316Smrg{
12696e7d3316Smrg    $opt_debug
12706e7d3316Smrg    # Get the compilation command and the source file.
12716e7d3316Smrg    base_compile=
12726e7d3316Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
12736e7d3316Smrg    suppress_opt=yes
12746e7d3316Smrg    suppress_output=
12756e7d3316Smrg    arg_mode=normal
12766e7d3316Smrg    libobj=
12776e7d3316Smrg    later=
12786e7d3316Smrg    pie_flag=
12796e7d3316Smrg
12806e7d3316Smrg    for arg
12816e7d3316Smrg    do
12826e7d3316Smrg      case $arg_mode in
12836e7d3316Smrg      arg  )
12846e7d3316Smrg	# do not "continue".  Instead, add this to base_compile
12856e7d3316Smrg	lastarg="$arg"
12866e7d3316Smrg	arg_mode=normal
12876e7d3316Smrg	;;
12886e7d3316Smrg
12896e7d3316Smrg      target )
12906e7d3316Smrg	libobj="$arg"
12916e7d3316Smrg	arg_mode=normal
12926e7d3316Smrg	continue
12936e7d3316Smrg	;;
12946e7d3316Smrg
12956e7d3316Smrg      normal )
12966e7d3316Smrg	# Accept any command-line options.
12976e7d3316Smrg	case $arg in
12986e7d3316Smrg	-o)
12996e7d3316Smrg	  test -n "$libobj" && \
13006e7d3316Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
13016e7d3316Smrg	  arg_mode=target
13026e7d3316Smrg	  continue
13036e7d3316Smrg	  ;;
13046e7d3316Smrg
13056e7d3316Smrg	-pie | -fpie | -fPIE)
13066e7d3316Smrg          pie_flag="$pie_flag $arg"
13076e7d3316Smrg	  continue
13086e7d3316Smrg	  ;;
13096e7d3316Smrg
13106e7d3316Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
13116e7d3316Smrg	  later="$later $arg"
13126e7d3316Smrg	  continue
13136e7d3316Smrg	  ;;
1314a966c04fSmrg
1315a966c04fSmrg	-no-suppress)
1316a966c04fSmrg	  suppress_opt=no
1317a966c04fSmrg	  continue
1318a966c04fSmrg	  ;;
1319a966c04fSmrg
1320a966c04fSmrg	-Xcompiler)
1321a966c04fSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
1322a966c04fSmrg	  continue      #  The current "srcfile" will either be retained or
1323a966c04fSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
1324a966c04fSmrg
1325a966c04fSmrg	-Wc,*)
13266e7d3316Smrg	  func_stripname '-Wc,' '' "$arg"
13276e7d3316Smrg	  args=$func_stripname_result
1328a966c04fSmrg	  lastarg=
1329a966c04fSmrg	  save_ifs="$IFS"; IFS=','
13306e7d3316Smrg	  for arg in $args; do
1331a966c04fSmrg	    IFS="$save_ifs"
13326e7d3316Smrg	    func_quote_for_eval "$arg"
13336e7d3316Smrg	    lastarg="$lastarg $func_quote_for_eval_result"
1334a966c04fSmrg	  done
1335a966c04fSmrg	  IFS="$save_ifs"
13366e7d3316Smrg	  func_stripname ' ' '' "$lastarg"
13376e7d3316Smrg	  lastarg=$func_stripname_result
1338a966c04fSmrg
1339a966c04fSmrg	  # Add the arguments to base_compile.
1340a966c04fSmrg	  base_compile="$base_compile $lastarg"
1341a966c04fSmrg	  continue
1342a966c04fSmrg	  ;;
1343a966c04fSmrg
13446e7d3316Smrg	*)
1345a966c04fSmrg	  # Accept the current argument as the source file.
1346a966c04fSmrg	  # The previous "srcfile" becomes the current argument.
1347a966c04fSmrg	  #
1348a966c04fSmrg	  lastarg="$srcfile"
1349a966c04fSmrg	  srcfile="$arg"
1350a966c04fSmrg	  ;;
1351a966c04fSmrg	esac  #  case $arg
1352a966c04fSmrg	;;
1353a966c04fSmrg      esac    #  case $arg_mode
1354a966c04fSmrg
1355a966c04fSmrg      # Aesthetically quote the previous argument.
13566e7d3316Smrg      func_quote_for_eval "$lastarg"
13576e7d3316Smrg      base_compile="$base_compile $func_quote_for_eval_result"
1358a966c04fSmrg    done # for arg
1359a966c04fSmrg
1360a966c04fSmrg    case $arg_mode in
1361a966c04fSmrg    arg)
13626e7d3316Smrg      func_fatal_error "you must specify an argument for -Xcompile"
1363a966c04fSmrg      ;;
1364a966c04fSmrg    target)
13656e7d3316Smrg      func_fatal_error "you must specify a target with \`-o'"
1366a966c04fSmrg      ;;
1367a966c04fSmrg    *)
1368a966c04fSmrg      # Get the name of the library object.
13696e7d3316Smrg      test -z "$libobj" && {
13706e7d3316Smrg	func_basename "$srcfile"
13716e7d3316Smrg	libobj="$func_basename_result"
13726e7d3316Smrg      }
1373a966c04fSmrg      ;;
1374a966c04fSmrg    esac
1375a966c04fSmrg
1376a966c04fSmrg    # Recognize several different file suffixes.
1377a966c04fSmrg    # If the user specifies -o file.o, it is replaced with file.lo
1378a966c04fSmrg    case $libobj in
13796e7d3316Smrg    *.[cCFSifmso] | \
13806e7d3316Smrg    *.ada | *.adb | *.ads | *.asm | \
13816e7d3316Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
13826e7d3316Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
13836e7d3316Smrg      func_xform "$libobj"
13846e7d3316Smrg      libobj=$func_xform_result
13856e7d3316Smrg      ;;
1386a966c04fSmrg    esac
1387a966c04fSmrg
1388a966c04fSmrg    case $libobj in
13896e7d3316Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
1390a966c04fSmrg    *)
13916e7d3316Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
1392a966c04fSmrg      ;;
1393a966c04fSmrg    esac
1394a966c04fSmrg
1395a966c04fSmrg    func_infer_tag $base_compile
1396a966c04fSmrg
1397a966c04fSmrg    for arg in $later; do
1398a966c04fSmrg      case $arg in
13996e7d3316Smrg      -shared)
14006e7d3316Smrg	test "$build_libtool_libs" != yes && \
14016e7d3316Smrg	  func_fatal_configuration "can not build a shared library"
14026e7d3316Smrg	build_old_libs=no
14036e7d3316Smrg	continue
14046e7d3316Smrg	;;
14056e7d3316Smrg
1406a966c04fSmrg      -static)
14076e7d3316Smrg	build_libtool_libs=no
1408a966c04fSmrg	build_old_libs=yes
1409a966c04fSmrg	continue
1410a966c04fSmrg	;;
1411a966c04fSmrg
1412a966c04fSmrg      -prefer-pic)
1413a966c04fSmrg	pic_mode=yes
1414a966c04fSmrg	continue
1415a966c04fSmrg	;;
1416a966c04fSmrg
1417a966c04fSmrg      -prefer-non-pic)
1418a966c04fSmrg	pic_mode=no
1419a966c04fSmrg	continue
1420a966c04fSmrg	;;
1421a966c04fSmrg      esac
1422a966c04fSmrg    done
1423a966c04fSmrg
14246e7d3316Smrg    func_quote_for_eval "$libobj"
14256e7d3316Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
14266e7d3316Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
14276e7d3316Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
14286e7d3316Smrg    func_dirname_and_basename "$obj" "/" ""
14296e7d3316Smrg    objname="$func_basename_result"
14306e7d3316Smrg    xdir="$func_dirname_result"
1431a966c04fSmrg    lobj=${xdir}$objdir/$objname
1432a966c04fSmrg
14336e7d3316Smrg    test -z "$base_compile" && \
14346e7d3316Smrg      func_fatal_help "you must specify a compilation command"
1435a966c04fSmrg
1436a966c04fSmrg    # Delete any leftover library objects.
1437a966c04fSmrg    if test "$build_old_libs" = yes; then
1438a966c04fSmrg      removelist="$obj $lobj $libobj ${libobj}T"
1439a966c04fSmrg    else
1440a966c04fSmrg      removelist="$lobj $libobj ${libobj}T"
1441a966c04fSmrg    fi
1442a966c04fSmrg
1443a966c04fSmrg    # On Cygwin there's no "real" PIC flag so we must build both object types
1444a966c04fSmrg    case $host_os in
14456e7d3316Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
1446a966c04fSmrg      pic_mode=default
1447a966c04fSmrg      ;;
1448a966c04fSmrg    esac
1449a966c04fSmrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
1450a966c04fSmrg      # non-PIC code in shared libraries is not supported
1451a966c04fSmrg      pic_mode=default
1452a966c04fSmrg    fi
1453a966c04fSmrg
1454a966c04fSmrg    # Calculate the filename of the output object if compiler does
1455a966c04fSmrg    # not support -o with -c
1456a966c04fSmrg    if test "$compiler_c_o" = no; then
14576e7d3316Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
1458a966c04fSmrg      lockfile="$output_obj.lock"
1459a966c04fSmrg    else
1460a966c04fSmrg      output_obj=
1461a966c04fSmrg      need_locks=no
1462a966c04fSmrg      lockfile=
1463a966c04fSmrg    fi
1464a966c04fSmrg
1465a966c04fSmrg    # Lock this critical section if it is needed
1466a966c04fSmrg    # We use this script file to make the link, it avoids creating a new file
1467a966c04fSmrg    if test "$need_locks" = yes; then
14686e7d3316Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
14696e7d3316Smrg	func_echo "Waiting for $lockfile to be removed"
1470a966c04fSmrg	sleep 2
1471a966c04fSmrg      done
1472a966c04fSmrg    elif test "$need_locks" = warn; then
1473a966c04fSmrg      if test -f "$lockfile"; then
14746e7d3316Smrg	$ECHO "\
1475a966c04fSmrg*** ERROR, $lockfile exists and contains:
1476a966c04fSmrg`cat $lockfile 2>/dev/null`
1477a966c04fSmrg
1478a966c04fSmrgThis indicates that another process is trying to use the same
1479a966c04fSmrgtemporary object file, and libtool could not work around it because
1480a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
1481a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
1482a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
1483a966c04fSmrgcompiler."
1484a966c04fSmrg
14856e7d3316Smrg	$opt_dry_run || $RM $removelist
1486a966c04fSmrg	exit $EXIT_FAILURE
1487a966c04fSmrg      fi
14886e7d3316Smrg      removelist="$removelist $output_obj"
14896e7d3316Smrg      $ECHO "$srcfile" > "$lockfile"
1490a966c04fSmrg    fi
1491a966c04fSmrg
14926e7d3316Smrg    $opt_dry_run || $RM $removelist
14936e7d3316Smrg    removelist="$removelist $lockfile"
14946e7d3316Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
14956e7d3316Smrg
1496a966c04fSmrg    if test -n "$fix_srcfile_path"; then
1497a966c04fSmrg      eval srcfile=\"$fix_srcfile_path\"
1498a966c04fSmrg    fi
14996e7d3316Smrg    func_quote_for_eval "$srcfile"
15006e7d3316Smrg    qsrcfile=$func_quote_for_eval_result
1501a966c04fSmrg
1502a966c04fSmrg    # Only build a PIC object if we are building libtool libraries.
1503a966c04fSmrg    if test "$build_libtool_libs" = yes; then
1504a966c04fSmrg      # Without this assignment, base_compile gets emptied.
1505a966c04fSmrg      fbsd_hideous_sh_bug=$base_compile
1506a966c04fSmrg
1507a966c04fSmrg      if test "$pic_mode" != no; then
1508a966c04fSmrg	command="$base_compile $qsrcfile $pic_flag"
1509a966c04fSmrg      else
1510a966c04fSmrg	# Don't build PIC code
1511a966c04fSmrg	command="$base_compile $qsrcfile"
1512a966c04fSmrg      fi
1513a966c04fSmrg
15146e7d3316Smrg      func_mkdir_p "$xdir$objdir"
1515a966c04fSmrg
1516a966c04fSmrg      if test -z "$output_obj"; then
1517a966c04fSmrg	# Place PIC objects in $objdir
1518a966c04fSmrg	command="$command -o $lobj"
1519a966c04fSmrg      fi
1520a966c04fSmrg
15216e7d3316Smrg      func_show_eval_locale "$command"	\
15226e7d3316Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
1523a966c04fSmrg
1524a966c04fSmrg      if test "$need_locks" = warn &&
1525a966c04fSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
15266e7d3316Smrg	$ECHO "\
1527a966c04fSmrg*** ERROR, $lockfile contains:
1528a966c04fSmrg`cat $lockfile 2>/dev/null`
1529a966c04fSmrg
1530a966c04fSmrgbut it should contain:
1531a966c04fSmrg$srcfile
1532a966c04fSmrg
1533a966c04fSmrgThis indicates that another process is trying to use the same
1534a966c04fSmrgtemporary object file, and libtool could not work around it because
1535a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
1536a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
1537a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
1538a966c04fSmrgcompiler."
1539a966c04fSmrg
15406e7d3316Smrg	$opt_dry_run || $RM $removelist
1541a966c04fSmrg	exit $EXIT_FAILURE
1542a966c04fSmrg      fi
1543a966c04fSmrg
1544a966c04fSmrg      # Just move the object if needed, then go on to compile the next one
1545a966c04fSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
15466e7d3316Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
15476e7d3316Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1548a966c04fSmrg      fi
1549a966c04fSmrg
1550a966c04fSmrg      # Allow error messages only from the first compilation.
1551a966c04fSmrg      if test "$suppress_opt" = yes; then
15526e7d3316Smrg	suppress_output=' >/dev/null 2>&1'
1553a966c04fSmrg      fi
1554a966c04fSmrg    fi
1555a966c04fSmrg
1556a966c04fSmrg    # Only build a position-dependent object if we build old libraries.
1557a966c04fSmrg    if test "$build_old_libs" = yes; then
1558a966c04fSmrg      if test "$pic_mode" != yes; then
1559a966c04fSmrg	# Don't build PIC code
15606e7d3316Smrg	command="$base_compile $qsrcfile$pie_flag"
1561a966c04fSmrg      else
1562a966c04fSmrg	command="$base_compile $qsrcfile $pic_flag"
1563a966c04fSmrg      fi
1564a966c04fSmrg      if test "$compiler_c_o" = yes; then
1565a966c04fSmrg	command="$command -o $obj"
1566a966c04fSmrg      fi
1567a966c04fSmrg
1568a966c04fSmrg      # Suppress compiler output if we already did a PIC compilation.
1569a966c04fSmrg      command="$command$suppress_output"
15706e7d3316Smrg      func_show_eval_locale "$command" \
15716e7d3316Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
1572a966c04fSmrg
1573a966c04fSmrg      if test "$need_locks" = warn &&
1574a966c04fSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
15756e7d3316Smrg	$ECHO "\
1576a966c04fSmrg*** ERROR, $lockfile contains:
1577a966c04fSmrg`cat $lockfile 2>/dev/null`
1578a966c04fSmrg
1579a966c04fSmrgbut it should contain:
1580a966c04fSmrg$srcfile
1581a966c04fSmrg
1582a966c04fSmrgThis indicates that another process is trying to use the same
1583a966c04fSmrgtemporary object file, and libtool could not work around it because
1584a966c04fSmrgyour compiler does not support \`-c' and \`-o' together.  If you
1585a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better
1586a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better
1587a966c04fSmrgcompiler."
1588a966c04fSmrg
15896e7d3316Smrg	$opt_dry_run || $RM $removelist
1590a966c04fSmrg	exit $EXIT_FAILURE
1591a966c04fSmrg      fi
1592a966c04fSmrg
1593a966c04fSmrg      # Just move the object if needed
1594a966c04fSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
15956e7d3316Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
15966e7d3316Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1597a966c04fSmrg      fi
1598a966c04fSmrg    fi
1599a966c04fSmrg
16006e7d3316Smrg    $opt_dry_run || {
16016e7d3316Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
1602a966c04fSmrg
16036e7d3316Smrg      # Unlock the critical section if it was locked
16046e7d3316Smrg      if test "$need_locks" != no; then
16056e7d3316Smrg	removelist=$lockfile
16066e7d3316Smrg        $RM "$lockfile"
16076e7d3316Smrg      fi
16086e7d3316Smrg    }
1609a966c04fSmrg
1610a966c04fSmrg    exit $EXIT_SUCCESS
16116e7d3316Smrg}
1612a966c04fSmrg
16136e7d3316Smrg$opt_help || {
16146e7d3316Smrg  test "$mode" = compile && func_mode_compile ${1+"$@"}
16156e7d3316Smrg}
1616a966c04fSmrg
16176e7d3316Smrgfunc_mode_help ()
16186e7d3316Smrg{
16196e7d3316Smrg    # We need to display help for each of the modes.
16206e7d3316Smrg    case $mode in
16216e7d3316Smrg      "")
16226e7d3316Smrg        # Generic help is extracted from the usage comments
16236e7d3316Smrg        # at the start of this file.
16246e7d3316Smrg        func_help
16256e7d3316Smrg        ;;
1626a966c04fSmrg
16276e7d3316Smrg      clean)
16286e7d3316Smrg        $ECHO \
16296e7d3316Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
1630a966c04fSmrg
16316e7d3316SmrgRemove files from the build directory.
1632a966c04fSmrg
16336e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE
16346e7d3316Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
16356e7d3316Smrgto RM.
1636a966c04fSmrg
16376e7d3316SmrgIf FILE is a libtool library, object or program, all the files associated
16386e7d3316Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
16396e7d3316Smrg        ;;
1640a966c04fSmrg
16416e7d3316Smrg      compile)
16426e7d3316Smrg      $ECHO \
16436e7d3316Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
1644a966c04fSmrg
16456e7d3316SmrgCompile a source file into a libtool library object.
1646a966c04fSmrg
16476e7d3316SmrgThis mode accepts the following additional options:
1648a966c04fSmrg
16496e7d3316Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
16506e7d3316Smrg  -no-suppress      do not suppress compiler output for multiple passes
16516e7d3316Smrg  -prefer-pic       try to build PIC objects only
16526e7d3316Smrg  -prefer-non-pic   try to build non-PIC objects only
16536e7d3316Smrg  -shared           do not build a \`.o' file suitable for static linking
16546e7d3316Smrg  -static           only build a \`.o' file suitable for static linking
16556e7d3316Smrg  -Wc,FLAG          pass FLAG directly to the compiler
1656a966c04fSmrg
16576e7d3316SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
16586e7d3316Smrgfrom the given SOURCEFILE.
1659a966c04fSmrg
16606e7d3316SmrgThe output file name is determined by removing the directory component from
16616e7d3316SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
16626e7d3316Smrglibrary object suffix, \`.lo'."
16636e7d3316Smrg        ;;
1664a966c04fSmrg
16656e7d3316Smrg      execute)
16666e7d3316Smrg        $ECHO \
16676e7d3316Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
1668a966c04fSmrg
16696e7d3316SmrgAutomatically set library path, then run a program.
1670a966c04fSmrg
16716e7d3316SmrgThis mode accepts the following additional options:
1672a966c04fSmrg
16736e7d3316Smrg  -dlopen FILE      add the directory containing FILE to the library path
1674a966c04fSmrg
16756e7d3316SmrgThis mode sets the library path environment variable according to \`-dlopen'
16766e7d3316Smrgflags.
1677a966c04fSmrg
16786e7d3316SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
16796e7d3316Smrginto their corresponding uninstalled binary, and any of their required library
16806e7d3316Smrgdirectories are added to the library path.
1681a966c04fSmrg
16826e7d3316SmrgThen, COMMAND is executed, with ARGS as arguments."
16836e7d3316Smrg        ;;
1684a966c04fSmrg
16856e7d3316Smrg      finish)
16866e7d3316Smrg        $ECHO \
16876e7d3316Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
1688a966c04fSmrg
16896e7d3316SmrgComplete the installation of libtool libraries.
1690a966c04fSmrg
16916e7d3316SmrgEach LIBDIR is a directory that contains libtool libraries.
1692a966c04fSmrg
16936e7d3316SmrgThe commands that this mode executes may require superuser privileges.  Use
16946e7d3316Smrgthe \`--dry-run' option if you just want to see what would be executed."
16956e7d3316Smrg        ;;
1696a966c04fSmrg
16976e7d3316Smrg      install)
16986e7d3316Smrg        $ECHO \
16996e7d3316Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
1700a966c04fSmrg
17016e7d3316SmrgInstall executables or libraries.
1702a966c04fSmrg
17036e7d3316SmrgINSTALL-COMMAND is the installation command.  The first component should be
17046e7d3316Smrgeither the \`install' or \`cp' program.
1705a966c04fSmrg
17066e7d3316SmrgThe following components of INSTALL-COMMAND are treated specially:
1707a966c04fSmrg
17086e7d3316Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
1709a966c04fSmrg
17106e7d3316SmrgThe rest of the components are interpreted as arguments to that command (only
17116e7d3316SmrgBSD-compatible install options are recognized)."
17126e7d3316Smrg        ;;
1713a966c04fSmrg
17146e7d3316Smrg      link)
17156e7d3316Smrg        $ECHO \
17166e7d3316Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
1717a966c04fSmrg
17186e7d3316SmrgLink object files or libraries together to form another library, or to
17196e7d3316Smrgcreate an executable program.
1720a966c04fSmrg
17216e7d3316SmrgLINK-COMMAND is a command using the C compiler that you would use to create
17226e7d3316Smrga program from several object files.
1723a966c04fSmrg
17246e7d3316SmrgThe following components of LINK-COMMAND are treated specially:
1725a966c04fSmrg
17266e7d3316Smrg  -all-static       do not do any dynamic linking at all
17276e7d3316Smrg  -avoid-version    do not add a version suffix if possible
17286e7d3316Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
17296e7d3316Smrg                    libraries must be found in the PATH setting at runtime)
17306e7d3316Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
17316e7d3316Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
17326e7d3316Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
17336e7d3316Smrg  -export-symbols SYMFILE
17346e7d3316Smrg                    try to export only the symbols listed in SYMFILE
17356e7d3316Smrg  -export-symbols-regex REGEX
17366e7d3316Smrg                    try to export only the symbols matching REGEX
17376e7d3316Smrg  -LLIBDIR          search LIBDIR for required installed libraries
17386e7d3316Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
17396e7d3316Smrg  -module           build a library that can dlopened
17406e7d3316Smrg  -no-fast-install  disable the fast-install mode
17416e7d3316Smrg  -no-install       link a not-installable executable
17426e7d3316Smrg  -no-undefined     declare that a library does not refer to external symbols
17436e7d3316Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
17446e7d3316Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
17456e7d3316Smrg  -precious-files-regex REGEX
17466e7d3316Smrg                    don't remove output files matching REGEX
17476e7d3316Smrg  -release RELEASE  specify package release information
17486e7d3316Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
17496e7d3316Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
17506e7d3316Smrg  -shared           only do dynamic linking of libtool libraries
17516e7d3316Smrg  -shrext SUFFIX    override the standard shared library file extension
17526e7d3316Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
17536e7d3316Smrg  -static-libtool-libs
17546e7d3316Smrg                    do not do any dynamic linking of libtool libraries
17556e7d3316Smrg  -version-info CURRENT[:REVISION[:AGE]]
17566e7d3316Smrg                    specify library version info [each variable defaults to 0]
17576e7d3316Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
17586e7d3316Smrg  -Wc,FLAG
17596e7d3316Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
17606e7d3316Smrg  -Wl,FLAG
17616e7d3316Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
17626e7d3316Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
1763a966c04fSmrg
17646e7d3316SmrgAll other options (arguments beginning with \`-') are ignored.
1765a966c04fSmrg
17666e7d3316SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
17676e7d3316Smrgtreated as uninstalled libtool libraries, other files are standard or library
17686e7d3316Smrgobject files.
1769a966c04fSmrg
17706e7d3316SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
17716e7d3316Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
17726e7d3316Smrgrequired, except when creating a convenience library.
1773a966c04fSmrg
17746e7d3316SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
17756e7d3316Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
17762e2dd055Smrg
17776e7d3316SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
17786e7d3316Smrgis created, otherwise an executable program is created."
17796e7d3316Smrg        ;;
1780a966c04fSmrg
17816e7d3316Smrg      uninstall)
17826e7d3316Smrg        $ECHO \
17836e7d3316Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
1784a966c04fSmrg
17856e7d3316SmrgRemove libraries from an installation directory.
1786a966c04fSmrg
17876e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE
17886e7d3316Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
17896e7d3316Smrgto RM.
1790a966c04fSmrg
17916e7d3316SmrgIf FILE is a libtool library, all the files associated with it are deleted.
17926e7d3316SmrgOtherwise, only FILE itself is deleted using RM."
17936e7d3316Smrg        ;;
1794a966c04fSmrg
17956e7d3316Smrg      *)
17966e7d3316Smrg        func_fatal_help "invalid operation mode \`$mode'"
17976e7d3316Smrg        ;;
17986e7d3316Smrg    esac
1799a966c04fSmrg
18006e7d3316Smrg    echo
18016e7d3316Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
18026e7d3316Smrg}
1803a966c04fSmrg
18046e7d3316Smrg# Now that we've collected a possible --mode arg, show help if necessary
18056e7d3316Smrgif $opt_help; then
18066e7d3316Smrg  if test "$opt_help" = :; then
18076e7d3316Smrg    func_mode_help
18086e7d3316Smrg  else
18096e7d3316Smrg    {
18106e7d3316Smrg      func_help noexit
18116e7d3316Smrg      for mode in compile link execute install finish uninstall clean; do
18126e7d3316Smrg	func_mode_help
18136e7d3316Smrg      done
18146e7d3316Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
18156e7d3316Smrg    {
18166e7d3316Smrg      func_help noexit
18176e7d3316Smrg      for mode in compile link execute install finish uninstall clean; do
18186e7d3316Smrg	echo
18196e7d3316Smrg	func_mode_help
18206e7d3316Smrg      done
18216e7d3316Smrg    } |
18226e7d3316Smrg    sed '1d
18236e7d3316Smrg      /^When reporting/,/^Report/{
18246e7d3316Smrg	H
18256e7d3316Smrg	d
18266e7d3316Smrg      }
18276e7d3316Smrg      $x
18286e7d3316Smrg      /information about other modes/d
18296e7d3316Smrg      /more detailed .*MODE/d
18306e7d3316Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
18316e7d3316Smrg  fi
18326e7d3316Smrg  exit $?
18336e7d3316Smrgfi
1834a966c04fSmrg
1835a966c04fSmrg
18366e7d3316Smrg# func_mode_execute arg...
18376e7d3316Smrgfunc_mode_execute ()
18386e7d3316Smrg{
18396e7d3316Smrg    $opt_debug
18406e7d3316Smrg    # The first argument is the command name.
18416e7d3316Smrg    cmd="$nonopt"
18426e7d3316Smrg    test -z "$cmd" && \
18436e7d3316Smrg      func_fatal_help "you must specify a COMMAND"
1844a966c04fSmrg
18456e7d3316Smrg    # Handle -dlopen flags immediately.
18466e7d3316Smrg    for file in $execute_dlfiles; do
18476e7d3316Smrg      test -f "$file" \
18486e7d3316Smrg	|| func_fatal_help "\`$file' is not a file"
1849a966c04fSmrg
18506e7d3316Smrg      dir=
18516e7d3316Smrg      case $file in
18526e7d3316Smrg      *.la)
18536e7d3316Smrg	# Check to see that this really is a libtool archive.
18546e7d3316Smrg	func_lalib_unsafe_p "$file" \
18556e7d3316Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
1856a966c04fSmrg
18576e7d3316Smrg	# Read the libtool library.
18586e7d3316Smrg	dlname=
18596e7d3316Smrg	library_names=
18606e7d3316Smrg	func_source "$file"
1861a966c04fSmrg
18626e7d3316Smrg	# Skip this library if it cannot be dlopened.
18636e7d3316Smrg	if test -z "$dlname"; then
18646e7d3316Smrg	  # Warn if it was a shared library.
18656e7d3316Smrg	  test -n "$library_names" && \
18666e7d3316Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
18676e7d3316Smrg	  continue
18686e7d3316Smrg	fi
1869a966c04fSmrg
18706e7d3316Smrg	func_dirname "$file" "" "."
18716e7d3316Smrg	dir="$func_dirname_result"
1872a966c04fSmrg
18736e7d3316Smrg	if test -f "$dir/$objdir/$dlname"; then
18746e7d3316Smrg	  dir="$dir/$objdir"
18756e7d3316Smrg	else
18766e7d3316Smrg	  if test ! -f "$dir/$dlname"; then
18776e7d3316Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
18786e7d3316Smrg	  fi
18796e7d3316Smrg	fi
1880a966c04fSmrg	;;
1881a966c04fSmrg
18826e7d3316Smrg      *.lo)
18836e7d3316Smrg	# Just add the directory containing the .lo file.
18846e7d3316Smrg	func_dirname "$file" "" "."
18856e7d3316Smrg	dir="$func_dirname_result"
1886a966c04fSmrg	;;
18876e7d3316Smrg
18886e7d3316Smrg      *)
18896e7d3316Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
1890a966c04fSmrg	continue
1891a966c04fSmrg	;;
18926e7d3316Smrg      esac
1893a966c04fSmrg
18946e7d3316Smrg      # Get the absolute pathname.
18956e7d3316Smrg      absdir=`cd "$dir" && pwd`
18966e7d3316Smrg      test -n "$absdir" && dir="$absdir"
1897a966c04fSmrg
18986e7d3316Smrg      # Now add the directory to shlibpath_var.
18996e7d3316Smrg      if eval "test -z \"\$$shlibpath_var\""; then
19006e7d3316Smrg	eval "$shlibpath_var=\"\$dir\""
19016e7d3316Smrg      else
19026e7d3316Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
19036e7d3316Smrg      fi
19046e7d3316Smrg    done
1905a966c04fSmrg
19066e7d3316Smrg    # This variable tells wrapper scripts just to set shlibpath_var
19076e7d3316Smrg    # rather than running their programs.
19086e7d3316Smrg    libtool_execute_magic="$magic"
1909a966c04fSmrg
19106e7d3316Smrg    # Check if any of the arguments is a wrapper script.
19116e7d3316Smrg    args=
19126e7d3316Smrg    for file
19136e7d3316Smrg    do
19146e7d3316Smrg      case $file in
19156e7d3316Smrg      -* | *.la | *.lo ) ;;
19166e7d3316Smrg      *)
19176e7d3316Smrg	# Do a test to see if this is really a libtool program.
19186e7d3316Smrg	if func_ltwrapper_script_p "$file"; then
19196e7d3316Smrg	  func_source "$file"
19206e7d3316Smrg	  # Transform arg to wrapped name.
19216e7d3316Smrg	  file="$progdir/$program"
19226e7d3316Smrg	elif func_ltwrapper_executable_p "$file"; then
19236e7d3316Smrg	  func_ltwrapper_scriptname "$file"
19246e7d3316Smrg	  func_source "$func_ltwrapper_scriptname_result"
19256e7d3316Smrg	  # Transform arg to wrapped name.
19266e7d3316Smrg	  file="$progdir/$program"
19276e7d3316Smrg	fi
1928a966c04fSmrg	;;
19296e7d3316Smrg      esac
19306e7d3316Smrg      # Quote arguments (to preserve shell metacharacters).
19316e7d3316Smrg      func_quote_for_eval "$file"
19326e7d3316Smrg      args="$args $func_quote_for_eval_result"
19336e7d3316Smrg    done
1934a966c04fSmrg
19356e7d3316Smrg    if test "X$opt_dry_run" = Xfalse; then
19366e7d3316Smrg      if test -n "$shlibpath_var"; then
19376e7d3316Smrg	# Export the shlibpath_var.
19386e7d3316Smrg	eval "export $shlibpath_var"
19396e7d3316Smrg      fi
1940a966c04fSmrg
19416e7d3316Smrg      # Restore saved environment variables
19426e7d3316Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
19436e7d3316Smrg      do
19446e7d3316Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
19456e7d3316Smrg                $lt_var=\$save_$lt_var; export $lt_var
19466e7d3316Smrg	      else
19476e7d3316Smrg		$lt_unset $lt_var
19486e7d3316Smrg	      fi"
19496e7d3316Smrg      done
1950a966c04fSmrg
19516e7d3316Smrg      # Now prepare to actually exec the command.
19526e7d3316Smrg      exec_cmd="\$cmd$args"
19536e7d3316Smrg    else
19546e7d3316Smrg      # Display what would be done.
19556e7d3316Smrg      if test -n "$shlibpath_var"; then
19566e7d3316Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
19576e7d3316Smrg	echo "export $shlibpath_var"
19586e7d3316Smrg      fi
19596e7d3316Smrg      $ECHO "$cmd$args"
19606e7d3316Smrg      exit $EXIT_SUCCESS
19616e7d3316Smrg    fi
19626e7d3316Smrg}
1963a966c04fSmrg
19646e7d3316Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"}
1965a966c04fSmrg
1966a966c04fSmrg
19676e7d3316Smrg# func_mode_finish arg...
19686e7d3316Smrgfunc_mode_finish ()
19696e7d3316Smrg{
19706e7d3316Smrg    $opt_debug
19716e7d3316Smrg    libdirs="$nonopt"
19726e7d3316Smrg    admincmds=
1973a966c04fSmrg
19746e7d3316Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
19756e7d3316Smrg      for dir
19766e7d3316Smrg      do
19776e7d3316Smrg	libdirs="$libdirs $dir"
19786e7d3316Smrg      done
1979a966c04fSmrg
19806e7d3316Smrg      for libdir in $libdirs; do
19816e7d3316Smrg	if test -n "$finish_cmds"; then
19826e7d3316Smrg	  # Do each command in the finish commands.
19836e7d3316Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
19846e7d3316Smrg'"$cmd"'"'
19856e7d3316Smrg	fi
19866e7d3316Smrg	if test -n "$finish_eval"; then
19876e7d3316Smrg	  # Do the single finish_eval.
19886e7d3316Smrg	  eval cmds=\"$finish_eval\"
19896e7d3316Smrg	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
19906e7d3316Smrg       $cmds"
19916e7d3316Smrg	fi
19926e7d3316Smrg      done
19936e7d3316Smrg    fi
1994a966c04fSmrg
19956e7d3316Smrg    # Exit here if they wanted silent mode.
19966e7d3316Smrg    $opt_silent && exit $EXIT_SUCCESS
1997a966c04fSmrg
19986e7d3316Smrg    echo "----------------------------------------------------------------------"
19996e7d3316Smrg    echo "Libraries have been installed in:"
20006e7d3316Smrg    for libdir in $libdirs; do
20016e7d3316Smrg      $ECHO "   $libdir"
20026e7d3316Smrg    done
20036e7d3316Smrg    echo
20046e7d3316Smrg    echo "If you ever happen to want to link against installed libraries"
20056e7d3316Smrg    echo "in a given directory, LIBDIR, you must either use libtool, and"
20066e7d3316Smrg    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
20076e7d3316Smrg    echo "flag during linking and do at least one of the following:"
20086e7d3316Smrg    if test -n "$shlibpath_var"; then
20096e7d3316Smrg      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
20106e7d3316Smrg      echo "     during execution"
20116e7d3316Smrg    fi
20126e7d3316Smrg    if test -n "$runpath_var"; then
20136e7d3316Smrg      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
20146e7d3316Smrg      echo "     during linking"
20156e7d3316Smrg    fi
20166e7d3316Smrg    if test -n "$hardcode_libdir_flag_spec"; then
20176e7d3316Smrg      libdir=LIBDIR
20186e7d3316Smrg      eval flag=\"$hardcode_libdir_flag_spec\"
2019a966c04fSmrg
20206e7d3316Smrg      $ECHO "   - use the \`$flag' linker flag"
20216e7d3316Smrg    fi
20226e7d3316Smrg    if test -n "$admincmds"; then
20236e7d3316Smrg      $ECHO "   - have your system administrator run these commands:$admincmds"
20246e7d3316Smrg    fi
20256e7d3316Smrg    if test -f /etc/ld.so.conf; then
20266e7d3316Smrg      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
20276e7d3316Smrg    fi
20286e7d3316Smrg    echo
2029a966c04fSmrg
20306e7d3316Smrg    echo "See any operating system documentation about shared libraries for"
20316e7d3316Smrg    case $host in
20326e7d3316Smrg      solaris2.[6789]|solaris2.1[0-9])
20336e7d3316Smrg        echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
20346e7d3316Smrg	echo "pages."
20356e7d3316Smrg	;;
20366e7d3316Smrg      *)
20376e7d3316Smrg        echo "more information, such as the ld(1) and ld.so(8) manual pages."
20386e7d3316Smrg        ;;
20396e7d3316Smrg    esac
20406e7d3316Smrg    echo "----------------------------------------------------------------------"
20416e7d3316Smrg    exit $EXIT_SUCCESS
20426e7d3316Smrg}
2043a966c04fSmrg
20446e7d3316Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"}
2045a966c04fSmrg
2046a966c04fSmrg
20476e7d3316Smrg# func_mode_install arg...
20486e7d3316Smrgfunc_mode_install ()
20496e7d3316Smrg{
20506e7d3316Smrg    $opt_debug
20516e7d3316Smrg    # There may be an optional sh(1) argument at the beginning of
20526e7d3316Smrg    # install_prog (especially on Windows NT).
20536e7d3316Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
20546e7d3316Smrg       # Allow the use of GNU shtool's install command.
20556e7d3316Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
20566e7d3316Smrg      # Aesthetically quote it.
20576e7d3316Smrg      func_quote_for_eval "$nonopt"
20586e7d3316Smrg      install_prog="$func_quote_for_eval_result "
20596e7d3316Smrg      arg=$1
20606e7d3316Smrg      shift
20616e7d3316Smrg    else
20626e7d3316Smrg      install_prog=
20636e7d3316Smrg      arg=$nonopt
20646e7d3316Smrg    fi
2065a966c04fSmrg
20666e7d3316Smrg    # The real first argument should be the name of the installation program.
20676e7d3316Smrg    # Aesthetically quote it.
20686e7d3316Smrg    func_quote_for_eval "$arg"
20696e7d3316Smrg    install_prog="$install_prog$func_quote_for_eval_result"
20706e7d3316Smrg    install_shared_prog=$install_prog
20716e7d3316Smrg    case " $install_prog " in
20726e7d3316Smrg      *[\\\ /]cp\ *) install_cp=: ;;
20736e7d3316Smrg      *) install_cp=false ;;
20746e7d3316Smrg    esac
2075a966c04fSmrg
20766e7d3316Smrg    # We need to accept at least all the BSD install flags.
20776e7d3316Smrg    dest=
20786e7d3316Smrg    files=
20796e7d3316Smrg    opts=
20806e7d3316Smrg    prev=
20816e7d3316Smrg    install_type=
20826e7d3316Smrg    isdir=no
20836e7d3316Smrg    stripme=
20846e7d3316Smrg    no_mode=:
20856e7d3316Smrg    for arg
20866e7d3316Smrg    do
20876e7d3316Smrg      arg2=
20886e7d3316Smrg      if test -n "$dest"; then
20896e7d3316Smrg	files="$files $dest"
20906e7d3316Smrg	dest=$arg
2091a966c04fSmrg	continue
20926e7d3316Smrg      fi
2093a966c04fSmrg
20946e7d3316Smrg      case $arg in
20956e7d3316Smrg      -d) isdir=yes ;;
20966e7d3316Smrg      -f)
20976e7d3316Smrg	if $install_cp; then :; else
20986e7d3316Smrg	  prev=$arg
2099a966c04fSmrg	fi
21006e7d3316Smrg	;;
21016e7d3316Smrg      -g | -m | -o)
21026e7d3316Smrg	prev=$arg
21036e7d3316Smrg	;;
21046e7d3316Smrg      -s)
21056e7d3316Smrg	stripme=" -s"
2106a966c04fSmrg	continue
2107a966c04fSmrg	;;
21086e7d3316Smrg      -*)
21096e7d3316Smrg	;;
2110a966c04fSmrg      *)
21116e7d3316Smrg	# If the previous option needed an argument, then skip it.
21126e7d3316Smrg	if test -n "$prev"; then
21136e7d3316Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
21146e7d3316Smrg	    arg2=$install_override_mode
21156e7d3316Smrg	    no_mode=false
21166e7d3316Smrg	  fi
21176e7d3316Smrg	  prev=
21186e7d3316Smrg	else
21196e7d3316Smrg	  dest=$arg
21206e7d3316Smrg	  continue
21216e7d3316Smrg	fi
2122a966c04fSmrg	;;
21236e7d3316Smrg      esac
2124a966c04fSmrg
21256e7d3316Smrg      # Aesthetically quote the argument.
21266e7d3316Smrg      func_quote_for_eval "$arg"
21276e7d3316Smrg      install_prog="$install_prog $func_quote_for_eval_result"
21286e7d3316Smrg      if test -n "$arg2"; then
21296e7d3316Smrg	func_quote_for_eval "$arg2"
2130a966c04fSmrg      fi
21316e7d3316Smrg      install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
21326e7d3316Smrg    done
2133a966c04fSmrg
21346e7d3316Smrg    test -z "$install_prog" && \
21356e7d3316Smrg      func_fatal_help "you must specify an install program"
2136a966c04fSmrg
21376e7d3316Smrg    test -n "$prev" && \
21386e7d3316Smrg      func_fatal_help "the \`$prev' option requires an argument"
2139a966c04fSmrg
21406e7d3316Smrg    if test -n "$install_override_mode" && $no_mode; then
21416e7d3316Smrg      if $install_cp; then :; else
21426e7d3316Smrg	func_quote_for_eval "$install_override_mode"
21436e7d3316Smrg	install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
21446e7d3316Smrg      fi
2145a966c04fSmrg    fi
2146a966c04fSmrg
21476e7d3316Smrg    if test -z "$files"; then
21486e7d3316Smrg      if test -z "$dest"; then
21496e7d3316Smrg	func_fatal_help "no file or destination specified"
21506e7d3316Smrg      else
21516e7d3316Smrg	func_fatal_help "you must specify a destination"
2152a966c04fSmrg      fi
2153a966c04fSmrg    fi
2154a966c04fSmrg
21556e7d3316Smrg    # Strip any trailing slash from the destination.
21566e7d3316Smrg    func_stripname '' '/' "$dest"
21576e7d3316Smrg    dest=$func_stripname_result
2158a966c04fSmrg
21596e7d3316Smrg    # Check to see that the destination is a directory.
21606e7d3316Smrg    test -d "$dest" && isdir=yes
21616e7d3316Smrg    if test "$isdir" = yes; then
21626e7d3316Smrg      destdir="$dest"
21636e7d3316Smrg      destname=
21646e7d3316Smrg    else
21656e7d3316Smrg      func_dirname_and_basename "$dest" "" "."
21666e7d3316Smrg      destdir="$func_dirname_result"
21676e7d3316Smrg      destname="$func_basename_result"
21686e7d3316Smrg
21696e7d3316Smrg      # Not a directory, so check to see that there is only one file specified.
21706e7d3316Smrg      set dummy $files; shift
21716e7d3316Smrg      test "$#" -gt 1 && \
21726e7d3316Smrg	func_fatal_help "\`$dest' is not a directory"
21736e7d3316Smrg    fi
21746e7d3316Smrg    case $destdir in
21756e7d3316Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2176a966c04fSmrg    *)
21776e7d3316Smrg      for file in $files; do
21786e7d3316Smrg	case $file in
21796e7d3316Smrg	*.lo) ;;
21806e7d3316Smrg	*)
21816e7d3316Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
21826e7d3316Smrg	  ;;
21836e7d3316Smrg	esac
21846e7d3316Smrg      done
2185a966c04fSmrg      ;;
2186a966c04fSmrg    esac
2187a966c04fSmrg
21886e7d3316Smrg    # This variable tells wrapper scripts just to set variables rather
21896e7d3316Smrg    # than running their programs.
21906e7d3316Smrg    libtool_install_magic="$magic"
2191a966c04fSmrg
21926e7d3316Smrg    staticlibs=
21936e7d3316Smrg    future_libdirs=
21946e7d3316Smrg    current_libdirs=
21956e7d3316Smrg    for file in $files; do
2196a966c04fSmrg
21976e7d3316Smrg      # Do each installation.
21986e7d3316Smrg      case $file in
21996e7d3316Smrg      *.$libext)
22006e7d3316Smrg	# Do the static libraries later.
22016e7d3316Smrg	staticlibs="$staticlibs $file"
22026e7d3316Smrg	;;
22036e7d3316Smrg
22046e7d3316Smrg      *.la)
22056e7d3316Smrg	# Check to see that this really is a libtool archive.
22066e7d3316Smrg	func_lalib_unsafe_p "$file" \
22076e7d3316Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
22086e7d3316Smrg
22096e7d3316Smrg	library_names=
22106e7d3316Smrg	old_library=
22116e7d3316Smrg	relink_command=
22126e7d3316Smrg	func_source "$file"
22136e7d3316Smrg
22146e7d3316Smrg	# Add the libdir to current_libdirs if it is the destination.
22156e7d3316Smrg	if test "X$destdir" = "X$libdir"; then
22166e7d3316Smrg	  case "$current_libdirs " in
22176e7d3316Smrg	  *" $libdir "*) ;;
22186e7d3316Smrg	  *) current_libdirs="$current_libdirs $libdir" ;;
2219a966c04fSmrg	  esac
22206e7d3316Smrg	else
22216e7d3316Smrg	  # Note the libdir as a future libdir.
22226e7d3316Smrg	  case "$future_libdirs " in
22236e7d3316Smrg	  *" $libdir "*) ;;
22246e7d3316Smrg	  *) future_libdirs="$future_libdirs $libdir" ;;
22256e7d3316Smrg	  esac
22266e7d3316Smrg	fi
2227a966c04fSmrg
22286e7d3316Smrg	func_dirname "$file" "/" ""
22296e7d3316Smrg	dir="$func_dirname_result"
22306e7d3316Smrg	dir="$dir$objdir"
22316e7d3316Smrg
22326e7d3316Smrg	if test -n "$relink_command"; then
22336e7d3316Smrg	  # Determine the prefix the user has applied to our future dir.
22346e7d3316Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
22356e7d3316Smrg
22366e7d3316Smrg	  # Don't allow the user to place us outside of our expected
22376e7d3316Smrg	  # location b/c this prevents finding dependent libraries that
22386e7d3316Smrg	  # are installed to the same prefix.
22396e7d3316Smrg	  # At present, this check doesn't affect windows .dll's that
22406e7d3316Smrg	  # are installed into $libdir/../bin (currently, that works fine)
22416e7d3316Smrg	  # but it's something to keep an eye on.
22426e7d3316Smrg	  test "$inst_prefix_dir" = "$destdir" && \
22436e7d3316Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
22446e7d3316Smrg
22456e7d3316Smrg	  if test -n "$inst_prefix_dir"; then
22466e7d3316Smrg	    # Stick the inst_prefix_dir data into the link command.
22476e7d3316Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
22486e7d3316Smrg	  else
22496e7d3316Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
22506e7d3316Smrg	  fi
22516e7d3316Smrg
22526e7d3316Smrg	  func_warning "relinking \`$file'"
22536e7d3316Smrg	  func_show_eval "$relink_command" \
22546e7d3316Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
22556e7d3316Smrg	fi
22566e7d3316Smrg
22576e7d3316Smrg	# See the names of the shared library.
22586e7d3316Smrg	set dummy $library_names; shift
22596e7d3316Smrg	if test -n "$1"; then
22606e7d3316Smrg	  realname="$1"
22616e7d3316Smrg	  shift
22626e7d3316Smrg
22636e7d3316Smrg	  srcname="$realname"
22646e7d3316Smrg	  test -n "$relink_command" && srcname="$realname"T
22656e7d3316Smrg
22666e7d3316Smrg	  # Install the shared library and build the symlinks.
22676e7d3316Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
22686e7d3316Smrg	      'exit $?'
22696e7d3316Smrg	  tstripme="$stripme"
22706e7d3316Smrg	  case $host_os in
22716e7d3316Smrg	  cygwin* | mingw* | pw32* | cegcc*)
22726e7d3316Smrg	    case $realname in
22736e7d3316Smrg	    *.dll.a)
22746e7d3316Smrg	      tstripme=""
22756e7d3316Smrg	      ;;
22766e7d3316Smrg	    esac
2277a966c04fSmrg	    ;;
2278a966c04fSmrg	  esac
22796e7d3316Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
22806e7d3316Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
22816e7d3316Smrg	  fi
22826e7d3316Smrg
22836e7d3316Smrg	  if test "$#" -gt 0; then
22846e7d3316Smrg	    # Delete the old symlinks, and create new ones.
22856e7d3316Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
22866e7d3316Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
22876e7d3316Smrg	    # so we also need to try rm && ln -s.
22886e7d3316Smrg	    for linkname
22896e7d3316Smrg	    do
22906e7d3316Smrg	      test "$linkname" != "$realname" \
22916e7d3316Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
22926e7d3316Smrg	    done
22936e7d3316Smrg	  fi
22946e7d3316Smrg
22956e7d3316Smrg	  # Do each command in the postinstall commands.
22966e7d3316Smrg	  lib="$destdir/$realname"
22976e7d3316Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
22986e7d3316Smrg	fi
22996e7d3316Smrg
23006e7d3316Smrg	# Install the pseudo-library for information purposes.
23016e7d3316Smrg	func_basename "$file"
23026e7d3316Smrg	name="$func_basename_result"
23036e7d3316Smrg	instname="$dir/$name"i
23046e7d3316Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
23056e7d3316Smrg
23066e7d3316Smrg	# Maybe install the static library, too.
23076e7d3316Smrg	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
2308a966c04fSmrg	;;
23096e7d3316Smrg
23106e7d3316Smrg      *.lo)
23116e7d3316Smrg	# Install (i.e. copy) a libtool object.
23126e7d3316Smrg
23136e7d3316Smrg	# Figure out destination file name, if it wasn't already specified.
23146e7d3316Smrg	if test -n "$destname"; then
23156e7d3316Smrg	  destfile="$destdir/$destname"
23166e7d3316Smrg	else
23176e7d3316Smrg	  func_basename "$file"
23186e7d3316Smrg	  destfile="$func_basename_result"
23196e7d3316Smrg	  destfile="$destdir/$destfile"
23206e7d3316Smrg	fi
23216e7d3316Smrg
23226e7d3316Smrg	# Deduce the name of the destination old-style object file.
23236e7d3316Smrg	case $destfile in
23246e7d3316Smrg	*.lo)
23256e7d3316Smrg	  func_lo2o "$destfile"
23266e7d3316Smrg	  staticdest=$func_lo2o_result
2327a966c04fSmrg	  ;;
23286e7d3316Smrg	*.$objext)
23296e7d3316Smrg	  staticdest="$destfile"
23306e7d3316Smrg	  destfile=
2331a966c04fSmrg	  ;;
23326e7d3316Smrg	*)
23336e7d3316Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
2334a966c04fSmrg	  ;;
23356e7d3316Smrg	esac
23366e7d3316Smrg
23376e7d3316Smrg	# Install the libtool object if requested.
23386e7d3316Smrg	test -n "$destfile" && \
23396e7d3316Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
23406e7d3316Smrg
23416e7d3316Smrg	# Install the old object if enabled.
23426e7d3316Smrg	if test "$build_old_libs" = yes; then
23436e7d3316Smrg	  # Deduce the name of the old-style object file.
23446e7d3316Smrg	  func_lo2o "$file"
23456e7d3316Smrg	  staticobj=$func_lo2o_result
23466e7d3316Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
2347a966c04fSmrg	fi
23486e7d3316Smrg	exit $EXIT_SUCCESS
23496e7d3316Smrg	;;
2350a966c04fSmrg
23516e7d3316Smrg      *)
23526e7d3316Smrg	# Figure out destination file name, if it wasn't already specified.
23536e7d3316Smrg	if test -n "$destname"; then
23546e7d3316Smrg	  destfile="$destdir/$destname"
2355a966c04fSmrg	else
23566e7d3316Smrg	  func_basename "$file"
23576e7d3316Smrg	  destfile="$func_basename_result"
23586e7d3316Smrg	  destfile="$destdir/$destfile"
2359a966c04fSmrg	fi
2360a966c04fSmrg
23616e7d3316Smrg	# If the file is missing, and there is a .exe on the end, strip it
23626e7d3316Smrg	# because it is most likely a libtool script we actually want to
23636e7d3316Smrg	# install
23646e7d3316Smrg	stripped_ext=""
23656e7d3316Smrg	case $file in
23666e7d3316Smrg	  *.exe)
23676e7d3316Smrg	    if test ! -f "$file"; then
23686e7d3316Smrg	      func_stripname '' '.exe' "$file"
23696e7d3316Smrg	      file=$func_stripname_result
23706e7d3316Smrg	      stripped_ext=".exe"
23716e7d3316Smrg	    fi
23726e7d3316Smrg	    ;;
23736e7d3316Smrg	esac
2374a966c04fSmrg
23756e7d3316Smrg	# Do a test to see if this is really a libtool program.
23766e7d3316Smrg	case $host in
23776e7d3316Smrg	*cygwin* | *mingw*)
23786e7d3316Smrg	    if func_ltwrapper_executable_p "$file"; then
23796e7d3316Smrg	      func_ltwrapper_scriptname "$file"
23806e7d3316Smrg	      wrapper=$func_ltwrapper_scriptname_result
23816e7d3316Smrg	    else
23826e7d3316Smrg	      func_stripname '' '.exe' "$file"
23836e7d3316Smrg	      wrapper=$func_stripname_result
23846e7d3316Smrg	    fi
23856e7d3316Smrg	    ;;
23866e7d3316Smrg	*)
23876e7d3316Smrg	    wrapper=$file
23886e7d3316Smrg	    ;;
23896e7d3316Smrg	esac
23906e7d3316Smrg	if func_ltwrapper_script_p "$wrapper"; then
23916e7d3316Smrg	  notinst_deplibs=
23926e7d3316Smrg	  relink_command=
2393a966c04fSmrg
23946e7d3316Smrg	  func_source "$wrapper"
2395a966c04fSmrg
23966e7d3316Smrg	  # Check the variables that should have been set.
23976e7d3316Smrg	  test -z "$generated_by_libtool_version" && \
23986e7d3316Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
2399a966c04fSmrg
24006e7d3316Smrg	  finalize=yes
24016e7d3316Smrg	  for lib in $notinst_deplibs; do
24026e7d3316Smrg	    # Check to see that each library is installed.
24036e7d3316Smrg	    libdir=
24046e7d3316Smrg	    if test -f "$lib"; then
24056e7d3316Smrg	      func_source "$lib"
2406a966c04fSmrg	    fi
24076e7d3316Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
24086e7d3316Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
24096e7d3316Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
24106e7d3316Smrg	      finalize=no
24116e7d3316Smrg	    fi
24126e7d3316Smrg	  done
2413a966c04fSmrg
24146e7d3316Smrg	  relink_command=
24156e7d3316Smrg	  func_source "$wrapper"
2416a966c04fSmrg
24176e7d3316Smrg	  outputname=
24186e7d3316Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
24196e7d3316Smrg	    $opt_dry_run || {
24206e7d3316Smrg	      if test "$finalize" = yes; then
24216e7d3316Smrg	        tmpdir=`func_mktempdir`
24226e7d3316Smrg		func_basename "$file$stripped_ext"
24236e7d3316Smrg		file="$func_basename_result"
24246e7d3316Smrg	        outputname="$tmpdir/$file"
24256e7d3316Smrg	        # Replace the output file specification.
24266e7d3316Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
24276e7d3316Smrg
24286e7d3316Smrg	        $opt_silent || {
24296e7d3316Smrg	          func_quote_for_expand "$relink_command"
24306e7d3316Smrg		  eval "func_echo $func_quote_for_expand_result"
24316e7d3316Smrg	        }
24326e7d3316Smrg	        if eval "$relink_command"; then :
24336e7d3316Smrg	          else
24346e7d3316Smrg		  func_error "error: relink \`$file' with the above command before installing it"
24356e7d3316Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
24366e7d3316Smrg		  continue
24376e7d3316Smrg	        fi
24386e7d3316Smrg	        file="$outputname"
24396e7d3316Smrg	      else
24406e7d3316Smrg	        func_warning "cannot relink \`$file'"
24416e7d3316Smrg	      fi
24426e7d3316Smrg	    }
2443a966c04fSmrg	  else
24446e7d3316Smrg	    # Install the binary that we compiled earlier.
24456e7d3316Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
2446a966c04fSmrg	  fi
24476e7d3316Smrg	fi
2448a966c04fSmrg
24496e7d3316Smrg	# remove .exe since cygwin /usr/bin/install will append another
24506e7d3316Smrg	# one anyway
24516e7d3316Smrg	case $install_prog,$host in
24526e7d3316Smrg	*/usr/bin/install*,*cygwin*)
24536e7d3316Smrg	  case $file:$destfile in
24546e7d3316Smrg	  *.exe:*.exe)
24556e7d3316Smrg	    # this is ok
24566e7d3316Smrg	    ;;
24576e7d3316Smrg	  *.exe:*)
24586e7d3316Smrg	    destfile=$destfile.exe
24596e7d3316Smrg	    ;;
24606e7d3316Smrg	  *:*.exe)
24616e7d3316Smrg	    func_stripname '' '.exe' "$destfile"
24626e7d3316Smrg	    destfile=$func_stripname_result
24636e7d3316Smrg	    ;;
24646e7d3316Smrg	  esac
2465a966c04fSmrg	  ;;
2466a966c04fSmrg	esac
24676e7d3316Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
24686e7d3316Smrg	$opt_dry_run || if test -n "$outputname"; then
24696e7d3316Smrg	  ${RM}r "$tmpdir"
24706e7d3316Smrg	fi
24716e7d3316Smrg	;;
24726e7d3316Smrg      esac
24736e7d3316Smrg    done
2474a966c04fSmrg
24756e7d3316Smrg    for file in $staticlibs; do
24766e7d3316Smrg      func_basename "$file"
24776e7d3316Smrg      name="$func_basename_result"
24786e7d3316Smrg
24796e7d3316Smrg      # Set up the ranlib parameters.
24806e7d3316Smrg      oldlib="$destdir/$name"
24816e7d3316Smrg
24826e7d3316Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
24836e7d3316Smrg
24846e7d3316Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
24856e7d3316Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
24866e7d3316Smrg      fi
24876e7d3316Smrg
24886e7d3316Smrg      # Do each command in the postinstall commands.
24896e7d3316Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
24906e7d3316Smrg    done
24916e7d3316Smrg
24926e7d3316Smrg    test -n "$future_libdirs" && \
24936e7d3316Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
24946e7d3316Smrg
24956e7d3316Smrg    if test -n "$current_libdirs"; then
24966e7d3316Smrg      # Maybe just do a dry run.
24976e7d3316Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
24986e7d3316Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
24996e7d3316Smrg    else
25006e7d3316Smrg      exit $EXIT_SUCCESS
25016e7d3316Smrg    fi
25026e7d3316Smrg}
25036e7d3316Smrg
25046e7d3316Smrgtest "$mode" = install && func_mode_install ${1+"$@"}
25056e7d3316Smrg
25066e7d3316Smrg
25076e7d3316Smrg# func_generate_dlsyms outputname originator pic_p
25086e7d3316Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
25096e7d3316Smrg# a dlpreopen symbol table.
25106e7d3316Smrgfunc_generate_dlsyms ()
25116e7d3316Smrg{
25126e7d3316Smrg    $opt_debug
25136e7d3316Smrg    my_outputname="$1"
25146e7d3316Smrg    my_originator="$2"
25156e7d3316Smrg    my_pic_p="${3-no}"
25166e7d3316Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
25176e7d3316Smrg    my_dlsyms=
25186e7d3316Smrg
25196e7d3316Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
25206e7d3316Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
25216e7d3316Smrg	my_dlsyms="${my_outputname}S.c"
25226e7d3316Smrg      else
25236e7d3316Smrg	func_error "not configured to extract global symbols from dlpreopened files"
25246e7d3316Smrg      fi
25256e7d3316Smrg    fi
25266e7d3316Smrg
25276e7d3316Smrg    if test -n "$my_dlsyms"; then
25286e7d3316Smrg      case $my_dlsyms in
25296e7d3316Smrg      "") ;;
25306e7d3316Smrg      *.c)
25316e7d3316Smrg	# Discover the nlist of each of the dlfiles.
25326e7d3316Smrg	nlist="$output_objdir/${my_outputname}.nm"
25336e7d3316Smrg
25346e7d3316Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
25356e7d3316Smrg
25366e7d3316Smrg	# Parse the name list into a source file.
25376e7d3316Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
25386e7d3316Smrg
25396e7d3316Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
25406e7d3316Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
25416e7d3316Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
25426e7d3316Smrg
25436e7d3316Smrg#ifdef __cplusplus
25446e7d3316Smrgextern \"C\" {
25456e7d3316Smrg#endif
25466e7d3316Smrg
25476e7d3316Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
25486e7d3316Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
25496e7d3316Smrg#endif
25506e7d3316Smrg
25516e7d3316Smrg/* External symbol declarations for the compiler. */\
25526e7d3316Smrg"
25536e7d3316Smrg
25546e7d3316Smrg	if test "$dlself" = yes; then
25556e7d3316Smrg	  func_verbose "generating symbol list for \`$output'"
25566e7d3316Smrg
25576e7d3316Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
25586e7d3316Smrg
25596e7d3316Smrg	  # Add our own program objects to the symbol list.
25606e7d3316Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
25616e7d3316Smrg	  for progfile in $progfiles; do
25626e7d3316Smrg	    func_verbose "extracting global C symbols from \`$progfile'"
25636e7d3316Smrg	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
25646e7d3316Smrg	  done
25656e7d3316Smrg
25666e7d3316Smrg	  if test -n "$exclude_expsyms"; then
25676e7d3316Smrg	    $opt_dry_run || {
25686e7d3316Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
25696e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
25706e7d3316Smrg	    }
2571a966c04fSmrg	  fi
25726e7d3316Smrg
25736e7d3316Smrg	  if test -n "$export_symbols_regex"; then
25746e7d3316Smrg	    $opt_dry_run || {
25756e7d3316Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
25766e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
25776e7d3316Smrg	    }
25786e7d3316Smrg	  fi
25796e7d3316Smrg
25806e7d3316Smrg	  # Prepare the list of exported symbols
25816e7d3316Smrg	  if test -z "$export_symbols"; then
25826e7d3316Smrg	    export_symbols="$output_objdir/$outputname.exp"
25836e7d3316Smrg	    $opt_dry_run || {
25846e7d3316Smrg	      $RM $export_symbols
25856e7d3316Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
25866e7d3316Smrg	      case $host in
25876e7d3316Smrg	      *cygwin* | *mingw* | *cegcc* )
25886e7d3316Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
25896e7d3316Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
25906e7d3316Smrg	        ;;
25916e7d3316Smrg	      esac
25926e7d3316Smrg	    }
2593a966c04fSmrg	  else
25946e7d3316Smrg	    $opt_dry_run || {
25956e7d3316Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
25966e7d3316Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
25976e7d3316Smrg	      eval '$MV "$nlist"T "$nlist"'
25986e7d3316Smrg	      case $host in
25996e7d3316Smrg	        *cygwin* | *mingw* | *cegcc* )
26006e7d3316Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
26016e7d3316Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
26026e7d3316Smrg	          ;;
26036e7d3316Smrg	      esac
26046e7d3316Smrg	    }
2605a966c04fSmrg	  fi
26066e7d3316Smrg	fi
2607a966c04fSmrg
26086e7d3316Smrg	for dlprefile in $dlprefiles; do
26096e7d3316Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
26106e7d3316Smrg	  func_basename "$dlprefile"
26116e7d3316Smrg	  name="$func_basename_result"
26126e7d3316Smrg	  $opt_dry_run || {
26136e7d3316Smrg	    eval '$ECHO ": $name " >> "$nlist"'
26146e7d3316Smrg	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
26156e7d3316Smrg	  }
26166e7d3316Smrg	done
26176e7d3316Smrg
26186e7d3316Smrg	$opt_dry_run || {
26196e7d3316Smrg	  # Make sure we have at least an empty file.
26206e7d3316Smrg	  test -f "$nlist" || : > "$nlist"
26216e7d3316Smrg
26226e7d3316Smrg	  if test -n "$exclude_expsyms"; then
26236e7d3316Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
26246e7d3316Smrg	    $MV "$nlist"T "$nlist"
2625a966c04fSmrg	  fi
26266e7d3316Smrg
26276e7d3316Smrg	  # Try sorting and uniquifying the output.
26286e7d3316Smrg	  if $GREP -v "^: " < "$nlist" |
26296e7d3316Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
26306e7d3316Smrg		sort -k 3
26316e7d3316Smrg	      else
26326e7d3316Smrg		sort +2
26336e7d3316Smrg	      fi |
26346e7d3316Smrg	      uniq > "$nlist"S; then
26356e7d3316Smrg	    :
2636a966c04fSmrg	  else
26376e7d3316Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
2638a966c04fSmrg	  fi
2639a966c04fSmrg
26406e7d3316Smrg	  if test -f "$nlist"S; then
26416e7d3316Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
2642a966c04fSmrg	  else
26436e7d3316Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
2644a966c04fSmrg	  fi
2645a966c04fSmrg
26466e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
2647a966c04fSmrg
26486e7d3316Smrg/* The mapping between symbol names and symbols.  */
26496e7d3316Smrgtypedef struct {
26506e7d3316Smrg  const char *name;
26516e7d3316Smrg  void *address;
26526e7d3316Smrg} lt_dlsymlist;
26536e7d3316Smrg"
26546e7d3316Smrg	  case $host in
26556e7d3316Smrg	  *cygwin* | *mingw* | *cegcc* )
26566e7d3316Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
26576e7d3316Smrg/* DATA imports from DLLs on WIN32 con't be const, because
26586e7d3316Smrg   runtime relocations are performed -- see ld's documentation
26596e7d3316Smrg   on pseudo-relocs.  */"
26606e7d3316Smrg	    lt_dlsym_const= ;;
26616e7d3316Smrg	  *osf5*)
26626e7d3316Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
26636e7d3316Smrg/* This system does not cope well with relocations in const data */"
26646e7d3316Smrg	    lt_dlsym_const= ;;
26656e7d3316Smrg	  *)
26666e7d3316Smrg	    lt_dlsym_const=const ;;
26676e7d3316Smrg	  esac
2668a966c04fSmrg
26696e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
26706e7d3316Smrgextern $lt_dlsym_const lt_dlsymlist
26716e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[];
26726e7d3316Smrg$lt_dlsym_const lt_dlsymlist
26736e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
26746e7d3316Smrg{\
26756e7d3316Smrg  { \"$my_originator\", (void *) 0 },"
2676a966c04fSmrg
26776e7d3316Smrg	  case $need_lib_prefix in
26786e7d3316Smrg	  no)
26796e7d3316Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
26806e7d3316Smrg	    ;;
26816e7d3316Smrg	  *)
26826e7d3316Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
26836e7d3316Smrg	    ;;
26846e7d3316Smrg	  esac
26856e7d3316Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
26866e7d3316Smrg  {0, (void *) 0}
26876e7d3316Smrg};
2688a966c04fSmrg
26896e7d3316Smrg/* This works around a problem in FreeBSD linker */
26906e7d3316Smrg#ifdef FREEBSD_WORKAROUND
26916e7d3316Smrgstatic const void *lt_preloaded_setup() {
26926e7d3316Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
26936e7d3316Smrg}
26946e7d3316Smrg#endif
2695a966c04fSmrg
26966e7d3316Smrg#ifdef __cplusplus
26976e7d3316Smrg}
26986e7d3316Smrg#endif\
26996e7d3316Smrg"
27006e7d3316Smrg	} # !$opt_dry_run
2701a966c04fSmrg
27026e7d3316Smrg	pic_flag_for_symtable=
27036e7d3316Smrg	case "$compile_command " in
27046e7d3316Smrg	*" -static "*) ;;
27056e7d3316Smrg	*)
27066e7d3316Smrg	  case $host in
27076e7d3316Smrg	  # compiling the symbol table file with pic_flag works around
27086e7d3316Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
27096e7d3316Smrg	  # linked before any other PIC object.  But we must not use
27106e7d3316Smrg	  # pic_flag when linking with -static.  The problem exists in
27116e7d3316Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
27126e7d3316Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
27136e7d3316Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
27146e7d3316Smrg	  *-*-hpux*)
27156e7d3316Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
27166e7d3316Smrg	  *)
27176e7d3316Smrg	    if test "X$my_pic_p" != Xno; then
27186e7d3316Smrg	      pic_flag_for_symtable=" $pic_flag"
27196e7d3316Smrg	    fi
27206e7d3316Smrg	    ;;
27216e7d3316Smrg	  esac
27226e7d3316Smrg	  ;;
27236e7d3316Smrg	esac
27246e7d3316Smrg	symtab_cflags=
27256e7d3316Smrg	for arg in $LTCFLAGS; do
27266e7d3316Smrg	  case $arg in
27276e7d3316Smrg	  -pie | -fpie | -fPIE) ;;
27286e7d3316Smrg	  *) symtab_cflags="$symtab_cflags $arg" ;;
27296e7d3316Smrg	  esac
27306e7d3316Smrg	done
2731a966c04fSmrg
27326e7d3316Smrg	# Now compile the dynamic symbol file.
27336e7d3316Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
2734a966c04fSmrg
27356e7d3316Smrg	# Clean up the generated files.
27366e7d3316Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
2737a966c04fSmrg
27386e7d3316Smrg	# Transform the symbol file into the correct name.
27396e7d3316Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
27406e7d3316Smrg	case $host in
27416e7d3316Smrg	*cygwin* | *mingw* | *cegcc* )
27426e7d3316Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
27436e7d3316Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
27446e7d3316Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
27456e7d3316Smrg	  else
27466e7d3316Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27476e7d3316Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27486e7d3316Smrg	  fi
27496e7d3316Smrg	  ;;
27506e7d3316Smrg	*)
27516e7d3316Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27526e7d3316Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27536e7d3316Smrg	  ;;
27546e7d3316Smrg	esac
27556e7d3316Smrg	;;
27566e7d3316Smrg      *)
27576e7d3316Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
27586e7d3316Smrg	;;
27596e7d3316Smrg      esac
27606e7d3316Smrg    else
27616e7d3316Smrg      # We keep going just in case the user didn't refer to
27626e7d3316Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
27636e7d3316Smrg      # really was required.
2764a966c04fSmrg
27656e7d3316Smrg      # Nullify the symbol file.
27666e7d3316Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
27676e7d3316Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
27686e7d3316Smrg    fi
27696e7d3316Smrg}
2770a966c04fSmrg
27716e7d3316Smrg# func_win32_libid arg
27726e7d3316Smrg# return the library type of file 'arg'
27736e7d3316Smrg#
27746e7d3316Smrg# Need a lot of goo to handle *both* DLLs and import libs
27756e7d3316Smrg# Has to be a shell function in order to 'eat' the argument
27766e7d3316Smrg# that is supplied when $file_magic_command is called.
27776e7d3316Smrg# Despite the name, also deal with 64 bit binaries.
27786e7d3316Smrgfunc_win32_libid ()
27796e7d3316Smrg{
27806e7d3316Smrg  $opt_debug
27816e7d3316Smrg  win32_libid_type="unknown"
27826e7d3316Smrg  win32_fileres=`file -L $1 2>/dev/null`
27836e7d3316Smrg  case $win32_fileres in
27846e7d3316Smrg  *ar\ archive\ import\ library*) # definitely import
27856e7d3316Smrg    win32_libid_type="x86 archive import"
27866e7d3316Smrg    ;;
27876e7d3316Smrg  *ar\ archive*) # could be an import, or static
27886e7d3316Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
27896e7d3316Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
27906e7d3316Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
27916e7d3316Smrg      win32_nmres=`eval $NM -f posix -A $1 |
27926e7d3316Smrg	$SED -n -e '
27936e7d3316Smrg	    1,100{
27946e7d3316Smrg		/ I /{
27956e7d3316Smrg		    s,.*,import,
27966e7d3316Smrg		    p
27976e7d3316Smrg		    q
27986e7d3316Smrg		}
27996e7d3316Smrg	    }'`
28006e7d3316Smrg      case $win32_nmres in
28016e7d3316Smrg      import*)  win32_libid_type="x86 archive import";;
28026e7d3316Smrg      *)        win32_libid_type="x86 archive static";;
28036e7d3316Smrg      esac
28046e7d3316Smrg    fi
28056e7d3316Smrg    ;;
28066e7d3316Smrg  *DLL*)
28076e7d3316Smrg    win32_libid_type="x86 DLL"
28086e7d3316Smrg    ;;
28096e7d3316Smrg  *executable*) # but shell scripts are "executable" too...
28106e7d3316Smrg    case $win32_fileres in
28116e7d3316Smrg    *MS\ Windows\ PE\ Intel*)
28126e7d3316Smrg      win32_libid_type="x86 DLL"
28136e7d3316Smrg      ;;
28146e7d3316Smrg    esac
28156e7d3316Smrg    ;;
28166e7d3316Smrg  esac
28176e7d3316Smrg  $ECHO "$win32_libid_type"
28186e7d3316Smrg}
2819a966c04fSmrg
2820a966c04fSmrg
2821a966c04fSmrg
28226e7d3316Smrg# func_extract_an_archive dir oldlib
28236e7d3316Smrgfunc_extract_an_archive ()
28246e7d3316Smrg{
28256e7d3316Smrg    $opt_debug
28266e7d3316Smrg    f_ex_an_ar_dir="$1"; shift
28276e7d3316Smrg    f_ex_an_ar_oldlib="$1"
28286e7d3316Smrg    if test "$lock_old_archive_extraction" = yes; then
28296e7d3316Smrg      lockfile=$f_ex_an_ar_oldlib.lock
28306e7d3316Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
28316e7d3316Smrg	func_echo "Waiting for $lockfile to be removed"
28326e7d3316Smrg	sleep 2
28336e7d3316Smrg      done
28346e7d3316Smrg    fi
28356e7d3316Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
28366e7d3316Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
28376e7d3316Smrg    if test "$lock_old_archive_extraction" = yes; then
28386e7d3316Smrg      $opt_dry_run || rm -f "$lockfile"
28396e7d3316Smrg    fi
28406e7d3316Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
28416e7d3316Smrg     :
28426e7d3316Smrg    else
28436e7d3316Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
28446e7d3316Smrg    fi
28456e7d3316Smrg}
2846a966c04fSmrg
2847a966c04fSmrg
28486e7d3316Smrg# func_extract_archives gentop oldlib ...
28496e7d3316Smrgfunc_extract_archives ()
28506e7d3316Smrg{
28516e7d3316Smrg    $opt_debug
28526e7d3316Smrg    my_gentop="$1"; shift
28536e7d3316Smrg    my_oldlibs=${1+"$@"}
28546e7d3316Smrg    my_oldobjs=""
28556e7d3316Smrg    my_xlib=""
28566e7d3316Smrg    my_xabs=""
28576e7d3316Smrg    my_xdir=""
2858a966c04fSmrg
28596e7d3316Smrg    for my_xlib in $my_oldlibs; do
28606e7d3316Smrg      # Extract the objects.
28616e7d3316Smrg      case $my_xlib in
28626e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
28636e7d3316Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
28646e7d3316Smrg      esac
28656e7d3316Smrg      func_basename "$my_xlib"
28666e7d3316Smrg      my_xlib="$func_basename_result"
28676e7d3316Smrg      my_xlib_u=$my_xlib
28686e7d3316Smrg      while :; do
28696e7d3316Smrg        case " $extracted_archives " in
28706e7d3316Smrg	*" $my_xlib_u "*)
28716e7d3316Smrg	  func_arith $extracted_serial + 1
28726e7d3316Smrg	  extracted_serial=$func_arith_result
28736e7d3316Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
28746e7d3316Smrg	*) break ;;
28756e7d3316Smrg	esac
28766e7d3316Smrg      done
28776e7d3316Smrg      extracted_archives="$extracted_archives $my_xlib_u"
28786e7d3316Smrg      my_xdir="$my_gentop/$my_xlib_u"
2879a966c04fSmrg
28806e7d3316Smrg      func_mkdir_p "$my_xdir"
28816e7d3316Smrg
28826e7d3316Smrg      case $host in
28836e7d3316Smrg      *-darwin*)
28846e7d3316Smrg	func_verbose "Extracting $my_xabs"
28856e7d3316Smrg	# Do not bother doing anything if just a dry run
28866e7d3316Smrg	$opt_dry_run || {
28876e7d3316Smrg	  darwin_orig_dir=`pwd`
28886e7d3316Smrg	  cd $my_xdir || exit $?
28896e7d3316Smrg	  darwin_archive=$my_xabs
28906e7d3316Smrg	  darwin_curdir=`pwd`
28916e7d3316Smrg	  darwin_base_archive=`basename "$darwin_archive"`
28926e7d3316Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
28936e7d3316Smrg	  if test -n "$darwin_arches"; then
28946e7d3316Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
28956e7d3316Smrg	    darwin_arch=
28966e7d3316Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
28976e7d3316Smrg	    for darwin_arch in  $darwin_arches ; do
28986e7d3316Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
28996e7d3316Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
29006e7d3316Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
29016e7d3316Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
29026e7d3316Smrg	      cd "$darwin_curdir"
29036e7d3316Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
29046e7d3316Smrg	    done # $darwin_arches
29056e7d3316Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
29066e7d3316Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
29076e7d3316Smrg	    darwin_file=
29086e7d3316Smrg	    darwin_files=
29096e7d3316Smrg	    for darwin_file in $darwin_filelist; do
29106e7d3316Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
29116e7d3316Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
29126e7d3316Smrg	    done # $darwin_filelist
29136e7d3316Smrg	    $RM -rf unfat-$$
29146e7d3316Smrg	    cd "$darwin_orig_dir"
2915a966c04fSmrg	  else
29166e7d3316Smrg	    cd $darwin_orig_dir
29176e7d3316Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
29186e7d3316Smrg	  fi # $darwin_arches
29196e7d3316Smrg	} # !$opt_dry_run
29206e7d3316Smrg	;;
29216e7d3316Smrg      *)
29226e7d3316Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
29236e7d3316Smrg	;;
29246e7d3316Smrg      esac
29256e7d3316Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
29266e7d3316Smrg    done
2927a966c04fSmrg
29286e7d3316Smrg    func_extract_archives_result="$my_oldobjs"
29296e7d3316Smrg}
2930a966c04fSmrg
2931a966c04fSmrg
29326e7d3316Smrg# func_emit_wrapper [arg=no]
29336e7d3316Smrg#
29346e7d3316Smrg# Emit a libtool wrapper script on stdout.
29356e7d3316Smrg# Don't directly open a file because we may want to
29366e7d3316Smrg# incorporate the script contents within a cygwin/mingw
29376e7d3316Smrg# wrapper executable.  Must ONLY be called from within
29386e7d3316Smrg# func_mode_link because it depends on a number of variables
29396e7d3316Smrg# set therein.
29406e7d3316Smrg#
29416e7d3316Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
29426e7d3316Smrg# variable will take.  If 'yes', then the emitted script
29436e7d3316Smrg# will assume that the directory in which it is stored is
29446e7d3316Smrg# the $objdir directory.  This is a cygwin/mingw-specific
29456e7d3316Smrg# behavior.
29466e7d3316Smrgfunc_emit_wrapper ()
29476e7d3316Smrg{
29486e7d3316Smrg	func_emit_wrapper_arg1=${1-no}
2949a966c04fSmrg
29506e7d3316Smrg	$ECHO "\
29516e7d3316Smrg#! $SHELL
2952a966c04fSmrg
29536e7d3316Smrg# $output - temporary wrapper script for $objdir/$outputname
29546e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
29556e7d3316Smrg#
29566e7d3316Smrg# The $output program cannot be directly executed until all the libtool
29576e7d3316Smrg# libraries that it depends on are installed.
29586e7d3316Smrg#
29596e7d3316Smrg# This wrapper script should never be moved out of the build directory.
29606e7d3316Smrg# If it is, it will not operate correctly.
2961a966c04fSmrg
29626e7d3316Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
29636e7d3316Smrg# metacharacters that are still active within double-quoted strings.
29646e7d3316Smrgsed_quote_subst='$sed_quote_subst'
2965a966c04fSmrg
29666e7d3316Smrg# Be Bourne compatible
29676e7d3316Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
29686e7d3316Smrg  emulate sh
29696e7d3316Smrg  NULLCMD=:
29706e7d3316Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
29716e7d3316Smrg  # is contrary to our usage.  Disable this feature.
29726e7d3316Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
29736e7d3316Smrg  setopt NO_GLOB_SUBST
29746e7d3316Smrgelse
29756e7d3316Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
29766e7d3316Smrgfi
29776e7d3316SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
29786e7d3316SmrgDUALCASE=1; export DUALCASE # for MKS sh
2979a966c04fSmrg
29806e7d3316Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
29816e7d3316Smrg# if CDPATH is set.
29826e7d3316Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
2983a966c04fSmrg
29846e7d3316Smrgrelink_command=\"$relink_command\"
2985a966c04fSmrg
29866e7d3316Smrg# This environment variable determines our operation mode.
29876e7d3316Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
29886e7d3316Smrg  # install mode needs the following variables:
29896e7d3316Smrg  generated_by_libtool_version='$macro_version'
29906e7d3316Smrg  notinst_deplibs='$notinst_deplibs'
29916e7d3316Smrgelse
29926e7d3316Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
29936e7d3316Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
29946e7d3316Smrg    file=\"\$0\""
2995a966c04fSmrg
29966e7d3316Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
29976e7d3316Smrg    $ECHO "\
2998a966c04fSmrg
29996e7d3316Smrg# A function that is used when there is no print builtin or printf.
30006e7d3316Smrgfunc_fallback_echo ()
30016e7d3316Smrg{
30026e7d3316Smrg  eval 'cat <<_LTECHO_EOF
30036e7d3316Smrg\$1
30046e7d3316Smrg_LTECHO_EOF'
30056e7d3316Smrg}
30066e7d3316Smrg    ECHO=\"$qECHO\"
30076e7d3316Smrg  fi
30086e7d3316Smrg
30096e7d3316Smrg# Very basic option parsing. These options are (a) specific to
30106e7d3316Smrg# the libtool wrapper, (b) are identical between the wrapper
30116e7d3316Smrg# /script/ and the wrapper /executable/ which is used only on
30126e7d3316Smrg# windows platforms, and (c) all begin with the string "--lt-"
30136e7d3316Smrg# (application programs are unlikely to have options which match
30146e7d3316Smrg# this pattern).
30156e7d3316Smrg#
30166e7d3316Smrg# There are only two supported options: --lt-debug and
30176e7d3316Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
30186e7d3316Smrg#
30196e7d3316Smrg# The first argument to this parsing function should be the
30206e7d3316Smrg# script's $0 value, followed by "$@".
30216e7d3316Smrglt_option_debug=
30226e7d3316Smrgfunc_parse_lt_options ()
30236e7d3316Smrg{
30246e7d3316Smrg  lt_script_arg0=\$0
30256e7d3316Smrg  shift
30266e7d3316Smrg  for lt_opt
30276e7d3316Smrg  do
30286e7d3316Smrg    case \"\$lt_opt\" in
30296e7d3316Smrg    --lt-debug) lt_option_debug=1 ;;
30306e7d3316Smrg    --lt-dump-script)
30316e7d3316Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
30326e7d3316Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
30336e7d3316Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
30346e7d3316Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
30356e7d3316Smrg        exit 0
30366e7d3316Smrg      ;;
30376e7d3316Smrg    --lt-*)
30386e7d3316Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
30396e7d3316Smrg        exit 1
3040a966c04fSmrg      ;;
30416e7d3316Smrg    esac
30426e7d3316Smrg  done
3043a966c04fSmrg
30446e7d3316Smrg  # Print the debug banner immediately:
30456e7d3316Smrg  if test -n \"\$lt_option_debug\"; then
30466e7d3316Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
30476e7d3316Smrg  fi
30486e7d3316Smrg}
3049a966c04fSmrg
30506e7d3316Smrg# Used when --lt-debug. Prints its arguments to stdout
30516e7d3316Smrg# (redirection is the responsibility of the caller)
30526e7d3316Smrgfunc_lt_dump_args ()
30536e7d3316Smrg{
30546e7d3316Smrg  lt_dump_args_N=1;
30556e7d3316Smrg  for lt_arg
30566e7d3316Smrg  do
30576e7d3316Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
30586e7d3316Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
30596e7d3316Smrg  done
30606e7d3316Smrg}
3061a966c04fSmrg
30626e7d3316Smrg# Core function for launching the target application
30636e7d3316Smrgfunc_exec_program_core ()
30646e7d3316Smrg{
30656e7d3316Smrg"
30666e7d3316Smrg  case $host in
30676e7d3316Smrg  # Backslashes separate directories on plain windows
30686e7d3316Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
30696e7d3316Smrg    $ECHO "\
30706e7d3316Smrg      if test -n \"\$lt_option_debug\"; then
30716e7d3316Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
30726e7d3316Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3073a966c04fSmrg      fi
30746e7d3316Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
30756e7d3316Smrg"
30766e7d3316Smrg    ;;
3077a966c04fSmrg
30786e7d3316Smrg  *)
30796e7d3316Smrg    $ECHO "\
30806e7d3316Smrg      if test -n \"\$lt_option_debug\"; then
30816e7d3316Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
30826e7d3316Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3083a966c04fSmrg      fi
30846e7d3316Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
30856e7d3316Smrg"
30866e7d3316Smrg    ;;
30876e7d3316Smrg  esac
30886e7d3316Smrg  $ECHO "\
30896e7d3316Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
30906e7d3316Smrg      exit 1
30916e7d3316Smrg}
3092a966c04fSmrg
30936e7d3316Smrg# A function to encapsulate launching the target application
30946e7d3316Smrg# Strips options in the --lt-* namespace from \$@ and
30956e7d3316Smrg# launches target application with the remaining arguments.
30966e7d3316Smrgfunc_exec_program ()
30976e7d3316Smrg{
30986e7d3316Smrg  for lt_wr_arg
30996e7d3316Smrg  do
31006e7d3316Smrg    case \$lt_wr_arg in
31016e7d3316Smrg    --lt-*) ;;
31026e7d3316Smrg    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
31036e7d3316Smrg    esac
31046e7d3316Smrg    shift
31056e7d3316Smrg  done
31066e7d3316Smrg  func_exec_program_core \${1+\"\$@\"}
31076e7d3316Smrg}
3108a966c04fSmrg
31096e7d3316Smrg  # Parse options
31106e7d3316Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
3111a966c04fSmrg
31126e7d3316Smrg  # Find the directory that this script lives in.
31136e7d3316Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
31146e7d3316Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
3115a966c04fSmrg
31166e7d3316Smrg  # Follow symbolic links until we get to the real thisdir.
31176e7d3316Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
31186e7d3316Smrg  while test -n \"\$file\"; do
31196e7d3316Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
3120a966c04fSmrg
31216e7d3316Smrg    # If there was a directory component, then change thisdir.
31226e7d3316Smrg    if test \"x\$destdir\" != \"x\$file\"; then
31236e7d3316Smrg      case \"\$destdir\" in
31246e7d3316Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
31256e7d3316Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
31266e7d3316Smrg      esac
31276e7d3316Smrg    fi
3128a966c04fSmrg
31296e7d3316Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
31306e7d3316Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
31316e7d3316Smrg  done
3132a966c04fSmrg
31336e7d3316Smrg  # Usually 'no', except on cygwin/mingw when embedded into
31346e7d3316Smrg  # the cwrapper.
31356e7d3316Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
31366e7d3316Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
31376e7d3316Smrg    # special case for '.'
31386e7d3316Smrg    if test \"\$thisdir\" = \".\"; then
31396e7d3316Smrg      thisdir=\`pwd\`
31406e7d3316Smrg    fi
31416e7d3316Smrg    # remove .libs from thisdir
31426e7d3316Smrg    case \"\$thisdir\" in
31436e7d3316Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
31446e7d3316Smrg    $objdir )   thisdir=. ;;
31456e7d3316Smrg    esac
31466e7d3316Smrg  fi
3147a966c04fSmrg
31486e7d3316Smrg  # Try to get the absolute directory name.
31496e7d3316Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
31506e7d3316Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
31516e7d3316Smrg"
3152a966c04fSmrg
31536e7d3316Smrg	if test "$fast_install" = yes; then
31546e7d3316Smrg	  $ECHO "\
31556e7d3316Smrg  program=lt-'$outputname'$exeext
31566e7d3316Smrg  progdir=\"\$thisdir/$objdir\"
3157a966c04fSmrg
31586e7d3316Smrg  if test ! -f \"\$progdir/\$program\" ||
31596e7d3316Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
31606e7d3316Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
3161a966c04fSmrg
31626e7d3316Smrg    file=\"\$\$-\$program\"
3163a966c04fSmrg
31646e7d3316Smrg    if test ! -d \"\$progdir\"; then
31656e7d3316Smrg      $MKDIR \"\$progdir\"
31666e7d3316Smrg    else
31676e7d3316Smrg      $RM \"\$progdir/\$file\"
31686e7d3316Smrg    fi"
3169a966c04fSmrg
31706e7d3316Smrg	  $ECHO "\
3171a966c04fSmrg
31726e7d3316Smrg    # relink executable if necessary
31736e7d3316Smrg    if test -n \"\$relink_command\"; then
31746e7d3316Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
31756e7d3316Smrg      else
31766e7d3316Smrg	$ECHO \"\$relink_command_output\" >&2
31776e7d3316Smrg	$RM \"\$progdir/\$file\"
31786e7d3316Smrg	exit 1
31796e7d3316Smrg      fi
31806e7d3316Smrg    fi
3181a966c04fSmrg
31826e7d3316Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
31836e7d3316Smrg    { $RM \"\$progdir/\$program\";
31846e7d3316Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
31856e7d3316Smrg    $RM \"\$progdir/\$file\"
31866e7d3316Smrg  fi"
31876e7d3316Smrg	else
31886e7d3316Smrg	  $ECHO "\
31896e7d3316Smrg  program='$outputname'
31906e7d3316Smrg  progdir=\"\$thisdir/$objdir\"
31916e7d3316Smrg"
31926e7d3316Smrg	fi
3193a966c04fSmrg
31946e7d3316Smrg	$ECHO "\
3195a966c04fSmrg
31966e7d3316Smrg  if test -f \"\$progdir/\$program\"; then"
3197a966c04fSmrg
31986e7d3316Smrg	# Export our shlibpath_var if we have one.
31996e7d3316Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
32006e7d3316Smrg	  $ECHO "\
32016e7d3316Smrg    # Add our own library path to $shlibpath_var
32026e7d3316Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
3203a966c04fSmrg
32046e7d3316Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
32056e7d3316Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
32066e7d3316Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
3207a966c04fSmrg
32086e7d3316Smrg    export $shlibpath_var
32096e7d3316Smrg"
32106e7d3316Smrg	fi
3211a966c04fSmrg
32126e7d3316Smrg	# fixup the dll searchpath if we need to.
32136e7d3316Smrg	if test -n "$dllsearchpath"; then
32146e7d3316Smrg	  $ECHO "\
32156e7d3316Smrg    # Add the dll search path components to the executable PATH
32166e7d3316Smrg    PATH=$dllsearchpath:\$PATH
32176e7d3316Smrg"
32186e7d3316Smrg	fi
3219a966c04fSmrg
32206e7d3316Smrg	$ECHO "\
32216e7d3316Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
32226e7d3316Smrg      # Run the actual program with our arguments.
32236e7d3316Smrg      func_exec_program \${1+\"\$@\"}
32246e7d3316Smrg    fi
32256e7d3316Smrg  else
32266e7d3316Smrg    # The program doesn't exist.
32276e7d3316Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
32286e7d3316Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
32296e7d3316Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
32306e7d3316Smrg    exit 1
32316e7d3316Smrg  fi
32326e7d3316Smrgfi\
32336e7d3316Smrg"
32346e7d3316Smrg}
3235a966c04fSmrg
3236a966c04fSmrg
32376e7d3316Smrg# func_to_host_path arg
32386e7d3316Smrg#
32396e7d3316Smrg# Convert paths to host format when used with build tools.
32406e7d3316Smrg# Intended for use with "native" mingw (where libtool itself
32416e7d3316Smrg# is running under the msys shell), or in the following cross-
32426e7d3316Smrg# build environments:
32436e7d3316Smrg#    $build          $host
32446e7d3316Smrg#    mingw (msys)    mingw  [e.g. native]
32456e7d3316Smrg#    cygwin          mingw
32466e7d3316Smrg#    *nix + wine     mingw
32476e7d3316Smrg# where wine is equipped with the `winepath' executable.
32486e7d3316Smrg# In the native mingw case, the (msys) shell automatically
32496e7d3316Smrg# converts paths for any non-msys applications it launches,
32506e7d3316Smrg# but that facility isn't available from inside the cwrapper.
32516e7d3316Smrg# Similar accommodations are necessary for $host mingw and
32526e7d3316Smrg# $build cygwin.  Calling this function does no harm for other
32536e7d3316Smrg# $host/$build combinations not listed above.
32546e7d3316Smrg#
32556e7d3316Smrg# ARG is the path (on $build) that should be converted to
32566e7d3316Smrg# the proper representation for $host. The result is stored
32576e7d3316Smrg# in $func_to_host_path_result.
32586e7d3316Smrgfunc_to_host_path ()
32596e7d3316Smrg{
32606e7d3316Smrg  func_to_host_path_result="$1"
32616e7d3316Smrg  if test -n "$1"; then
32626e7d3316Smrg    case $host in
32636e7d3316Smrg      *mingw* )
32646e7d3316Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
32656e7d3316Smrg        case $build in
32666e7d3316Smrg          *mingw* ) # actually, msys
32676e7d3316Smrg            # awkward: cmd appends spaces to result
32686e7d3316Smrg            func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
32696e7d3316Smrg              $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
32706e7d3316Smrg            ;;
32716e7d3316Smrg          *cygwin* )
32726e7d3316Smrg            func_to_host_path_result=`cygpath -w "$1" |
32736e7d3316Smrg	      $SED -e "$lt_sed_naive_backslashify"`
32746e7d3316Smrg            ;;
32756e7d3316Smrg          * )
32766e7d3316Smrg            # Unfortunately, winepath does not exit with a non-zero
32776e7d3316Smrg            # error code, so we are forced to check the contents of
32786e7d3316Smrg            # stdout. On the other hand, if the command is not
32796e7d3316Smrg            # found, the shell will set an exit code of 127 and print
32806e7d3316Smrg            # *an error message* to stdout. So we must check for both
32816e7d3316Smrg            # error code of zero AND non-empty stdout, which explains
32826e7d3316Smrg            # the odd construction:
32836e7d3316Smrg            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
32846e7d3316Smrg            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
32856e7d3316Smrg              func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
32866e7d3316Smrg                $SED -e "$lt_sed_naive_backslashify"`
32876e7d3316Smrg            else
32886e7d3316Smrg              # Allow warning below.
32896e7d3316Smrg              func_to_host_path_result=
32906e7d3316Smrg            fi
32916e7d3316Smrg            ;;
32926e7d3316Smrg        esac
32936e7d3316Smrg        if test -z "$func_to_host_path_result" ; then
32946e7d3316Smrg          func_error "Could not determine host path corresponding to"
32956e7d3316Smrg          func_error "  \`$1'"
32966e7d3316Smrg          func_error "Continuing, but uninstalled executables may not work."
32976e7d3316Smrg          # Fallback:
32986e7d3316Smrg          func_to_host_path_result="$1"
32996e7d3316Smrg        fi
33006e7d3316Smrg        ;;
33016e7d3316Smrg    esac
33026e7d3316Smrg  fi
33036e7d3316Smrg}
33046e7d3316Smrg# end: func_to_host_path
3305a966c04fSmrg
33066e7d3316Smrg# func_to_host_pathlist arg
33076e7d3316Smrg#
33086e7d3316Smrg# Convert pathlists to host format when used with build tools.
33096e7d3316Smrg# See func_to_host_path(), above. This function supports the
33106e7d3316Smrg# following $build/$host combinations (but does no harm for
33116e7d3316Smrg# combinations not listed here):
33126e7d3316Smrg#    $build          $host
33136e7d3316Smrg#    mingw (msys)    mingw  [e.g. native]
33146e7d3316Smrg#    cygwin          mingw
33156e7d3316Smrg#    *nix + wine     mingw
33166e7d3316Smrg#
33176e7d3316Smrg# Path separators are also converted from $build format to
33186e7d3316Smrg# $host format. If ARG begins or ends with a path separator
33196e7d3316Smrg# character, it is preserved (but converted to $host format)
33206e7d3316Smrg# on output.
33216e7d3316Smrg#
33226e7d3316Smrg# ARG is a pathlist (on $build) that should be converted to
33236e7d3316Smrg# the proper representation on $host. The result is stored
33246e7d3316Smrg# in $func_to_host_pathlist_result.
33256e7d3316Smrgfunc_to_host_pathlist ()
33266e7d3316Smrg{
33276e7d3316Smrg  func_to_host_pathlist_result="$1"
33286e7d3316Smrg  if test -n "$1"; then
33296e7d3316Smrg    case $host in
33306e7d3316Smrg      *mingw* )
33316e7d3316Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
33326e7d3316Smrg        # Remove leading and trailing path separator characters from
33336e7d3316Smrg        # ARG. msys behavior is inconsistent here, cygpath turns them
33346e7d3316Smrg        # into '.;' and ';.', and winepath ignores them completely.
33356e7d3316Smrg	func_stripname : : "$1"
33366e7d3316Smrg        func_to_host_pathlist_tmp1=$func_stripname_result
33376e7d3316Smrg        case $build in
33386e7d3316Smrg          *mingw* ) # Actually, msys.
33396e7d3316Smrg            # Awkward: cmd appends spaces to result.
33406e7d3316Smrg            func_to_host_pathlist_result=`
33416e7d3316Smrg	      ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
33426e7d3316Smrg	      $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
33436e7d3316Smrg            ;;
33446e7d3316Smrg          *cygwin* )
33456e7d3316Smrg            func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
33466e7d3316Smrg              $SED -e "$lt_sed_naive_backslashify"`
33476e7d3316Smrg            ;;
33486e7d3316Smrg          * )
33496e7d3316Smrg            # unfortunately, winepath doesn't convert pathlists
33506e7d3316Smrg            func_to_host_pathlist_result=""
33516e7d3316Smrg            func_to_host_pathlist_oldIFS=$IFS
33526e7d3316Smrg            IFS=:
33536e7d3316Smrg            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
33546e7d3316Smrg              IFS=$func_to_host_pathlist_oldIFS
33556e7d3316Smrg              if test -n "$func_to_host_pathlist_f" ; then
33566e7d3316Smrg                func_to_host_path "$func_to_host_pathlist_f"
33576e7d3316Smrg                if test -n "$func_to_host_path_result" ; then
33586e7d3316Smrg                  if test -z "$func_to_host_pathlist_result" ; then
33596e7d3316Smrg                    func_to_host_pathlist_result="$func_to_host_path_result"
33606e7d3316Smrg                  else
33616e7d3316Smrg                    func_append func_to_host_pathlist_result ";$func_to_host_path_result"
33626e7d3316Smrg                  fi
33636e7d3316Smrg                fi
33646e7d3316Smrg              fi
33656e7d3316Smrg            done
33666e7d3316Smrg            IFS=$func_to_host_pathlist_oldIFS
33676e7d3316Smrg            ;;
33686e7d3316Smrg        esac
33696e7d3316Smrg        if test -z "$func_to_host_pathlist_result"; then
33706e7d3316Smrg          func_error "Could not determine the host path(s) corresponding to"
33716e7d3316Smrg          func_error "  \`$1'"
33726e7d3316Smrg          func_error "Continuing, but uninstalled executables may not work."
33736e7d3316Smrg          # Fallback. This may break if $1 contains DOS-style drive
33746e7d3316Smrg          # specifications. The fix is not to complicate the expression
33756e7d3316Smrg          # below, but for the user to provide a working wine installation
33766e7d3316Smrg          # with winepath so that path translation in the cross-to-mingw
33776e7d3316Smrg          # case works properly.
33786e7d3316Smrg          lt_replace_pathsep_nix_to_dos="s|:|;|g"
33796e7d3316Smrg          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
33806e7d3316Smrg            $SED -e "$lt_replace_pathsep_nix_to_dos"`
33816e7d3316Smrg        fi
33826e7d3316Smrg        # Now, add the leading and trailing path separators back
33836e7d3316Smrg        case "$1" in
33846e7d3316Smrg          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
33856e7d3316Smrg            ;;
33866e7d3316Smrg        esac
33876e7d3316Smrg        case "$1" in
33886e7d3316Smrg          *: ) func_append func_to_host_pathlist_result ";"
33896e7d3316Smrg            ;;
33906e7d3316Smrg        esac
33916e7d3316Smrg        ;;
33926e7d3316Smrg    esac
33936e7d3316Smrg  fi
33946e7d3316Smrg}
33956e7d3316Smrg# end: func_to_host_pathlist
3396a966c04fSmrg
33976e7d3316Smrg# func_emit_cwrapperexe_src
33986e7d3316Smrg# emit the source code for a wrapper executable on stdout
33996e7d3316Smrg# Must ONLY be called from within func_mode_link because
34006e7d3316Smrg# it depends on a number of variable set therein.
34016e7d3316Smrgfunc_emit_cwrapperexe_src ()
34026e7d3316Smrg{
34036e7d3316Smrg	cat <<EOF
3404a966c04fSmrg
34056e7d3316Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
34066e7d3316Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3407a966c04fSmrg
34086e7d3316Smrg   The $output program cannot be directly executed until all the libtool
34096e7d3316Smrg   libraries that it depends on are installed.
3410a966c04fSmrg
34116e7d3316Smrg   This wrapper executable should never be moved out of the build directory.
34126e7d3316Smrg   If it is, it will not operate correctly.
34136e7d3316Smrg*/
34146e7d3316SmrgEOF
34156e7d3316Smrg	    cat <<"EOF"
34166e7d3316Smrg#ifdef _MSC_VER
34176e7d3316Smrg# define _CRT_SECURE_NO_DEPRECATE 1
34186e7d3316Smrg#endif
34196e7d3316Smrg#include <stdio.h>
34206e7d3316Smrg#include <stdlib.h>
34216e7d3316Smrg#ifdef _MSC_VER
34226e7d3316Smrg# include <direct.h>
34236e7d3316Smrg# include <process.h>
34246e7d3316Smrg# include <io.h>
34256e7d3316Smrg#else
34266e7d3316Smrg# include <unistd.h>
34276e7d3316Smrg# include <stdint.h>
34286e7d3316Smrg# ifdef __CYGWIN__
34296e7d3316Smrg#  include <io.h>
34306e7d3316Smrg# endif
34316e7d3316Smrg#endif
34326e7d3316Smrg#include <malloc.h>
34336e7d3316Smrg#include <stdarg.h>
34346e7d3316Smrg#include <assert.h>
34356e7d3316Smrg#include <string.h>
34366e7d3316Smrg#include <ctype.h>
34376e7d3316Smrg#include <errno.h>
34386e7d3316Smrg#include <fcntl.h>
34396e7d3316Smrg#include <sys/stat.h>
3440a966c04fSmrg
34416e7d3316Smrg/* declarations of non-ANSI functions */
34426e7d3316Smrg#if defined(__MINGW32__)
34436e7d3316Smrg# ifdef __STRICT_ANSI__
34446e7d3316Smrgint _putenv (const char *);
34456e7d3316Smrg# endif
34466e7d3316Smrg#elif defined(__CYGWIN__)
34476e7d3316Smrg# ifdef __STRICT_ANSI__
34486e7d3316Smrgchar *realpath (const char *, char *);
34496e7d3316Smrgint putenv (char *);
34506e7d3316Smrgint setenv (const char *, const char *, int);
34516e7d3316Smrg# endif
34526e7d3316Smrg/* #elif defined (other platforms) ... */
34536e7d3316Smrg#endif
3454a966c04fSmrg
34556e7d3316Smrg/* portability defines, excluding path handling macros */
34566e7d3316Smrg#if defined(_MSC_VER)
34576e7d3316Smrg# define setmode _setmode
34586e7d3316Smrg# define stat    _stat
34596e7d3316Smrg# define chmod   _chmod
34606e7d3316Smrg# define getcwd  _getcwd
34616e7d3316Smrg# define putenv  _putenv
34626e7d3316Smrg# define S_IXUSR _S_IEXEC
34636e7d3316Smrg# ifndef _INTPTR_T_DEFINED
34646e7d3316Smrg#  define _INTPTR_T_DEFINED
34656e7d3316Smrg#  define intptr_t int
34666e7d3316Smrg# endif
34676e7d3316Smrg#elif defined(__MINGW32__)
34686e7d3316Smrg# define setmode _setmode
34696e7d3316Smrg# define stat    _stat
34706e7d3316Smrg# define chmod   _chmod
34716e7d3316Smrg# define getcwd  _getcwd
34726e7d3316Smrg# define putenv  _putenv
34736e7d3316Smrg#elif defined(__CYGWIN__)
34746e7d3316Smrg# define HAVE_SETENV
34756e7d3316Smrg# define FOPEN_WB "wb"
34766e7d3316Smrg/* #elif defined (other platforms) ... */
34776e7d3316Smrg#endif
3478a966c04fSmrg
34796e7d3316Smrg#if defined(PATH_MAX)
34806e7d3316Smrg# define LT_PATHMAX PATH_MAX
34816e7d3316Smrg#elif defined(MAXPATHLEN)
34826e7d3316Smrg# define LT_PATHMAX MAXPATHLEN
34836e7d3316Smrg#else
34846e7d3316Smrg# define LT_PATHMAX 1024
34856e7d3316Smrg#endif
3486a966c04fSmrg
34876e7d3316Smrg#ifndef S_IXOTH
34886e7d3316Smrg# define S_IXOTH 0
34896e7d3316Smrg#endif
34906e7d3316Smrg#ifndef S_IXGRP
34916e7d3316Smrg# define S_IXGRP 0
34926e7d3316Smrg#endif
3493a966c04fSmrg
34946e7d3316Smrg/* path handling portability macros */
34956e7d3316Smrg#ifndef DIR_SEPARATOR
34966e7d3316Smrg# define DIR_SEPARATOR '/'
34976e7d3316Smrg# define PATH_SEPARATOR ':'
34986e7d3316Smrg#endif
3499a966c04fSmrg
35006e7d3316Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
35016e7d3316Smrg  defined (__OS2__)
35026e7d3316Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
35036e7d3316Smrg# define FOPEN_WB "wb"
35046e7d3316Smrg# ifndef DIR_SEPARATOR_2
35056e7d3316Smrg#  define DIR_SEPARATOR_2 '\\'
35066e7d3316Smrg# endif
35076e7d3316Smrg# ifndef PATH_SEPARATOR_2
35086e7d3316Smrg#  define PATH_SEPARATOR_2 ';'
35096e7d3316Smrg# endif
35106e7d3316Smrg#endif
3511a966c04fSmrg
35126e7d3316Smrg#ifndef DIR_SEPARATOR_2
35136e7d3316Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
35146e7d3316Smrg#else /* DIR_SEPARATOR_2 */
35156e7d3316Smrg# define IS_DIR_SEPARATOR(ch) \
35166e7d3316Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
35176e7d3316Smrg#endif /* DIR_SEPARATOR_2 */
3518a966c04fSmrg
35196e7d3316Smrg#ifndef PATH_SEPARATOR_2
35206e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
35216e7d3316Smrg#else /* PATH_SEPARATOR_2 */
35226e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
35236e7d3316Smrg#endif /* PATH_SEPARATOR_2 */
35246e7d3316Smrg
35256e7d3316Smrg#ifndef FOPEN_WB
35266e7d3316Smrg# define FOPEN_WB "w"
35276e7d3316Smrg#endif
35286e7d3316Smrg#ifndef _O_BINARY
35296e7d3316Smrg# define _O_BINARY 0
35306e7d3316Smrg#endif
35316e7d3316Smrg
35326e7d3316Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
35336e7d3316Smrg#define XFREE(stale) do { \
35346e7d3316Smrg  if (stale) { free ((void *) stale); stale = 0; } \
35356e7d3316Smrg} while (0)
35366e7d3316Smrg
35376e7d3316Smrg#if defined(LT_DEBUGWRAPPER)
35386e7d3316Smrgstatic int lt_debug = 1;
35396e7d3316Smrg#else
35406e7d3316Smrgstatic int lt_debug = 0;
35416e7d3316Smrg#endif
35426e7d3316Smrg
35436e7d3316Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
35446e7d3316Smrg
35456e7d3316Smrgvoid *xmalloc (size_t num);
35466e7d3316Smrgchar *xstrdup (const char *string);
35476e7d3316Smrgconst char *base_name (const char *name);
35486e7d3316Smrgchar *find_executable (const char *wrapper);
35496e7d3316Smrgchar *chase_symlinks (const char *pathspec);
35506e7d3316Smrgint make_executable (const char *path);
35516e7d3316Smrgint check_executable (const char *path);
35526e7d3316Smrgchar *strendzap (char *str, const char *pat);
35536e7d3316Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
35546e7d3316Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
35556e7d3316Smrgstatic const char *nonnull (const char *s);
35566e7d3316Smrgstatic const char *nonempty (const char *s);
35576e7d3316Smrgvoid lt_setenv (const char *name, const char *value);
35586e7d3316Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
35596e7d3316Smrgvoid lt_update_exe_path (const char *name, const char *value);
35606e7d3316Smrgvoid lt_update_lib_path (const char *name, const char *value);
35616e7d3316Smrgchar **prepare_spawn (char **argv);
35626e7d3316Smrgvoid lt_dump_script (FILE *f);
35636e7d3316SmrgEOF
35646e7d3316Smrg
35656e7d3316Smrg	    cat <<EOF
35666e7d3316Smrgconst char * MAGIC_EXE = "$magic_exe";
35676e7d3316Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
35686e7d3316SmrgEOF
35696e7d3316Smrg
35706e7d3316Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
35716e7d3316Smrg              func_to_host_pathlist "$temp_rpath"
35726e7d3316Smrg	      cat <<EOF
35736e7d3316Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
3574a966c04fSmrgEOF
3575a966c04fSmrg	    else
35766e7d3316Smrg	      cat <<"EOF"
35776e7d3316Smrgconst char * LIB_PATH_VALUE   = "";
35786e7d3316SmrgEOF
3579a966c04fSmrg	    fi
35806e7d3316Smrg
35816e7d3316Smrg	    if test -n "$dllsearchpath"; then
35826e7d3316Smrg              func_to_host_pathlist "$dllsearchpath:"
35836e7d3316Smrg	      cat <<EOF
35846e7d3316Smrgconst char * EXE_PATH_VARNAME = "PATH";
35856e7d3316Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
35866e7d3316SmrgEOF
3587a966c04fSmrg	    else
35886e7d3316Smrg	      cat <<"EOF"
35896e7d3316Smrgconst char * EXE_PATH_VARNAME = "";
35906e7d3316Smrgconst char * EXE_PATH_VALUE   = "";
35916e7d3316SmrgEOF
3592a966c04fSmrg	    fi
35936e7d3316Smrg
35946e7d3316Smrg	    if test "$fast_install" = yes; then
35956e7d3316Smrg	      cat <<EOF
35966e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
35976e7d3316SmrgEOF
3598a966c04fSmrg	    else
35996e7d3316Smrg	      cat <<EOF
36006e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
36016e7d3316SmrgEOF
3602a966c04fSmrg	    fi
3603a966c04fSmrg
3604a966c04fSmrg
36056e7d3316Smrg	    cat <<"EOF"
3606a966c04fSmrg
36076e7d3316Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
3608a966c04fSmrg
36096e7d3316Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
36106e7d3316Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
36116e7d3316Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
3612a966c04fSmrg
36136e7d3316Smrgint
36146e7d3316Smrgmain (int argc, char *argv[])
36156e7d3316Smrg{
36166e7d3316Smrg  char **newargz;
36176e7d3316Smrg  int  newargc;
36186e7d3316Smrg  char *tmp_pathspec;
36196e7d3316Smrg  char *actual_cwrapper_path;
36206e7d3316Smrg  char *actual_cwrapper_name;
36216e7d3316Smrg  char *target_name;
36226e7d3316Smrg  char *lt_argv_zero;
36236e7d3316Smrg  intptr_t rval = 127;
3624a966c04fSmrg
36256e7d3316Smrg  int i;
3626a966c04fSmrg
36276e7d3316Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
36286e7d3316Smrg  newargz = XMALLOC (char *, argc + 1);
3629a966c04fSmrg
36306e7d3316Smrg  /* very simple arg parsing; don't want to rely on getopt
36316e7d3316Smrg   * also, copy all non cwrapper options to newargz, except
36326e7d3316Smrg   * argz[0], which is handled differently
36336e7d3316Smrg   */
36346e7d3316Smrg  newargc=0;
36356e7d3316Smrg  for (i = 1; i < argc; i++)
36366e7d3316Smrg    {
36376e7d3316Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
36386e7d3316Smrg	{
36396e7d3316SmrgEOF
36406e7d3316Smrg	    case "$host" in
36416e7d3316Smrg	      *mingw* | *cygwin* )
36426e7d3316Smrg		# make stdout use "unix" line endings
36436e7d3316Smrg		echo "          setmode(1,_O_BINARY);"
36446e7d3316Smrg		;;
36452e2dd055Smrg	      esac
3646a966c04fSmrg
36476e7d3316Smrg	    cat <<"EOF"
36486e7d3316Smrg	  lt_dump_script (stdout);
36496e7d3316Smrg	  return 0;
36506e7d3316Smrg	}
36516e7d3316Smrg      if (strcmp (argv[i], debug_opt) == 0)
36526e7d3316Smrg	{
36536e7d3316Smrg          lt_debug = 1;
36546e7d3316Smrg          continue;
36556e7d3316Smrg	}
36566e7d3316Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
36576e7d3316Smrg        {
36586e7d3316Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
36596e7d3316Smrg             namespace, but it is not one of the ones we know about and
36606e7d3316Smrg             have already dealt with, above (inluding dump-script), then
36616e7d3316Smrg             report an error. Otherwise, targets might begin to believe
36626e7d3316Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
36636e7d3316Smrg             namespace. The first time any user complains about this, we'll
36646e7d3316Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
36656e7d3316Smrg             or a configure.ac-settable value.
36666e7d3316Smrg           */
36676e7d3316Smrg          lt_fatal (__FILE__, __LINE__,
36686e7d3316Smrg		    "unrecognized %s option: '%s'",
36696e7d3316Smrg                    ltwrapper_option_prefix, argv[i]);
36706e7d3316Smrg        }
36716e7d3316Smrg      /* otherwise ... */
36726e7d3316Smrg      newargz[++newargc] = xstrdup (argv[i]);
36736e7d3316Smrg    }
36746e7d3316Smrg  newargz[++newargc] = NULL;
3675a966c04fSmrg
36766e7d3316SmrgEOF
36776e7d3316Smrg	    cat <<EOF
36786e7d3316Smrg  /* The GNU banner must be the first non-error debug message */
36796e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
36806e7d3316SmrgEOF
36816e7d3316Smrg	    cat <<"EOF"
36826e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
36836e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
36846e7d3316Smrg
36856e7d3316Smrg  tmp_pathspec = find_executable (argv[0]);
36866e7d3316Smrg  if (tmp_pathspec == NULL)
36876e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
36886e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
36896e7d3316Smrg                  "(main) found exe (before symlink chase) at: %s\n",
36906e7d3316Smrg		  tmp_pathspec);
36916e7d3316Smrg
36926e7d3316Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
36936e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
36946e7d3316Smrg                  "(main) found exe (after symlink chase) at: %s\n",
36956e7d3316Smrg		  actual_cwrapper_path);
36966e7d3316Smrg  XFREE (tmp_pathspec);
36976e7d3316Smrg
36986e7d3316Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
36996e7d3316Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
37006e7d3316Smrg
37016e7d3316Smrg  /* wrapper name transforms */
37026e7d3316Smrg  strendzap (actual_cwrapper_name, ".exe");
37036e7d3316Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
37046e7d3316Smrg  XFREE (actual_cwrapper_name);
37056e7d3316Smrg  actual_cwrapper_name = tmp_pathspec;
37066e7d3316Smrg  tmp_pathspec = 0;
37076e7d3316Smrg
37086e7d3316Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
37096e7d3316Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
37106e7d3316Smrg  strendzap (target_name, ".exe");
37116e7d3316Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
37126e7d3316Smrg  XFREE (target_name);
37136e7d3316Smrg  target_name = tmp_pathspec;
37146e7d3316Smrg  tmp_pathspec = 0;
37156e7d3316Smrg
37166e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
37176e7d3316Smrg		  "(main) libtool target name: %s\n",
37186e7d3316Smrg		  target_name);
37196e7d3316SmrgEOF
3720a966c04fSmrg
37216e7d3316Smrg	    cat <<EOF
37226e7d3316Smrg  newargz[0] =
37236e7d3316Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
37246e7d3316Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
37256e7d3316Smrg  strcpy (newargz[0], actual_cwrapper_path);
37266e7d3316Smrg  strcat (newargz[0], "$objdir");
37276e7d3316Smrg  strcat (newargz[0], "/");
37286e7d3316SmrgEOF
3729a966c04fSmrg
37306e7d3316Smrg	    cat <<"EOF"
37316e7d3316Smrg  /* stop here, and copy so we don't have to do this twice */
37326e7d3316Smrg  tmp_pathspec = xstrdup (newargz[0]);
3733a966c04fSmrg
37346e7d3316Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
37356e7d3316Smrg  strcat (newargz[0], actual_cwrapper_name);
3736a966c04fSmrg
37376e7d3316Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
37386e7d3316Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
37396e7d3316Smrg  XFREE (tmp_pathspec);
37406e7d3316Smrg  tmp_pathspec = NULL;
37416e7d3316SmrgEOF
3742a966c04fSmrg
37436e7d3316Smrg	    case $host_os in
37446e7d3316Smrg	      mingw*)
37456e7d3316Smrg	    cat <<"EOF"
37466e7d3316Smrg  {
37476e7d3316Smrg    char* p;
37486e7d3316Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
37496e7d3316Smrg      {
37506e7d3316Smrg	*p = '/';
37516e7d3316Smrg      }
37526e7d3316Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
37536e7d3316Smrg      {
37546e7d3316Smrg	*p = '/';
37556e7d3316Smrg      }
37566e7d3316Smrg  }
37576e7d3316SmrgEOF
37586e7d3316Smrg	    ;;
37596e7d3316Smrg	    esac
3760a966c04fSmrg
37616e7d3316Smrg	    cat <<"EOF"
37626e7d3316Smrg  XFREE (target_name);
37636e7d3316Smrg  XFREE (actual_cwrapper_path);
37646e7d3316Smrg  XFREE (actual_cwrapper_name);
3765a966c04fSmrg
37666e7d3316Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
37676e7d3316Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
37686e7d3316Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
37696e7d3316Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
3770a966c04fSmrg
37716e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
37726e7d3316Smrg		  nonnull (lt_argv_zero));
37736e7d3316Smrg  for (i = 0; i < newargc; i++)
37746e7d3316Smrg    {
37756e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
37766e7d3316Smrg		      i, nonnull (newargz[i]));
37776e7d3316Smrg    }
3778a966c04fSmrg
37796e7d3316SmrgEOF
3780a966c04fSmrg
37816e7d3316Smrg	    case $host_os in
37826e7d3316Smrg	      mingw*)
37836e7d3316Smrg		cat <<"EOF"
37846e7d3316Smrg  /* execv doesn't actually work on mingw as expected on unix */
37856e7d3316Smrg  newargz = prepare_spawn (newargz);
37866e7d3316Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
37876e7d3316Smrg  if (rval == -1)
37886e7d3316Smrg    {
37896e7d3316Smrg      /* failed to start process */
37906e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__,
37916e7d3316Smrg		      "(main) failed to launch target \"%s\": %s\n",
37926e7d3316Smrg		      lt_argv_zero, nonnull (strerror (errno)));
37936e7d3316Smrg      return 127;
37946e7d3316Smrg    }
37956e7d3316Smrg  return rval;
37966e7d3316SmrgEOF
37976e7d3316Smrg		;;
37986e7d3316Smrg	      *)
37996e7d3316Smrg		cat <<"EOF"
38006e7d3316Smrg  execv (lt_argv_zero, newargz);
38016e7d3316Smrg  return rval; /* =127, but avoids unused variable warning */
38026e7d3316SmrgEOF
38036e7d3316Smrg		;;
38046e7d3316Smrg	    esac
3805a966c04fSmrg
38066e7d3316Smrg	    cat <<"EOF"
38076e7d3316Smrg}
3808a966c04fSmrg
38096e7d3316Smrgvoid *
38106e7d3316Smrgxmalloc (size_t num)
38116e7d3316Smrg{
38126e7d3316Smrg  void *p = (void *) malloc (num);
38136e7d3316Smrg  if (!p)
38146e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
3815a966c04fSmrg
38166e7d3316Smrg  return p;
38176e7d3316Smrg}
3818a966c04fSmrg
38196e7d3316Smrgchar *
38206e7d3316Smrgxstrdup (const char *string)
38216e7d3316Smrg{
38226e7d3316Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
38236e7d3316Smrg			  string) : NULL;
38246e7d3316Smrg}
3825a966c04fSmrg
38266e7d3316Smrgconst char *
38276e7d3316Smrgbase_name (const char *name)
38286e7d3316Smrg{
38296e7d3316Smrg  const char *base;
3830a966c04fSmrg
38316e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
38326e7d3316Smrg  /* Skip over the disk name in MSDOS pathnames. */
38336e7d3316Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
38346e7d3316Smrg    name += 2;
38356e7d3316Smrg#endif
3836a966c04fSmrg
38376e7d3316Smrg  for (base = name; *name; name++)
38386e7d3316Smrg    if (IS_DIR_SEPARATOR (*name))
38396e7d3316Smrg      base = name + 1;
38406e7d3316Smrg  return base;
38416e7d3316Smrg}
3842a966c04fSmrg
38436e7d3316Smrgint
38446e7d3316Smrgcheck_executable (const char *path)
38456e7d3316Smrg{
38466e7d3316Smrg  struct stat st;
3847a966c04fSmrg
38486e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
38496e7d3316Smrg                  nonempty (path));
38506e7d3316Smrg  if ((!path) || (!*path))
38516e7d3316Smrg    return 0;
3852a966c04fSmrg
38536e7d3316Smrg  if ((stat (path, &st) >= 0)
38546e7d3316Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
38556e7d3316Smrg    return 1;
38566e7d3316Smrg  else
38576e7d3316Smrg    return 0;
38586e7d3316Smrg}
3859a966c04fSmrg
38606e7d3316Smrgint
38616e7d3316Smrgmake_executable (const char *path)
38626e7d3316Smrg{
38636e7d3316Smrg  int rval = 0;
38646e7d3316Smrg  struct stat st;
3865a966c04fSmrg
38666e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
38676e7d3316Smrg                  nonempty (path));
38686e7d3316Smrg  if ((!path) || (!*path))
38696e7d3316Smrg    return 0;
3870a966c04fSmrg
38716e7d3316Smrg  if (stat (path, &st) >= 0)
38726e7d3316Smrg    {
38736e7d3316Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
38746e7d3316Smrg    }
38756e7d3316Smrg  return rval;
38766e7d3316Smrg}
3877a966c04fSmrg
38786e7d3316Smrg/* Searches for the full path of the wrapper.  Returns
38796e7d3316Smrg   newly allocated full path name if found, NULL otherwise
38806e7d3316Smrg   Does not chase symlinks, even on platforms that support them.
38816e7d3316Smrg*/
38826e7d3316Smrgchar *
38836e7d3316Smrgfind_executable (const char *wrapper)
38846e7d3316Smrg{
38856e7d3316Smrg  int has_slash = 0;
38866e7d3316Smrg  const char *p;
38876e7d3316Smrg  const char *p_next;
38886e7d3316Smrg  /* static buffer for getcwd */
38896e7d3316Smrg  char tmp[LT_PATHMAX + 1];
38906e7d3316Smrg  int tmp_len;
38916e7d3316Smrg  char *concat_name;
3892a966c04fSmrg
38936e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
38946e7d3316Smrg                  nonempty (wrapper));
3895a966c04fSmrg
38966e7d3316Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
38976e7d3316Smrg    return NULL;
3898a966c04fSmrg
38996e7d3316Smrg  /* Absolute path? */
39006e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
39016e7d3316Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
39026e7d3316Smrg    {
39036e7d3316Smrg      concat_name = xstrdup (wrapper);
39046e7d3316Smrg      if (check_executable (concat_name))
39056e7d3316Smrg	return concat_name;
39066e7d3316Smrg      XFREE (concat_name);
39076e7d3316Smrg    }
39086e7d3316Smrg  else
39096e7d3316Smrg    {
39106e7d3316Smrg#endif
39116e7d3316Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
39126e7d3316Smrg	{
39136e7d3316Smrg	  concat_name = xstrdup (wrapper);
39146e7d3316Smrg	  if (check_executable (concat_name))
39156e7d3316Smrg	    return concat_name;
39166e7d3316Smrg	  XFREE (concat_name);
39176e7d3316Smrg	}
39186e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
39196e7d3316Smrg    }
39206e7d3316Smrg#endif
3921a966c04fSmrg
39226e7d3316Smrg  for (p = wrapper; *p; p++)
39236e7d3316Smrg    if (*p == '/')
39246e7d3316Smrg      {
39256e7d3316Smrg	has_slash = 1;
39266e7d3316Smrg	break;
39276e7d3316Smrg      }
39286e7d3316Smrg  if (!has_slash)
39296e7d3316Smrg    {
39306e7d3316Smrg      /* no slashes; search PATH */
39316e7d3316Smrg      const char *path = getenv ("PATH");
39326e7d3316Smrg      if (path != NULL)
39336e7d3316Smrg	{
39346e7d3316Smrg	  for (p = path; *p; p = p_next)
39356e7d3316Smrg	    {
39366e7d3316Smrg	      const char *q;
39376e7d3316Smrg	      size_t p_len;
39386e7d3316Smrg	      for (q = p; *q; q++)
39396e7d3316Smrg		if (IS_PATH_SEPARATOR (*q))
39406e7d3316Smrg		  break;
39416e7d3316Smrg	      p_len = q - p;
39426e7d3316Smrg	      p_next = (*q == '\0' ? q : q + 1);
39436e7d3316Smrg	      if (p_len == 0)
39446e7d3316Smrg		{
39456e7d3316Smrg		  /* empty path: current directory */
39466e7d3316Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
39476e7d3316Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
39486e7d3316Smrg                              nonnull (strerror (errno)));
39496e7d3316Smrg		  tmp_len = strlen (tmp);
39506e7d3316Smrg		  concat_name =
39516e7d3316Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
39526e7d3316Smrg		  memcpy (concat_name, tmp, tmp_len);
39536e7d3316Smrg		  concat_name[tmp_len] = '/';
39546e7d3316Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
39556e7d3316Smrg		}
39566e7d3316Smrg	      else
39576e7d3316Smrg		{
39586e7d3316Smrg		  concat_name =
39596e7d3316Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
39606e7d3316Smrg		  memcpy (concat_name, p, p_len);
39616e7d3316Smrg		  concat_name[p_len] = '/';
39626e7d3316Smrg		  strcpy (concat_name + p_len + 1, wrapper);
39636e7d3316Smrg		}
39646e7d3316Smrg	      if (check_executable (concat_name))
39656e7d3316Smrg		return concat_name;
39666e7d3316Smrg	      XFREE (concat_name);
39676e7d3316Smrg	    }
39686e7d3316Smrg	}
39696e7d3316Smrg      /* not found in PATH; assume curdir */
39706e7d3316Smrg    }
39716e7d3316Smrg  /* Relative path | not found in path: prepend cwd */
39726e7d3316Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
39736e7d3316Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
39746e7d3316Smrg              nonnull (strerror (errno)));
39756e7d3316Smrg  tmp_len = strlen (tmp);
39766e7d3316Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
39776e7d3316Smrg  memcpy (concat_name, tmp, tmp_len);
39786e7d3316Smrg  concat_name[tmp_len] = '/';
39796e7d3316Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
3980a966c04fSmrg
39816e7d3316Smrg  if (check_executable (concat_name))
39826e7d3316Smrg    return concat_name;
39836e7d3316Smrg  XFREE (concat_name);
39846e7d3316Smrg  return NULL;
39856e7d3316Smrg}
3986a966c04fSmrg
39876e7d3316Smrgchar *
39886e7d3316Smrgchase_symlinks (const char *pathspec)
39896e7d3316Smrg{
39906e7d3316Smrg#ifndef S_ISLNK
39916e7d3316Smrg  return xstrdup (pathspec);
39926e7d3316Smrg#else
39936e7d3316Smrg  char buf[LT_PATHMAX];
39946e7d3316Smrg  struct stat s;
39956e7d3316Smrg  char *tmp_pathspec = xstrdup (pathspec);
39966e7d3316Smrg  char *p;
39976e7d3316Smrg  int has_symlinks = 0;
39986e7d3316Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
39996e7d3316Smrg    {
40006e7d3316Smrg      lt_debugprintf (__FILE__, __LINE__,
40016e7d3316Smrg		      "checking path component for symlinks: %s\n",
40026e7d3316Smrg		      tmp_pathspec);
40036e7d3316Smrg      if (lstat (tmp_pathspec, &s) == 0)
40046e7d3316Smrg	{
40056e7d3316Smrg	  if (S_ISLNK (s.st_mode) != 0)
40066e7d3316Smrg	    {
40076e7d3316Smrg	      has_symlinks = 1;
40086e7d3316Smrg	      break;
40096e7d3316Smrg	    }
4010a966c04fSmrg
40116e7d3316Smrg	  /* search backwards for last DIR_SEPARATOR */
40126e7d3316Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
40136e7d3316Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
40146e7d3316Smrg	    p--;
40156e7d3316Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
40166e7d3316Smrg	    {
40176e7d3316Smrg	      /* no more DIR_SEPARATORS left */
40186e7d3316Smrg	      break;
40196e7d3316Smrg	    }
40206e7d3316Smrg	  *p = '\0';
40216e7d3316Smrg	}
40226e7d3316Smrg      else
40236e7d3316Smrg	{
40246e7d3316Smrg	  lt_fatal (__FILE__, __LINE__,
40256e7d3316Smrg		    "error accessing file \"%s\": %s",
40266e7d3316Smrg		    tmp_pathspec, nonnull (strerror (errno)));
40276e7d3316Smrg	}
40286e7d3316Smrg    }
40296e7d3316Smrg  XFREE (tmp_pathspec);
4030a966c04fSmrg
40316e7d3316Smrg  if (!has_symlinks)
40326e7d3316Smrg    {
40336e7d3316Smrg      return xstrdup (pathspec);
40346e7d3316Smrg    }
4035a966c04fSmrg
40366e7d3316Smrg  tmp_pathspec = realpath (pathspec, buf);
40376e7d3316Smrg  if (tmp_pathspec == 0)
40386e7d3316Smrg    {
40396e7d3316Smrg      lt_fatal (__FILE__, __LINE__,
40406e7d3316Smrg		"could not follow symlinks for %s", pathspec);
40416e7d3316Smrg    }
40426e7d3316Smrg  return xstrdup (tmp_pathspec);
40436e7d3316Smrg#endif
40446e7d3316Smrg}
4045a966c04fSmrg
40466e7d3316Smrgchar *
40476e7d3316Smrgstrendzap (char *str, const char *pat)
40486e7d3316Smrg{
40496e7d3316Smrg  size_t len, patlen;
4050a966c04fSmrg
40516e7d3316Smrg  assert (str != NULL);
40526e7d3316Smrg  assert (pat != NULL);
4053a966c04fSmrg
40546e7d3316Smrg  len = strlen (str);
40556e7d3316Smrg  patlen = strlen (pat);
4056a966c04fSmrg
40576e7d3316Smrg  if (patlen <= len)
40586e7d3316Smrg    {
40596e7d3316Smrg      str += len - patlen;
40606e7d3316Smrg      if (strcmp (str, pat) == 0)
40616e7d3316Smrg	*str = '\0';
40626e7d3316Smrg    }
40636e7d3316Smrg  return str;
40646e7d3316Smrg}
4065a966c04fSmrg
40666e7d3316Smrgvoid
40676e7d3316Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
40686e7d3316Smrg{
40696e7d3316Smrg  va_list args;
40706e7d3316Smrg  if (lt_debug)
40716e7d3316Smrg    {
40726e7d3316Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
40736e7d3316Smrg      va_start (args, fmt);
40746e7d3316Smrg      (void) vfprintf (stderr, fmt, args);
40756e7d3316Smrg      va_end (args);
40766e7d3316Smrg    }
40776e7d3316Smrg}
4078a966c04fSmrg
40796e7d3316Smrgstatic void
40806e7d3316Smrglt_error_core (int exit_status, const char *file,
40816e7d3316Smrg	       int line, const char *mode,
40826e7d3316Smrg	       const char *message, va_list ap)
40836e7d3316Smrg{
40846e7d3316Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
40856e7d3316Smrg  vfprintf (stderr, message, ap);
40866e7d3316Smrg  fprintf (stderr, ".\n");
4087a966c04fSmrg
40886e7d3316Smrg  if (exit_status >= 0)
40896e7d3316Smrg    exit (exit_status);
40906e7d3316Smrg}
4091a966c04fSmrg
40926e7d3316Smrgvoid
40936e7d3316Smrglt_fatal (const char *file, int line, const char *message, ...)
40946e7d3316Smrg{
40956e7d3316Smrg  va_list ap;
40966e7d3316Smrg  va_start (ap, message);
40976e7d3316Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
40986e7d3316Smrg  va_end (ap);
40996e7d3316Smrg}
4100a966c04fSmrg
41016e7d3316Smrgstatic const char *
41026e7d3316Smrgnonnull (const char *s)
41036e7d3316Smrg{
41046e7d3316Smrg  return s ? s : "(null)";
41056e7d3316Smrg}
4106a966c04fSmrg
41076e7d3316Smrgstatic const char *
41086e7d3316Smrgnonempty (const char *s)
41096e7d3316Smrg{
41106e7d3316Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
41116e7d3316Smrg}
4112a966c04fSmrg
41136e7d3316Smrgvoid
41146e7d3316Smrglt_setenv (const char *name, const char *value)
41156e7d3316Smrg{
41166e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
41176e7d3316Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
41186e7d3316Smrg                  nonnull (name), nonnull (value));
41196e7d3316Smrg  {
41206e7d3316Smrg#ifdef HAVE_SETENV
41216e7d3316Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
41226e7d3316Smrg    char *str = xstrdup (value);
41236e7d3316Smrg    setenv (name, str, 1);
41246e7d3316Smrg#else
41256e7d3316Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
41266e7d3316Smrg    char *str = XMALLOC (char, len);
41276e7d3316Smrg    sprintf (str, "%s=%s", name, value);
41286e7d3316Smrg    if (putenv (str) != EXIT_SUCCESS)
41296e7d3316Smrg      {
41306e7d3316Smrg        XFREE (str);
41316e7d3316Smrg      }
41326e7d3316Smrg#endif
41336e7d3316Smrg  }
41346e7d3316Smrg}
4135a966c04fSmrg
41366e7d3316Smrgchar *
41376e7d3316Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
41386e7d3316Smrg{
41396e7d3316Smrg  char *new_value;
41406e7d3316Smrg  if (orig_value && *orig_value)
41416e7d3316Smrg    {
41426e7d3316Smrg      int orig_value_len = strlen (orig_value);
41436e7d3316Smrg      int add_len = strlen (add);
41446e7d3316Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
41456e7d3316Smrg      if (to_end)
41466e7d3316Smrg        {
41476e7d3316Smrg          strcpy (new_value, orig_value);
41486e7d3316Smrg          strcpy (new_value + orig_value_len, add);
41496e7d3316Smrg        }
41506e7d3316Smrg      else
41516e7d3316Smrg        {
41526e7d3316Smrg          strcpy (new_value, add);
41536e7d3316Smrg          strcpy (new_value + add_len, orig_value);
41546e7d3316Smrg        }
41556e7d3316Smrg    }
41566e7d3316Smrg  else
41576e7d3316Smrg    {
41586e7d3316Smrg      new_value = xstrdup (add);
41596e7d3316Smrg    }
41606e7d3316Smrg  return new_value;
41616e7d3316Smrg}
4162a966c04fSmrg
41636e7d3316Smrgvoid
41646e7d3316Smrglt_update_exe_path (const char *name, const char *value)
41656e7d3316Smrg{
41666e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
41676e7d3316Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
41686e7d3316Smrg                  nonnull (name), nonnull (value));
4169a966c04fSmrg
41706e7d3316Smrg  if (name && *name && value && *value)
41716e7d3316Smrg    {
41726e7d3316Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
41736e7d3316Smrg      /* some systems can't cope with a ':'-terminated path #' */
41746e7d3316Smrg      int len = strlen (new_value);
41756e7d3316Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
41766e7d3316Smrg        {
41776e7d3316Smrg          new_value[len-1] = '\0';
41786e7d3316Smrg        }
41796e7d3316Smrg      lt_setenv (name, new_value);
41806e7d3316Smrg      XFREE (new_value);
41816e7d3316Smrg    }
41826e7d3316Smrg}
4183a966c04fSmrg
41846e7d3316Smrgvoid
41856e7d3316Smrglt_update_lib_path (const char *name, const char *value)
41866e7d3316Smrg{
41876e7d3316Smrg  lt_debugprintf (__FILE__, __LINE__,
41886e7d3316Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
41896e7d3316Smrg                  nonnull (name), nonnull (value));
4190a966c04fSmrg
41916e7d3316Smrg  if (name && *name && value && *value)
41926e7d3316Smrg    {
41936e7d3316Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
41946e7d3316Smrg      lt_setenv (name, new_value);
41956e7d3316Smrg      XFREE (new_value);
41966e7d3316Smrg    }
41976e7d3316Smrg}
4198a966c04fSmrg
41996e7d3316SmrgEOF
42006e7d3316Smrg	    case $host_os in
42016e7d3316Smrg	      mingw*)
42026e7d3316Smrg		cat <<"EOF"
42036e7d3316Smrg
42046e7d3316Smrg/* Prepares an argument vector before calling spawn().
42056e7d3316Smrg   Note that spawn() does not by itself call the command interpreter
42066e7d3316Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
42076e7d3316Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
42086e7d3316Smrg         GetVersionEx(&v);
42096e7d3316Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
42106e7d3316Smrg      }) ? "cmd.exe" : "command.com").
42116e7d3316Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
42126e7d3316Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
42136e7d3316Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
42146e7d3316Smrg   special way:
42156e7d3316Smrg   - Space and tab are interpreted as delimiters. They are not treated as
42166e7d3316Smrg     delimiters if they are surrounded by double quotes: "...".
42176e7d3316Smrg   - Unescaped double quotes are removed from the input. Their only effect is
42186e7d3316Smrg     that within double quotes, space and tab are treated like normal
42196e7d3316Smrg     characters.
42206e7d3316Smrg   - Backslashes not followed by double quotes are not special.
42216e7d3316Smrg   - But 2*n+1 backslashes followed by a double quote become
42226e7d3316Smrg     n backslashes followed by a double quote (n >= 0):
42236e7d3316Smrg       \" -> "
42246e7d3316Smrg       \\\" -> \"
42256e7d3316Smrg       \\\\\" -> \\"
42266e7d3316Smrg */
42276e7d3316Smrg#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"
42286e7d3316Smrg#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"
42296e7d3316Smrgchar **
42306e7d3316Smrgprepare_spawn (char **argv)
42316e7d3316Smrg{
42326e7d3316Smrg  size_t argc;
42336e7d3316Smrg  char **new_argv;
42346e7d3316Smrg  size_t i;
4235a966c04fSmrg
42366e7d3316Smrg  /* Count number of arguments.  */
42376e7d3316Smrg  for (argc = 0; argv[argc] != NULL; argc++)
42386e7d3316Smrg    ;
4239a966c04fSmrg
42406e7d3316Smrg  /* Allocate new argument vector.  */
42416e7d3316Smrg  new_argv = XMALLOC (char *, argc + 1);
4242a966c04fSmrg
42436e7d3316Smrg  /* Put quoted arguments into the new argument vector.  */
42446e7d3316Smrg  for (i = 0; i < argc; i++)
42456e7d3316Smrg    {
42466e7d3316Smrg      const char *string = argv[i];
42476e7d3316Smrg
42486e7d3316Smrg      if (string[0] == '\0')
42496e7d3316Smrg	new_argv[i] = xstrdup ("\"\"");
42506e7d3316Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
42516e7d3316Smrg	{
42526e7d3316Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
42536e7d3316Smrg	  size_t length;
42546e7d3316Smrg	  unsigned int backslashes;
42556e7d3316Smrg	  const char *s;
42566e7d3316Smrg	  char *quoted_string;
42576e7d3316Smrg	  char *p;
42586e7d3316Smrg
42596e7d3316Smrg	  length = 0;
42606e7d3316Smrg	  backslashes = 0;
42616e7d3316Smrg	  if (quote_around)
42626e7d3316Smrg	    length++;
42636e7d3316Smrg	  for (s = string; *s != '\0'; s++)
42646e7d3316Smrg	    {
42656e7d3316Smrg	      char c = *s;
42666e7d3316Smrg	      if (c == '"')
42676e7d3316Smrg		length += backslashes + 1;
42686e7d3316Smrg	      length++;
42696e7d3316Smrg	      if (c == '\\')
42706e7d3316Smrg		backslashes++;
42716e7d3316Smrg	      else
42726e7d3316Smrg		backslashes = 0;
42736e7d3316Smrg	    }
42746e7d3316Smrg	  if (quote_around)
42756e7d3316Smrg	    length += backslashes + 1;
42766e7d3316Smrg
42776e7d3316Smrg	  quoted_string = XMALLOC (char, length + 1);
42786e7d3316Smrg
42796e7d3316Smrg	  p = quoted_string;
42806e7d3316Smrg	  backslashes = 0;
42816e7d3316Smrg	  if (quote_around)
42826e7d3316Smrg	    *p++ = '"';
42836e7d3316Smrg	  for (s = string; *s != '\0'; s++)
42846e7d3316Smrg	    {
42856e7d3316Smrg	      char c = *s;
42866e7d3316Smrg	      if (c == '"')
42876e7d3316Smrg		{
42886e7d3316Smrg		  unsigned int j;
42896e7d3316Smrg		  for (j = backslashes + 1; j > 0; j--)
42906e7d3316Smrg		    *p++ = '\\';
42916e7d3316Smrg		}
42926e7d3316Smrg	      *p++ = c;
42936e7d3316Smrg	      if (c == '\\')
42946e7d3316Smrg		backslashes++;
42956e7d3316Smrg	      else
42966e7d3316Smrg		backslashes = 0;
42976e7d3316Smrg	    }
42986e7d3316Smrg	  if (quote_around)
42996e7d3316Smrg	    {
43006e7d3316Smrg	      unsigned int j;
43016e7d3316Smrg	      for (j = backslashes; j > 0; j--)
43026e7d3316Smrg		*p++ = '\\';
43036e7d3316Smrg	      *p++ = '"';
43046e7d3316Smrg	    }
43056e7d3316Smrg	  *p = '\0';
4306a966c04fSmrg
43076e7d3316Smrg	  new_argv[i] = quoted_string;
43086e7d3316Smrg	}
43096e7d3316Smrg      else
43106e7d3316Smrg	new_argv[i] = (char *) string;
43116e7d3316Smrg    }
43126e7d3316Smrg  new_argv[argc] = NULL;
4313a966c04fSmrg
43146e7d3316Smrg  return new_argv;
43156e7d3316Smrg}
43166e7d3316SmrgEOF
4317a966c04fSmrg		;;
43186e7d3316Smrg	    esac
4319a966c04fSmrg
43206e7d3316Smrg            cat <<"EOF"
43216e7d3316Smrgvoid lt_dump_script (FILE* f)
43226e7d3316Smrg{
43236e7d3316SmrgEOF
43246e7d3316Smrg	    func_emit_wrapper yes |
43256e7d3316Smrg              $SED -e 's/\([\\"]\)/\\\1/g' \
43266e7d3316Smrg	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
4327a966c04fSmrg
43286e7d3316Smrg            cat <<"EOF"
43296e7d3316Smrg}
43306e7d3316SmrgEOF
43316e7d3316Smrg}
43326e7d3316Smrg# end: func_emit_cwrapperexe_src
4333a966c04fSmrg
43346e7d3316Smrg# func_win32_import_lib_p ARG
43356e7d3316Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
43366e7d3316Smrgfunc_win32_import_lib_p ()
43376e7d3316Smrg{
43386e7d3316Smrg    $opt_debug
43396e7d3316Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
43406e7d3316Smrg    *import*) : ;;
43416e7d3316Smrg    *) false ;;
43426e7d3316Smrg    esac
43436e7d3316Smrg}
4344a966c04fSmrg
43456e7d3316Smrg# func_mode_link arg...
43466e7d3316Smrgfunc_mode_link ()
43476e7d3316Smrg{
43486e7d3316Smrg    $opt_debug
43496e7d3316Smrg    case $host in
43506e7d3316Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
43516e7d3316Smrg      # It is impossible to link a dll without this setting, and
43526e7d3316Smrg      # we shouldn't force the makefile maintainer to figure out
43536e7d3316Smrg      # which system we are compiling for in order to pass an extra
43546e7d3316Smrg      # flag for every libtool invocation.
43556e7d3316Smrg      # allow_undefined=no
4356a966c04fSmrg
43576e7d3316Smrg      # FIXME: Unfortunately, there are problems with the above when trying
43586e7d3316Smrg      # to make a dll which has undefined symbols, in which case not
43596e7d3316Smrg      # even a static library is built.  For now, we need to specify
43606e7d3316Smrg      # -no-undefined on the libtool link line when we can be certain
43616e7d3316Smrg      # that all symbols are satisfied, otherwise we get a static library.
43626e7d3316Smrg      allow_undefined=yes
43636e7d3316Smrg      ;;
43646e7d3316Smrg    *)
43656e7d3316Smrg      allow_undefined=yes
43666e7d3316Smrg      ;;
43676e7d3316Smrg    esac
43686e7d3316Smrg    libtool_args=$nonopt
43696e7d3316Smrg    base_compile="$nonopt $@"
43706e7d3316Smrg    compile_command=$nonopt
43716e7d3316Smrg    finalize_command=$nonopt
4372a966c04fSmrg
43736e7d3316Smrg    compile_rpath=
43746e7d3316Smrg    finalize_rpath=
43756e7d3316Smrg    compile_shlibpath=
43766e7d3316Smrg    finalize_shlibpath=
43776e7d3316Smrg    convenience=
43786e7d3316Smrg    old_convenience=
43796e7d3316Smrg    deplibs=
43806e7d3316Smrg    old_deplibs=
43816e7d3316Smrg    compiler_flags=
43826e7d3316Smrg    linker_flags=
43836e7d3316Smrg    dllsearchpath=
43846e7d3316Smrg    lib_search_path=`pwd`
43856e7d3316Smrg    inst_prefix_dir=
43866e7d3316Smrg    new_inherited_linker_flags=
4387a966c04fSmrg
43886e7d3316Smrg    avoid_version=no
43896e7d3316Smrg    bindir=
43906e7d3316Smrg    dlfiles=
43916e7d3316Smrg    dlprefiles=
43926e7d3316Smrg    dlself=no
43936e7d3316Smrg    export_dynamic=no
43946e7d3316Smrg    export_symbols=
43956e7d3316Smrg    export_symbols_regex=
43966e7d3316Smrg    generated=
43976e7d3316Smrg    libobjs=
43986e7d3316Smrg    ltlibs=
43996e7d3316Smrg    module=no
44006e7d3316Smrg    no_install=no
44016e7d3316Smrg    objs=
44026e7d3316Smrg    non_pic_objects=
44036e7d3316Smrg    precious_files_regex=
44046e7d3316Smrg    prefer_static_libs=no
44056e7d3316Smrg    preload=no
44066e7d3316Smrg    prev=
44076e7d3316Smrg    prevarg=
44086e7d3316Smrg    release=
44096e7d3316Smrg    rpath=
44106e7d3316Smrg    xrpath=
44116e7d3316Smrg    perm_rpath=
44126e7d3316Smrg    temp_rpath=
44136e7d3316Smrg    thread_safe=no
44146e7d3316Smrg    vinfo=
44156e7d3316Smrg    vinfo_number=no
44166e7d3316Smrg    weak_libs=
44176e7d3316Smrg    single_module="${wl}-single_module"
44186e7d3316Smrg    func_infer_tag $base_compile
4419a966c04fSmrg
44206e7d3316Smrg    # We need to know -static, to get the right output filenames.
44216e7d3316Smrg    for arg
44226e7d3316Smrg    do
44236e7d3316Smrg      case $arg in
44246e7d3316Smrg      -shared)
44256e7d3316Smrg	test "$build_libtool_libs" != yes && \
44266e7d3316Smrg	  func_fatal_configuration "can not build a shared library"
44276e7d3316Smrg	build_old_libs=no
44286e7d3316Smrg	break
44296e7d3316Smrg	;;
44306e7d3316Smrg      -all-static | -static | -static-libtool-libs)
44316e7d3316Smrg	case $arg in
44326e7d3316Smrg	-all-static)
44336e7d3316Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
44346e7d3316Smrg	    func_warning "complete static linking is impossible in this configuration"
44356e7d3316Smrg	  fi
44366e7d3316Smrg	  if test -n "$link_static_flag"; then
44376e7d3316Smrg	    dlopen_self=$dlopen_self_static
44386e7d3316Smrg	  fi
44396e7d3316Smrg	  prefer_static_libs=yes
44406e7d3316Smrg	  ;;
44416e7d3316Smrg	-static)
44426e7d3316Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
44436e7d3316Smrg	    dlopen_self=$dlopen_self_static
44446e7d3316Smrg	  fi
44456e7d3316Smrg	  prefer_static_libs=built
44466e7d3316Smrg	  ;;
44476e7d3316Smrg	-static-libtool-libs)
44486e7d3316Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
44496e7d3316Smrg	    dlopen_self=$dlopen_self_static
44506e7d3316Smrg	  fi
44516e7d3316Smrg	  prefer_static_libs=yes
44526e7d3316Smrg	  ;;
44536e7d3316Smrg	esac
44546e7d3316Smrg	build_libtool_libs=no
44556e7d3316Smrg	build_old_libs=yes
44566e7d3316Smrg	break
44576e7d3316Smrg	;;
44586e7d3316Smrg      esac
44596e7d3316Smrg    done
4460a966c04fSmrg
44616e7d3316Smrg    # See if our shared archives depend on static archives.
44626e7d3316Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
4463a966c04fSmrg
44646e7d3316Smrg    # Go through the arguments, transforming them on the way.
44656e7d3316Smrg    while test "$#" -gt 0; do
44666e7d3316Smrg      arg="$1"
44676e7d3316Smrg      shift
44686e7d3316Smrg      func_quote_for_eval "$arg"
44696e7d3316Smrg      qarg=$func_quote_for_eval_unquoted_result
44706e7d3316Smrg      func_append libtool_args " $func_quote_for_eval_result"
4471a966c04fSmrg
44726e7d3316Smrg      # If the previous option needs an argument, assign it.
44736e7d3316Smrg      if test -n "$prev"; then
44746e7d3316Smrg	case $prev in
44756e7d3316Smrg	output)
44766e7d3316Smrg	  func_append compile_command " @OUTPUT@"
44776e7d3316Smrg	  func_append finalize_command " @OUTPUT@"
44786e7d3316Smrg	  ;;
44796e7d3316Smrg	esac
4480a966c04fSmrg
44816e7d3316Smrg	case $prev in
44826e7d3316Smrg	bindir)
44836e7d3316Smrg	  bindir="$arg"
44846e7d3316Smrg	  prev=
44856e7d3316Smrg	  continue
44866e7d3316Smrg	  ;;
44876e7d3316Smrg	dlfiles|dlprefiles)
44886e7d3316Smrg	  if test "$preload" = no; then
44896e7d3316Smrg	    # Add the symbol object into the linking commands.
44906e7d3316Smrg	    func_append compile_command " @SYMFILE@"
44916e7d3316Smrg	    func_append finalize_command " @SYMFILE@"
44926e7d3316Smrg	    preload=yes
4493a966c04fSmrg	  fi
44946e7d3316Smrg	  case $arg in
44956e7d3316Smrg	  *.la | *.lo) ;;  # We handle these cases below.
44966e7d3316Smrg	  force)
44976e7d3316Smrg	    if test "$dlself" = no; then
44986e7d3316Smrg	      dlself=needless
44996e7d3316Smrg	      export_dynamic=yes
4500a966c04fSmrg	    fi
45016e7d3316Smrg	    prev=
45026e7d3316Smrg	    continue
45036e7d3316Smrg	    ;;
45046e7d3316Smrg	  self)
45056e7d3316Smrg	    if test "$prev" = dlprefiles; then
45066e7d3316Smrg	      dlself=yes
45076e7d3316Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
45086e7d3316Smrg	      dlself=yes
4509a966c04fSmrg	    else
45106e7d3316Smrg	      dlself=needless
45116e7d3316Smrg	      export_dynamic=yes
4512a966c04fSmrg	    fi
45136e7d3316Smrg	    prev=
45146e7d3316Smrg	    continue
45156e7d3316Smrg	    ;;
45166e7d3316Smrg	  *)
45176e7d3316Smrg	    if test "$prev" = dlfiles; then
45186e7d3316Smrg	      dlfiles="$dlfiles $arg"
4519a966c04fSmrg	    else
45206e7d3316Smrg	      dlprefiles="$dlprefiles $arg"
4521a966c04fSmrg	    fi
45226e7d3316Smrg	    prev=
45236e7d3316Smrg	    continue
45246e7d3316Smrg	    ;;
45256e7d3316Smrg	  esac
45266e7d3316Smrg	  ;;
45276e7d3316Smrg	expsyms)
45286e7d3316Smrg	  export_symbols="$arg"
45296e7d3316Smrg	  test -f "$arg" \
45306e7d3316Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
45316e7d3316Smrg	  prev=
45326e7d3316Smrg	  continue
45336e7d3316Smrg	  ;;
45346e7d3316Smrg	expsyms_regex)
45356e7d3316Smrg	  export_symbols_regex="$arg"
45366e7d3316Smrg	  prev=
45376e7d3316Smrg	  continue
45386e7d3316Smrg	  ;;
45396e7d3316Smrg	framework)
4540a966c04fSmrg	  case $host in
45416e7d3316Smrg	    *-*-darwin*)
45426e7d3316Smrg	      case "$deplibs " in
45436e7d3316Smrg		*" $qarg.ltframework "*) ;;
45446e7d3316Smrg		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
45456e7d3316Smrg		   ;;
45466e7d3316Smrg	      esac
45476e7d3316Smrg	      ;;
4548a966c04fSmrg	  esac
45496e7d3316Smrg	  prev=
45506e7d3316Smrg	  continue
4551a966c04fSmrg	  ;;
45526e7d3316Smrg	inst_prefix)
45536e7d3316Smrg	  inst_prefix_dir="$arg"
45546e7d3316Smrg	  prev=
45556e7d3316Smrg	  continue
4556a966c04fSmrg	  ;;
45576e7d3316Smrg	objectlist)
45586e7d3316Smrg	  if test -f "$arg"; then
45596e7d3316Smrg	    save_arg=$arg
45606e7d3316Smrg	    moreargs=
45616e7d3316Smrg	    for fil in `cat "$save_arg"`
45626e7d3316Smrg	    do
45636e7d3316Smrg#	      moreargs="$moreargs $fil"
45646e7d3316Smrg	      arg=$fil
45656e7d3316Smrg	      # A libtool-controlled object.
4566a966c04fSmrg
45676e7d3316Smrg	      # Check to see that this really is a libtool object.
45686e7d3316Smrg	      if func_lalib_unsafe_p "$arg"; then
45696e7d3316Smrg		pic_object=
45706e7d3316Smrg		non_pic_object=
4571a966c04fSmrg
45726e7d3316Smrg		# Read the .lo file
45736e7d3316Smrg		func_source "$arg"
4574a966c04fSmrg
45756e7d3316Smrg		if test -z "$pic_object" ||
45766e7d3316Smrg		   test -z "$non_pic_object" ||
45776e7d3316Smrg		   test "$pic_object" = none &&
45786e7d3316Smrg		   test "$non_pic_object" = none; then
45796e7d3316Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
45806e7d3316Smrg		fi
4581a966c04fSmrg
45826e7d3316Smrg		# Extract subdirectory from the argument.
45836e7d3316Smrg		func_dirname "$arg" "/" ""
45846e7d3316Smrg		xdir="$func_dirname_result"
4585a966c04fSmrg
45866e7d3316Smrg		if test "$pic_object" != none; then
45876e7d3316Smrg		  # Prepend the subdirectory the object is found in.
45886e7d3316Smrg		  pic_object="$xdir$pic_object"
4589a966c04fSmrg
45906e7d3316Smrg		  if test "$prev" = dlfiles; then
45916e7d3316Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
45926e7d3316Smrg		      dlfiles="$dlfiles $pic_object"
45936e7d3316Smrg		      prev=
45946e7d3316Smrg		      continue
45956e7d3316Smrg		    else
45966e7d3316Smrg		      # If libtool objects are unsupported, then we need to preload.
45976e7d3316Smrg		      prev=dlprefiles
45986e7d3316Smrg		    fi
45996e7d3316Smrg		  fi
4600a966c04fSmrg
46016e7d3316Smrg		  # CHECK ME:  I think I busted this.  -Ossama
46026e7d3316Smrg		  if test "$prev" = dlprefiles; then
46036e7d3316Smrg		    # Preload the old-style object.
46046e7d3316Smrg		    dlprefiles="$dlprefiles $pic_object"
46056e7d3316Smrg		    prev=
46066e7d3316Smrg		  fi
4607a966c04fSmrg
46086e7d3316Smrg		  # A PIC object.
46096e7d3316Smrg		  func_append libobjs " $pic_object"
46106e7d3316Smrg		  arg="$pic_object"
46116e7d3316Smrg		fi
4612a966c04fSmrg
46136e7d3316Smrg		# Non-PIC object.
46146e7d3316Smrg		if test "$non_pic_object" != none; then
46156e7d3316Smrg		  # Prepend the subdirectory the object is found in.
46166e7d3316Smrg		  non_pic_object="$xdir$non_pic_object"
4617a966c04fSmrg
46186e7d3316Smrg		  # A standard non-PIC object
46196e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
46206e7d3316Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
46216e7d3316Smrg		    arg="$non_pic_object"
46226e7d3316Smrg		  fi
46236e7d3316Smrg		else
46246e7d3316Smrg		  # If the PIC object exists, use it instead.
46256e7d3316Smrg		  # $xdir was prepended to $pic_object above.
46266e7d3316Smrg		  non_pic_object="$pic_object"
46276e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
46286e7d3316Smrg		fi
46296e7d3316Smrg	      else
46306e7d3316Smrg		# Only an error if not doing a dry-run.
46316e7d3316Smrg		if $opt_dry_run; then
46326e7d3316Smrg		  # Extract subdirectory from the argument.
46336e7d3316Smrg		  func_dirname "$arg" "/" ""
46346e7d3316Smrg		  xdir="$func_dirname_result"
46356e7d3316Smrg
46366e7d3316Smrg		  func_lo2o "$arg"
46376e7d3316Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
46386e7d3316Smrg		  non_pic_object=$xdir$func_lo2o_result
46396e7d3316Smrg		  func_append libobjs " $pic_object"
46406e7d3316Smrg		  func_append non_pic_objects " $non_pic_object"
46416e7d3316Smrg	        else
46426e7d3316Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
46436e7d3316Smrg		fi
46446e7d3316Smrg	      fi
46456e7d3316Smrg	    done
4646a966c04fSmrg	  else
46476e7d3316Smrg	    func_fatal_error "link input file \`$arg' does not exist"
4648a966c04fSmrg	  fi
46496e7d3316Smrg	  arg=$save_arg
46506e7d3316Smrg	  prev=
46516e7d3316Smrg	  continue
46526e7d3316Smrg	  ;;
46536e7d3316Smrg	precious_regex)
46546e7d3316Smrg	  precious_files_regex="$arg"
46556e7d3316Smrg	  prev=
46566e7d3316Smrg	  continue
46576e7d3316Smrg	  ;;
46586e7d3316Smrg	release)
46596e7d3316Smrg	  release="-$arg"
46606e7d3316Smrg	  prev=
46616e7d3316Smrg	  continue
46626e7d3316Smrg	  ;;
46636e7d3316Smrg	rpath | xrpath)
46646e7d3316Smrg	  # We need an absolute path.
46656e7d3316Smrg	  case $arg in
46666e7d3316Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
46676e7d3316Smrg	  *)
46686e7d3316Smrg	    func_fatal_error "only absolute run-paths are allowed"
46696e7d3316Smrg	    ;;
46706e7d3316Smrg	  esac
46716e7d3316Smrg	  if test "$prev" = rpath; then
46726e7d3316Smrg	    case "$rpath " in
46736e7d3316Smrg	    *" $arg "*) ;;
46746e7d3316Smrg	    *) rpath="$rpath $arg" ;;
46756e7d3316Smrg	    esac
4676a966c04fSmrg	  else
46776e7d3316Smrg	    case "$xrpath " in
46786e7d3316Smrg	    *" $arg "*) ;;
46796e7d3316Smrg	    *) xrpath="$xrpath $arg" ;;
46806e7d3316Smrg	    esac
4681a966c04fSmrg	  fi
46826e7d3316Smrg	  prev=
46836e7d3316Smrg	  continue
46846e7d3316Smrg	  ;;
46856e7d3316Smrg	shrext)
46866e7d3316Smrg	  shrext_cmds="$arg"
46876e7d3316Smrg	  prev=
46886e7d3316Smrg	  continue
46896e7d3316Smrg	  ;;
46906e7d3316Smrg	weak)
46916e7d3316Smrg	  weak_libs="$weak_libs $arg"
46926e7d3316Smrg	  prev=
46936e7d3316Smrg	  continue
46946e7d3316Smrg	  ;;
46956e7d3316Smrg	xcclinker)
46966e7d3316Smrg	  linker_flags="$linker_flags $qarg"
46976e7d3316Smrg	  compiler_flags="$compiler_flags $qarg"
46986e7d3316Smrg	  prev=
46996e7d3316Smrg	  func_append compile_command " $qarg"
47006e7d3316Smrg	  func_append finalize_command " $qarg"
47016e7d3316Smrg	  continue
47026e7d3316Smrg	  ;;
47036e7d3316Smrg	xcompiler)
47046e7d3316Smrg	  compiler_flags="$compiler_flags $qarg"
47056e7d3316Smrg	  prev=
47066e7d3316Smrg	  func_append compile_command " $qarg"
47076e7d3316Smrg	  func_append finalize_command " $qarg"
47086e7d3316Smrg	  continue
47096e7d3316Smrg	  ;;
47106e7d3316Smrg	xlinker)
47116e7d3316Smrg	  linker_flags="$linker_flags $qarg"
47126e7d3316Smrg	  compiler_flags="$compiler_flags $wl$qarg"
47136e7d3316Smrg	  prev=
47146e7d3316Smrg	  func_append compile_command " $wl$qarg"
47156e7d3316Smrg	  func_append finalize_command " $wl$qarg"
47166e7d3316Smrg	  continue
47176e7d3316Smrg	  ;;
47186e7d3316Smrg	*)
47196e7d3316Smrg	  eval "$prev=\"\$arg\""
47206e7d3316Smrg	  prev=
47216e7d3316Smrg	  continue
47226e7d3316Smrg	  ;;
4723a966c04fSmrg	esac
47246e7d3316Smrg      fi # test -n "$prev"
4725a966c04fSmrg
47266e7d3316Smrg      prevarg="$arg"
4727a966c04fSmrg
47286e7d3316Smrg      case $arg in
47296e7d3316Smrg      -all-static)
47306e7d3316Smrg	if test -n "$link_static_flag"; then
47316e7d3316Smrg	  # See comment for -static flag below, for more details.
47326e7d3316Smrg	  func_append compile_command " $link_static_flag"
47336e7d3316Smrg	  func_append finalize_command " $link_static_flag"
47346e7d3316Smrg	fi
47356e7d3316Smrg	continue
47366e7d3316Smrg	;;
4737a966c04fSmrg
47386e7d3316Smrg      -allow-undefined)
47396e7d3316Smrg	# FIXME: remove this flag sometime in the future.
47406e7d3316Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
47416e7d3316Smrg	;;
4742a966c04fSmrg
47436e7d3316Smrg      -avoid-version)
47446e7d3316Smrg	avoid_version=yes
47456e7d3316Smrg	continue
47466e7d3316Smrg	;;
4747a966c04fSmrg
47486e7d3316Smrg      -bindir)
47496e7d3316Smrg	prev=bindir
47506e7d3316Smrg	continue
47516e7d3316Smrg	;;
4752a966c04fSmrg
47536e7d3316Smrg      -dlopen)
47546e7d3316Smrg	prev=dlfiles
47556e7d3316Smrg	continue
47566e7d3316Smrg	;;
4757a966c04fSmrg
47586e7d3316Smrg      -dlpreopen)
47596e7d3316Smrg	prev=dlprefiles
47606e7d3316Smrg	continue
47616e7d3316Smrg	;;
4762a966c04fSmrg
47636e7d3316Smrg      -export-dynamic)
47646e7d3316Smrg	export_dynamic=yes
47656e7d3316Smrg	continue
47666e7d3316Smrg	;;
4767a966c04fSmrg
47686e7d3316Smrg      -export-symbols | -export-symbols-regex)
47696e7d3316Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
47706e7d3316Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
47716e7d3316Smrg	fi
47726e7d3316Smrg	if test "X$arg" = "X-export-symbols"; then
47736e7d3316Smrg	  prev=expsyms
47746e7d3316Smrg	else
47756e7d3316Smrg	  prev=expsyms_regex
47766e7d3316Smrg	fi
47776e7d3316Smrg	continue
47786e7d3316Smrg	;;
4779a966c04fSmrg
47806e7d3316Smrg      -framework)
47816e7d3316Smrg	prev=framework
47826e7d3316Smrg	continue
47836e7d3316Smrg	;;
4784a966c04fSmrg
47856e7d3316Smrg      -inst-prefix-dir)
47866e7d3316Smrg	prev=inst_prefix
47876e7d3316Smrg	continue
47886e7d3316Smrg	;;
4789a966c04fSmrg
47906e7d3316Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
47916e7d3316Smrg      # so, if we see these flags be careful not to treat them like -L
47926e7d3316Smrg      -L[A-Z][A-Z]*:*)
47936e7d3316Smrg	case $with_gcc/$host in
47946e7d3316Smrg	no/*-*-irix* | /*-*-irix*)
47956e7d3316Smrg	  func_append compile_command " $arg"
47966e7d3316Smrg	  func_append finalize_command " $arg"
47976e7d3316Smrg	  ;;
47986e7d3316Smrg	esac
47996e7d3316Smrg	continue
48006e7d3316Smrg	;;
4801a966c04fSmrg
48026e7d3316Smrg      -L*)
48036e7d3316Smrg	func_stripname '-L' '' "$arg"
48046e7d3316Smrg	dir=$func_stripname_result
48056e7d3316Smrg	if test -z "$dir"; then
48066e7d3316Smrg	  if test "$#" -gt 0; then
48076e7d3316Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
48086e7d3316Smrg	  else
48096e7d3316Smrg	    func_fatal_error "need path for \`-L' option"
48106e7d3316Smrg	  fi
48116e7d3316Smrg	fi
48126e7d3316Smrg	# We need an absolute path.
48136e7d3316Smrg	case $dir in
48146e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
48156e7d3316Smrg	*)
48166e7d3316Smrg	  absdir=`cd "$dir" && pwd`
48176e7d3316Smrg	  test -z "$absdir" && \
48186e7d3316Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
48196e7d3316Smrg	  dir="$absdir"
48206e7d3316Smrg	  ;;
48216e7d3316Smrg	esac
48226e7d3316Smrg	case "$deplibs " in
48236e7d3316Smrg	*" -L$dir "*) ;;
48246e7d3316Smrg	*)
48256e7d3316Smrg	  deplibs="$deplibs -L$dir"
48266e7d3316Smrg	  lib_search_path="$lib_search_path $dir"
48276e7d3316Smrg	  ;;
48286e7d3316Smrg	esac
48296e7d3316Smrg	case $host in
48306e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
48316e7d3316Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
48326e7d3316Smrg	  case :$dllsearchpath: in
48336e7d3316Smrg	  *":$dir:"*) ;;
48346e7d3316Smrg	  ::) dllsearchpath=$dir;;
48356e7d3316Smrg	  *) dllsearchpath="$dllsearchpath:$dir";;
48366e7d3316Smrg	  esac
48376e7d3316Smrg	  case :$dllsearchpath: in
48386e7d3316Smrg	  *":$testbindir:"*) ;;
48396e7d3316Smrg	  ::) dllsearchpath=$testbindir;;
48406e7d3316Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
48416e7d3316Smrg	  esac
48426e7d3316Smrg	  ;;
48436e7d3316Smrg	esac
48446e7d3316Smrg	continue
48456e7d3316Smrg	;;
4846a966c04fSmrg
48476e7d3316Smrg      -l*)
48486e7d3316Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
48496e7d3316Smrg	  case $host in
48506e7d3316Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
48516e7d3316Smrg	    # These systems don't actually have a C or math library (as such)
48526e7d3316Smrg	    continue
48536e7d3316Smrg	    ;;
48546e7d3316Smrg	  *-*-os2*)
48556e7d3316Smrg	    # These systems don't actually have a C library (as such)
48566e7d3316Smrg	    test "X$arg" = "X-lc" && continue
48576e7d3316Smrg	    ;;
48586e7d3316Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
48596e7d3316Smrg	    # Do not include libc due to us having libc/libc_r.
48606e7d3316Smrg	    test "X$arg" = "X-lc" && continue
48616e7d3316Smrg	    ;;
48626e7d3316Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
48636e7d3316Smrg	    # Rhapsody C and math libraries are in the System framework
48646e7d3316Smrg	    deplibs="$deplibs System.ltframework"
48656e7d3316Smrg	    continue
48666e7d3316Smrg	    ;;
48676e7d3316Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
48686e7d3316Smrg	    # Causes problems with __ctype
48696e7d3316Smrg	    test "X$arg" = "X-lc" && continue
48706e7d3316Smrg	    ;;
48716e7d3316Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
48726e7d3316Smrg	    # Compiler inserts libc in the correct place for threads to work
48736e7d3316Smrg	    test "X$arg" = "X-lc" && continue
48746e7d3316Smrg	    ;;
48756e7d3316Smrg	  esac
48766e7d3316Smrg	elif test "X$arg" = "X-lc_r"; then
48776e7d3316Smrg	 case $host in
48786e7d3316Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
48796e7d3316Smrg	   # Do not include libc_r directly, use -pthread flag.
48806e7d3316Smrg	   continue
48816e7d3316Smrg	   ;;
48826e7d3316Smrg	 esac
48836e7d3316Smrg	fi
48846e7d3316Smrg	deplibs="$deplibs $arg"
48856e7d3316Smrg	continue
48866e7d3316Smrg	;;
4887a966c04fSmrg
48886e7d3316Smrg      -module)
48896e7d3316Smrg	module=yes
48906e7d3316Smrg	continue
48916e7d3316Smrg	;;
4892a966c04fSmrg
48936e7d3316Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
48946e7d3316Smrg      # classes, name mangling, and exception handling.
48956e7d3316Smrg      # Darwin uses the -arch flag to determine output architecture.
48966e7d3316Smrg      -model|-arch|-isysroot)
48976e7d3316Smrg	compiler_flags="$compiler_flags $arg"
48986e7d3316Smrg	func_append compile_command " $arg"
48996e7d3316Smrg	func_append finalize_command " $arg"
49006e7d3316Smrg	prev=xcompiler
49016e7d3316Smrg	continue
49026e7d3316Smrg	;;
4903a966c04fSmrg
49046e7d3316Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
49056e7d3316Smrg	compiler_flags="$compiler_flags $arg"
49066e7d3316Smrg	func_append compile_command " $arg"
49076e7d3316Smrg	func_append finalize_command " $arg"
49086e7d3316Smrg	case "$new_inherited_linker_flags " in
49096e7d3316Smrg	    *" $arg "*) ;;
49106e7d3316Smrg	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
49116e7d3316Smrg	esac
49126e7d3316Smrg	continue
49136e7d3316Smrg	;;
4914a966c04fSmrg
49156e7d3316Smrg      -multi_module)
49166e7d3316Smrg	single_module="${wl}-multi_module"
49176e7d3316Smrg	continue
49186e7d3316Smrg	;;
4919a966c04fSmrg
49206e7d3316Smrg      -no-fast-install)
49216e7d3316Smrg	fast_install=no
49226e7d3316Smrg	continue
49236e7d3316Smrg	;;
4924a966c04fSmrg
49256e7d3316Smrg      -no-install)
49266e7d3316Smrg	case $host in
49276e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
49286e7d3316Smrg	  # The PATH hackery in wrapper scripts is required on Windows
49296e7d3316Smrg	  # and Darwin in order for the loader to find any dlls it needs.
49306e7d3316Smrg	  func_warning "\`-no-install' is ignored for $host"
49316e7d3316Smrg	  func_warning "assuming \`-no-fast-install' instead"
49326e7d3316Smrg	  fast_install=no
49336e7d3316Smrg	  ;;
49346e7d3316Smrg	*) no_install=yes ;;
49356e7d3316Smrg	esac
49366e7d3316Smrg	continue
49376e7d3316Smrg	;;
4938a966c04fSmrg
49396e7d3316Smrg      -no-undefined)
49406e7d3316Smrg	allow_undefined=no
49416e7d3316Smrg	continue
49426e7d3316Smrg	;;
4943a966c04fSmrg
49446e7d3316Smrg      -objectlist)
49456e7d3316Smrg	prev=objectlist
49466e7d3316Smrg	continue
49476e7d3316Smrg	;;
4948a966c04fSmrg
49496e7d3316Smrg      -o) prev=output ;;
4950a966c04fSmrg
49516e7d3316Smrg      -precious-files-regex)
49526e7d3316Smrg	prev=precious_regex
49536e7d3316Smrg	continue
49546e7d3316Smrg	;;
4955a966c04fSmrg
49566e7d3316Smrg      -release)
49576e7d3316Smrg	prev=release
49586e7d3316Smrg	continue
49596e7d3316Smrg	;;
4960a966c04fSmrg
49616e7d3316Smrg      -rpath)
49626e7d3316Smrg	prev=rpath
49636e7d3316Smrg	continue
49646e7d3316Smrg	;;
4965a966c04fSmrg
49666e7d3316Smrg      -R)
49676e7d3316Smrg	prev=xrpath
49686e7d3316Smrg	continue
49696e7d3316Smrg	;;
4970a966c04fSmrg
49716e7d3316Smrg      -R*)
49726e7d3316Smrg	func_stripname '-R' '' "$arg"
49736e7d3316Smrg	dir=$func_stripname_result
49746e7d3316Smrg	# We need an absolute path.
49756e7d3316Smrg	case $dir in
49766e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
49776e7d3316Smrg	*)
49786e7d3316Smrg	  func_fatal_error "only absolute run-paths are allowed"
49796e7d3316Smrg	  ;;
49806e7d3316Smrg	esac
49816e7d3316Smrg	case "$xrpath " in
49826e7d3316Smrg	*" $dir "*) ;;
49836e7d3316Smrg	*) xrpath="$xrpath $dir" ;;
49846e7d3316Smrg	esac
49856e7d3316Smrg	continue
49866e7d3316Smrg	;;
4987a966c04fSmrg
49886e7d3316Smrg      -shared)
49896e7d3316Smrg	# The effects of -shared are defined in a previous loop.
49906e7d3316Smrg	continue
49916e7d3316Smrg	;;
4992a966c04fSmrg
49936e7d3316Smrg      -shrext)
49946e7d3316Smrg	prev=shrext
49956e7d3316Smrg	continue
49966e7d3316Smrg	;;
4997a966c04fSmrg
49986e7d3316Smrg      -static | -static-libtool-libs)
49996e7d3316Smrg	# The effects of -static are defined in a previous loop.
50006e7d3316Smrg	# We used to do the same as -all-static on platforms that
50016e7d3316Smrg	# didn't have a PIC flag, but the assumption that the effects
50026e7d3316Smrg	# would be equivalent was wrong.  It would break on at least
50036e7d3316Smrg	# Digital Unix and AIX.
50046e7d3316Smrg	continue
50056e7d3316Smrg	;;
5006a966c04fSmrg
50076e7d3316Smrg      -thread-safe)
50086e7d3316Smrg	thread_safe=yes
50096e7d3316Smrg	continue
50106e7d3316Smrg	;;
5011a966c04fSmrg
50126e7d3316Smrg      -version-info)
50136e7d3316Smrg	prev=vinfo
50146e7d3316Smrg	continue
50156e7d3316Smrg	;;
5016a966c04fSmrg
50176e7d3316Smrg      -version-number)
50186e7d3316Smrg	prev=vinfo
50196e7d3316Smrg	vinfo_number=yes
50206e7d3316Smrg	continue
50216e7d3316Smrg	;;
5022a966c04fSmrg
50236e7d3316Smrg      -weak)
50246e7d3316Smrg        prev=weak
50256e7d3316Smrg	continue
50266e7d3316Smrg	;;
5027a966c04fSmrg
50286e7d3316Smrg      -Wc,*)
50296e7d3316Smrg	func_stripname '-Wc,' '' "$arg"
50306e7d3316Smrg	args=$func_stripname_result
50316e7d3316Smrg	arg=
50326e7d3316Smrg	save_ifs="$IFS"; IFS=','
50336e7d3316Smrg	for flag in $args; do
50346e7d3316Smrg	  IFS="$save_ifs"
50356e7d3316Smrg          func_quote_for_eval "$flag"
50366e7d3316Smrg	  arg="$arg $func_quote_for_eval_result"
50376e7d3316Smrg	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
50386e7d3316Smrg	done
50396e7d3316Smrg	IFS="$save_ifs"
50406e7d3316Smrg	func_stripname ' ' '' "$arg"
50416e7d3316Smrg	arg=$func_stripname_result
50426e7d3316Smrg	;;
5043a966c04fSmrg
50446e7d3316Smrg      -Wl,*)
50456e7d3316Smrg	func_stripname '-Wl,' '' "$arg"
50466e7d3316Smrg	args=$func_stripname_result
50476e7d3316Smrg	arg=
50486e7d3316Smrg	save_ifs="$IFS"; IFS=','
50496e7d3316Smrg	for flag in $args; do
50506e7d3316Smrg	  IFS="$save_ifs"
50516e7d3316Smrg          func_quote_for_eval "$flag"
50526e7d3316Smrg	  arg="$arg $wl$func_quote_for_eval_result"
50536e7d3316Smrg	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
50546e7d3316Smrg	  linker_flags="$linker_flags $func_quote_for_eval_result"
50556e7d3316Smrg	done
50566e7d3316Smrg	IFS="$save_ifs"
50576e7d3316Smrg	func_stripname ' ' '' "$arg"
50586e7d3316Smrg	arg=$func_stripname_result
50596e7d3316Smrg	;;
5060a966c04fSmrg
50616e7d3316Smrg      -Xcompiler)
50626e7d3316Smrg	prev=xcompiler
50636e7d3316Smrg	continue
50646e7d3316Smrg	;;
5065a966c04fSmrg
50666e7d3316Smrg      -Xlinker)
50676e7d3316Smrg	prev=xlinker
50686e7d3316Smrg	continue
50696e7d3316Smrg	;;
5070a966c04fSmrg
50716e7d3316Smrg      -XCClinker)
50726e7d3316Smrg	prev=xcclinker
50736e7d3316Smrg	continue
50746e7d3316Smrg	;;
5075a966c04fSmrg
50766e7d3316Smrg      # -msg_* for osf cc
50776e7d3316Smrg      -msg_*)
50786e7d3316Smrg	func_quote_for_eval "$arg"
50796e7d3316Smrg	arg="$func_quote_for_eval_result"
50806e7d3316Smrg	;;
5081a966c04fSmrg
50826e7d3316Smrg      # Flags to be passed through unchanged, with rationale:
50836e7d3316Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
50846e7d3316Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
50856e7d3316Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
50866e7d3316Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
50876e7d3316Smrg      # -q*                  compiler args for the IBM compiler
50886e7d3316Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
50896e7d3316Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
50906e7d3316Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
50916e7d3316Smrg      # @file                GCC response files
50926e7d3316Smrg      # -tp=*                Portland pgcc target processor selection
50936e7d3316Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
50946e7d3316Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
50956e7d3316Smrg        func_quote_for_eval "$arg"
50966e7d3316Smrg	arg="$func_quote_for_eval_result"
50976e7d3316Smrg        func_append compile_command " $arg"
50986e7d3316Smrg        func_append finalize_command " $arg"
50996e7d3316Smrg        compiler_flags="$compiler_flags $arg"
51006e7d3316Smrg        continue
51016e7d3316Smrg        ;;
5102a966c04fSmrg
51036e7d3316Smrg      # Some other compiler flag.
51046e7d3316Smrg      -* | +*)
51056e7d3316Smrg        func_quote_for_eval "$arg"
51066e7d3316Smrg	arg="$func_quote_for_eval_result"
51076e7d3316Smrg	;;
5108a966c04fSmrg
51096e7d3316Smrg      *.$objext)
51106e7d3316Smrg	# A standard object.
51116e7d3316Smrg	objs="$objs $arg"
51126e7d3316Smrg	;;
5113a966c04fSmrg
51146e7d3316Smrg      *.lo)
51156e7d3316Smrg	# A libtool-controlled object.
5116a966c04fSmrg
51176e7d3316Smrg	# Check to see that this really is a libtool object.
51186e7d3316Smrg	if func_lalib_unsafe_p "$arg"; then
51196e7d3316Smrg	  pic_object=
51206e7d3316Smrg	  non_pic_object=
5121a966c04fSmrg
51226e7d3316Smrg	  # Read the .lo file
51236e7d3316Smrg	  func_source "$arg"
5124a966c04fSmrg
51256e7d3316Smrg	  if test -z "$pic_object" ||
51266e7d3316Smrg	     test -z "$non_pic_object" ||
51276e7d3316Smrg	     test "$pic_object" = none &&
51286e7d3316Smrg	     test "$non_pic_object" = none; then
51296e7d3316Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
51306e7d3316Smrg	  fi
51312e2dd055Smrg
51326e7d3316Smrg	  # Extract subdirectory from the argument.
51336e7d3316Smrg	  func_dirname "$arg" "/" ""
51346e7d3316Smrg	  xdir="$func_dirname_result"
5135a966c04fSmrg
51366e7d3316Smrg	  if test "$pic_object" != none; then
51376e7d3316Smrg	    # Prepend the subdirectory the object is found in.
51386e7d3316Smrg	    pic_object="$xdir$pic_object"
5139a966c04fSmrg
51406e7d3316Smrg	    if test "$prev" = dlfiles; then
51416e7d3316Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
51426e7d3316Smrg		dlfiles="$dlfiles $pic_object"
51436e7d3316Smrg		prev=
51446e7d3316Smrg		continue
51456e7d3316Smrg	      else
51466e7d3316Smrg		# If libtool objects are unsupported, then we need to preload.
51476e7d3316Smrg		prev=dlprefiles
51486e7d3316Smrg	      fi
51496e7d3316Smrg	    fi
51506e7d3316Smrg
51516e7d3316Smrg	    # CHECK ME:  I think I busted this.  -Ossama
51526e7d3316Smrg	    if test "$prev" = dlprefiles; then
51536e7d3316Smrg	      # Preload the old-style object.
51546e7d3316Smrg	      dlprefiles="$dlprefiles $pic_object"
51556e7d3316Smrg	      prev=
51566e7d3316Smrg	    fi
51576e7d3316Smrg
51586e7d3316Smrg	    # A PIC object.
51596e7d3316Smrg	    func_append libobjs " $pic_object"
51606e7d3316Smrg	    arg="$pic_object"
51616e7d3316Smrg	  fi
51626e7d3316Smrg
51636e7d3316Smrg	  # Non-PIC object.
51646e7d3316Smrg	  if test "$non_pic_object" != none; then
51656e7d3316Smrg	    # Prepend the subdirectory the object is found in.
51666e7d3316Smrg	    non_pic_object="$xdir$non_pic_object"
51676e7d3316Smrg
51686e7d3316Smrg	    # A standard non-PIC object
51696e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
51706e7d3316Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
51716e7d3316Smrg	      arg="$non_pic_object"
51726e7d3316Smrg	    fi
51736e7d3316Smrg	  else
51746e7d3316Smrg	    # If the PIC object exists, use it instead.
51756e7d3316Smrg	    # $xdir was prepended to $pic_object above.
51766e7d3316Smrg	    non_pic_object="$pic_object"
51776e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
51786e7d3316Smrg	  fi
51796e7d3316Smrg	else
51806e7d3316Smrg	  # Only an error if not doing a dry-run.
51816e7d3316Smrg	  if $opt_dry_run; then
51826e7d3316Smrg	    # Extract subdirectory from the argument.
51836e7d3316Smrg	    func_dirname "$arg" "/" ""
51846e7d3316Smrg	    xdir="$func_dirname_result"
51856e7d3316Smrg
51866e7d3316Smrg	    func_lo2o "$arg"
51876e7d3316Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
51886e7d3316Smrg	    non_pic_object=$xdir$func_lo2o_result
51896e7d3316Smrg	    func_append libobjs " $pic_object"
51906e7d3316Smrg	    func_append non_pic_objects " $non_pic_object"
51916e7d3316Smrg	  else
51926e7d3316Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
51936e7d3316Smrg	  fi
51946e7d3316Smrg	fi
51956e7d3316Smrg	;;
51966e7d3316Smrg
51976e7d3316Smrg      *.$libext)
51986e7d3316Smrg	# An archive.
51996e7d3316Smrg	deplibs="$deplibs $arg"
52006e7d3316Smrg	old_deplibs="$old_deplibs $arg"
52016e7d3316Smrg	continue
52026e7d3316Smrg	;;
52036e7d3316Smrg
52046e7d3316Smrg      *.la)
52056e7d3316Smrg	# A libtool-controlled library.
52066e7d3316Smrg
52076e7d3316Smrg	if test "$prev" = dlfiles; then
52086e7d3316Smrg	  # This library was specified with -dlopen.
52096e7d3316Smrg	  dlfiles="$dlfiles $arg"
52106e7d3316Smrg	  prev=
52116e7d3316Smrg	elif test "$prev" = dlprefiles; then
52126e7d3316Smrg	  # The library was specified with -dlpreopen.
52136e7d3316Smrg	  dlprefiles="$dlprefiles $arg"
52146e7d3316Smrg	  prev=
52156e7d3316Smrg	else
52166e7d3316Smrg	  deplibs="$deplibs $arg"
52176e7d3316Smrg	fi
52186e7d3316Smrg	continue
52196e7d3316Smrg	;;
52206e7d3316Smrg
52216e7d3316Smrg      # Some other compiler argument.
52226e7d3316Smrg      *)
52236e7d3316Smrg	# Unknown arguments in both finalize_command and compile_command need
52246e7d3316Smrg	# to be aesthetically quoted because they are evaled later.
52256e7d3316Smrg	func_quote_for_eval "$arg"
52266e7d3316Smrg	arg="$func_quote_for_eval_result"
52276e7d3316Smrg	;;
52286e7d3316Smrg      esac # arg
52296e7d3316Smrg
52306e7d3316Smrg      # Now actually substitute the argument into the commands.
52316e7d3316Smrg      if test -n "$arg"; then
52326e7d3316Smrg	func_append compile_command " $arg"
52336e7d3316Smrg	func_append finalize_command " $arg"
52346e7d3316Smrg      fi
52356e7d3316Smrg    done # argument parsing loop
52366e7d3316Smrg
52376e7d3316Smrg    test -n "$prev" && \
52386e7d3316Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
52396e7d3316Smrg
52406e7d3316Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
52416e7d3316Smrg      eval arg=\"$export_dynamic_flag_spec\"
52426e7d3316Smrg      func_append compile_command " $arg"
52436e7d3316Smrg      func_append finalize_command " $arg"
52446e7d3316Smrg    fi
52456e7d3316Smrg
52466e7d3316Smrg    oldlibs=
52476e7d3316Smrg    # calculate the name of the file, without its directory
52486e7d3316Smrg    func_basename "$output"
52496e7d3316Smrg    outputname="$func_basename_result"
52506e7d3316Smrg    libobjs_save="$libobjs"
52516e7d3316Smrg
52526e7d3316Smrg    if test -n "$shlibpath_var"; then
52536e7d3316Smrg      # get the directories listed in $shlibpath_var
52546e7d3316Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
5255a966c04fSmrg    else
52566e7d3316Smrg      shlib_search_path=
5257a966c04fSmrg    fi
52586e7d3316Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
52596e7d3316Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
5260a966c04fSmrg
52616e7d3316Smrg    func_dirname "$output" "/" ""
52626e7d3316Smrg    output_objdir="$func_dirname_result$objdir"
52636e7d3316Smrg    # Create the object directory.
52646e7d3316Smrg    func_mkdir_p "$output_objdir"
5265a966c04fSmrg
52666e7d3316Smrg    # Determine the type of output
52676e7d3316Smrg    case $output in
52686e7d3316Smrg    "")
52696e7d3316Smrg      func_fatal_help "you must specify an output file"
52706e7d3316Smrg      ;;
52716e7d3316Smrg    *.$libext) linkmode=oldlib ;;
52726e7d3316Smrg    *.lo | *.$objext) linkmode=obj ;;
52736e7d3316Smrg    *.la) linkmode=lib ;;
52746e7d3316Smrg    *) linkmode=prog ;; # Anything else should be a program.
52756e7d3316Smrg    esac
52766e7d3316Smrg
52776e7d3316Smrg    specialdeplibs=
52786e7d3316Smrg
52796e7d3316Smrg    libs=
52806e7d3316Smrg    # Find all interdependent deplibs by searching for libraries
52816e7d3316Smrg    # that are linked more than once (e.g. -la -lb -la)
52826e7d3316Smrg    for deplib in $deplibs; do
52836e7d3316Smrg      if $opt_duplicate_deps ; then
52846e7d3316Smrg	case "$libs " in
52856e7d3316Smrg	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
52866e7d3316Smrg	esac
52876e7d3316Smrg      fi
52886e7d3316Smrg      libs="$libs $deplib"
52896e7d3316Smrg    done
52906e7d3316Smrg
52916e7d3316Smrg    if test "$linkmode" = lib; then
52926e7d3316Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
52936e7d3316Smrg
52946e7d3316Smrg      # Compute libraries that are listed more than once in $predeps
52956e7d3316Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
52966e7d3316Smrg      # not to be eliminated).
52976e7d3316Smrg      pre_post_deps=
52986e7d3316Smrg      if $opt_duplicate_compiler_generated_deps; then
52996e7d3316Smrg	for pre_post_dep in $predeps $postdeps; do
53006e7d3316Smrg	  case "$pre_post_deps " in
53016e7d3316Smrg	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
53026e7d3316Smrg	  esac
53036e7d3316Smrg	  pre_post_deps="$pre_post_deps $pre_post_dep"
53046e7d3316Smrg	done
53056e7d3316Smrg      fi
53066e7d3316Smrg      pre_post_deps=
53076e7d3316Smrg    fi
53086e7d3316Smrg
53096e7d3316Smrg    deplibs=
53106e7d3316Smrg    newdependency_libs=
53116e7d3316Smrg    newlib_search_path=
53126e7d3316Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
53136e7d3316Smrg    notinst_deplibs= # not-installed libtool libraries
53146e7d3316Smrg    notinst_path= # paths that contain not-installed libtool libraries
53156e7d3316Smrg
53166e7d3316Smrg    case $linkmode in
53176e7d3316Smrg    lib)
53186e7d3316Smrg	passes="conv dlpreopen link"
53196e7d3316Smrg	for file in $dlfiles $dlprefiles; do
53206e7d3316Smrg	  case $file in
53216e7d3316Smrg	  *.la) ;;
53226e7d3316Smrg	  *)
53236e7d3316Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
53246e7d3316Smrg	    ;;
53256e7d3316Smrg	  esac
53266e7d3316Smrg	done
53276e7d3316Smrg	;;
53286e7d3316Smrg    prog)
53296e7d3316Smrg	compile_deplibs=
53306e7d3316Smrg	finalize_deplibs=
53316e7d3316Smrg	alldeplibs=no
53326e7d3316Smrg	newdlfiles=
53336e7d3316Smrg	newdlprefiles=
53346e7d3316Smrg	passes="conv scan dlopen dlpreopen link"
53356e7d3316Smrg	;;
53366e7d3316Smrg    *)  passes="conv"
53376e7d3316Smrg	;;
53386e7d3316Smrg    esac
53396e7d3316Smrg
53406e7d3316Smrg    for pass in $passes; do
53416e7d3316Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
53426e7d3316Smrg      # so that -L comes before libs that need it for instance...
53436e7d3316Smrg      if test "$linkmode,$pass" = "lib,link"; then
53446e7d3316Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
53456e7d3316Smrg	##        order, and fix it there properly
53466e7d3316Smrg        tmp_deplibs=
53476e7d3316Smrg	for deplib in $deplibs; do
53486e7d3316Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
53496e7d3316Smrg	done
53506e7d3316Smrg	deplibs="$tmp_deplibs"
53516e7d3316Smrg      fi
53526e7d3316Smrg
53536e7d3316Smrg      if test "$linkmode,$pass" = "lib,link" ||
53546e7d3316Smrg	 test "$linkmode,$pass" = "prog,scan"; then
53556e7d3316Smrg	libs="$deplibs"
53566e7d3316Smrg	deplibs=
53576e7d3316Smrg      fi
53586e7d3316Smrg      if test "$linkmode" = prog; then
53596e7d3316Smrg	case $pass in
53606e7d3316Smrg	dlopen) libs="$dlfiles" ;;
53616e7d3316Smrg	dlpreopen) libs="$dlprefiles" ;;
53626e7d3316Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
53636e7d3316Smrg	esac
53646e7d3316Smrg      fi
53656e7d3316Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
53666e7d3316Smrg	# Collect and forward deplibs of preopened libtool libs
53676e7d3316Smrg	for lib in $dlprefiles; do
53686e7d3316Smrg	  # Ignore non-libtool-libs
53696e7d3316Smrg	  dependency_libs=
53706e7d3316Smrg	  case $lib in
53716e7d3316Smrg	  *.la)	func_source "$lib" ;;
53726e7d3316Smrg	  esac
53736e7d3316Smrg
53746e7d3316Smrg	  # Collect preopened libtool deplibs, except any this library
53756e7d3316Smrg	  # has declared as weak libs
53766e7d3316Smrg	  for deplib in $dependency_libs; do
53776e7d3316Smrg	    func_basename "$deplib"
53786e7d3316Smrg            deplib_base=$func_basename_result
53796e7d3316Smrg	    case " $weak_libs " in
53806e7d3316Smrg	    *" $deplib_base "*) ;;
53816e7d3316Smrg	    *) deplibs="$deplibs $deplib" ;;
53826e7d3316Smrg	    esac
53836e7d3316Smrg	  done
53846e7d3316Smrg	done
53856e7d3316Smrg	libs="$dlprefiles"
53866e7d3316Smrg      fi
53876e7d3316Smrg      if test "$pass" = dlopen; then
53886e7d3316Smrg	# Collect dlpreopened libraries
53896e7d3316Smrg	save_deplibs="$deplibs"
53906e7d3316Smrg	deplibs=
53916e7d3316Smrg      fi
53926e7d3316Smrg
53936e7d3316Smrg      for deplib in $libs; do
53946e7d3316Smrg	lib=
53956e7d3316Smrg	found=no
53966e7d3316Smrg	case $deplib in
53976e7d3316Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
53986e7d3316Smrg	  if test "$linkmode,$pass" = "prog,link"; then
53996e7d3316Smrg	    compile_deplibs="$deplib $compile_deplibs"
54006e7d3316Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
54016e7d3316Smrg	  else
54026e7d3316Smrg	    compiler_flags="$compiler_flags $deplib"
54036e7d3316Smrg	    if test "$linkmode" = lib ; then
54046e7d3316Smrg		case "$new_inherited_linker_flags " in
54056e7d3316Smrg		    *" $deplib "*) ;;
54066e7d3316Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
54076e7d3316Smrg		esac
54086e7d3316Smrg	    fi
54096e7d3316Smrg	  fi
54106e7d3316Smrg	  continue
54116e7d3316Smrg	  ;;
54126e7d3316Smrg	-l*)
54136e7d3316Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
54146e7d3316Smrg	    func_warning "\`-l' is ignored for archives/objects"
54156e7d3316Smrg	    continue
54166e7d3316Smrg	  fi
54176e7d3316Smrg	  func_stripname '-l' '' "$deplib"
54186e7d3316Smrg	  name=$func_stripname_result
54196e7d3316Smrg	  if test "$linkmode" = lib; then
54206e7d3316Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
54216e7d3316Smrg	  else
54226e7d3316Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
54236e7d3316Smrg	  fi
54246e7d3316Smrg	  for searchdir in $searchdirs; do
54256e7d3316Smrg	    for search_ext in .la $std_shrext .so .a; do
54266e7d3316Smrg	      # Search the libtool library
54276e7d3316Smrg	      lib="$searchdir/lib${name}${search_ext}"
54286e7d3316Smrg	      if test -f "$lib"; then
54296e7d3316Smrg		if test "$search_ext" = ".la"; then
54306e7d3316Smrg		  found=yes
54316e7d3316Smrg		else
54326e7d3316Smrg		  found=no
54336e7d3316Smrg		fi
54346e7d3316Smrg		break 2
54356e7d3316Smrg	      fi
54366e7d3316Smrg	    done
54376e7d3316Smrg	  done
54386e7d3316Smrg	  if test "$found" != yes; then
54396e7d3316Smrg	    # deplib doesn't seem to be a libtool library
54406e7d3316Smrg	    if test "$linkmode,$pass" = "prog,link"; then
54416e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
54426e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
54436e7d3316Smrg	    else
54446e7d3316Smrg	      deplibs="$deplib $deplibs"
54456e7d3316Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
54466e7d3316Smrg	    fi
54476e7d3316Smrg	    continue
54486e7d3316Smrg	  else # deplib is a libtool library
54496e7d3316Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
54506e7d3316Smrg	    # We need to do some special things here, and not later.
54516e7d3316Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
54526e7d3316Smrg	      case " $predeps $postdeps " in
54536e7d3316Smrg	      *" $deplib "*)
54546e7d3316Smrg		if func_lalib_p "$lib"; then
54556e7d3316Smrg		  library_names=
54566e7d3316Smrg		  old_library=
54576e7d3316Smrg		  func_source "$lib"
54586e7d3316Smrg		  for l in $old_library $library_names; do
54596e7d3316Smrg		    ll="$l"
54606e7d3316Smrg		  done
54616e7d3316Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
54626e7d3316Smrg		    found=no
54636e7d3316Smrg		    func_dirname "$lib" "" "."
54646e7d3316Smrg		    ladir="$func_dirname_result"
54656e7d3316Smrg		    lib=$ladir/$old_library
54666e7d3316Smrg		    if test "$linkmode,$pass" = "prog,link"; then
54676e7d3316Smrg		      compile_deplibs="$deplib $compile_deplibs"
54686e7d3316Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
54696e7d3316Smrg		    else
54706e7d3316Smrg		      deplibs="$deplib $deplibs"
54716e7d3316Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
54726e7d3316Smrg		    fi
54736e7d3316Smrg		    continue
54746e7d3316Smrg		  fi
54756e7d3316Smrg		fi
54766e7d3316Smrg		;;
54776e7d3316Smrg	      *) ;;
54786e7d3316Smrg	      esac
54796e7d3316Smrg	    fi
54806e7d3316Smrg	  fi
54816e7d3316Smrg	  ;; # -l
54826e7d3316Smrg	*.ltframework)
54836e7d3316Smrg	  if test "$linkmode,$pass" = "prog,link"; then
54846e7d3316Smrg	    compile_deplibs="$deplib $compile_deplibs"
54856e7d3316Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
54866e7d3316Smrg	  else
54876e7d3316Smrg	    deplibs="$deplib $deplibs"
54886e7d3316Smrg	    if test "$linkmode" = lib ; then
54896e7d3316Smrg		case "$new_inherited_linker_flags " in
54906e7d3316Smrg		    *" $deplib "*) ;;
54916e7d3316Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
54926e7d3316Smrg		esac
54936e7d3316Smrg	    fi
54946e7d3316Smrg	  fi
54956e7d3316Smrg	  continue
54966e7d3316Smrg	  ;;
54976e7d3316Smrg	-L*)
54986e7d3316Smrg	  case $linkmode in
54996e7d3316Smrg	  lib)
55006e7d3316Smrg	    deplibs="$deplib $deplibs"
55016e7d3316Smrg	    test "$pass" = conv && continue
55026e7d3316Smrg	    newdependency_libs="$deplib $newdependency_libs"
55036e7d3316Smrg	    func_stripname '-L' '' "$deplib"
55046e7d3316Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
55056e7d3316Smrg	    ;;
55066e7d3316Smrg	  prog)
55076e7d3316Smrg	    if test "$pass" = conv; then
55086e7d3316Smrg	      deplibs="$deplib $deplibs"
55096e7d3316Smrg	      continue
55106e7d3316Smrg	    fi
55116e7d3316Smrg	    if test "$pass" = scan; then
55126e7d3316Smrg	      deplibs="$deplib $deplibs"
55136e7d3316Smrg	    else
55146e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
55156e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
55166e7d3316Smrg	    fi
55176e7d3316Smrg	    func_stripname '-L' '' "$deplib"
55186e7d3316Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
55196e7d3316Smrg	    ;;
55206e7d3316Smrg	  *)
55216e7d3316Smrg	    func_warning "\`-L' is ignored for archives/objects"
55226e7d3316Smrg	    ;;
55236e7d3316Smrg	  esac # linkmode
55246e7d3316Smrg	  continue
55256e7d3316Smrg	  ;; # -L
55266e7d3316Smrg	-R*)
55276e7d3316Smrg	  if test "$pass" = link; then
55286e7d3316Smrg	    func_stripname '-R' '' "$deplib"
55296e7d3316Smrg	    dir=$func_stripname_result
55306e7d3316Smrg	    # Make sure the xrpath contains only unique directories.
55316e7d3316Smrg	    case "$xrpath " in
55326e7d3316Smrg	    *" $dir "*) ;;
55336e7d3316Smrg	    *) xrpath="$xrpath $dir" ;;
55346e7d3316Smrg	    esac
55356e7d3316Smrg	  fi
55366e7d3316Smrg	  deplibs="$deplib $deplibs"
55376e7d3316Smrg	  continue
55386e7d3316Smrg	  ;;
55396e7d3316Smrg	*.la) lib="$deplib" ;;
55406e7d3316Smrg	*.$libext)
55416e7d3316Smrg	  if test "$pass" = conv; then
55426e7d3316Smrg	    deplibs="$deplib $deplibs"
55436e7d3316Smrg	    continue
55446e7d3316Smrg	  fi
55456e7d3316Smrg	  case $linkmode in
55466e7d3316Smrg	  lib)
55476e7d3316Smrg	    # Linking convenience modules into shared libraries is allowed,
55486e7d3316Smrg	    # but linking other static libraries is non-portable.
55496e7d3316Smrg	    case " $dlpreconveniencelibs " in
55506e7d3316Smrg	    *" $deplib "*) ;;
55516e7d3316Smrg	    *)
55526e7d3316Smrg	      valid_a_lib=no
55536e7d3316Smrg	      case $deplibs_check_method in
55546e7d3316Smrg		match_pattern*)
55556e7d3316Smrg		  set dummy $deplibs_check_method; shift
55566e7d3316Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
55576e7d3316Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
55586e7d3316Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
55596e7d3316Smrg		    valid_a_lib=yes
55606e7d3316Smrg		  fi
55616e7d3316Smrg		;;
55626e7d3316Smrg		pass_all)
55636e7d3316Smrg		  valid_a_lib=yes
55646e7d3316Smrg		;;
55656e7d3316Smrg	      esac
55666e7d3316Smrg	      if test "$valid_a_lib" != yes; then
55676e7d3316Smrg		echo
55686e7d3316Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
55696e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
55706e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
55716e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
55726e7d3316Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
55736e7d3316Smrg		echo "*** that it is just a static archive that I should not use here."
55746e7d3316Smrg	      else
55756e7d3316Smrg		echo
55766e7d3316Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
55776e7d3316Smrg		$ECHO "*** static library $deplib is not portable!"
55786e7d3316Smrg		deplibs="$deplib $deplibs"
55796e7d3316Smrg	      fi
55806e7d3316Smrg	      ;;
55816e7d3316Smrg	    esac
55826e7d3316Smrg	    continue
55836e7d3316Smrg	    ;;
55846e7d3316Smrg	  prog)
55856e7d3316Smrg	    if test "$pass" != link; then
55866e7d3316Smrg	      deplibs="$deplib $deplibs"
55876e7d3316Smrg	    else
55886e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
55896e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
55906e7d3316Smrg	    fi
55916e7d3316Smrg	    continue
55926e7d3316Smrg	    ;;
55936e7d3316Smrg	  esac # linkmode
55946e7d3316Smrg	  ;; # *.$libext
55956e7d3316Smrg	*.lo | *.$objext)
55966e7d3316Smrg	  if test "$pass" = conv; then
55976e7d3316Smrg	    deplibs="$deplib $deplibs"
55986e7d3316Smrg	  elif test "$linkmode" = prog; then
55996e7d3316Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
56006e7d3316Smrg	      # If there is no dlopen support or we're linking statically,
56016e7d3316Smrg	      # we need to preload.
56026e7d3316Smrg	      newdlprefiles="$newdlprefiles $deplib"
56036e7d3316Smrg	      compile_deplibs="$deplib $compile_deplibs"
56046e7d3316Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
56056e7d3316Smrg	    else
56066e7d3316Smrg	      newdlfiles="$newdlfiles $deplib"
56076e7d3316Smrg	    fi
56086e7d3316Smrg	  fi
56096e7d3316Smrg	  continue
56106e7d3316Smrg	  ;;
56116e7d3316Smrg	%DEPLIBS%)
56126e7d3316Smrg	  alldeplibs=yes
56136e7d3316Smrg	  continue
56146e7d3316Smrg	  ;;
56156e7d3316Smrg	esac # case $deplib
56166e7d3316Smrg
56176e7d3316Smrg	if test "$found" = yes || test -f "$lib"; then :
56186e7d3316Smrg	else
56196e7d3316Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
56206e7d3316Smrg	fi
56216e7d3316Smrg
56226e7d3316Smrg	# Check to see that this really is a libtool archive.
56236e7d3316Smrg	func_lalib_unsafe_p "$lib" \
56246e7d3316Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
56256e7d3316Smrg
56266e7d3316Smrg	func_dirname "$lib" "" "."
56276e7d3316Smrg	ladir="$func_dirname_result"
56286e7d3316Smrg
56296e7d3316Smrg	dlname=
56306e7d3316Smrg	dlopen=
56316e7d3316Smrg	dlpreopen=
56326e7d3316Smrg	libdir=
56336e7d3316Smrg	library_names=
56346e7d3316Smrg	old_library=
56356e7d3316Smrg	inherited_linker_flags=
56366e7d3316Smrg	# If the library was installed with an old release of libtool,
56376e7d3316Smrg	# it will not redefine variables installed, or shouldnotlink
56386e7d3316Smrg	installed=yes
56396e7d3316Smrg	shouldnotlink=no
56406e7d3316Smrg	avoidtemprpath=
56416e7d3316Smrg
56426e7d3316Smrg
56436e7d3316Smrg	# Read the .la file
56446e7d3316Smrg	func_source "$lib"
56456e7d3316Smrg
56466e7d3316Smrg	# Convert "-framework foo" to "foo.ltframework"
56476e7d3316Smrg	if test -n "$inherited_linker_flags"; then
56486e7d3316Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
56496e7d3316Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
56506e7d3316Smrg	    case " $new_inherited_linker_flags " in
56516e7d3316Smrg	      *" $tmp_inherited_linker_flag "*) ;;
56526e7d3316Smrg	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
56536e7d3316Smrg	    esac
56546e7d3316Smrg	  done
56556e7d3316Smrg	fi
56566e7d3316Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
56576e7d3316Smrg	if test "$linkmode,$pass" = "lib,link" ||
56586e7d3316Smrg	   test "$linkmode,$pass" = "prog,scan" ||
56596e7d3316Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
56606e7d3316Smrg	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
56616e7d3316Smrg	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
56626e7d3316Smrg	fi
56636e7d3316Smrg
56646e7d3316Smrg	if test "$pass" = conv; then
56656e7d3316Smrg	  # Only check for convenience libraries
56666e7d3316Smrg	  deplibs="$lib $deplibs"
56676e7d3316Smrg	  if test -z "$libdir"; then
56686e7d3316Smrg	    if test -z "$old_library"; then
56696e7d3316Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
56706e7d3316Smrg	    fi
56716e7d3316Smrg	    # It is a libtool convenience library, so add in its objects.
56726e7d3316Smrg	    convenience="$convenience $ladir/$objdir/$old_library"
56736e7d3316Smrg	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
56746e7d3316Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
56756e7d3316Smrg	    func_fatal_error "\`$lib' is not a convenience library"
56766e7d3316Smrg	  fi
56776e7d3316Smrg	  tmp_libs=
56786e7d3316Smrg	  for deplib in $dependency_libs; do
56796e7d3316Smrg	    deplibs="$deplib $deplibs"
56806e7d3316Smrg	    if $opt_duplicate_deps ; then
56816e7d3316Smrg	      case "$tmp_libs " in
56826e7d3316Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
56836e7d3316Smrg	      esac
56846e7d3316Smrg	    fi
56856e7d3316Smrg	    tmp_libs="$tmp_libs $deplib"
56866e7d3316Smrg	  done
56876e7d3316Smrg	  continue
56886e7d3316Smrg	fi # $pass = conv
56896e7d3316Smrg
56906e7d3316Smrg
56916e7d3316Smrg	# Get the name of the library we link against.
56926e7d3316Smrg	linklib=
56936e7d3316Smrg	for l in $old_library $library_names; do
56946e7d3316Smrg	  linklib="$l"
56956e7d3316Smrg	done
56966e7d3316Smrg	if test -z "$linklib"; then
56976e7d3316Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
56986e7d3316Smrg	fi
56996e7d3316Smrg
57006e7d3316Smrg	# This library was specified with -dlopen.
57016e7d3316Smrg	if test "$pass" = dlopen; then
57026e7d3316Smrg	  if test -z "$libdir"; then
57036e7d3316Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
57046e7d3316Smrg	  fi
57056e7d3316Smrg	  if test -z "$dlname" ||
57066e7d3316Smrg	     test "$dlopen_support" != yes ||
57076e7d3316Smrg	     test "$build_libtool_libs" = no; then
57086e7d3316Smrg	    # If there is no dlname, no dlopen support or we're linking
57096e7d3316Smrg	    # statically, we need to preload.  We also need to preload any
57106e7d3316Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
57116e7d3316Smrg	    # bomb out in the load deplibs phase.
57126e7d3316Smrg	    dlprefiles="$dlprefiles $lib $dependency_libs"
57136e7d3316Smrg	  else
57146e7d3316Smrg	    newdlfiles="$newdlfiles $lib"
57156e7d3316Smrg	  fi
57166e7d3316Smrg	  continue
57176e7d3316Smrg	fi # $pass = dlopen
57186e7d3316Smrg
57196e7d3316Smrg	# We need an absolute path.
57206e7d3316Smrg	case $ladir in
57216e7d3316Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
57226e7d3316Smrg	*)
57236e7d3316Smrg	  abs_ladir=`cd "$ladir" && pwd`
57246e7d3316Smrg	  if test -z "$abs_ladir"; then
57256e7d3316Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
57266e7d3316Smrg	    func_warning "passing it literally to the linker, although it might fail"
57276e7d3316Smrg	    abs_ladir="$ladir"
57286e7d3316Smrg	  fi
57296e7d3316Smrg	  ;;
57306e7d3316Smrg	esac
57316e7d3316Smrg	func_basename "$lib"
57326e7d3316Smrg	laname="$func_basename_result"
57336e7d3316Smrg
57346e7d3316Smrg	# Find the relevant object directory and library name.
57356e7d3316Smrg	if test "X$installed" = Xyes; then
57366e7d3316Smrg	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
57376e7d3316Smrg	    func_warning "library \`$lib' was moved."
57386e7d3316Smrg	    dir="$ladir"
57396e7d3316Smrg	    absdir="$abs_ladir"
57406e7d3316Smrg	    libdir="$abs_ladir"
57416e7d3316Smrg	  else
57426e7d3316Smrg	    dir="$libdir"
57436e7d3316Smrg	    absdir="$libdir"
57446e7d3316Smrg	  fi
57456e7d3316Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
57466e7d3316Smrg	else
57476e7d3316Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
57486e7d3316Smrg	    dir="$ladir"
57496e7d3316Smrg	    absdir="$abs_ladir"
57506e7d3316Smrg	    # Remove this search path later
57516e7d3316Smrg	    notinst_path="$notinst_path $abs_ladir"
57526e7d3316Smrg	  else
57536e7d3316Smrg	    dir="$ladir/$objdir"
57546e7d3316Smrg	    absdir="$abs_ladir/$objdir"
57556e7d3316Smrg	    # Remove this search path later
57566e7d3316Smrg	    notinst_path="$notinst_path $abs_ladir"
57576e7d3316Smrg	  fi
57586e7d3316Smrg	fi # $installed = yes
57596e7d3316Smrg	func_stripname 'lib' '.la' "$laname"
57606e7d3316Smrg	name=$func_stripname_result
57616e7d3316Smrg
57626e7d3316Smrg	# This library was specified with -dlpreopen.
57636e7d3316Smrg	if test "$pass" = dlpreopen; then
57646e7d3316Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
57656e7d3316Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
57666e7d3316Smrg	  fi
57676e7d3316Smrg	  # Prefer using a static library (so that no silly _DYNAMIC symbols
57686e7d3316Smrg	  # are required to link).
57696e7d3316Smrg	  if test -n "$old_library"; then
57706e7d3316Smrg	    newdlprefiles="$newdlprefiles $dir/$old_library"
57716e7d3316Smrg	    # Keep a list of preopened convenience libraries to check
57726e7d3316Smrg	    # that they are being used correctly in the link pass.
57736e7d3316Smrg	    test -z "$libdir" && \
57746e7d3316Smrg		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
57756e7d3316Smrg	  # Otherwise, use the dlname, so that lt_dlopen finds it.
57766e7d3316Smrg	  elif test -n "$dlname"; then
57776e7d3316Smrg	    newdlprefiles="$newdlprefiles $dir/$dlname"
57786e7d3316Smrg	  else
57796e7d3316Smrg	    newdlprefiles="$newdlprefiles $dir/$linklib"
57806e7d3316Smrg	  fi
57816e7d3316Smrg	fi # $pass = dlpreopen
57826e7d3316Smrg
57836e7d3316Smrg	if test -z "$libdir"; then
57846e7d3316Smrg	  # Link the convenience library
57856e7d3316Smrg	  if test "$linkmode" = lib; then
57866e7d3316Smrg	    deplibs="$dir/$old_library $deplibs"
57876e7d3316Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
57886e7d3316Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
57896e7d3316Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
57906e7d3316Smrg	  else
57916e7d3316Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
57926e7d3316Smrg	  fi
57936e7d3316Smrg	  continue
57946e7d3316Smrg	fi
57956e7d3316Smrg
57966e7d3316Smrg
57976e7d3316Smrg	if test "$linkmode" = prog && test "$pass" != link; then
57986e7d3316Smrg	  newlib_search_path="$newlib_search_path $ladir"
57996e7d3316Smrg	  deplibs="$lib $deplibs"
58006e7d3316Smrg
58016e7d3316Smrg	  linkalldeplibs=no
58026e7d3316Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
58036e7d3316Smrg	     test "$build_libtool_libs" = no; then
58046e7d3316Smrg	    linkalldeplibs=yes
58056e7d3316Smrg	  fi
58066e7d3316Smrg
58076e7d3316Smrg	  tmp_libs=
58086e7d3316Smrg	  for deplib in $dependency_libs; do
58096e7d3316Smrg	    case $deplib in
58106e7d3316Smrg	    -L*) func_stripname '-L' '' "$deplib"
58116e7d3316Smrg	         newlib_search_path="$newlib_search_path $func_stripname_result"
58126e7d3316Smrg		 ;;
58136e7d3316Smrg	    esac
58146e7d3316Smrg	    # Need to link against all dependency_libs?
58156e7d3316Smrg	    if test "$linkalldeplibs" = yes; then
58166e7d3316Smrg	      deplibs="$deplib $deplibs"
58176e7d3316Smrg	    else
58186e7d3316Smrg	      # Need to hardcode shared library paths
58196e7d3316Smrg	      # or/and link against static libraries
58206e7d3316Smrg	      newdependency_libs="$deplib $newdependency_libs"
58216e7d3316Smrg	    fi
58226e7d3316Smrg	    if $opt_duplicate_deps ; then
58236e7d3316Smrg	      case "$tmp_libs " in
58246e7d3316Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
58256e7d3316Smrg	      esac
58266e7d3316Smrg	    fi
58276e7d3316Smrg	    tmp_libs="$tmp_libs $deplib"
58286e7d3316Smrg	  done # for deplib
58296e7d3316Smrg	  continue
58306e7d3316Smrg	fi # $linkmode = prog...
58316e7d3316Smrg
58326e7d3316Smrg	if test "$linkmode,$pass" = "prog,link"; then
58336e7d3316Smrg	  if test -n "$library_names" &&
58346e7d3316Smrg	     { { test "$prefer_static_libs" = no ||
58356e7d3316Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
58366e7d3316Smrg	       test -z "$old_library"; }; then
58376e7d3316Smrg	    # We need to hardcode the library path
58386e7d3316Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
58396e7d3316Smrg	      # Make sure the rpath contains only unique directories.
58406e7d3316Smrg	      case "$temp_rpath:" in
58416e7d3316Smrg	      *"$absdir:"*) ;;
58426e7d3316Smrg	      *) temp_rpath="$temp_rpath$absdir:" ;;
58436e7d3316Smrg	      esac
58446e7d3316Smrg	    fi
58456e7d3316Smrg
58466e7d3316Smrg	    # Hardcode the library path.
58476e7d3316Smrg	    # Skip directories that are in the system default run-time
58486e7d3316Smrg	    # search path.
58496e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
58506e7d3316Smrg	    *" $absdir "*) ;;
58516e7d3316Smrg	    *)
58526e7d3316Smrg	      case "$compile_rpath " in
58536e7d3316Smrg	      *" $absdir "*) ;;
58546e7d3316Smrg	      *) compile_rpath="$compile_rpath $absdir"
58556e7d3316Smrg	      esac
58566e7d3316Smrg	      ;;
58576e7d3316Smrg	    esac
58586e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
58596e7d3316Smrg	    *" $libdir "*) ;;
58606e7d3316Smrg	    *)
58616e7d3316Smrg	      case "$finalize_rpath " in
58626e7d3316Smrg	      *" $libdir "*) ;;
58636e7d3316Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
58646e7d3316Smrg	      esac
58656e7d3316Smrg	      ;;
58666e7d3316Smrg	    esac
58676e7d3316Smrg	  fi # $linkmode,$pass = prog,link...
58686e7d3316Smrg
58696e7d3316Smrg	  if test "$alldeplibs" = yes &&
58706e7d3316Smrg	     { test "$deplibs_check_method" = pass_all ||
58716e7d3316Smrg	       { test "$build_libtool_libs" = yes &&
58726e7d3316Smrg		 test -n "$library_names"; }; }; then
58736e7d3316Smrg	    # We only need to search for static libraries
58746e7d3316Smrg	    continue
58756e7d3316Smrg	  fi
58766e7d3316Smrg	fi
58776e7d3316Smrg
58786e7d3316Smrg	link_static=no # Whether the deplib will be linked statically
58796e7d3316Smrg	use_static_libs=$prefer_static_libs
58806e7d3316Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
58816e7d3316Smrg	  use_static_libs=no
58826e7d3316Smrg	fi
58836e7d3316Smrg	if test -n "$library_names" &&
58846e7d3316Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
58856e7d3316Smrg	  case $host in
58866e7d3316Smrg	  *cygwin* | *mingw* | *cegcc*)
58876e7d3316Smrg	      # No point in relinking DLLs because paths are not encoded
58886e7d3316Smrg	      notinst_deplibs="$notinst_deplibs $lib"
58896e7d3316Smrg	      need_relink=no
58906e7d3316Smrg	    ;;
58916e7d3316Smrg	  *)
58926e7d3316Smrg	    if test "$installed" = no; then
58936e7d3316Smrg	      notinst_deplibs="$notinst_deplibs $lib"
58946e7d3316Smrg	      need_relink=yes
58956e7d3316Smrg	    fi
58966e7d3316Smrg	    ;;
58976e7d3316Smrg	  esac
58986e7d3316Smrg	  # This is a shared library
58996e7d3316Smrg
59006e7d3316Smrg	  # Warn about portability, can't link against -module's on some
59016e7d3316Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
59026e7d3316Smrg	  dlopenmodule=""
59036e7d3316Smrg	  for dlpremoduletest in $dlprefiles; do
59046e7d3316Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
59056e7d3316Smrg	      dlopenmodule="$dlpremoduletest"
59066e7d3316Smrg	      break
59076e7d3316Smrg	    fi
59086e7d3316Smrg	  done
59096e7d3316Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
59106e7d3316Smrg	    echo
59116e7d3316Smrg	    if test "$linkmode" = prog; then
59126e7d3316Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
59136e7d3316Smrg	    else
59146e7d3316Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
59156e7d3316Smrg	    fi
59166e7d3316Smrg	    $ECHO "*** $linklib is not portable!"
59176e7d3316Smrg	  fi
59186e7d3316Smrg	  if test "$linkmode" = lib &&
59196e7d3316Smrg	     test "$hardcode_into_libs" = yes; then
59206e7d3316Smrg	    # Hardcode the library path.
59216e7d3316Smrg	    # Skip directories that are in the system default run-time
59226e7d3316Smrg	    # search path.
59236e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
59246e7d3316Smrg	    *" $absdir "*) ;;
59256e7d3316Smrg	    *)
59266e7d3316Smrg	      case "$compile_rpath " in
59276e7d3316Smrg	      *" $absdir "*) ;;
59286e7d3316Smrg	      *) compile_rpath="$compile_rpath $absdir"
59296e7d3316Smrg	      esac
59306e7d3316Smrg	      ;;
59316e7d3316Smrg	    esac
59326e7d3316Smrg	    case " $sys_lib_dlsearch_path " in
59336e7d3316Smrg	    *" $libdir "*) ;;
59346e7d3316Smrg	    *)
59356e7d3316Smrg	      case "$finalize_rpath " in
59366e7d3316Smrg	      *" $libdir "*) ;;
59376e7d3316Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
59386e7d3316Smrg	      esac
59396e7d3316Smrg	      ;;
59406e7d3316Smrg	    esac
59416e7d3316Smrg	  fi
59426e7d3316Smrg
59436e7d3316Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
59446e7d3316Smrg	    # figure out the soname
59456e7d3316Smrg	    set dummy $library_names
59466e7d3316Smrg	    shift
59476e7d3316Smrg	    realname="$1"
59486e7d3316Smrg	    shift
59496e7d3316Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
59506e7d3316Smrg	    # use dlname if we got it. it's perfectly good, no?
59516e7d3316Smrg	    if test -n "$dlname"; then
59526e7d3316Smrg	      soname="$dlname"
59536e7d3316Smrg	    elif test -n "$soname_spec"; then
59546e7d3316Smrg	      # bleh windows
59556e7d3316Smrg	      case $host in
59566e7d3316Smrg	      *cygwin* | mingw* | *cegcc*)
59576e7d3316Smrg	        func_arith $current - $age
59586e7d3316Smrg		major=$func_arith_result
59596e7d3316Smrg		versuffix="-$major"
59606e7d3316Smrg		;;
59616e7d3316Smrg	      esac
59626e7d3316Smrg	      eval soname=\"$soname_spec\"
59636e7d3316Smrg	    else
59646e7d3316Smrg	      soname="$realname"
59656e7d3316Smrg	    fi
59666e7d3316Smrg
59676e7d3316Smrg	    # Make a new name for the extract_expsyms_cmds to use
59686e7d3316Smrg	    soroot="$soname"
59696e7d3316Smrg	    func_basename "$soroot"
59706e7d3316Smrg	    soname="$func_basename_result"
59716e7d3316Smrg	    func_stripname 'lib' '.dll' "$soname"
59726e7d3316Smrg	    newlib=libimp-$func_stripname_result.a
59736e7d3316Smrg
59746e7d3316Smrg	    # If the library has no export list, then create one now
59756e7d3316Smrg	    if test -f "$output_objdir/$soname-def"; then :
59766e7d3316Smrg	    else
59776e7d3316Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
59786e7d3316Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
59796e7d3316Smrg	    fi
59806e7d3316Smrg
59816e7d3316Smrg	    # Create $newlib
59826e7d3316Smrg	    if test -f "$output_objdir/$newlib"; then :; else
59836e7d3316Smrg	      func_verbose "generating import library for \`$soname'"
59846e7d3316Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
59856e7d3316Smrg	    fi
59866e7d3316Smrg	    # make sure the library variables are pointing to the new library
59876e7d3316Smrg	    dir=$output_objdir
59886e7d3316Smrg	    linklib=$newlib
59896e7d3316Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
59906e7d3316Smrg
59916e7d3316Smrg	  if test "$linkmode" = prog || test "$mode" != relink; then
59926e7d3316Smrg	    add_shlibpath=
59936e7d3316Smrg	    add_dir=
59946e7d3316Smrg	    add=
59956e7d3316Smrg	    lib_linked=yes
59966e7d3316Smrg	    case $hardcode_action in
59976e7d3316Smrg	    immediate | unsupported)
59986e7d3316Smrg	      if test "$hardcode_direct" = no; then
59996e7d3316Smrg		add="$dir/$linklib"
60006e7d3316Smrg		case $host in
60016e7d3316Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
60026e7d3316Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
60036e7d3316Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
60046e7d3316Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
60056e7d3316Smrg		  *-*-darwin* )
60066e7d3316Smrg		    # if the lib is a (non-dlopened) module then we can not
60076e7d3316Smrg		    # link against it, someone is ignoring the earlier warnings
60086e7d3316Smrg		    if /usr/bin/file -L $add 2> /dev/null |
60096e7d3316Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
60106e7d3316Smrg		      if test "X$dlopenmodule" != "X$lib"; then
60116e7d3316Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
60126e7d3316Smrg			if test -z "$old_library" ; then
60136e7d3316Smrg			  echo
60146e7d3316Smrg			  echo "*** And there doesn't seem to be a static archive available"
60156e7d3316Smrg			  echo "*** The link will probably fail, sorry"
60166e7d3316Smrg			else
60176e7d3316Smrg			  add="$dir/$old_library"
60186e7d3316Smrg			fi
60196e7d3316Smrg		      elif test -n "$old_library"; then
60206e7d3316Smrg			add="$dir/$old_library"
60216e7d3316Smrg		      fi
60226e7d3316Smrg		    fi
60236e7d3316Smrg		esac
60246e7d3316Smrg	      elif test "$hardcode_minus_L" = no; then
60256e7d3316Smrg		case $host in
60266e7d3316Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
60276e7d3316Smrg		esac
60286e7d3316Smrg		add_dir="-L$dir"
60296e7d3316Smrg		add="-l$name"
60306e7d3316Smrg	      elif test "$hardcode_shlibpath_var" = no; then
60316e7d3316Smrg		add_shlibpath="$dir"
60326e7d3316Smrg		add="-l$name"
60336e7d3316Smrg	      else
60346e7d3316Smrg		lib_linked=no
60356e7d3316Smrg	      fi
60366e7d3316Smrg	      ;;
60376e7d3316Smrg	    relink)
60386e7d3316Smrg	      if test "$hardcode_direct" = yes &&
60396e7d3316Smrg	         test "$hardcode_direct_absolute" = no; then
60406e7d3316Smrg		add="$dir/$linklib"
60416e7d3316Smrg	      elif test "$hardcode_minus_L" = yes; then
60426e7d3316Smrg		add_dir="-L$dir"
60436e7d3316Smrg		# Try looking first in the location we're being installed to.
60446e7d3316Smrg		if test -n "$inst_prefix_dir"; then
60456e7d3316Smrg		  case $libdir in
60466e7d3316Smrg		    [\\/]*)
60476e7d3316Smrg		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
60486e7d3316Smrg		      ;;
60496e7d3316Smrg		  esac
60506e7d3316Smrg		fi
60516e7d3316Smrg		add="-l$name"
60526e7d3316Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
60536e7d3316Smrg		add_shlibpath="$dir"
60546e7d3316Smrg		add="-l$name"
60556e7d3316Smrg	      else
60566e7d3316Smrg		lib_linked=no
60576e7d3316Smrg	      fi
60586e7d3316Smrg	      ;;
60596e7d3316Smrg	    *) lib_linked=no ;;
60606e7d3316Smrg	    esac
60616e7d3316Smrg
60626e7d3316Smrg	    if test "$lib_linked" != yes; then
60636e7d3316Smrg	      func_fatal_configuration "unsupported hardcode properties"
60646e7d3316Smrg	    fi
60656e7d3316Smrg
60666e7d3316Smrg	    if test -n "$add_shlibpath"; then
60676e7d3316Smrg	      case :$compile_shlibpath: in
60686e7d3316Smrg	      *":$add_shlibpath:"*) ;;
60696e7d3316Smrg	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
60706e7d3316Smrg	      esac
60716e7d3316Smrg	    fi
60726e7d3316Smrg	    if test "$linkmode" = prog; then
60736e7d3316Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
60746e7d3316Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
60756e7d3316Smrg	    else
60766e7d3316Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
60776e7d3316Smrg	      test -n "$add" && deplibs="$add $deplibs"
60786e7d3316Smrg	      if test "$hardcode_direct" != yes &&
60796e7d3316Smrg		 test "$hardcode_minus_L" != yes &&
60806e7d3316Smrg		 test "$hardcode_shlibpath_var" = yes; then
60816e7d3316Smrg		case :$finalize_shlibpath: in
60826e7d3316Smrg		*":$libdir:"*) ;;
60836e7d3316Smrg		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
60846e7d3316Smrg		esac
60856e7d3316Smrg	      fi
60866e7d3316Smrg	    fi
60876e7d3316Smrg	  fi
60886e7d3316Smrg
60896e7d3316Smrg	  if test "$linkmode" = prog || test "$mode" = relink; then
60906e7d3316Smrg	    add_shlibpath=
60916e7d3316Smrg	    add_dir=
60926e7d3316Smrg	    add=
60936e7d3316Smrg	    # Finalize command for both is simple: just hardcode it.
60946e7d3316Smrg	    if test "$hardcode_direct" = yes &&
60956e7d3316Smrg	       test "$hardcode_direct_absolute" = no; then
60966e7d3316Smrg	      add="$libdir/$linklib"
60976e7d3316Smrg	    elif test "$hardcode_minus_L" = yes; then
60986e7d3316Smrg	      add_dir="-L$libdir"
60996e7d3316Smrg	      add="-l$name"
61006e7d3316Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
61016e7d3316Smrg	      case :$finalize_shlibpath: in
61026e7d3316Smrg	      *":$libdir:"*) ;;
61036e7d3316Smrg	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
61046e7d3316Smrg	      esac
61056e7d3316Smrg	      add="-l$name"
61066e7d3316Smrg	    elif test "$hardcode_automatic" = yes; then
61076e7d3316Smrg	      if test -n "$inst_prefix_dir" &&
61086e7d3316Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
61096e7d3316Smrg		add="$inst_prefix_dir$libdir/$linklib"
61106e7d3316Smrg	      else
61116e7d3316Smrg		add="$libdir/$linklib"
61126e7d3316Smrg	      fi
61136e7d3316Smrg	    else
61146e7d3316Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
61156e7d3316Smrg	      add_dir="-L$libdir"
61166e7d3316Smrg	      # Try looking first in the location we're being installed to.
61176e7d3316Smrg	      if test -n "$inst_prefix_dir"; then
61186e7d3316Smrg		case $libdir in
61196e7d3316Smrg		  [\\/]*)
61206e7d3316Smrg		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
61216e7d3316Smrg		    ;;
61226e7d3316Smrg		esac
61236e7d3316Smrg	      fi
61246e7d3316Smrg	      add="-l$name"
61256e7d3316Smrg	    fi
61266e7d3316Smrg
61276e7d3316Smrg	    if test "$linkmode" = prog; then
61286e7d3316Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
61296e7d3316Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
61306e7d3316Smrg	    else
61316e7d3316Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
61326e7d3316Smrg	      test -n "$add" && deplibs="$add $deplibs"
61336e7d3316Smrg	    fi
61346e7d3316Smrg	  fi
61356e7d3316Smrg	elif test "$linkmode" = prog; then
61366e7d3316Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
61376e7d3316Smrg	  # is not unsupported.  This is valid on all known static and
61386e7d3316Smrg	  # shared platforms.
61396e7d3316Smrg	  if test "$hardcode_direct" != unsupported; then
61406e7d3316Smrg	    test -n "$old_library" && linklib="$old_library"
61416e7d3316Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
61426e7d3316Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
61436e7d3316Smrg	  else
61446e7d3316Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
61456e7d3316Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
61466e7d3316Smrg	  fi
61476e7d3316Smrg	elif test "$build_libtool_libs" = yes; then
61486e7d3316Smrg	  # Not a shared library
61496e7d3316Smrg	  if test "$deplibs_check_method" != pass_all; then
61506e7d3316Smrg	    # We're trying link a shared library against a static one
61516e7d3316Smrg	    # but the system doesn't support it.
61526e7d3316Smrg
61536e7d3316Smrg	    # Just print a warning and add the library to dependency_libs so
61546e7d3316Smrg	    # that the program can be linked against the static library.
61556e7d3316Smrg	    echo
61566e7d3316Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
61576e7d3316Smrg	    echo "*** I have the capability to make that library automatically link in when"
61586e7d3316Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
61596e7d3316Smrg	    echo "*** shared version of the library, which you do not appear to have."
61606e7d3316Smrg	    if test "$module" = yes; then
61616e7d3316Smrg	      echo "*** But as you try to build a module library, libtool will still create "
61626e7d3316Smrg	      echo "*** a static module, that should work as long as the dlopening application"
61636e7d3316Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
61646e7d3316Smrg	      if test -z "$global_symbol_pipe"; then
61656e7d3316Smrg		echo
61666e7d3316Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
61676e7d3316Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
61686e7d3316Smrg		echo "*** not find such a program.  So, this module is probably useless."
61696e7d3316Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
61706e7d3316Smrg	      fi
61716e7d3316Smrg	      if test "$build_old_libs" = no; then
61726e7d3316Smrg		build_libtool_libs=module
61736e7d3316Smrg		build_old_libs=yes
61746e7d3316Smrg	      else
61756e7d3316Smrg		build_libtool_libs=no
61766e7d3316Smrg	      fi
61776e7d3316Smrg	    fi
61786e7d3316Smrg	  else
61796e7d3316Smrg	    deplibs="$dir/$old_library $deplibs"
61806e7d3316Smrg	    link_static=yes
61816e7d3316Smrg	  fi
61826e7d3316Smrg	fi # link shared/static library?
61836e7d3316Smrg
61846e7d3316Smrg	if test "$linkmode" = lib; then
61856e7d3316Smrg	  if test -n "$dependency_libs" &&
61866e7d3316Smrg	     { test "$hardcode_into_libs" != yes ||
61876e7d3316Smrg	       test "$build_old_libs" = yes ||
61886e7d3316Smrg	       test "$link_static" = yes; }; then
61896e7d3316Smrg	    # Extract -R from dependency_libs
61906e7d3316Smrg	    temp_deplibs=
61916e7d3316Smrg	    for libdir in $dependency_libs; do
61926e7d3316Smrg	      case $libdir in
61936e7d3316Smrg	      -R*) func_stripname '-R' '' "$libdir"
61946e7d3316Smrg	           temp_xrpath=$func_stripname_result
61956e7d3316Smrg		   case " $xrpath " in
61966e7d3316Smrg		   *" $temp_xrpath "*) ;;
61976e7d3316Smrg		   *) xrpath="$xrpath $temp_xrpath";;
61986e7d3316Smrg		   esac;;
61996e7d3316Smrg	      *) temp_deplibs="$temp_deplibs $libdir";;
62006e7d3316Smrg	      esac
62016e7d3316Smrg	    done
62026e7d3316Smrg	    dependency_libs="$temp_deplibs"
62036e7d3316Smrg	  fi
62046e7d3316Smrg
62056e7d3316Smrg	  newlib_search_path="$newlib_search_path $absdir"
62066e7d3316Smrg	  # Link against this library
62076e7d3316Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
62086e7d3316Smrg	  # ... and its dependency_libs
62096e7d3316Smrg	  tmp_libs=
62106e7d3316Smrg	  for deplib in $dependency_libs; do
62116e7d3316Smrg	    newdependency_libs="$deplib $newdependency_libs"
62126e7d3316Smrg	    if $opt_duplicate_deps ; then
62136e7d3316Smrg	      case "$tmp_libs " in
62146e7d3316Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
62156e7d3316Smrg	      esac
62166e7d3316Smrg	    fi
62176e7d3316Smrg	    tmp_libs="$tmp_libs $deplib"
62186e7d3316Smrg	  done
62196e7d3316Smrg
62206e7d3316Smrg	  if test "$link_all_deplibs" != no; then
62216e7d3316Smrg	    # Add the search paths of all dependency libraries
62226e7d3316Smrg	    for deplib in $dependency_libs; do
62236e7d3316Smrg	      path=
62246e7d3316Smrg	      case $deplib in
62256e7d3316Smrg	      -L*) path="$deplib" ;;
62266e7d3316Smrg	      *.la)
62276e7d3316Smrg	        func_dirname "$deplib" "" "."
62286e7d3316Smrg		dir="$func_dirname_result"
62296e7d3316Smrg		# We need an absolute path.
62306e7d3316Smrg		case $dir in
62316e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
62326e7d3316Smrg		*)
62336e7d3316Smrg		  absdir=`cd "$dir" && pwd`
62346e7d3316Smrg		  if test -z "$absdir"; then
62356e7d3316Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
62366e7d3316Smrg		    absdir="$dir"
62376e7d3316Smrg		  fi
62386e7d3316Smrg		  ;;
62396e7d3316Smrg		esac
62406e7d3316Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
62416e7d3316Smrg		case $host in
62426e7d3316Smrg		*-*-darwin*)
62436e7d3316Smrg		  depdepl=
62446e7d3316Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
62456e7d3316Smrg		  if test -n "$deplibrary_names" ; then
62466e7d3316Smrg		    for tmp in $deplibrary_names ; do
62476e7d3316Smrg		      depdepl=$tmp
62486e7d3316Smrg		    done
62496e7d3316Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
62506e7d3316Smrg		      depdepl="$absdir/$objdir/$depdepl"
62516e7d3316Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
62526e7d3316Smrg                      if test -z "$darwin_install_name"; then
62536e7d3316Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
62546e7d3316Smrg                      fi
62556e7d3316Smrg		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
62566e7d3316Smrg		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
62576e7d3316Smrg		      path=
62586e7d3316Smrg		    fi
62596e7d3316Smrg		  fi
62606e7d3316Smrg		  ;;
62616e7d3316Smrg		*)
62626e7d3316Smrg		  path="-L$absdir/$objdir"
62636e7d3316Smrg		  ;;
62646e7d3316Smrg		esac
62656e7d3316Smrg		else
62666e7d3316Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
62676e7d3316Smrg		  test -z "$libdir" && \
62686e7d3316Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
62696e7d3316Smrg		  test "$absdir" != "$libdir" && \
62706e7d3316Smrg		    func_warning "\`$deplib' seems to be moved"
62716e7d3316Smrg
62726e7d3316Smrg		  path="-L$absdir"
62736e7d3316Smrg		fi
62746e7d3316Smrg		;;
62756e7d3316Smrg	      esac
62766e7d3316Smrg	      case " $deplibs " in
62776e7d3316Smrg	      *" $path "*) ;;
62786e7d3316Smrg	      *) deplibs="$path $deplibs" ;;
62796e7d3316Smrg	      esac
62806e7d3316Smrg	    done
62816e7d3316Smrg	  fi # link_all_deplibs != no
62826e7d3316Smrg	fi # linkmode = lib
62836e7d3316Smrg      done # for deplib in $libs
62846e7d3316Smrg      if test "$pass" = link; then
62856e7d3316Smrg	if test "$linkmode" = "prog"; then
62866e7d3316Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
62876e7d3316Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
62886e7d3316Smrg	else
62896e7d3316Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
62906e7d3316Smrg	fi
62916e7d3316Smrg      fi
62926e7d3316Smrg      dependency_libs="$newdependency_libs"
62936e7d3316Smrg      if test "$pass" = dlpreopen; then
62946e7d3316Smrg	# Link the dlpreopened libraries before other libraries
62956e7d3316Smrg	for deplib in $save_deplibs; do
62966e7d3316Smrg	  deplibs="$deplib $deplibs"
62976e7d3316Smrg	done
62986e7d3316Smrg      fi
62996e7d3316Smrg      if test "$pass" != dlopen; then
63006e7d3316Smrg	if test "$pass" != conv; then
63016e7d3316Smrg	  # Make sure lib_search_path contains only unique directories.
63026e7d3316Smrg	  lib_search_path=
63036e7d3316Smrg	  for dir in $newlib_search_path; do
63046e7d3316Smrg	    case "$lib_search_path " in
63056e7d3316Smrg	    *" $dir "*) ;;
63066e7d3316Smrg	    *) lib_search_path="$lib_search_path $dir" ;;
63076e7d3316Smrg	    esac
63086e7d3316Smrg	  done
63096e7d3316Smrg	  newlib_search_path=
63106e7d3316Smrg	fi
63116e7d3316Smrg
63126e7d3316Smrg	if test "$linkmode,$pass" != "prog,link"; then
63136e7d3316Smrg	  vars="deplibs"
63146e7d3316Smrg	else
63156e7d3316Smrg	  vars="compile_deplibs finalize_deplibs"
63166e7d3316Smrg	fi
63176e7d3316Smrg	for var in $vars dependency_libs; do
63186e7d3316Smrg	  # Add libraries to $var in reverse order
63196e7d3316Smrg	  eval tmp_libs=\"\$$var\"
63206e7d3316Smrg	  new_libs=
63216e7d3316Smrg	  for deplib in $tmp_libs; do
63226e7d3316Smrg	    # FIXME: Pedantically, this is the right thing to do, so
63236e7d3316Smrg	    #        that some nasty dependency loop isn't accidentally
63246e7d3316Smrg	    #        broken:
63256e7d3316Smrg	    #new_libs="$deplib $new_libs"
63266e7d3316Smrg	    # Pragmatically, this seems to cause very few problems in
63276e7d3316Smrg	    # practice:
63286e7d3316Smrg	    case $deplib in
63296e7d3316Smrg	    -L*) new_libs="$deplib $new_libs" ;;
63306e7d3316Smrg	    -R*) ;;
63316e7d3316Smrg	    *)
63326e7d3316Smrg	      # And here is the reason: when a library appears more
63336e7d3316Smrg	      # than once as an explicit dependence of a library, or
63346e7d3316Smrg	      # is implicitly linked in more than once by the
63356e7d3316Smrg	      # compiler, it is considered special, and multiple
63366e7d3316Smrg	      # occurrences thereof are not removed.  Compare this
63376e7d3316Smrg	      # with having the same library being listed as a
63386e7d3316Smrg	      # dependency of multiple other libraries: in this case,
63396e7d3316Smrg	      # we know (pedantically, we assume) the library does not
63406e7d3316Smrg	      # need to be listed more than once, so we keep only the
63416e7d3316Smrg	      # last copy.  This is not always right, but it is rare
63426e7d3316Smrg	      # enough that we require users that really mean to play
63436e7d3316Smrg	      # such unportable linking tricks to link the library
63446e7d3316Smrg	      # using -Wl,-lname, so that libtool does not consider it
63456e7d3316Smrg	      # for duplicate removal.
63466e7d3316Smrg	      case " $specialdeplibs " in
63476e7d3316Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
63486e7d3316Smrg	      *)
63496e7d3316Smrg		case " $new_libs " in
63506e7d3316Smrg		*" $deplib "*) ;;
63516e7d3316Smrg		*) new_libs="$deplib $new_libs" ;;
63526e7d3316Smrg		esac
63536e7d3316Smrg		;;
63546e7d3316Smrg	      esac
63556e7d3316Smrg	      ;;
63566e7d3316Smrg	    esac
63576e7d3316Smrg	  done
63586e7d3316Smrg	  tmp_libs=
63596e7d3316Smrg	  for deplib in $new_libs; do
63606e7d3316Smrg	    case $deplib in
63616e7d3316Smrg	    -L*)
63626e7d3316Smrg	      case " $tmp_libs " in
63636e7d3316Smrg	      *" $deplib "*) ;;
63646e7d3316Smrg	      *) tmp_libs="$tmp_libs $deplib" ;;
63656e7d3316Smrg	      esac
63666e7d3316Smrg	      ;;
63676e7d3316Smrg	    *) tmp_libs="$tmp_libs $deplib" ;;
63686e7d3316Smrg	    esac
63696e7d3316Smrg	  done
63706e7d3316Smrg	  eval $var=\"$tmp_libs\"
63716e7d3316Smrg	done # for var
63726e7d3316Smrg      fi
63736e7d3316Smrg      # Last step: remove runtime libs from dependency_libs
63746e7d3316Smrg      # (they stay in deplibs)
63756e7d3316Smrg      tmp_libs=
63766e7d3316Smrg      for i in $dependency_libs ; do
63776e7d3316Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
63786e7d3316Smrg	*" $i "*)
63796e7d3316Smrg	  i=""
63806e7d3316Smrg	  ;;
63816e7d3316Smrg	esac
63826e7d3316Smrg	if test -n "$i" ; then
63836e7d3316Smrg	  tmp_libs="$tmp_libs $i"
63846e7d3316Smrg	fi
63856e7d3316Smrg      done
63866e7d3316Smrg      dependency_libs=$tmp_libs
63876e7d3316Smrg    done # for pass
63886e7d3316Smrg    if test "$linkmode" = prog; then
63896e7d3316Smrg      dlfiles="$newdlfiles"
63906e7d3316Smrg    fi
63916e7d3316Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
63926e7d3316Smrg      dlprefiles="$newdlprefiles"
63936e7d3316Smrg    fi
63946e7d3316Smrg
63956e7d3316Smrg    case $linkmode in
63966e7d3316Smrg    oldlib)
63976e7d3316Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
63986e7d3316Smrg	func_warning "\`-dlopen' is ignored for archives"
63996e7d3316Smrg      fi
64006e7d3316Smrg
64016e7d3316Smrg      case " $deplibs" in
64026e7d3316Smrg      *\ -l* | *\ -L*)
64036e7d3316Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
64046e7d3316Smrg      esac
64056e7d3316Smrg
64066e7d3316Smrg      test -n "$rpath" && \
64076e7d3316Smrg	func_warning "\`-rpath' is ignored for archives"
64086e7d3316Smrg
64096e7d3316Smrg      test -n "$xrpath" && \
64106e7d3316Smrg	func_warning "\`-R' is ignored for archives"
64116e7d3316Smrg
64126e7d3316Smrg      test -n "$vinfo" && \
64136e7d3316Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
64146e7d3316Smrg
64156e7d3316Smrg      test -n "$release" && \
64166e7d3316Smrg	func_warning "\`-release' is ignored for archives"
64176e7d3316Smrg
64186e7d3316Smrg      test -n "$export_symbols$export_symbols_regex" && \
64196e7d3316Smrg	func_warning "\`-export-symbols' is ignored for archives"
64206e7d3316Smrg
64216e7d3316Smrg      # Now set the variables for building old libraries.
64226e7d3316Smrg      build_libtool_libs=no
64236e7d3316Smrg      oldlibs="$output"
64246e7d3316Smrg      objs="$objs$old_deplibs"
64256e7d3316Smrg      ;;
64266e7d3316Smrg
64276e7d3316Smrg    lib)
64286e7d3316Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
64296e7d3316Smrg      case $outputname in
64306e7d3316Smrg      lib*)
64316e7d3316Smrg	func_stripname 'lib' '.la' "$outputname"
64326e7d3316Smrg	name=$func_stripname_result
64336e7d3316Smrg	eval shared_ext=\"$shrext_cmds\"
64346e7d3316Smrg	eval libname=\"$libname_spec\"
64356e7d3316Smrg	;;
64366e7d3316Smrg      *)
64376e7d3316Smrg	test "$module" = no && \
64386e7d3316Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
64396e7d3316Smrg
64406e7d3316Smrg	if test "$need_lib_prefix" != no; then
64416e7d3316Smrg	  # Add the "lib" prefix for modules if required
64426e7d3316Smrg	  func_stripname '' '.la' "$outputname"
64436e7d3316Smrg	  name=$func_stripname_result
64446e7d3316Smrg	  eval shared_ext=\"$shrext_cmds\"
64456e7d3316Smrg	  eval libname=\"$libname_spec\"
64466e7d3316Smrg	else
64476e7d3316Smrg	  func_stripname '' '.la' "$outputname"
64486e7d3316Smrg	  libname=$func_stripname_result
64496e7d3316Smrg	fi
64506e7d3316Smrg	;;
64516e7d3316Smrg      esac
64526e7d3316Smrg
64536e7d3316Smrg      if test -n "$objs"; then
64546e7d3316Smrg	if test "$deplibs_check_method" != pass_all; then
64556e7d3316Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
64566e7d3316Smrg	else
64576e7d3316Smrg	  echo
64586e7d3316Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
64596e7d3316Smrg	  $ECHO "*** objects $objs is not portable!"
64606e7d3316Smrg	  libobjs="$libobjs $objs"
64616e7d3316Smrg	fi
64626e7d3316Smrg      fi
64636e7d3316Smrg
64646e7d3316Smrg      test "$dlself" != no && \
64656e7d3316Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
64666e7d3316Smrg
64676e7d3316Smrg      set dummy $rpath
64686e7d3316Smrg      shift
64696e7d3316Smrg      test "$#" -gt 1 && \
64706e7d3316Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
64716e7d3316Smrg
64726e7d3316Smrg      install_libdir="$1"
64736e7d3316Smrg
64746e7d3316Smrg      oldlibs=
64756e7d3316Smrg      if test -z "$rpath"; then
64766e7d3316Smrg	if test "$build_libtool_libs" = yes; then
64776e7d3316Smrg	  # Building a libtool convenience library.
64786e7d3316Smrg	  # Some compilers have problems with a `.al' extension so
64796e7d3316Smrg	  # convenience libraries should have the same extension an
64806e7d3316Smrg	  # archive normally would.
64816e7d3316Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
64826e7d3316Smrg	  build_libtool_libs=convenience
64836e7d3316Smrg	  build_old_libs=yes
64846e7d3316Smrg	fi
64856e7d3316Smrg
64866e7d3316Smrg	test -n "$vinfo" && \
64876e7d3316Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
64886e7d3316Smrg
64896e7d3316Smrg	test -n "$release" && \
64906e7d3316Smrg	  func_warning "\`-release' is ignored for convenience libraries"
64916e7d3316Smrg      else
64926e7d3316Smrg
64936e7d3316Smrg	# Parse the version information argument.
64946e7d3316Smrg	save_ifs="$IFS"; IFS=':'
64956e7d3316Smrg	set dummy $vinfo 0 0 0
64966e7d3316Smrg	shift
64976e7d3316Smrg	IFS="$save_ifs"
64986e7d3316Smrg
64996e7d3316Smrg	test -n "$7" && \
65006e7d3316Smrg	  func_fatal_help "too many parameters to \`-version-info'"
65016e7d3316Smrg
65026e7d3316Smrg	# convert absolute version numbers to libtool ages
65036e7d3316Smrg	# this retains compatibility with .la files and attempts
65046e7d3316Smrg	# to make the code below a bit more comprehensible
65056e7d3316Smrg
65066e7d3316Smrg	case $vinfo_number in
65076e7d3316Smrg	yes)
65086e7d3316Smrg	  number_major="$1"
65096e7d3316Smrg	  number_minor="$2"
65106e7d3316Smrg	  number_revision="$3"
65116e7d3316Smrg	  #
65126e7d3316Smrg	  # There are really only two kinds -- those that
65136e7d3316Smrg	  # use the current revision as the major version
65146e7d3316Smrg	  # and those that subtract age and use age as
65156e7d3316Smrg	  # a minor version.  But, then there is irix
65166e7d3316Smrg	  # which has an extra 1 added just for fun
65176e7d3316Smrg	  #
65186e7d3316Smrg	  case $version_type in
65196e7d3316Smrg	  darwin|linux|osf|windows|none)
65206e7d3316Smrg	    func_arith $number_major + $number_minor
65216e7d3316Smrg	    current=$func_arith_result
65226e7d3316Smrg	    age="$number_minor"
65236e7d3316Smrg	    revision="$number_revision"
65246e7d3316Smrg	    ;;
65256e7d3316Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
65266e7d3316Smrg	    current="$number_major"
65276e7d3316Smrg	    revision="$number_minor"
65286e7d3316Smrg	    age="0"
65296e7d3316Smrg	    ;;
65306e7d3316Smrg	  irix|nonstopux)
65316e7d3316Smrg	    func_arith $number_major + $number_minor
65326e7d3316Smrg	    current=$func_arith_result
65336e7d3316Smrg	    age="$number_minor"
65346e7d3316Smrg	    revision="$number_minor"
65356e7d3316Smrg	    lt_irix_increment=no
65366e7d3316Smrg	    ;;
65376e7d3316Smrg	  esac
65386e7d3316Smrg	  ;;
65396e7d3316Smrg	no)
65406e7d3316Smrg	  current="$1"
65416e7d3316Smrg	  revision="$2"
65426e7d3316Smrg	  age="$3"
65436e7d3316Smrg	  ;;
65446e7d3316Smrg	esac
65456e7d3316Smrg
65466e7d3316Smrg	# Check that each of the things are valid numbers.
65476e7d3316Smrg	case $current in
65486e7d3316Smrg	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]) ;;
65496e7d3316Smrg	*)
65506e7d3316Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
65516e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
65526e7d3316Smrg	  ;;
65536e7d3316Smrg	esac
65546e7d3316Smrg
65556e7d3316Smrg	case $revision in
65566e7d3316Smrg	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]) ;;
65576e7d3316Smrg	*)
65586e7d3316Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
65596e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
65606e7d3316Smrg	  ;;
65616e7d3316Smrg	esac
65626e7d3316Smrg
65636e7d3316Smrg	case $age in
65646e7d3316Smrg	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]) ;;
65656e7d3316Smrg	*)
65666e7d3316Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
65676e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
65686e7d3316Smrg	  ;;
65696e7d3316Smrg	esac
65706e7d3316Smrg
65716e7d3316Smrg	if test "$age" -gt "$current"; then
65726e7d3316Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
65736e7d3316Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
65746e7d3316Smrg	fi
65756e7d3316Smrg
65766e7d3316Smrg	# Calculate the version variables.
65776e7d3316Smrg	major=
65786e7d3316Smrg	versuffix=
65796e7d3316Smrg	verstring=
65806e7d3316Smrg	case $version_type in
65816e7d3316Smrg	none) ;;
65826e7d3316Smrg
65836e7d3316Smrg	darwin)
65846e7d3316Smrg	  # Like Linux, but with the current version available in
65856e7d3316Smrg	  # verstring for coding it into the library header
65866e7d3316Smrg	  func_arith $current - $age
65876e7d3316Smrg	  major=.$func_arith_result
65886e7d3316Smrg	  versuffix="$major.$age.$revision"
65896e7d3316Smrg	  # Darwin ld doesn't like 0 for these options...
65906e7d3316Smrg	  func_arith $current + 1
65916e7d3316Smrg	  minor_current=$func_arith_result
65926e7d3316Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
65936e7d3316Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
65946e7d3316Smrg	  ;;
65956e7d3316Smrg
65966e7d3316Smrg	freebsd-aout)
65976e7d3316Smrg	  major=".$current"
65986e7d3316Smrg	  versuffix=".$current.$revision";
65996e7d3316Smrg	  ;;
66006e7d3316Smrg
66016e7d3316Smrg	freebsd-elf)
66026e7d3316Smrg	  major=".$current"
66036e7d3316Smrg	  versuffix=".$current"
66046e7d3316Smrg	  ;;
66056e7d3316Smrg
66066e7d3316Smrg	irix | nonstopux)
66076e7d3316Smrg	  if test "X$lt_irix_increment" = "Xno"; then
66086e7d3316Smrg	    func_arith $current - $age
66096e7d3316Smrg	  else
66106e7d3316Smrg	    func_arith $current - $age + 1
66116e7d3316Smrg	  fi
66126e7d3316Smrg	  major=$func_arith_result
66136e7d3316Smrg
66146e7d3316Smrg	  case $version_type in
66156e7d3316Smrg	    nonstopux) verstring_prefix=nonstopux ;;
66166e7d3316Smrg	    *)         verstring_prefix=sgi ;;
66176e7d3316Smrg	  esac
66186e7d3316Smrg	  verstring="$verstring_prefix$major.$revision"
66196e7d3316Smrg
66206e7d3316Smrg	  # Add in all the interfaces that we are compatible with.
66216e7d3316Smrg	  loop=$revision
66226e7d3316Smrg	  while test "$loop" -ne 0; do
66236e7d3316Smrg	    func_arith $revision - $loop
66246e7d3316Smrg	    iface=$func_arith_result
66256e7d3316Smrg	    func_arith $loop - 1
66266e7d3316Smrg	    loop=$func_arith_result
66276e7d3316Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
66286e7d3316Smrg	  done
66296e7d3316Smrg
66306e7d3316Smrg	  # Before this point, $major must not contain `.'.
66316e7d3316Smrg	  major=.$major
66326e7d3316Smrg	  versuffix="$major.$revision"
66336e7d3316Smrg	  ;;
66346e7d3316Smrg
66356e7d3316Smrg	linux)
66366e7d3316Smrg	  func_arith $current - $age
66376e7d3316Smrg	  major=.$func_arith_result
66386e7d3316Smrg	  versuffix="$major.$age.$revision"
66396e7d3316Smrg	  ;;
66406e7d3316Smrg
66416e7d3316Smrg	osf)
66426e7d3316Smrg	  func_arith $current - $age
66436e7d3316Smrg	  major=.$func_arith_result
66446e7d3316Smrg	  versuffix=".$current.$age.$revision"
66456e7d3316Smrg	  verstring="$current.$age.$revision"
66466e7d3316Smrg
66476e7d3316Smrg	  # Add in all the interfaces that we are compatible with.
66486e7d3316Smrg	  loop=$age
66496e7d3316Smrg	  while test "$loop" -ne 0; do
66506e7d3316Smrg	    func_arith $current - $loop
66516e7d3316Smrg	    iface=$func_arith_result
66526e7d3316Smrg	    func_arith $loop - 1
66536e7d3316Smrg	    loop=$func_arith_result
66546e7d3316Smrg	    verstring="$verstring:${iface}.0"
66556e7d3316Smrg	  done
66566e7d3316Smrg
66576e7d3316Smrg	  # Make executables depend on our current version.
66586e7d3316Smrg	  verstring="$verstring:${current}.0"
66596e7d3316Smrg	  ;;
66606e7d3316Smrg
66616e7d3316Smrg	qnx)
66626e7d3316Smrg	  major=".$current"
66636e7d3316Smrg	  versuffix=".$current"
66646e7d3316Smrg	  ;;
66656e7d3316Smrg
66666e7d3316Smrg	sunos)
66676e7d3316Smrg	  major=".$current"
66686e7d3316Smrg	  versuffix=".$current.$revision"
66696e7d3316Smrg	  ;;
66706e7d3316Smrg
66716e7d3316Smrg	windows)
66726e7d3316Smrg	  # Use '-' rather than '.', since we only want one
66736e7d3316Smrg	  # extension on DOS 8.3 filesystems.
66746e7d3316Smrg	  func_arith $current - $age
66756e7d3316Smrg	  major=$func_arith_result
66766e7d3316Smrg	  versuffix="-$major"
66776e7d3316Smrg	  ;;
66786e7d3316Smrg
66796e7d3316Smrg	*)
66806e7d3316Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
66816e7d3316Smrg	  ;;
66826e7d3316Smrg	esac
66836e7d3316Smrg
66846e7d3316Smrg	# Clear the version info if we defaulted, and they specified a release.
66856e7d3316Smrg	if test -z "$vinfo" && test -n "$release"; then
66866e7d3316Smrg	  major=
66876e7d3316Smrg	  case $version_type in
66886e7d3316Smrg	  darwin)
66896e7d3316Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
66906e7d3316Smrg	    # problems, so we reset it completely
66916e7d3316Smrg	    verstring=
66926e7d3316Smrg	    ;;
66936e7d3316Smrg	  *)
66946e7d3316Smrg	    verstring="0.0"
66956e7d3316Smrg	    ;;
66966e7d3316Smrg	  esac
66976e7d3316Smrg	  if test "$need_version" = no; then
66986e7d3316Smrg	    versuffix=
66996e7d3316Smrg	  else
67006e7d3316Smrg	    versuffix=".0.0"
67016e7d3316Smrg	  fi
67026e7d3316Smrg	fi
67036e7d3316Smrg
67046e7d3316Smrg	# Remove version info from name if versioning should be avoided
67056e7d3316Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
67066e7d3316Smrg	  major=
67076e7d3316Smrg	  versuffix=
67086e7d3316Smrg	  verstring=""
67096e7d3316Smrg	fi
67106e7d3316Smrg
67116e7d3316Smrg	# Check to see if the archive will have undefined symbols.
67126e7d3316Smrg	if test "$allow_undefined" = yes; then
67136e7d3316Smrg	  if test "$allow_undefined_flag" = unsupported; then
67146e7d3316Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
67156e7d3316Smrg	    build_libtool_libs=no
67166e7d3316Smrg	    build_old_libs=yes
67176e7d3316Smrg	  fi
67186e7d3316Smrg	else
67196e7d3316Smrg	  # Don't allow undefined symbols.
67206e7d3316Smrg	  allow_undefined_flag="$no_undefined_flag"
67216e7d3316Smrg	fi
67226e7d3316Smrg
67236e7d3316Smrg      fi
67246e7d3316Smrg
67256e7d3316Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
67266e7d3316Smrg      libobjs="$libobjs $symfileobj"
67276e7d3316Smrg      test "X$libobjs" = "X " && libobjs=
67286e7d3316Smrg
67296e7d3316Smrg      if test "$mode" != relink; then
67306e7d3316Smrg	# Remove our outputs, but don't remove object files since they
67316e7d3316Smrg	# may have been created when compiling PIC objects.
67326e7d3316Smrg	removelist=
67336e7d3316Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
67346e7d3316Smrg	for p in $tempremovelist; do
67356e7d3316Smrg	  case $p in
67366e7d3316Smrg	    *.$objext | *.gcno)
67376e7d3316Smrg	       ;;
67386e7d3316Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
67396e7d3316Smrg	       if test "X$precious_files_regex" != "X"; then
67406e7d3316Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
67416e7d3316Smrg		 then
67426e7d3316Smrg		   continue
67436e7d3316Smrg		 fi
67446e7d3316Smrg	       fi
67456e7d3316Smrg	       removelist="$removelist $p"
67466e7d3316Smrg	       ;;
67476e7d3316Smrg	    *) ;;
67486e7d3316Smrg	  esac
67496e7d3316Smrg	done
67506e7d3316Smrg	test -n "$removelist" && \
67516e7d3316Smrg	  func_show_eval "${RM}r \$removelist"
67526e7d3316Smrg      fi
67536e7d3316Smrg
67546e7d3316Smrg      # Now set the variables for building old libraries.
67556e7d3316Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
67566e7d3316Smrg	oldlibs="$oldlibs $output_objdir/$libname.$libext"
67576e7d3316Smrg
67586e7d3316Smrg	# Transform .lo files to .o files.
67596e7d3316Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
67606e7d3316Smrg      fi
67616e7d3316Smrg
67626e7d3316Smrg      # Eliminate all temporary directories.
67636e7d3316Smrg      #for path in $notinst_path; do
67646e7d3316Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
67656e7d3316Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
67666e7d3316Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
67676e7d3316Smrg      #done
67686e7d3316Smrg
67696e7d3316Smrg      if test -n "$xrpath"; then
67706e7d3316Smrg	# If the user specified any rpath flags, then add them.
67716e7d3316Smrg	temp_xrpath=
67726e7d3316Smrg	for libdir in $xrpath; do
67736e7d3316Smrg	  temp_xrpath="$temp_xrpath -R$libdir"
67746e7d3316Smrg	  case "$finalize_rpath " in
67756e7d3316Smrg	  *" $libdir "*) ;;
67766e7d3316Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
67776e7d3316Smrg	  esac
67786e7d3316Smrg	done
67796e7d3316Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
67806e7d3316Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
67816e7d3316Smrg	fi
67826e7d3316Smrg      fi
67836e7d3316Smrg
67846e7d3316Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
67856e7d3316Smrg      old_dlfiles="$dlfiles"
67866e7d3316Smrg      dlfiles=
67876e7d3316Smrg      for lib in $old_dlfiles; do
67886e7d3316Smrg	case " $dlprefiles $dlfiles " in
67896e7d3316Smrg	*" $lib "*) ;;
67906e7d3316Smrg	*) dlfiles="$dlfiles $lib" ;;
67916e7d3316Smrg	esac
67926e7d3316Smrg      done
67936e7d3316Smrg
67946e7d3316Smrg      # Make sure dlprefiles contains only unique files
67956e7d3316Smrg      old_dlprefiles="$dlprefiles"
67966e7d3316Smrg      dlprefiles=
67976e7d3316Smrg      for lib in $old_dlprefiles; do
67986e7d3316Smrg	case "$dlprefiles " in
67996e7d3316Smrg	*" $lib "*) ;;
68006e7d3316Smrg	*) dlprefiles="$dlprefiles $lib" ;;
68016e7d3316Smrg	esac
68026e7d3316Smrg      done
68036e7d3316Smrg
68046e7d3316Smrg      if test "$build_libtool_libs" = yes; then
68056e7d3316Smrg	if test -n "$rpath"; then
68066e7d3316Smrg	  case $host in
68076e7d3316Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
68086e7d3316Smrg	    # these systems don't actually have a c library (as such)!
68096e7d3316Smrg	    ;;
68106e7d3316Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
68116e7d3316Smrg	    # Rhapsody C library is in the System framework
68126e7d3316Smrg	    deplibs="$deplibs System.ltframework"
68136e7d3316Smrg	    ;;
68146e7d3316Smrg	  *-*-netbsd*)
68156e7d3316Smrg	    # Don't link with libc until the a.out ld.so is fixed.
68166e7d3316Smrg	    ;;
68176e7d3316Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
68186e7d3316Smrg	    # Do not include libc due to us having libc/libc_r.
68196e7d3316Smrg	    ;;
68206e7d3316Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
68216e7d3316Smrg	    # Causes problems with __ctype
68226e7d3316Smrg	    ;;
68236e7d3316Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
68246e7d3316Smrg	    # Compiler inserts libc in the correct place for threads to work
68256e7d3316Smrg	    ;;
68266e7d3316Smrg	  *)
68276e7d3316Smrg	    # Add libc to deplibs on all other systems if necessary.
68286e7d3316Smrg	    if test "$build_libtool_need_lc" = "yes"; then
68296e7d3316Smrg	      deplibs="$deplibs -lc"
68306e7d3316Smrg	    fi
68316e7d3316Smrg	    ;;
68326e7d3316Smrg	  esac
68336e7d3316Smrg	fi
68346e7d3316Smrg
68356e7d3316Smrg	# Transform deplibs into only deplibs that can be linked in shared.
68366e7d3316Smrg	name_save=$name
68376e7d3316Smrg	libname_save=$libname
68386e7d3316Smrg	release_save=$release
68396e7d3316Smrg	versuffix_save=$versuffix
68406e7d3316Smrg	major_save=$major
68416e7d3316Smrg	# I'm not sure if I'm treating the release correctly.  I think
68426e7d3316Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
68436e7d3316Smrg	# add it in twice.  Is that correct?
68446e7d3316Smrg	release=""
68456e7d3316Smrg	versuffix=""
68466e7d3316Smrg	major=""
68476e7d3316Smrg	newdeplibs=
68486e7d3316Smrg	droppeddeps=no
68496e7d3316Smrg	case $deplibs_check_method in
68506e7d3316Smrg	pass_all)
68516e7d3316Smrg	  # Don't check for shared/static.  Everything works.
68526e7d3316Smrg	  # This might be a little naive.  We might want to check
68536e7d3316Smrg	  # whether the library exists or not.  But this is on
68546e7d3316Smrg	  # osf3 & osf4 and I'm not really sure... Just
68556e7d3316Smrg	  # implementing what was already the behavior.
68566e7d3316Smrg	  newdeplibs=$deplibs
68576e7d3316Smrg	  ;;
68586e7d3316Smrg	test_compile)
68596e7d3316Smrg	  # This code stresses the "libraries are programs" paradigm to its
68606e7d3316Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
68616e7d3316Smrg	  # against the deplibs as a proxy for the library.  Then we can check
68626e7d3316Smrg	  # whether they linked in statically or dynamically with ldd.
68636e7d3316Smrg	  $opt_dry_run || $RM conftest.c
68646e7d3316Smrg	  cat > conftest.c <<EOF
68656e7d3316Smrg	  int main() { return 0; }
68666e7d3316SmrgEOF
68676e7d3316Smrg	  $opt_dry_run || $RM conftest
68686e7d3316Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
68696e7d3316Smrg	    ldd_output=`ldd conftest`
68706e7d3316Smrg	    for i in $deplibs; do
68716e7d3316Smrg	      case $i in
68726e7d3316Smrg	      -l*)
68736e7d3316Smrg		func_stripname -l '' "$i"
68746e7d3316Smrg		name=$func_stripname_result
68756e7d3316Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
68766e7d3316Smrg		  case " $predeps $postdeps " in
68776e7d3316Smrg		  *" $i "*)
68786e7d3316Smrg		    newdeplibs="$newdeplibs $i"
68796e7d3316Smrg		    i=""
68806e7d3316Smrg		    ;;
68816e7d3316Smrg		  esac
68826e7d3316Smrg		fi
68836e7d3316Smrg		if test -n "$i" ; then
68846e7d3316Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
68856e7d3316Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
68866e7d3316Smrg		  set dummy $deplib_matches; shift
68876e7d3316Smrg		  deplib_match=$1
68886e7d3316Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
68896e7d3316Smrg		    newdeplibs="$newdeplibs $i"
68906e7d3316Smrg		  else
68916e7d3316Smrg		    droppeddeps=yes
68926e7d3316Smrg		    echo
68936e7d3316Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
68946e7d3316Smrg		    echo "*** I have the capability to make that library automatically link in when"
68956e7d3316Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
68966e7d3316Smrg		    echo "*** shared version of the library, which I believe you do not have"
68976e7d3316Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
68986e7d3316Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
68996e7d3316Smrg		  fi
69006e7d3316Smrg		fi
69016e7d3316Smrg		;;
69026e7d3316Smrg	      *)
69036e7d3316Smrg		newdeplibs="$newdeplibs $i"
69046e7d3316Smrg		;;
69056e7d3316Smrg	      esac
69066e7d3316Smrg	    done
69076e7d3316Smrg	  else
69086e7d3316Smrg	    # Error occurred in the first compile.  Let's try to salvage
69096e7d3316Smrg	    # the situation: Compile a separate program for each library.
69106e7d3316Smrg	    for i in $deplibs; do
69116e7d3316Smrg	      case $i in
69126e7d3316Smrg	      -l*)
69136e7d3316Smrg		func_stripname -l '' "$i"
69146e7d3316Smrg		name=$func_stripname_result
69156e7d3316Smrg		$opt_dry_run || $RM conftest
69166e7d3316Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
69176e7d3316Smrg		  ldd_output=`ldd conftest`
69186e7d3316Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
69196e7d3316Smrg		    case " $predeps $postdeps " in
69206e7d3316Smrg		    *" $i "*)
69216e7d3316Smrg		      newdeplibs="$newdeplibs $i"
69226e7d3316Smrg		      i=""
69236e7d3316Smrg		      ;;
69246e7d3316Smrg		    esac
69256e7d3316Smrg		  fi
69266e7d3316Smrg		  if test -n "$i" ; then
69276e7d3316Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
69286e7d3316Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
69296e7d3316Smrg		    set dummy $deplib_matches; shift
69306e7d3316Smrg		    deplib_match=$1
69316e7d3316Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
69326e7d3316Smrg		      newdeplibs="$newdeplibs $i"
69336e7d3316Smrg		    else
69346e7d3316Smrg		      droppeddeps=yes
69356e7d3316Smrg		      echo
69366e7d3316Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
69376e7d3316Smrg		      echo "*** I have the capability to make that library automatically link in when"
69386e7d3316Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
69396e7d3316Smrg		      echo "*** shared version of the library, which you do not appear to have"
69406e7d3316Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
69416e7d3316Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
69426e7d3316Smrg		    fi
69436e7d3316Smrg		  fi
69446e7d3316Smrg		else
69456e7d3316Smrg		  droppeddeps=yes
69466e7d3316Smrg		  echo
69476e7d3316Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
69486e7d3316Smrg		  echo "*** make it link in!  You will probably need to install it or some"
69496e7d3316Smrg		  echo "*** library that it depends on before this library will be fully"
69506e7d3316Smrg		  echo "*** functional.  Installing it before continuing would be even better."
69516e7d3316Smrg		fi
69526e7d3316Smrg		;;
69536e7d3316Smrg	      *)
69546e7d3316Smrg		newdeplibs="$newdeplibs $i"
69556e7d3316Smrg		;;
69566e7d3316Smrg	      esac
69576e7d3316Smrg	    done
69586e7d3316Smrg	  fi
69596e7d3316Smrg	  ;;
69606e7d3316Smrg	file_magic*)
69616e7d3316Smrg	  set dummy $deplibs_check_method; shift
69626e7d3316Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
69636e7d3316Smrg	  for a_deplib in $deplibs; do
69646e7d3316Smrg	    case $a_deplib in
69656e7d3316Smrg	    -l*)
69666e7d3316Smrg	      func_stripname -l '' "$a_deplib"
69676e7d3316Smrg	      name=$func_stripname_result
69686e7d3316Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
69696e7d3316Smrg		case " $predeps $postdeps " in
69706e7d3316Smrg		*" $a_deplib "*)
69716e7d3316Smrg		  newdeplibs="$newdeplibs $a_deplib"
69726e7d3316Smrg		  a_deplib=""
69736e7d3316Smrg		  ;;
69746e7d3316Smrg		esac
69756e7d3316Smrg	      fi
69766e7d3316Smrg	      if test -n "$a_deplib" ; then
69776e7d3316Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
69786e7d3316Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
69796e7d3316Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
69806e7d3316Smrg		  for potent_lib in $potential_libs; do
69816e7d3316Smrg		      # Follow soft links.
69826e7d3316Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
69836e7d3316Smrg			 $GREP " -> " >/dev/null; then
69846e7d3316Smrg			continue
69856e7d3316Smrg		      fi
69866e7d3316Smrg		      # The statement above tries to avoid entering an
69876e7d3316Smrg		      # endless loop below, in case of cyclic links.
69886e7d3316Smrg		      # We might still enter an endless loop, since a link
69896e7d3316Smrg		      # loop can be closed while we follow links,
69906e7d3316Smrg		      # but so what?
69916e7d3316Smrg		      potlib="$potent_lib"
69926e7d3316Smrg		      while test -h "$potlib" 2>/dev/null; do
69936e7d3316Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
69946e7d3316Smrg			case $potliblink in
69956e7d3316Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
69966e7d3316Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
69976e7d3316Smrg			esac
69986e7d3316Smrg		      done
69996e7d3316Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
70006e7d3316Smrg			 $SED -e 10q |
70016e7d3316Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
70026e7d3316Smrg			newdeplibs="$newdeplibs $a_deplib"
70036e7d3316Smrg			a_deplib=""
70046e7d3316Smrg			break 2
70056e7d3316Smrg		      fi
70066e7d3316Smrg		  done
70076e7d3316Smrg		done
70086e7d3316Smrg	      fi
70096e7d3316Smrg	      if test -n "$a_deplib" ; then
70106e7d3316Smrg		droppeddeps=yes
70116e7d3316Smrg		echo
70126e7d3316Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
70136e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
70146e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
70156e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
70166e7d3316Smrg		echo "*** because I did check the linker path looking for a file starting"
70176e7d3316Smrg		if test -z "$potlib" ; then
70186e7d3316Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
70196e7d3316Smrg		else
70206e7d3316Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
70216e7d3316Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
70226e7d3316Smrg		fi
70236e7d3316Smrg	      fi
70246e7d3316Smrg	      ;;
70256e7d3316Smrg	    *)
70266e7d3316Smrg	      # Add a -L argument.
70276e7d3316Smrg	      newdeplibs="$newdeplibs $a_deplib"
70286e7d3316Smrg	      ;;
70296e7d3316Smrg	    esac
70306e7d3316Smrg	  done # Gone through all deplibs.
70316e7d3316Smrg	  ;;
70326e7d3316Smrg	match_pattern*)
70336e7d3316Smrg	  set dummy $deplibs_check_method; shift
70346e7d3316Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
70356e7d3316Smrg	  for a_deplib in $deplibs; do
70366e7d3316Smrg	    case $a_deplib in
70376e7d3316Smrg	    -l*)
70386e7d3316Smrg	      func_stripname -l '' "$a_deplib"
70396e7d3316Smrg	      name=$func_stripname_result
70406e7d3316Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
70416e7d3316Smrg		case " $predeps $postdeps " in
70426e7d3316Smrg		*" $a_deplib "*)
70436e7d3316Smrg		  newdeplibs="$newdeplibs $a_deplib"
70446e7d3316Smrg		  a_deplib=""
70456e7d3316Smrg		  ;;
70466e7d3316Smrg		esac
70476e7d3316Smrg	      fi
70486e7d3316Smrg	      if test -n "$a_deplib" ; then
70496e7d3316Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
70506e7d3316Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
70516e7d3316Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
70526e7d3316Smrg		  for potent_lib in $potential_libs; do
70536e7d3316Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
70546e7d3316Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
70556e7d3316Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
70566e7d3316Smrg		      newdeplibs="$newdeplibs $a_deplib"
70576e7d3316Smrg		      a_deplib=""
70586e7d3316Smrg		      break 2
70596e7d3316Smrg		    fi
70606e7d3316Smrg		  done
70616e7d3316Smrg		done
70626e7d3316Smrg	      fi
70636e7d3316Smrg	      if test -n "$a_deplib" ; then
70646e7d3316Smrg		droppeddeps=yes
70656e7d3316Smrg		echo
70666e7d3316Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
70676e7d3316Smrg		echo "*** I have the capability to make that library automatically link in when"
70686e7d3316Smrg		echo "*** you link to this library.  But I can only do this if you have a"
70696e7d3316Smrg		echo "*** shared version of the library, which you do not appear to have"
70706e7d3316Smrg		echo "*** because I did check the linker path looking for a file starting"
70716e7d3316Smrg		if test -z "$potlib" ; then
70726e7d3316Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
70736e7d3316Smrg		else
70746e7d3316Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
70756e7d3316Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
70766e7d3316Smrg		fi
70776e7d3316Smrg	      fi
70786e7d3316Smrg	      ;;
70796e7d3316Smrg	    *)
70806e7d3316Smrg	      # Add a -L argument.
70816e7d3316Smrg	      newdeplibs="$newdeplibs $a_deplib"
70826e7d3316Smrg	      ;;
70836e7d3316Smrg	    esac
70846e7d3316Smrg	  done # Gone through all deplibs.
70856e7d3316Smrg	  ;;
70866e7d3316Smrg	none | unknown | *)
70876e7d3316Smrg	  newdeplibs=""
70886e7d3316Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
70896e7d3316Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
70906e7d3316Smrg	    for i in $predeps $postdeps ; do
70916e7d3316Smrg	      # can't use Xsed below, because $i might contain '/'
70926e7d3316Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
70936e7d3316Smrg	    done
70946e7d3316Smrg	  fi
70956e7d3316Smrg	  case $tmp_deplibs in
70966e7d3316Smrg	  *[!\	\ ]*)
70976e7d3316Smrg	    echo
70986e7d3316Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
70996e7d3316Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
71006e7d3316Smrg	    else
71016e7d3316Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
71026e7d3316Smrg	    fi
71036e7d3316Smrg	    echo "*** All declared inter-library dependencies are being dropped."
71046e7d3316Smrg	    droppeddeps=yes
71056e7d3316Smrg	    ;;
71066e7d3316Smrg	  esac
71076e7d3316Smrg	  ;;
71086e7d3316Smrg	esac
71096e7d3316Smrg	versuffix=$versuffix_save
71106e7d3316Smrg	major=$major_save
71116e7d3316Smrg	release=$release_save
71126e7d3316Smrg	libname=$libname_save
71136e7d3316Smrg	name=$name_save
71146e7d3316Smrg
71156e7d3316Smrg	case $host in
71166e7d3316Smrg	*-*-rhapsody* | *-*-darwin1.[012])
71176e7d3316Smrg	  # On Rhapsody replace the C library with the System framework
71186e7d3316Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
71196e7d3316Smrg	  ;;
71206e7d3316Smrg	esac
71216e7d3316Smrg
71226e7d3316Smrg	if test "$droppeddeps" = yes; then
71236e7d3316Smrg	  if test "$module" = yes; then
71246e7d3316Smrg	    echo
71256e7d3316Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
71266e7d3316Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
71276e7d3316Smrg	    echo "*** a static module, that should work as long as the dlopening"
71286e7d3316Smrg	    echo "*** application is linked with the -dlopen flag."
71296e7d3316Smrg	    if test -z "$global_symbol_pipe"; then
71306e7d3316Smrg	      echo
71316e7d3316Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
71326e7d3316Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
71336e7d3316Smrg	      echo "*** not find such a program.  So, this module is probably useless."
71346e7d3316Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
71356e7d3316Smrg	    fi
71366e7d3316Smrg	    if test "$build_old_libs" = no; then
71376e7d3316Smrg	      oldlibs="$output_objdir/$libname.$libext"
71386e7d3316Smrg	      build_libtool_libs=module
71396e7d3316Smrg	      build_old_libs=yes
71406e7d3316Smrg	    else
71416e7d3316Smrg	      build_libtool_libs=no
71426e7d3316Smrg	    fi
71436e7d3316Smrg	  else
71446e7d3316Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
71456e7d3316Smrg	    echo "*** automatically added whenever a program is linked with this library"
71466e7d3316Smrg	    echo "*** or is declared to -dlopen it."
71476e7d3316Smrg
71486e7d3316Smrg	    if test "$allow_undefined" = no; then
71496e7d3316Smrg	      echo
71506e7d3316Smrg	      echo "*** Since this library must not contain undefined symbols,"
71516e7d3316Smrg	      echo "*** because either the platform does not support them or"
71526e7d3316Smrg	      echo "*** it was explicitly requested with -no-undefined,"
71536e7d3316Smrg	      echo "*** libtool will only create a static version of it."
71546e7d3316Smrg	      if test "$build_old_libs" = no; then
71556e7d3316Smrg		oldlibs="$output_objdir/$libname.$libext"
71566e7d3316Smrg		build_libtool_libs=module
71576e7d3316Smrg		build_old_libs=yes
71586e7d3316Smrg	      else
71596e7d3316Smrg		build_libtool_libs=no
71606e7d3316Smrg	      fi
71616e7d3316Smrg	    fi
71626e7d3316Smrg	  fi
71636e7d3316Smrg	fi
71646e7d3316Smrg	# Done checking deplibs!
71656e7d3316Smrg	deplibs=$newdeplibs
71666e7d3316Smrg      fi
71676e7d3316Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
71686e7d3316Smrg      case $host in
71696e7d3316Smrg	*-*-darwin*)
71706e7d3316Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
71716e7d3316Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
71726e7d3316Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
71736e7d3316Smrg	  ;;
71746e7d3316Smrg      esac
71756e7d3316Smrg
71766e7d3316Smrg      # move library search paths that coincide with paths to not yet
71776e7d3316Smrg      # installed libraries to the beginning of the library search list
71786e7d3316Smrg      new_libs=
71796e7d3316Smrg      for path in $notinst_path; do
71806e7d3316Smrg	case " $new_libs " in
71816e7d3316Smrg	*" -L$path/$objdir "*) ;;
71826e7d3316Smrg	*)
71836e7d3316Smrg	  case " $deplibs " in
71846e7d3316Smrg	  *" -L$path/$objdir "*)
71856e7d3316Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
71866e7d3316Smrg	  esac
71876e7d3316Smrg	  ;;
71886e7d3316Smrg	esac
71896e7d3316Smrg      done
71906e7d3316Smrg      for deplib in $deplibs; do
71916e7d3316Smrg	case $deplib in
71926e7d3316Smrg	-L*)
71936e7d3316Smrg	  case " $new_libs " in
71946e7d3316Smrg	  *" $deplib "*) ;;
71956e7d3316Smrg	  *) new_libs="$new_libs $deplib" ;;
71966e7d3316Smrg	  esac
71976e7d3316Smrg	  ;;
71986e7d3316Smrg	*) new_libs="$new_libs $deplib" ;;
71996e7d3316Smrg	esac
72006e7d3316Smrg      done
72016e7d3316Smrg      deplibs="$new_libs"
72026e7d3316Smrg
72036e7d3316Smrg      # All the library-specific variables (install_libdir is set above).
72046e7d3316Smrg      library_names=
72056e7d3316Smrg      old_library=
72066e7d3316Smrg      dlname=
72076e7d3316Smrg
72086e7d3316Smrg      # Test again, we may have decided not to build it any more
72096e7d3316Smrg      if test "$build_libtool_libs" = yes; then
72106e7d3316Smrg	if test "$hardcode_into_libs" = yes; then
72116e7d3316Smrg	  # Hardcode the library paths
72126e7d3316Smrg	  hardcode_libdirs=
72136e7d3316Smrg	  dep_rpath=
72146e7d3316Smrg	  rpath="$finalize_rpath"
72156e7d3316Smrg	  test "$mode" != relink && rpath="$compile_rpath$rpath"
72166e7d3316Smrg	  for libdir in $rpath; do
72176e7d3316Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
72186e7d3316Smrg	      if test -n "$hardcode_libdir_separator"; then
72196e7d3316Smrg		if test -z "$hardcode_libdirs"; then
72206e7d3316Smrg		  hardcode_libdirs="$libdir"
72216e7d3316Smrg		else
72226e7d3316Smrg		  # Just accumulate the unique libdirs.
72236e7d3316Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
72246e7d3316Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
72256e7d3316Smrg		    ;;
72266e7d3316Smrg		  *)
72276e7d3316Smrg		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
72286e7d3316Smrg		    ;;
72296e7d3316Smrg		  esac
72306e7d3316Smrg		fi
72316e7d3316Smrg	      else
72326e7d3316Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
72336e7d3316Smrg		dep_rpath="$dep_rpath $flag"
72346e7d3316Smrg	      fi
72356e7d3316Smrg	    elif test -n "$runpath_var"; then
72366e7d3316Smrg	      case "$perm_rpath " in
72376e7d3316Smrg	      *" $libdir "*) ;;
72386e7d3316Smrg	      *) perm_rpath="$perm_rpath $libdir" ;;
72396e7d3316Smrg	      esac
72406e7d3316Smrg	    fi
72416e7d3316Smrg	  done
72426e7d3316Smrg	  # Substitute the hardcoded libdirs into the rpath.
72436e7d3316Smrg	  if test -n "$hardcode_libdir_separator" &&
72446e7d3316Smrg	     test -n "$hardcode_libdirs"; then
72456e7d3316Smrg	    libdir="$hardcode_libdirs"
72466e7d3316Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
72476e7d3316Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
72486e7d3316Smrg	    else
72496e7d3316Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
72506e7d3316Smrg	    fi
72516e7d3316Smrg	  fi
72526e7d3316Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
72536e7d3316Smrg	    # We should set the runpath_var.
72546e7d3316Smrg	    rpath=
72556e7d3316Smrg	    for dir in $perm_rpath; do
72566e7d3316Smrg	      rpath="$rpath$dir:"
72576e7d3316Smrg	    done
72586e7d3316Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
72596e7d3316Smrg	  fi
72606e7d3316Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
72616e7d3316Smrg	fi
7262a966c04fSmrg
72636e7d3316Smrg	shlibpath="$finalize_shlibpath"
72646e7d3316Smrg	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
72656e7d3316Smrg	if test -n "$shlibpath"; then
72666e7d3316Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
72676e7d3316Smrg	fi
7268a966c04fSmrg
72696e7d3316Smrg	# Get the real and link names of the library.
72706e7d3316Smrg	eval shared_ext=\"$shrext_cmds\"
72716e7d3316Smrg	eval library_names=\"$library_names_spec\"
72726e7d3316Smrg	set dummy $library_names
72736e7d3316Smrg	shift
72746e7d3316Smrg	realname="$1"
72756e7d3316Smrg	shift
7276a966c04fSmrg
72776e7d3316Smrg	if test -n "$soname_spec"; then
72786e7d3316Smrg	  eval soname=\"$soname_spec\"
72796e7d3316Smrg	else
72806e7d3316Smrg	  soname="$realname"
72816e7d3316Smrg	fi
72826e7d3316Smrg	if test -z "$dlname"; then
72836e7d3316Smrg	  dlname=$soname
72846e7d3316Smrg	fi
7285a966c04fSmrg
72866e7d3316Smrg	lib="$output_objdir/$realname"
72876e7d3316Smrg	linknames=
72886e7d3316Smrg	for link
72896e7d3316Smrg	do
72906e7d3316Smrg	  linknames="$linknames $link"
72916e7d3316Smrg	done
7292a966c04fSmrg
72936e7d3316Smrg	# Use standard objects if they are pic
72946e7d3316Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
72956e7d3316Smrg	test "X$libobjs" = "X " && libobjs=
7296a966c04fSmrg
72976e7d3316Smrg	delfiles=
72986e7d3316Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
72996e7d3316Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
73006e7d3316Smrg	  export_symbols="$output_objdir/$libname.uexp"
73016e7d3316Smrg	  delfiles="$delfiles $export_symbols"
73026e7d3316Smrg	fi
7303a966c04fSmrg
73046e7d3316Smrg	orig_export_symbols=
73056e7d3316Smrg	case $host_os in
73066e7d3316Smrg	cygwin* | mingw* | cegcc*)
73076e7d3316Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
73086e7d3316Smrg	    # exporting using user supplied symfile
73096e7d3316Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
73106e7d3316Smrg	      # and it's NOT already a .def file. Must figure out
73116e7d3316Smrg	      # which of the given symbols are data symbols and tag
73126e7d3316Smrg	      # them as such. So, trigger use of export_symbols_cmds.
73136e7d3316Smrg	      # export_symbols gets reassigned inside the "prepare
73146e7d3316Smrg	      # the list of exported symbols" if statement, so the
73156e7d3316Smrg	      # include_expsyms logic still works.
73166e7d3316Smrg	      orig_export_symbols="$export_symbols"
73176e7d3316Smrg	      export_symbols=
73186e7d3316Smrg	      always_export_symbols=yes
73196e7d3316Smrg	    fi
73206e7d3316Smrg	  fi
73216e7d3316Smrg	  ;;
73226e7d3316Smrg	esac
7323a966c04fSmrg
73246e7d3316Smrg	# Prepare the list of exported symbols
73256e7d3316Smrg	if test -z "$export_symbols"; then
73266e7d3316Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
73276e7d3316Smrg	    func_verbose "generating symbol list for \`$libname.la'"
73286e7d3316Smrg	    export_symbols="$output_objdir/$libname.exp"
73296e7d3316Smrg	    $opt_dry_run || $RM $export_symbols
73306e7d3316Smrg	    cmds=$export_symbols_cmds
73316e7d3316Smrg	    save_ifs="$IFS"; IFS='~'
73326e7d3316Smrg	    for cmd in $cmds; do
73336e7d3316Smrg	      IFS="$save_ifs"
73346e7d3316Smrg	      eval cmd=\"$cmd\"
73356e7d3316Smrg	      func_len " $cmd"
73366e7d3316Smrg	      len=$func_len_result
73376e7d3316Smrg	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
73386e7d3316Smrg		func_show_eval "$cmd" 'exit $?'
73396e7d3316Smrg		skipped_export=false
73406e7d3316Smrg	      else
73416e7d3316Smrg		# The command line is too long to execute in one step.
73426e7d3316Smrg		func_verbose "using reloadable object file for export list..."
73436e7d3316Smrg		skipped_export=:
73446e7d3316Smrg		# Break out early, otherwise skipped_export may be
73456e7d3316Smrg		# set to false by a later but shorter cmd.
73466e7d3316Smrg		break
73476e7d3316Smrg	      fi
73486e7d3316Smrg	    done
73496e7d3316Smrg	    IFS="$save_ifs"
73506e7d3316Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
73516e7d3316Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
73526e7d3316Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
73536e7d3316Smrg	    fi
73546e7d3316Smrg	  fi
73556e7d3316Smrg	fi
7356a966c04fSmrg
73576e7d3316Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
73586e7d3316Smrg	  tmp_export_symbols="$export_symbols"
73596e7d3316Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
73606e7d3316Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
73616e7d3316Smrg	fi
7362a966c04fSmrg
73636e7d3316Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
73646e7d3316Smrg	  # The given exports_symbols file has to be filtered, so filter it.
73656e7d3316Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
73666e7d3316Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
73676e7d3316Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
73686e7d3316Smrg	  # though. Also, the filter scales superlinearly with the number of
73696e7d3316Smrg	  # global variables. join(1) would be nice here, but unfortunately
73706e7d3316Smrg	  # isn't a blessed tool.
73716e7d3316Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
73726e7d3316Smrg	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
73736e7d3316Smrg	  export_symbols=$output_objdir/$libname.def
73746e7d3316Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
7375a966c04fSmrg	fi
7376a966c04fSmrg
73776e7d3316Smrg	tmp_deplibs=
73786e7d3316Smrg	for test_deplib in $deplibs; do
73796e7d3316Smrg	  case " $convenience " in
73806e7d3316Smrg	  *" $test_deplib "*) ;;
73816e7d3316Smrg	  *)
73826e7d3316Smrg	    tmp_deplibs="$tmp_deplibs $test_deplib"
73836e7d3316Smrg	    ;;
73846e7d3316Smrg	  esac
73856e7d3316Smrg	done
73866e7d3316Smrg	deplibs="$tmp_deplibs"
7387a966c04fSmrg
73886e7d3316Smrg	if test -n "$convenience"; then
73896e7d3316Smrg	  if test -n "$whole_archive_flag_spec" &&
73906e7d3316Smrg	    test "$compiler_needs_object" = yes &&
73916e7d3316Smrg	    test -z "$libobjs"; then
73926e7d3316Smrg	    # extract the archives, so we have objects to list.
73936e7d3316Smrg	    # TODO: could optimize this to just extract one archive.
73946e7d3316Smrg	    whole_archive_flag_spec=
73956e7d3316Smrg	  fi
73966e7d3316Smrg	  if test -n "$whole_archive_flag_spec"; then
73976e7d3316Smrg	    save_libobjs=$libobjs
73986e7d3316Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
73996e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
74006e7d3316Smrg	  else
74016e7d3316Smrg	    gentop="$output_objdir/${outputname}x"
74026e7d3316Smrg	    generated="$generated $gentop"
7403a966c04fSmrg
74046e7d3316Smrg	    func_extract_archives $gentop $convenience
74056e7d3316Smrg	    libobjs="$libobjs $func_extract_archives_result"
74066e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
74076e7d3316Smrg	  fi
74086e7d3316Smrg	fi
7409a966c04fSmrg
74106e7d3316Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
74116e7d3316Smrg	  eval flag=\"$thread_safe_flag_spec\"
74126e7d3316Smrg	  linker_flags="$linker_flags $flag"
74136e7d3316Smrg	fi
7414a966c04fSmrg
74156e7d3316Smrg	# Make a backup of the uninstalled library when relinking
74166e7d3316Smrg	if test "$mode" = relink; then
74176e7d3316Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
7418a966c04fSmrg	fi
7419a966c04fSmrg
74206e7d3316Smrg	# Do each of the archive commands.
74216e7d3316Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
74226e7d3316Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
74236e7d3316Smrg	    eval test_cmds=\"$module_expsym_cmds\"
74246e7d3316Smrg	    cmds=$module_expsym_cmds
74256e7d3316Smrg	  else
74266e7d3316Smrg	    eval test_cmds=\"$module_cmds\"
74276e7d3316Smrg	    cmds=$module_cmds
74286e7d3316Smrg	  fi
74296e7d3316Smrg	else
74306e7d3316Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
74316e7d3316Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
74326e7d3316Smrg	    cmds=$archive_expsym_cmds
74336e7d3316Smrg	  else
74346e7d3316Smrg	    eval test_cmds=\"$archive_cmds\"
74356e7d3316Smrg	    cmds=$archive_cmds
74366e7d3316Smrg	  fi
7437a966c04fSmrg	fi
7438a966c04fSmrg
74396e7d3316Smrg	if test "X$skipped_export" != "X:" &&
74406e7d3316Smrg	   func_len " $test_cmds" &&
74416e7d3316Smrg	   len=$func_len_result &&
74426e7d3316Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
74436e7d3316Smrg	  :
74446e7d3316Smrg	else
74456e7d3316Smrg	  # The command line is too long to link in one step, link piecewise
74466e7d3316Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
74476e7d3316Smrg	  # script.
7448a966c04fSmrg
74496e7d3316Smrg	  # Save the value of $output and $libobjs because we want to
74506e7d3316Smrg	  # use them later.  If we have whole_archive_flag_spec, we
74516e7d3316Smrg	  # want to use save_libobjs as it was before
74526e7d3316Smrg	  # whole_archive_flag_spec was expanded, because we can't
74536e7d3316Smrg	  # assume the linker understands whole_archive_flag_spec.
74546e7d3316Smrg	  # This may have to be revisited, in case too many
74556e7d3316Smrg	  # convenience libraries get linked in and end up exceeding
74566e7d3316Smrg	  # the spec.
74576e7d3316Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
74586e7d3316Smrg	    save_libobjs=$libobjs
74596e7d3316Smrg	  fi
74606e7d3316Smrg	  save_output=$output
74616e7d3316Smrg	  func_basename "$output"
74626e7d3316Smrg	  output_la=$func_basename_result
7463a966c04fSmrg
74646e7d3316Smrg	  # Clear the reloadable object creation command queue and
74656e7d3316Smrg	  # initialize k to one.
74666e7d3316Smrg	  test_cmds=
74676e7d3316Smrg	  concat_cmds=
74686e7d3316Smrg	  objlist=
74696e7d3316Smrg	  last_robj=
74706e7d3316Smrg	  k=1
7471a966c04fSmrg
74726e7d3316Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
74736e7d3316Smrg	    output=${output_objdir}/${output_la}.lnkscript
74746e7d3316Smrg	    func_verbose "creating GNU ld script: $output"
74756e7d3316Smrg	    echo 'INPUT (' > $output
74766e7d3316Smrg	    for obj in $save_libobjs
74776e7d3316Smrg	    do
74786e7d3316Smrg	      $ECHO "$obj" >> $output
74796e7d3316Smrg	    done
74806e7d3316Smrg	    echo ')' >> $output
74816e7d3316Smrg	    delfiles="$delfiles $output"
74826e7d3316Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
74836e7d3316Smrg	    output=${output_objdir}/${output_la}.lnk
74846e7d3316Smrg	    func_verbose "creating linker input file list: $output"
74856e7d3316Smrg	    : > $output
74866e7d3316Smrg	    set x $save_libobjs
74876e7d3316Smrg	    shift
74886e7d3316Smrg	    firstobj=
74896e7d3316Smrg	    if test "$compiler_needs_object" = yes; then
74906e7d3316Smrg	      firstobj="$1 "
74916e7d3316Smrg	      shift
74926e7d3316Smrg	    fi
74936e7d3316Smrg	    for obj
74946e7d3316Smrg	    do
74956e7d3316Smrg	      $ECHO "$obj" >> $output
74966e7d3316Smrg	    done
74976e7d3316Smrg	    delfiles="$delfiles $output"
74986e7d3316Smrg	    output=$firstobj\"$file_list_spec$output\"
74996e7d3316Smrg	  else
75006e7d3316Smrg	    if test -n "$save_libobjs"; then
75016e7d3316Smrg	      func_verbose "creating reloadable object files..."
75026e7d3316Smrg	      output=$output_objdir/$output_la-${k}.$objext
75036e7d3316Smrg	      eval test_cmds=\"$reload_cmds\"
75046e7d3316Smrg	      func_len " $test_cmds"
75056e7d3316Smrg	      len0=$func_len_result
75066e7d3316Smrg	      len=$len0
75076e7d3316Smrg
75086e7d3316Smrg	      # Loop over the list of objects to be linked.
75096e7d3316Smrg	      for obj in $save_libobjs
75106e7d3316Smrg	      do
75116e7d3316Smrg		func_len " $obj"
75126e7d3316Smrg		func_arith $len + $func_len_result
75136e7d3316Smrg		len=$func_arith_result
75146e7d3316Smrg		if test "X$objlist" = X ||
75156e7d3316Smrg		   test "$len" -lt "$max_cmd_len"; then
75166e7d3316Smrg		  func_append objlist " $obj"
75176e7d3316Smrg		else
75186e7d3316Smrg		  # The command $test_cmds is almost too long, add a
75196e7d3316Smrg		  # command to the queue.
75206e7d3316Smrg		  if test "$k" -eq 1 ; then
75216e7d3316Smrg		    # The first file doesn't have a previous command to add.
75226e7d3316Smrg		    reload_objs=$objlist
75236e7d3316Smrg		    eval concat_cmds=\"$reload_cmds\"
75246e7d3316Smrg		  else
75256e7d3316Smrg		    # All subsequent reloadable object files will link in
75266e7d3316Smrg		    # the last one created.
75276e7d3316Smrg		    reload_objs="$objlist $last_robj"
75286e7d3316Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
75296e7d3316Smrg		  fi
75306e7d3316Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
75316e7d3316Smrg		  func_arith $k + 1
75326e7d3316Smrg		  k=$func_arith_result
75336e7d3316Smrg		  output=$output_objdir/$output_la-${k}.$objext
75346e7d3316Smrg		  objlist=" $obj"
75356e7d3316Smrg		  func_len " $last_robj"
75366e7d3316Smrg		  func_arith $len0 + $func_len_result
75376e7d3316Smrg		  len=$func_arith_result
75386e7d3316Smrg		fi
75396e7d3316Smrg	      done
75406e7d3316Smrg	      # Handle the remaining objects by creating one last
75416e7d3316Smrg	      # reloadable object file.  All subsequent reloadable object
75426e7d3316Smrg	      # files will link in the last one created.
75436e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
75446e7d3316Smrg	      reload_objs="$objlist $last_robj"
75456e7d3316Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
75466e7d3316Smrg	      if test -n "$last_robj"; then
75476e7d3316Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
75486e7d3316Smrg	      fi
75496e7d3316Smrg	      delfiles="$delfiles $output"
75506e7d3316Smrg
75516e7d3316Smrg	    else
75526e7d3316Smrg	      output=
75536e7d3316Smrg	    fi
7554a966c04fSmrg
75556e7d3316Smrg	    if ${skipped_export-false}; then
75566e7d3316Smrg	      func_verbose "generating symbol list for \`$libname.la'"
75576e7d3316Smrg	      export_symbols="$output_objdir/$libname.exp"
75586e7d3316Smrg	      $opt_dry_run || $RM $export_symbols
75596e7d3316Smrg	      libobjs=$output
75606e7d3316Smrg	      # Append the command to create the export file.
75616e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
75626e7d3316Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
75636e7d3316Smrg	      if test -n "$last_robj"; then
75646e7d3316Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
75656e7d3316Smrg	      fi
75666e7d3316Smrg	    fi
7567a966c04fSmrg
75686e7d3316Smrg	    test -n "$save_libobjs" &&
75696e7d3316Smrg	      func_verbose "creating a temporary reloadable object file: $output"
7570a966c04fSmrg
75716e7d3316Smrg	    # Loop through the commands generated above and execute them.
75726e7d3316Smrg	    save_ifs="$IFS"; IFS='~'
75736e7d3316Smrg	    for cmd in $concat_cmds; do
75746e7d3316Smrg	      IFS="$save_ifs"
75756e7d3316Smrg	      $opt_silent || {
75766e7d3316Smrg		  func_quote_for_expand "$cmd"
75776e7d3316Smrg		  eval "func_echo $func_quote_for_expand_result"
75786e7d3316Smrg	      }
75796e7d3316Smrg	      $opt_dry_run || eval "$cmd" || {
75806e7d3316Smrg		lt_exit=$?
75816e7d3316Smrg
75826e7d3316Smrg		# Restore the uninstalled library and exit
75836e7d3316Smrg		if test "$mode" = relink; then
75846e7d3316Smrg		  ( cd "$output_objdir" && \
75856e7d3316Smrg		    $RM "${realname}T" && \
75866e7d3316Smrg		    $MV "${realname}U" "$realname" )
75876e7d3316Smrg		fi
7588a966c04fSmrg
75896e7d3316Smrg		exit $lt_exit
75906e7d3316Smrg	      }
75916e7d3316Smrg	    done
75926e7d3316Smrg	    IFS="$save_ifs"
7593a966c04fSmrg
75946e7d3316Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
75956e7d3316Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
75966e7d3316Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7597a966c04fSmrg	    fi
7598a966c04fSmrg	  fi
7599a966c04fSmrg
76006e7d3316Smrg          if ${skipped_export-false}; then
76016e7d3316Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
76026e7d3316Smrg	      tmp_export_symbols="$export_symbols"
76036e7d3316Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
76046e7d3316Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
76056e7d3316Smrg	    fi
7606a966c04fSmrg
76076e7d3316Smrg	    if test -n "$orig_export_symbols"; then
76086e7d3316Smrg	      # The given exports_symbols file has to be filtered, so filter it.
76096e7d3316Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
76106e7d3316Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
76116e7d3316Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
76126e7d3316Smrg	      # though. Also, the filter scales superlinearly with the number of
76136e7d3316Smrg	      # global variables. join(1) would be nice here, but unfortunately
76146e7d3316Smrg	      # isn't a blessed tool.
76156e7d3316Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
76166e7d3316Smrg	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
76176e7d3316Smrg	      export_symbols=$output_objdir/$libname.def
76186e7d3316Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
76196e7d3316Smrg	    fi
76206e7d3316Smrg	  fi
7621a966c04fSmrg
76226e7d3316Smrg	  libobjs=$output
76236e7d3316Smrg	  # Restore the value of output.
76246e7d3316Smrg	  output=$save_output
7625a966c04fSmrg
76266e7d3316Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
76276e7d3316Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
76286e7d3316Smrg	    test "X$libobjs" = "X " && libobjs=
76296e7d3316Smrg	  fi
76306e7d3316Smrg	  # Expand the library linking commands again to reset the
76316e7d3316Smrg	  # value of $libobjs for piecewise linking.
76326e7d3316Smrg
76336e7d3316Smrg	  # Do each of the archive commands.
76346e7d3316Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
76356e7d3316Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
76366e7d3316Smrg	      cmds=$module_expsym_cmds
7637a966c04fSmrg	    else
76386e7d3316Smrg	      cmds=$module_cmds
7639a966c04fSmrg	    fi
7640a966c04fSmrg	  else
76416e7d3316Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
76426e7d3316Smrg	      cmds=$archive_expsym_cmds
76436e7d3316Smrg	    else
76446e7d3316Smrg	      cmds=$archive_cmds
76456e7d3316Smrg	    fi
7646a966c04fSmrg	  fi
7647a966c04fSmrg	fi
7648a966c04fSmrg
76496e7d3316Smrg	if test -n "$delfiles"; then
76506e7d3316Smrg	  # Append the command to remove temporary files to $cmds.
76516e7d3316Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
76526e7d3316Smrg	fi
7653a966c04fSmrg
76546e7d3316Smrg	# Add any objects from preloaded convenience libraries
76556e7d3316Smrg	if test -n "$dlprefiles"; then
76566e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
76576e7d3316Smrg	  generated="$generated $gentop"
7658a966c04fSmrg
76596e7d3316Smrg	  func_extract_archives $gentop $dlprefiles
76606e7d3316Smrg	  libobjs="$libobjs $func_extract_archives_result"
76616e7d3316Smrg	  test "X$libobjs" = "X " && libobjs=
7662a966c04fSmrg	fi
7663a966c04fSmrg
76646e7d3316Smrg	save_ifs="$IFS"; IFS='~'
76656e7d3316Smrg	for cmd in $cmds; do
76666e7d3316Smrg	  IFS="$save_ifs"
76676e7d3316Smrg	  eval cmd=\"$cmd\"
76686e7d3316Smrg	  $opt_silent || {
76696e7d3316Smrg	    func_quote_for_expand "$cmd"
76706e7d3316Smrg	    eval "func_echo $func_quote_for_expand_result"
76716e7d3316Smrg	  }
76726e7d3316Smrg	  $opt_dry_run || eval "$cmd" || {
76736e7d3316Smrg	    lt_exit=$?
7674a966c04fSmrg
76756e7d3316Smrg	    # Restore the uninstalled library and exit
76766e7d3316Smrg	    if test "$mode" = relink; then
76776e7d3316Smrg	      ( cd "$output_objdir" && \
76786e7d3316Smrg	        $RM "${realname}T" && \
76796e7d3316Smrg		$MV "${realname}U" "$realname" )
7680a966c04fSmrg	    fi
7681a966c04fSmrg
76826e7d3316Smrg	    exit $lt_exit
76836e7d3316Smrg	  }
76846e7d3316Smrg	done
76856e7d3316Smrg	IFS="$save_ifs"
7686a966c04fSmrg
76876e7d3316Smrg	# Restore the uninstalled library and exit
76886e7d3316Smrg	if test "$mode" = relink; then
76896e7d3316Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
7690a966c04fSmrg
76916e7d3316Smrg	  if test -n "$convenience"; then
76926e7d3316Smrg	    if test -z "$whole_archive_flag_spec"; then
76936e7d3316Smrg	      func_show_eval '${RM}r "$gentop"'
76946e7d3316Smrg	    fi
76956e7d3316Smrg	  fi
7696a966c04fSmrg
76976e7d3316Smrg	  exit $EXIT_SUCCESS
76986e7d3316Smrg	fi
7699a966c04fSmrg
77006e7d3316Smrg	# Create links to the real library.
77016e7d3316Smrg	for linkname in $linknames; do
77026e7d3316Smrg	  if test "$realname" != "$linkname"; then
77036e7d3316Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
77046e7d3316Smrg	  fi
77056e7d3316Smrg	done
7706a966c04fSmrg
77076e7d3316Smrg	# If -module or -export-dynamic was specified, set the dlname.
77086e7d3316Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
77096e7d3316Smrg	  # On all known operating systems, these are identical.
77106e7d3316Smrg	  dlname="$soname"
77116e7d3316Smrg	fi
77126e7d3316Smrg      fi
77136e7d3316Smrg      ;;
7714a966c04fSmrg
77156e7d3316Smrg    obj)
77166e7d3316Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
77176e7d3316Smrg	func_warning "\`-dlopen' is ignored for objects"
77186e7d3316Smrg      fi
7719a966c04fSmrg
77206e7d3316Smrg      case " $deplibs" in
77216e7d3316Smrg      *\ -l* | *\ -L*)
77226e7d3316Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
77236e7d3316Smrg      esac
7724a966c04fSmrg
77256e7d3316Smrg      test -n "$rpath" && \
77266e7d3316Smrg	func_warning "\`-rpath' is ignored for objects"
7727a966c04fSmrg
77286e7d3316Smrg      test -n "$xrpath" && \
77296e7d3316Smrg	func_warning "\`-R' is ignored for objects"
77306e7d3316Smrg
77316e7d3316Smrg      test -n "$vinfo" && \
77326e7d3316Smrg	func_warning "\`-version-info' is ignored for objects"
7733a966c04fSmrg
77346e7d3316Smrg      test -n "$release" && \
77356e7d3316Smrg	func_warning "\`-release' is ignored for objects"
7736a966c04fSmrg
77376e7d3316Smrg      case $output in
77386e7d3316Smrg      *.lo)
77396e7d3316Smrg	test -n "$objs$old_deplibs" && \
77406e7d3316Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
77416e7d3316Smrg
77426e7d3316Smrg	libobj=$output
77436e7d3316Smrg	func_lo2o "$libobj"
77446e7d3316Smrg	obj=$func_lo2o_result
77456e7d3316Smrg	;;
77466e7d3316Smrg      *)
77476e7d3316Smrg	libobj=
77486e7d3316Smrg	obj="$output"
7749a966c04fSmrg	;;
7750a966c04fSmrg      esac
7751a966c04fSmrg
77526e7d3316Smrg      # Delete the old objects.
77536e7d3316Smrg      $opt_dry_run || $RM $obj $libobj
7754a966c04fSmrg
77556e7d3316Smrg      # Objects from convenience libraries.  This assumes
77566e7d3316Smrg      # single-version convenience libraries.  Whenever we create
77576e7d3316Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
77586e7d3316Smrg      # the extraction.
77596e7d3316Smrg      reload_conv_objs=
77606e7d3316Smrg      gentop=
77616e7d3316Smrg      # reload_cmds runs $LD directly, so let us get rid of
77626e7d3316Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
77636e7d3316Smrg      # turning comma into space..
77646e7d3316Smrg      wl=
7765a966c04fSmrg
77666e7d3316Smrg      if test -n "$convenience"; then
77676e7d3316Smrg	if test -n "$whole_archive_flag_spec"; then
77686e7d3316Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
77696e7d3316Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
7770a966c04fSmrg	else
77716e7d3316Smrg	  gentop="$output_objdir/${obj}x"
77726e7d3316Smrg	  generated="$generated $gentop"
77736e7d3316Smrg
77746e7d3316Smrg	  func_extract_archives $gentop $convenience
77756e7d3316Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
7776a966c04fSmrg	fi
77776e7d3316Smrg      fi
7778a966c04fSmrg
77796e7d3316Smrg      # Create the old-style object.
77806e7d3316Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
7781a966c04fSmrg
77826e7d3316Smrg      output="$obj"
77836e7d3316Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
7784a966c04fSmrg
77856e7d3316Smrg      # Exit if we aren't doing a library object file.
77866e7d3316Smrg      if test -z "$libobj"; then
77876e7d3316Smrg	if test -n "$gentop"; then
77886e7d3316Smrg	  func_show_eval '${RM}r "$gentop"'
77896e7d3316Smrg	fi
7790a966c04fSmrg
77916e7d3316Smrg	exit $EXIT_SUCCESS
7792a966c04fSmrg      fi
7793a966c04fSmrg
77946e7d3316Smrg      if test "$build_libtool_libs" != yes; then
77956e7d3316Smrg	if test -n "$gentop"; then
77966e7d3316Smrg	  func_show_eval '${RM}r "$gentop"'
77976e7d3316Smrg	fi
7798a966c04fSmrg
77996e7d3316Smrg	# Create an invalid libtool object if no PIC, so that we don't
78006e7d3316Smrg	# accidentally link it into a program.
78016e7d3316Smrg	# $show "echo timestamp > $libobj"
78026e7d3316Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
78036e7d3316Smrg	exit $EXIT_SUCCESS
78046e7d3316Smrg      fi
7805a966c04fSmrg
78066e7d3316Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
78076e7d3316Smrg	# Only do commands if we really have different PIC objects.
78086e7d3316Smrg	reload_objs="$libobjs $reload_conv_objs"
78096e7d3316Smrg	output="$libobj"
78106e7d3316Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
7811a966c04fSmrg      fi
78126e7d3316Smrg
78136e7d3316Smrg      if test -n "$gentop"; then
78146e7d3316Smrg	func_show_eval '${RM}r "$gentop"'
78156e7d3316Smrg      fi
78166e7d3316Smrg
78176e7d3316Smrg      exit $EXIT_SUCCESS
7818a966c04fSmrg      ;;
7819a966c04fSmrg
78206e7d3316Smrg    prog)
78216e7d3316Smrg      case $host in
78226e7d3316Smrg	*cygwin*) func_stripname '' '.exe' "$output"
78236e7d3316Smrg	          output=$func_stripname_result.exe;;
78246e7d3316Smrg      esac
78256e7d3316Smrg      test -n "$vinfo" && \
78266e7d3316Smrg	func_warning "\`-version-info' is ignored for programs"
7827a966c04fSmrg
78286e7d3316Smrg      test -n "$release" && \
78296e7d3316Smrg	func_warning "\`-release' is ignored for programs"
7830a966c04fSmrg
78316e7d3316Smrg      test "$preload" = yes \
78326e7d3316Smrg        && test "$dlopen_support" = unknown \
78336e7d3316Smrg	&& test "$dlopen_self" = unknown \
78346e7d3316Smrg	&& test "$dlopen_self_static" = unknown && \
78356e7d3316Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
78366e7d3316Smrg
78376e7d3316Smrg      case $host in
78386e7d3316Smrg      *-*-rhapsody* | *-*-darwin1.[012])
78396e7d3316Smrg	# On Rhapsody replace the C library is the System framework
78406e7d3316Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
78416e7d3316Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
7842a966c04fSmrg	;;
78436e7d3316Smrg      esac
7844a966c04fSmrg
78456e7d3316Smrg      case $host in
78466e7d3316Smrg      *-*-darwin*)
78476e7d3316Smrg	# Don't allow lazy linking, it breaks C++ global constructors
78486e7d3316Smrg	# But is supposedly fixed on 10.4 or later (yay!).
78496e7d3316Smrg	if test "$tagname" = CXX ; then
78506e7d3316Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
78516e7d3316Smrg	    10.[0123])
78526e7d3316Smrg	      compile_command="$compile_command ${wl}-bind_at_load"
78536e7d3316Smrg	      finalize_command="$finalize_command ${wl}-bind_at_load"
78546e7d3316Smrg	    ;;
78556e7d3316Smrg	  esac
7856a966c04fSmrg	fi
78576e7d3316Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
78586e7d3316Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
78596e7d3316Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
78606e7d3316Smrg	;;
78616e7d3316Smrg      esac
7862a966c04fSmrg
7863a966c04fSmrg
78646e7d3316Smrg      # move library search paths that coincide with paths to not yet
78656e7d3316Smrg      # installed libraries to the beginning of the library search list
78666e7d3316Smrg      new_libs=
78676e7d3316Smrg      for path in $notinst_path; do
78686e7d3316Smrg	case " $new_libs " in
78696e7d3316Smrg	*" -L$path/$objdir "*) ;;
78706e7d3316Smrg	*)
78716e7d3316Smrg	  case " $compile_deplibs " in
78726e7d3316Smrg	  *" -L$path/$objdir "*)
78736e7d3316Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
7874a966c04fSmrg	  esac
78756e7d3316Smrg	  ;;
78766e7d3316Smrg	esac
78776e7d3316Smrg      done
78786e7d3316Smrg      for deplib in $compile_deplibs; do
78796e7d3316Smrg	case $deplib in
78806e7d3316Smrg	-L*)
78816e7d3316Smrg	  case " $new_libs " in
78826e7d3316Smrg	  *" $deplib "*) ;;
78836e7d3316Smrg	  *) new_libs="$new_libs $deplib" ;;
7884a966c04fSmrg	  esac
78856e7d3316Smrg	  ;;
78866e7d3316Smrg	*) new_libs="$new_libs $deplib" ;;
78876e7d3316Smrg	esac
78886e7d3316Smrg      done
78896e7d3316Smrg      compile_deplibs="$new_libs"
7890a966c04fSmrg
7891a966c04fSmrg
78926e7d3316Smrg      compile_command="$compile_command $compile_deplibs"
78936e7d3316Smrg      finalize_command="$finalize_command $finalize_deplibs"
7894a966c04fSmrg
78956e7d3316Smrg      if test -n "$rpath$xrpath"; then
78966e7d3316Smrg	# If the user specified any rpath flags, then add them.
78976e7d3316Smrg	for libdir in $rpath $xrpath; do
78986e7d3316Smrg	  # This is the magic to use -rpath.
78996e7d3316Smrg	  case "$finalize_rpath " in
79006e7d3316Smrg	  *" $libdir "*) ;;
79016e7d3316Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
79026e7d3316Smrg	  esac
79036e7d3316Smrg	done
79046e7d3316Smrg      fi
7905a966c04fSmrg
79066e7d3316Smrg      # Now hardcode the library paths
79076e7d3316Smrg      rpath=
79086e7d3316Smrg      hardcode_libdirs=
79096e7d3316Smrg      for libdir in $compile_rpath $finalize_rpath; do
79106e7d3316Smrg	if test -n "$hardcode_libdir_flag_spec"; then
79116e7d3316Smrg	  if test -n "$hardcode_libdir_separator"; then
79126e7d3316Smrg	    if test -z "$hardcode_libdirs"; then
79136e7d3316Smrg	      hardcode_libdirs="$libdir"
79146e7d3316Smrg	    else
79156e7d3316Smrg	      # Just accumulate the unique libdirs.
79166e7d3316Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
79176e7d3316Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
79186e7d3316Smrg		;;
79196e7d3316Smrg	      *)
79206e7d3316Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
79216e7d3316Smrg		;;
79226e7d3316Smrg	      esac
79236e7d3316Smrg	    fi
7924a966c04fSmrg	  else
79256e7d3316Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
79266e7d3316Smrg	    rpath="$rpath $flag"
7927a966c04fSmrg	  fi
79286e7d3316Smrg	elif test -n "$runpath_var"; then
79296e7d3316Smrg	  case "$perm_rpath " in
79306e7d3316Smrg	  *" $libdir "*) ;;
79316e7d3316Smrg	  *) perm_rpath="$perm_rpath $libdir" ;;
79326e7d3316Smrg	  esac
79336e7d3316Smrg	fi
79346e7d3316Smrg	case $host in
79356e7d3316Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
79366e7d3316Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
79376e7d3316Smrg	  case :$dllsearchpath: in
79386e7d3316Smrg	  *":$libdir:"*) ;;
79396e7d3316Smrg	  ::) dllsearchpath=$libdir;;
79406e7d3316Smrg	  *) dllsearchpath="$dllsearchpath:$libdir";;
79416e7d3316Smrg	  esac
79426e7d3316Smrg	  case :$dllsearchpath: in
79436e7d3316Smrg	  *":$testbindir:"*) ;;
79446e7d3316Smrg	  ::) dllsearchpath=$testbindir;;
79456e7d3316Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
79466e7d3316Smrg	  esac
79476e7d3316Smrg	  ;;
79486e7d3316Smrg	esac
79496e7d3316Smrg      done
79506e7d3316Smrg      # Substitute the hardcoded libdirs into the rpath.
79516e7d3316Smrg      if test -n "$hardcode_libdir_separator" &&
79526e7d3316Smrg	 test -n "$hardcode_libdirs"; then
79536e7d3316Smrg	libdir="$hardcode_libdirs"
79546e7d3316Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
79556e7d3316Smrg      fi
79566e7d3316Smrg      compile_rpath="$rpath"
7957a966c04fSmrg
79586e7d3316Smrg      rpath=
79596e7d3316Smrg      hardcode_libdirs=
79606e7d3316Smrg      for libdir in $finalize_rpath; do
79616e7d3316Smrg	if test -n "$hardcode_libdir_flag_spec"; then
79626e7d3316Smrg	  if test -n "$hardcode_libdir_separator"; then
79636e7d3316Smrg	    if test -z "$hardcode_libdirs"; then
79646e7d3316Smrg	      hardcode_libdirs="$libdir"
79656e7d3316Smrg	    else
79666e7d3316Smrg	      # Just accumulate the unique libdirs.
79676e7d3316Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
79686e7d3316Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
79696e7d3316Smrg		;;
79706e7d3316Smrg	      *)
79716e7d3316Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
79726e7d3316Smrg		;;
79736e7d3316Smrg	      esac
79746e7d3316Smrg	    fi
7975a966c04fSmrg	  else
79766e7d3316Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
79776e7d3316Smrg	    rpath="$rpath $flag"
7978a966c04fSmrg	  fi
79796e7d3316Smrg	elif test -n "$runpath_var"; then
79806e7d3316Smrg	  case "$finalize_perm_rpath " in
79816e7d3316Smrg	  *" $libdir "*) ;;
79826e7d3316Smrg	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
79836e7d3316Smrg	  esac
7984a966c04fSmrg	fi
79856e7d3316Smrg      done
79866e7d3316Smrg      # Substitute the hardcoded libdirs into the rpath.
79876e7d3316Smrg      if test -n "$hardcode_libdir_separator" &&
79886e7d3316Smrg	 test -n "$hardcode_libdirs"; then
79896e7d3316Smrg	libdir="$hardcode_libdirs"
79906e7d3316Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
79916e7d3316Smrg      fi
79926e7d3316Smrg      finalize_rpath="$rpath"
7993a966c04fSmrg
79946e7d3316Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
79956e7d3316Smrg	# Transform all the library objects into standard objects.
79966e7d3316Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
79976e7d3316Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
79986e7d3316Smrg      fi
7999a966c04fSmrg
80006e7d3316Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8001a966c04fSmrg
80026e7d3316Smrg      # template prelinking step
80036e7d3316Smrg      if test -n "$prelink_cmds"; then
80046e7d3316Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
80056e7d3316Smrg      fi
8006a966c04fSmrg
80076e7d3316Smrg      wrappers_required=yes
80086e7d3316Smrg      case $host in
80096e7d3316Smrg      *cegcc* | *mingw32ce*)
80106e7d3316Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
80116e7d3316Smrg        wrappers_required=no
80126e7d3316Smrg        ;;
80136e7d3316Smrg      *cygwin* | *mingw* )
80146e7d3316Smrg        if test "$build_libtool_libs" != yes; then
80156e7d3316Smrg          wrappers_required=no
80166e7d3316Smrg        fi
80176e7d3316Smrg        ;;
80186e7d3316Smrg      *)
80196e7d3316Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
80206e7d3316Smrg          wrappers_required=no
80216e7d3316Smrg        fi
80226e7d3316Smrg        ;;
80236e7d3316Smrg      esac
80246e7d3316Smrg      if test "$wrappers_required" = no; then
80256e7d3316Smrg	# Replace the output file specification.
80266e7d3316Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
80276e7d3316Smrg	link_command="$compile_command$compile_rpath"
8028a966c04fSmrg
80296e7d3316Smrg	# We have no uninstalled library dependencies, so finalize right now.
80306e7d3316Smrg	exit_status=0
80316e7d3316Smrg	func_show_eval "$link_command" 'exit_status=$?'
8032a966c04fSmrg
80336e7d3316Smrg	# Delete the generated files.
80346e7d3316Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
80356e7d3316Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8036a966c04fSmrg	fi
8037a966c04fSmrg
80386e7d3316Smrg	exit $exit_status
80396e7d3316Smrg      fi
8040a966c04fSmrg
80416e7d3316Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
80426e7d3316Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
80436e7d3316Smrg      fi
80446e7d3316Smrg      if test -n "$finalize_shlibpath"; then
80456e7d3316Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
80466e7d3316Smrg      fi
8047a966c04fSmrg
80486e7d3316Smrg      compile_var=
80496e7d3316Smrg      finalize_var=
80506e7d3316Smrg      if test -n "$runpath_var"; then
80516e7d3316Smrg	if test -n "$perm_rpath"; then
80526e7d3316Smrg	  # We should set the runpath_var.
80536e7d3316Smrg	  rpath=
80546e7d3316Smrg	  for dir in $perm_rpath; do
80556e7d3316Smrg	    rpath="$rpath$dir:"
80566e7d3316Smrg	  done
80576e7d3316Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8058a966c04fSmrg	fi
80596e7d3316Smrg	if test -n "$finalize_perm_rpath"; then
80606e7d3316Smrg	  # We should set the runpath_var.
80616e7d3316Smrg	  rpath=
80626e7d3316Smrg	  for dir in $finalize_perm_rpath; do
80636e7d3316Smrg	    rpath="$rpath$dir:"
80646e7d3316Smrg	  done
80656e7d3316Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8066a966c04fSmrg	fi
80676e7d3316Smrg      fi
8068a966c04fSmrg
80696e7d3316Smrg      if test "$no_install" = yes; then
80706e7d3316Smrg	# We don't need to create a wrapper script.
80716e7d3316Smrg	link_command="$compile_var$compile_command$compile_rpath"
80726e7d3316Smrg	# Replace the output file specification.
80736e7d3316Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
80746e7d3316Smrg	# Delete the old output file.
80756e7d3316Smrg	$opt_dry_run || $RM $output
80766e7d3316Smrg	# Link the executable and exit
80776e7d3316Smrg	func_show_eval "$link_command" 'exit $?'
8078a966c04fSmrg	exit $EXIT_SUCCESS
80796e7d3316Smrg      fi
8080a966c04fSmrg
80816e7d3316Smrg      if test "$hardcode_action" = relink; then
80826e7d3316Smrg	# Fast installation is not supported
80836e7d3316Smrg	link_command="$compile_var$compile_command$compile_rpath"
80846e7d3316Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
80856e7d3316Smrg
80866e7d3316Smrg	func_warning "this platform does not like uninstalled shared libraries"
80876e7d3316Smrg	func_warning "\`$output' will be relinked during installation"
80886e7d3316Smrg      else
80896e7d3316Smrg	if test "$fast_install" != no; then
80906e7d3316Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
80916e7d3316Smrg	  if test "$fast_install" = yes; then
80926e7d3316Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
80936e7d3316Smrg	  else
80946e7d3316Smrg	    # fast_install is set to needless
80956e7d3316Smrg	    relink_command=
80966e7d3316Smrg	  fi
8097a966c04fSmrg	else
80986e7d3316Smrg	  link_command="$compile_var$compile_command$compile_rpath"
80996e7d3316Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8100a966c04fSmrg	fi
81016e7d3316Smrg      fi
8102a966c04fSmrg
81036e7d3316Smrg      # Replace the output file specification.
81046e7d3316Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8105a966c04fSmrg
81066e7d3316Smrg      # Delete the old output files.
81076e7d3316Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8108a966c04fSmrg
81096e7d3316Smrg      func_show_eval "$link_command" 'exit $?'
8110a966c04fSmrg
81116e7d3316Smrg      # Now create the wrapper script.
81126e7d3316Smrg      func_verbose "creating $output"
8113a966c04fSmrg
81146e7d3316Smrg      # Quote the relink command for shipping.
81156e7d3316Smrg      if test -n "$relink_command"; then
81166e7d3316Smrg	# Preserve any variables that may affect compiler behavior
81176e7d3316Smrg	for var in $variables_saved_for_relink; do
81186e7d3316Smrg	  if eval test -z \"\${$var+set}\"; then
81196e7d3316Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
81206e7d3316Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
81216e7d3316Smrg	    relink_command="$var=; export $var; $relink_command"
8122a966c04fSmrg	  else
81236e7d3316Smrg	    func_quote_for_eval "$var_value"
81246e7d3316Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
8125a966c04fSmrg	  fi
81266e7d3316Smrg	done
81276e7d3316Smrg	relink_command="(cd `pwd`; $relink_command)"
81286e7d3316Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
81296e7d3316Smrg      fi
8130a966c04fSmrg
81316e7d3316Smrg      # Only actually do things if not in dry run mode.
81326e7d3316Smrg      $opt_dry_run || {
81336e7d3316Smrg	# win32 will think the script is a binary if it has
81346e7d3316Smrg	# a .exe suffix, so we strip it off here.
81356e7d3316Smrg	case $output in
81366e7d3316Smrg	  *.exe) func_stripname '' '.exe' "$output"
81376e7d3316Smrg	         output=$func_stripname_result ;;
81386e7d3316Smrg	esac
81396e7d3316Smrg	# test for cygwin because mv fails w/o .exe extensions
81406e7d3316Smrg	case $host in
81416e7d3316Smrg	  *cygwin*)
81426e7d3316Smrg	    exeext=.exe
81436e7d3316Smrg	    func_stripname '' '.exe' "$outputname"
81446e7d3316Smrg	    outputname=$func_stripname_result ;;
81456e7d3316Smrg	  *) exeext= ;;
8146a966c04fSmrg	esac
81476e7d3316Smrg	case $host in
81486e7d3316Smrg	  *cygwin* | *mingw* )
81496e7d3316Smrg	    func_dirname_and_basename "$output" "" "."
81506e7d3316Smrg	    output_name=$func_basename_result
81516e7d3316Smrg	    output_path=$func_dirname_result
81526e7d3316Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
81536e7d3316Smrg	    cwrapper="$output_path/$output_name.exe"
81546e7d3316Smrg	    $RM $cwrappersource $cwrapper
81556e7d3316Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
81566e7d3316Smrg
81576e7d3316Smrg	    func_emit_cwrapperexe_src > $cwrappersource
81586e7d3316Smrg
81596e7d3316Smrg	    # The wrapper executable is built using the $host compiler,
81606e7d3316Smrg	    # because it contains $host paths and files. If cross-
81616e7d3316Smrg	    # compiling, it, like the target executable, must be
81626e7d3316Smrg	    # executed on the $host or under an emulation environment.
81636e7d3316Smrg	    $opt_dry_run || {
81646e7d3316Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
81656e7d3316Smrg	      $STRIP $cwrapper
81666e7d3316Smrg	    }
8167a966c04fSmrg
81686e7d3316Smrg	    # Now, create the wrapper script for func_source use:
81696e7d3316Smrg	    func_ltwrapper_scriptname $cwrapper
81706e7d3316Smrg	    $RM $func_ltwrapper_scriptname_result
81716e7d3316Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
81726e7d3316Smrg	    $opt_dry_run || {
81736e7d3316Smrg	      # note: this script will not be executed, so do not chmod.
81746e7d3316Smrg	      if test "x$build" = "x$host" ; then
81756e7d3316Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
81766e7d3316Smrg	      else
81776e7d3316Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
81786e7d3316Smrg	      fi
81796e7d3316Smrg	    }
81806e7d3316Smrg	  ;;
81816e7d3316Smrg	  * )
81826e7d3316Smrg	    $RM $output
81836e7d3316Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
8184a966c04fSmrg
81856e7d3316Smrg	    func_emit_wrapper no > $output
81866e7d3316Smrg	    chmod +x $output
81876e7d3316Smrg	  ;;
81886e7d3316Smrg	esac
81896e7d3316Smrg      }
81906e7d3316Smrg      exit $EXIT_SUCCESS
81916e7d3316Smrg      ;;
81926e7d3316Smrg    esac
8193a966c04fSmrg
81946e7d3316Smrg    # See if we need to build an old-fashioned archive.
81956e7d3316Smrg    for oldlib in $oldlibs; do
8196a966c04fSmrg
81976e7d3316Smrg      if test "$build_libtool_libs" = convenience; then
81986e7d3316Smrg	oldobjs="$libobjs_save $symfileobj"
81996e7d3316Smrg	addlibs="$convenience"
82006e7d3316Smrg	build_libtool_libs=no
82016e7d3316Smrg      else
82026e7d3316Smrg	if test "$build_libtool_libs" = module; then
82036e7d3316Smrg	  oldobjs="$libobjs_save"
82046e7d3316Smrg	  build_libtool_libs=no
82056e7d3316Smrg	else
82066e7d3316Smrg	  oldobjs="$old_deplibs $non_pic_objects"
82076e7d3316Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
82086e7d3316Smrg	    oldobjs="$oldobjs $symfileobj"
82096e7d3316Smrg	  fi
82106e7d3316Smrg	fi
82116e7d3316Smrg	addlibs="$old_convenience"
8212a966c04fSmrg      fi
8213a966c04fSmrg
82146e7d3316Smrg      if test -n "$addlibs"; then
82156e7d3316Smrg	gentop="$output_objdir/${outputname}x"
82166e7d3316Smrg	generated="$generated $gentop"
8217a966c04fSmrg
82186e7d3316Smrg	func_extract_archives $gentop $addlibs
82196e7d3316Smrg	oldobjs="$oldobjs $func_extract_archives_result"
82206e7d3316Smrg      fi
8221a966c04fSmrg
82226e7d3316Smrg      # Do each command in the archive commands.
82236e7d3316Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
82246e7d3316Smrg	cmds=$old_archive_from_new_cmds
82256e7d3316Smrg      else
8226a966c04fSmrg
82276e7d3316Smrg	# Add any objects from preloaded convenience libraries
82286e7d3316Smrg	if test -n "$dlprefiles"; then
82296e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
82306e7d3316Smrg	  generated="$generated $gentop"
8231a966c04fSmrg
82326e7d3316Smrg	  func_extract_archives $gentop $dlprefiles
82336e7d3316Smrg	  oldobjs="$oldobjs $func_extract_archives_result"
82346e7d3316Smrg	fi
8235a966c04fSmrg
82366e7d3316Smrg	# POSIX demands no paths to be encoded in archives.  We have
82376e7d3316Smrg	# to avoid creating archives with duplicate basenames if we
82386e7d3316Smrg	# might have to extract them afterwards, e.g., when creating a
82396e7d3316Smrg	# static archive out of a convenience library, or when linking
82406e7d3316Smrg	# the entirety of a libtool archive into another (currently
82416e7d3316Smrg	# not supported by libtool).
82426e7d3316Smrg	if (for obj in $oldobjs
82436e7d3316Smrg	    do
82446e7d3316Smrg	      func_basename "$obj"
82456e7d3316Smrg	      $ECHO "$func_basename_result"
82466e7d3316Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
82476e7d3316Smrg	  :
82486e7d3316Smrg	else
82496e7d3316Smrg	  echo "copying selected object files to avoid basename conflicts..."
82506e7d3316Smrg	  gentop="$output_objdir/${outputname}x"
82516e7d3316Smrg	  generated="$generated $gentop"
82526e7d3316Smrg	  func_mkdir_p "$gentop"
82536e7d3316Smrg	  save_oldobjs=$oldobjs
82546e7d3316Smrg	  oldobjs=
82556e7d3316Smrg	  counter=1
82566e7d3316Smrg	  for obj in $save_oldobjs
82576e7d3316Smrg	  do
82586e7d3316Smrg	    func_basename "$obj"
82596e7d3316Smrg	    objbase="$func_basename_result"
82606e7d3316Smrg	    case " $oldobjs " in
82616e7d3316Smrg	    " ") oldobjs=$obj ;;
82626e7d3316Smrg	    *[\ /]"$objbase "*)
82636e7d3316Smrg	      while :; do
82646e7d3316Smrg		# Make sure we don't pick an alternate name that also
82656e7d3316Smrg		# overlaps.
82666e7d3316Smrg		newobj=lt$counter-$objbase
82676e7d3316Smrg		func_arith $counter + 1
82686e7d3316Smrg		counter=$func_arith_result
82696e7d3316Smrg		case " $oldobjs " in
82706e7d3316Smrg		*[\ /]"$newobj "*) ;;
82716e7d3316Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
82726e7d3316Smrg		esac
82736e7d3316Smrg	      done
82746e7d3316Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
82756e7d3316Smrg	      oldobjs="$oldobjs $gentop/$newobj"
82766e7d3316Smrg	      ;;
82776e7d3316Smrg	    *) oldobjs="$oldobjs $obj" ;;
82786e7d3316Smrg	    esac
8279a966c04fSmrg	  done
8280a966c04fSmrg	fi
82816e7d3316Smrg	eval cmds=\"$old_archive_cmds\"
8282a966c04fSmrg
82836e7d3316Smrg	func_len " $cmds"
82846e7d3316Smrg	len=$func_len_result
82856e7d3316Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
82866e7d3316Smrg	  cmds=$old_archive_cmds
82876e7d3316Smrg	else
82886e7d3316Smrg	  # the command line is too long to link in one step, link in parts
82896e7d3316Smrg	  func_verbose "using piecewise archive linking..."
82906e7d3316Smrg	  save_RANLIB=$RANLIB
82916e7d3316Smrg	  RANLIB=:
82926e7d3316Smrg	  objlist=
82936e7d3316Smrg	  concat_cmds=
82946e7d3316Smrg	  save_oldobjs=$oldobjs
82956e7d3316Smrg	  oldobjs=
82966e7d3316Smrg	  # Is there a better way of finding the last object in the list?
82976e7d3316Smrg	  for obj in $save_oldobjs
82986e7d3316Smrg	  do
82996e7d3316Smrg	    last_oldobj=$obj
83006e7d3316Smrg	  done
83016e7d3316Smrg	  eval test_cmds=\"$old_archive_cmds\"
83026e7d3316Smrg	  func_len " $test_cmds"
83036e7d3316Smrg	  len0=$func_len_result
83046e7d3316Smrg	  len=$len0
83056e7d3316Smrg	  for obj in $save_oldobjs
83066e7d3316Smrg	  do
83076e7d3316Smrg	    func_len " $obj"
83086e7d3316Smrg	    func_arith $len + $func_len_result
83096e7d3316Smrg	    len=$func_arith_result
83106e7d3316Smrg	    func_append objlist " $obj"
83116e7d3316Smrg	    if test "$len" -lt "$max_cmd_len"; then
83126e7d3316Smrg	      :
83136e7d3316Smrg	    else
83146e7d3316Smrg	      # the above command should be used before it gets too long
83156e7d3316Smrg	      oldobjs=$objlist
83166e7d3316Smrg	      if test "$obj" = "$last_oldobj" ; then
83176e7d3316Smrg		RANLIB=$save_RANLIB
83186e7d3316Smrg	      fi
83196e7d3316Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
83206e7d3316Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
83216e7d3316Smrg	      objlist=
83226e7d3316Smrg	      len=$len0
83236e7d3316Smrg	    fi
83246e7d3316Smrg	  done
83256e7d3316Smrg	  RANLIB=$save_RANLIB
83266e7d3316Smrg	  oldobjs=$objlist
83276e7d3316Smrg	  if test "X$oldobjs" = "X" ; then
83286e7d3316Smrg	    eval cmds=\"\$concat_cmds\"
83296e7d3316Smrg	  else
83306e7d3316Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
83316e7d3316Smrg	  fi
83326e7d3316Smrg	fi
83336e7d3316Smrg      fi
83346e7d3316Smrg      func_execute_cmds "$cmds" 'exit $?'
8335a966c04fSmrg    done
8336a966c04fSmrg
83376e7d3316Smrg    test -n "$generated" && \
83386e7d3316Smrg      func_show_eval "${RM}r$generated"
8339a966c04fSmrg
83406e7d3316Smrg    # Now create the libtool archive.
83416e7d3316Smrg    case $output in
83426e7d3316Smrg    *.la)
83436e7d3316Smrg      old_library=
83446e7d3316Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
83456e7d3316Smrg      func_verbose "creating $output"
8346a966c04fSmrg
83476e7d3316Smrg      # Preserve any variables that may affect compiler behavior
83486e7d3316Smrg      for var in $variables_saved_for_relink; do
83496e7d3316Smrg	if eval test -z \"\${$var+set}\"; then
83506e7d3316Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
83516e7d3316Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
83526e7d3316Smrg	  relink_command="$var=; export $var; $relink_command"
8353a966c04fSmrg	else
83546e7d3316Smrg	  func_quote_for_eval "$var_value"
83556e7d3316Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
8356a966c04fSmrg	fi
83576e7d3316Smrg      done
83586e7d3316Smrg      # Quote the link command for shipping.
83596e7d3316Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
83606e7d3316Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
83616e7d3316Smrg      if test "$hardcode_automatic" = yes ; then
83626e7d3316Smrg	relink_command=
83636e7d3316Smrg      fi
8364a966c04fSmrg
83656e7d3316Smrg      # Only create the output if not a dry run.
83666e7d3316Smrg      $opt_dry_run || {
83676e7d3316Smrg	for installed in no yes; do
83686e7d3316Smrg	  if test "$installed" = yes; then
83696e7d3316Smrg	    if test -z "$install_libdir"; then
83706e7d3316Smrg	      break
83716e7d3316Smrg	    fi
83726e7d3316Smrg	    output="$output_objdir/$outputname"i
83736e7d3316Smrg	    # Replace all uninstalled libtool libraries with the installed ones
83746e7d3316Smrg	    newdependency_libs=
83756e7d3316Smrg	    for deplib in $dependency_libs; do
83766e7d3316Smrg	      case $deplib in
83776e7d3316Smrg	      *.la)
83786e7d3316Smrg		func_basename "$deplib"
83796e7d3316Smrg		name="$func_basename_result"
83806e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
83816e7d3316Smrg		test -z "$libdir" && \
83826e7d3316Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
83836e7d3316Smrg		newdependency_libs="$newdependency_libs $libdir/$name"
83846e7d3316Smrg		;;
83856e7d3316Smrg	      *) newdependency_libs="$newdependency_libs $deplib" ;;
83866e7d3316Smrg	      esac
83876e7d3316Smrg	    done
83886e7d3316Smrg	    dependency_libs="$newdependency_libs"
83896e7d3316Smrg	    newdlfiles=
83906e7d3316Smrg
83916e7d3316Smrg	    for lib in $dlfiles; do
83926e7d3316Smrg	      case $lib in
83936e7d3316Smrg	      *.la)
83946e7d3316Smrg	        func_basename "$lib"
83956e7d3316Smrg		name="$func_basename_result"
83966e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
83976e7d3316Smrg		test -z "$libdir" && \
83986e7d3316Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
83996e7d3316Smrg		newdlfiles="$newdlfiles $libdir/$name"
84006e7d3316Smrg		;;
84016e7d3316Smrg	      *) newdlfiles="$newdlfiles $lib" ;;
84026e7d3316Smrg	      esac
84036e7d3316Smrg	    done
84046e7d3316Smrg	    dlfiles="$newdlfiles"
84056e7d3316Smrg	    newdlprefiles=
84066e7d3316Smrg	    for lib in $dlprefiles; do
84076e7d3316Smrg	      case $lib in
84086e7d3316Smrg	      *.la)
84096e7d3316Smrg		# Only pass preopened files to the pseudo-archive (for
84106e7d3316Smrg		# eventual linking with the app. that links it) if we
84116e7d3316Smrg		# didn't already link the preopened objects directly into
84126e7d3316Smrg		# the library:
84136e7d3316Smrg		func_basename "$lib"
84146e7d3316Smrg		name="$func_basename_result"
84156e7d3316Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
84166e7d3316Smrg		test -z "$libdir" && \
84176e7d3316Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
84186e7d3316Smrg		newdlprefiles="$newdlprefiles $libdir/$name"
84196e7d3316Smrg		;;
84206e7d3316Smrg	      esac
84216e7d3316Smrg	    done
84226e7d3316Smrg	    dlprefiles="$newdlprefiles"
84236e7d3316Smrg	  else
84246e7d3316Smrg	    newdlfiles=
84256e7d3316Smrg	    for lib in $dlfiles; do
84266e7d3316Smrg	      case $lib in
84276e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
84286e7d3316Smrg		*) abs=`pwd`"/$lib" ;;
84296e7d3316Smrg	      esac
84306e7d3316Smrg	      newdlfiles="$newdlfiles $abs"
84316e7d3316Smrg	    done
84326e7d3316Smrg	    dlfiles="$newdlfiles"
84336e7d3316Smrg	    newdlprefiles=
84346e7d3316Smrg	    for lib in $dlprefiles; do
84356e7d3316Smrg	      case $lib in
84366e7d3316Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
84376e7d3316Smrg		*) abs=`pwd`"/$lib" ;;
84386e7d3316Smrg	      esac
84396e7d3316Smrg	      newdlprefiles="$newdlprefiles $abs"
84406e7d3316Smrg	    done
84416e7d3316Smrg	    dlprefiles="$newdlprefiles"
84426e7d3316Smrg	  fi
84436e7d3316Smrg	  $RM $output
84446e7d3316Smrg	  # place dlname in correct position for cygwin
84456e7d3316Smrg	  # In fact, it would be nice if we could use this code for all target
84466e7d3316Smrg	  # systems that can't hard-code library paths into their executables
84476e7d3316Smrg	  # and that have no shared library path variable independent of PATH,
84486e7d3316Smrg	  # but it turns out we can't easily determine that from inspecting
84496e7d3316Smrg	  # libtool variables, so we have to hard-code the OSs to which it
84506e7d3316Smrg	  # applies here; at the moment, that means platforms that use the PE
84516e7d3316Smrg	  # object format with DLL files.  See the long comment at the top of
84526e7d3316Smrg	  # tests/bindir.at for full details.
84536e7d3316Smrg	  tdlname=$dlname
84546e7d3316Smrg	  case $host,$output,$installed,$module,$dlname in
84556e7d3316Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
84566e7d3316Smrg	      # If a -bindir argument was supplied, place the dll there.
84576e7d3316Smrg	      if test "x$bindir" != x ;
84586e7d3316Smrg	      then
84596e7d3316Smrg		func_relative_path "$install_libdir" "$bindir"
84606e7d3316Smrg		tdlname=$func_relative_path_result$dlname
84616e7d3316Smrg	      else
84626e7d3316Smrg		# Otherwise fall back on heuristic.
84636e7d3316Smrg		tdlname=../bin/$dlname
84646e7d3316Smrg	      fi
84656e7d3316Smrg	      ;;
84666e7d3316Smrg	  esac
84676e7d3316Smrg	  $ECHO > $output "\
84686e7d3316Smrg# $outputname - a libtool library file
84696e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
84706e7d3316Smrg#
84716e7d3316Smrg# Please DO NOT delete this file!
84726e7d3316Smrg# It is necessary for linking the library.
8473a966c04fSmrg
84746e7d3316Smrg# The name that we can dlopen(3).
84756e7d3316Smrgdlname='$tdlname'
8476a966c04fSmrg
84776e7d3316Smrg# Names of this library.
84786e7d3316Smrglibrary_names='$library_names'
8479a966c04fSmrg
84806e7d3316Smrg# The name of the static archive.
84816e7d3316Smrgold_library='$old_library'
8482a966c04fSmrg
84836e7d3316Smrg# Linker flags that can not go in dependency_libs.
84846e7d3316Smrginherited_linker_flags='$new_inherited_linker_flags'
8485a966c04fSmrg
84866e7d3316Smrg# Libraries that this one depends upon.
84876e7d3316Smrgdependency_libs='$dependency_libs'
8488a966c04fSmrg
84896e7d3316Smrg# Names of additional weak libraries provided by this library
84906e7d3316Smrgweak_library_names='$weak_libs'
8491a966c04fSmrg
84926e7d3316Smrg# Version information for $libname.
84936e7d3316Smrgcurrent=$current
84946e7d3316Smrgage=$age
84956e7d3316Smrgrevision=$revision
8496a966c04fSmrg
84976e7d3316Smrg# Is this an already installed library?
84986e7d3316Smrginstalled=$installed
8499a966c04fSmrg
85006e7d3316Smrg# Should we warn about portability when linking against -modules?
85016e7d3316Smrgshouldnotlink=$module
8502a966c04fSmrg
85036e7d3316Smrg# Files to dlopen/dlpreopen
85046e7d3316Smrgdlopen='$dlfiles'
85056e7d3316Smrgdlpreopen='$dlprefiles'
8506a966c04fSmrg
85076e7d3316Smrg# Directory that this library needs to be installed in:
85086e7d3316Smrglibdir='$install_libdir'"
85096e7d3316Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
85106e7d3316Smrg	    $ECHO >> $output "\
85116e7d3316Smrgrelink_command=\"$relink_command\""
85126e7d3316Smrg	  fi
85136e7d3316Smrg	done
85146e7d3316Smrg      }
8515a966c04fSmrg
85166e7d3316Smrg      # Do a symbolic link so that the libtool archive can be found in
85176e7d3316Smrg      # LD_LIBRARY_PATH before the program is installed.
85186e7d3316Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
85196e7d3316Smrg      ;;
85206e7d3316Smrg    esac
85216e7d3316Smrg    exit $EXIT_SUCCESS
85226e7d3316Smrg}
8523a966c04fSmrg
85246e7d3316Smrg{ test "$mode" = link || test "$mode" = relink; } &&
85256e7d3316Smrg    func_mode_link ${1+"$@"}
8526a966c04fSmrg
8527a966c04fSmrg
85286e7d3316Smrg# func_mode_uninstall arg...
85296e7d3316Smrgfunc_mode_uninstall ()
85306e7d3316Smrg{
85316e7d3316Smrg    $opt_debug
85326e7d3316Smrg    RM="$nonopt"
8533a966c04fSmrg    files=
8534a966c04fSmrg    rmforce=
8535a966c04fSmrg    exit_status=0
8536a966c04fSmrg
8537a966c04fSmrg    # This variable tells wrapper scripts just to set variables rather
8538a966c04fSmrg    # than running their programs.
8539a966c04fSmrg    libtool_install_magic="$magic"
8540a966c04fSmrg
8541a966c04fSmrg    for arg
8542a966c04fSmrg    do
8543a966c04fSmrg      case $arg in
85446e7d3316Smrg      -f) RM="$RM $arg"; rmforce=yes ;;
85456e7d3316Smrg      -*) RM="$RM $arg" ;;
8546a966c04fSmrg      *) files="$files $arg" ;;
8547a966c04fSmrg      esac
8548a966c04fSmrg    done
8549a966c04fSmrg
85506e7d3316Smrg    test -z "$RM" && \
85516e7d3316Smrg      func_fatal_help "you must specify an RM program"
8552a966c04fSmrg
8553a966c04fSmrg    rmdirs=
8554a966c04fSmrg
8555a966c04fSmrg    origobjdir="$objdir"
8556a966c04fSmrg    for file in $files; do
85576e7d3316Smrg      func_dirname "$file" "" "."
85586e7d3316Smrg      dir="$func_dirname_result"
85596e7d3316Smrg      if test "X$dir" = X.; then
8560a966c04fSmrg	objdir="$origobjdir"
8561a966c04fSmrg      else
8562a966c04fSmrg	objdir="$dir/$origobjdir"
8563a966c04fSmrg      fi
85646e7d3316Smrg      func_basename "$file"
85656e7d3316Smrg      name="$func_basename_result"
8566a966c04fSmrg      test "$mode" = uninstall && objdir="$dir"
8567a966c04fSmrg
8568a966c04fSmrg      # Remember objdir for removal later, being careful to avoid duplicates
8569a966c04fSmrg      if test "$mode" = clean; then
8570a966c04fSmrg	case " $rmdirs " in
8571a966c04fSmrg	  *" $objdir "*) ;;
8572a966c04fSmrg	  *) rmdirs="$rmdirs $objdir" ;;
8573a966c04fSmrg	esac
8574a966c04fSmrg      fi
8575a966c04fSmrg
8576a966c04fSmrg      # Don't error if the file doesn't exist and rm -f was used.
85776e7d3316Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
85786e7d3316Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
85796e7d3316Smrg	 test -f "$file"; then
8580a966c04fSmrg	:
8581a966c04fSmrg      elif test -d "$file"; then
8582a966c04fSmrg	exit_status=1
8583a966c04fSmrg	continue
8584a966c04fSmrg      elif test "$rmforce" = yes; then
8585a966c04fSmrg	continue
8586a966c04fSmrg      fi
8587a966c04fSmrg
8588a966c04fSmrg      rmfiles="$file"
8589a966c04fSmrg
8590a966c04fSmrg      case $name in
8591a966c04fSmrg      *.la)
8592a966c04fSmrg	# Possibly a libtool archive, so verify it.
85936e7d3316Smrg	if func_lalib_p "$file"; then
85946e7d3316Smrg	  func_source $dir/$name
8595a966c04fSmrg
8596a966c04fSmrg	  # Delete the libtool libraries and symlinks.
8597a966c04fSmrg	  for n in $library_names; do
8598a966c04fSmrg	    rmfiles="$rmfiles $objdir/$n"
8599a966c04fSmrg	  done
8600a966c04fSmrg	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
8601a966c04fSmrg
8602a966c04fSmrg	  case "$mode" in
8603a966c04fSmrg	  clean)
8604a966c04fSmrg	    case "  $library_names " in
8605a966c04fSmrg	    # "  " in the beginning catches empty $dlname
8606a966c04fSmrg	    *" $dlname "*) ;;
8607a966c04fSmrg	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
8608a966c04fSmrg	    esac
86096e7d3316Smrg	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
8610a966c04fSmrg	    ;;
8611a966c04fSmrg	  uninstall)
8612a966c04fSmrg	    if test -n "$library_names"; then
8613a966c04fSmrg	      # Do each command in the postuninstall commands.
86146e7d3316Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8615a966c04fSmrg	    fi
8616a966c04fSmrg
8617a966c04fSmrg	    if test -n "$old_library"; then
8618a966c04fSmrg	      # Do each command in the old_postuninstall commands.
86196e7d3316Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8620a966c04fSmrg	    fi
8621a966c04fSmrg	    # FIXME: should reinstall the best remaining shared library.
8622a966c04fSmrg	    ;;
8623a966c04fSmrg	  esac
8624a966c04fSmrg	fi
8625a966c04fSmrg	;;
8626a966c04fSmrg
8627a966c04fSmrg      *.lo)
8628a966c04fSmrg	# Possibly a libtool object, so verify it.
86296e7d3316Smrg	if func_lalib_p "$file"; then
8630a966c04fSmrg
8631a966c04fSmrg	  # Read the .lo file
86326e7d3316Smrg	  func_source $dir/$name
8633a966c04fSmrg
8634a966c04fSmrg	  # Add PIC object to the list of files to remove.
86356e7d3316Smrg	  if test -n "$pic_object" &&
86366e7d3316Smrg	     test "$pic_object" != none; then
8637a966c04fSmrg	    rmfiles="$rmfiles $dir/$pic_object"
8638a966c04fSmrg	  fi
8639a966c04fSmrg
8640a966c04fSmrg	  # Add non-PIC object to the list of files to remove.
86416e7d3316Smrg	  if test -n "$non_pic_object" &&
86426e7d3316Smrg	     test "$non_pic_object" != none; then
8643a966c04fSmrg	    rmfiles="$rmfiles $dir/$non_pic_object"
8644a966c04fSmrg	  fi
8645a966c04fSmrg	fi
8646a966c04fSmrg	;;
8647a966c04fSmrg
8648a966c04fSmrg      *)
8649a966c04fSmrg	if test "$mode" = clean ; then
8650a966c04fSmrg	  noexename=$name
8651a966c04fSmrg	  case $file in
8652a966c04fSmrg	  *.exe)
86536e7d3316Smrg	    func_stripname '' '.exe' "$file"
86546e7d3316Smrg	    file=$func_stripname_result
86556e7d3316Smrg	    func_stripname '' '.exe' "$name"
86566e7d3316Smrg	    noexename=$func_stripname_result
8657a966c04fSmrg	    # $file with .exe has already been added to rmfiles,
8658a966c04fSmrg	    # add $file without .exe
8659a966c04fSmrg	    rmfiles="$rmfiles $file"
8660a966c04fSmrg	    ;;
8661a966c04fSmrg	  esac
8662a966c04fSmrg	  # Do a test to see if this is a libtool program.
86636e7d3316Smrg	  if func_ltwrapper_p "$file"; then
86646e7d3316Smrg	    if func_ltwrapper_executable_p "$file"; then
86656e7d3316Smrg	      func_ltwrapper_scriptname "$file"
86666e7d3316Smrg	      relink_command=
86676e7d3316Smrg	      func_source $func_ltwrapper_scriptname_result
86686e7d3316Smrg	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
86696e7d3316Smrg	    else
86706e7d3316Smrg	      relink_command=
86716e7d3316Smrg	      func_source $dir/$noexename
86726e7d3316Smrg	    fi
8673a966c04fSmrg
8674a966c04fSmrg	    # note $name still contains .exe if it was in $file originally
8675a966c04fSmrg	    # as does the version of $file that was added into $rmfiles
8676a966c04fSmrg	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
8677a966c04fSmrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
8678a966c04fSmrg	      rmfiles="$rmfiles $objdir/lt-$name"
8679a966c04fSmrg	    fi
8680a966c04fSmrg	    if test "X$noexename" != "X$name" ; then
8681a966c04fSmrg	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
8682a966c04fSmrg	    fi
8683a966c04fSmrg	  fi
8684a966c04fSmrg	fi
8685a966c04fSmrg	;;
8686a966c04fSmrg      esac
86876e7d3316Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
8688a966c04fSmrg    done
8689a966c04fSmrg    objdir="$origobjdir"
8690a966c04fSmrg
8691a966c04fSmrg    # Try to remove the ${objdir}s in the directories where we deleted files
8692a966c04fSmrg    for dir in $rmdirs; do
8693a966c04fSmrg      if test -d "$dir"; then
86946e7d3316Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
8695a966c04fSmrg      fi
8696a966c04fSmrg    done
8697a966c04fSmrg
8698a966c04fSmrg    exit $exit_status
86996e7d3316Smrg}
8700a966c04fSmrg
87016e7d3316Smrg{ test "$mode" = uninstall || test "$mode" = clean; } &&
87026e7d3316Smrg    func_mode_uninstall ${1+"$@"}
8703a966c04fSmrg
87046e7d3316Smrgtest -z "$mode" && {
87056e7d3316Smrg  help="$generic_help"
87066e7d3316Smrg  func_fatal_help "you must specify a MODE"
87076e7d3316Smrg}
87086e7d3316Smrg
87096e7d3316Smrgtest -z "$exec_cmd" && \
87106e7d3316Smrg  func_fatal_help "invalid operation mode \`$mode'"
8711a966c04fSmrg
8712a966c04fSmrgif test -n "$exec_cmd"; then
87136e7d3316Smrg  eval exec "$exec_cmd"
8714a966c04fSmrg  exit $EXIT_FAILURE
8715a966c04fSmrgfi
8716a966c04fSmrg
87176e7d3316Smrgexit $exit_status
8718a966c04fSmrg
8719a966c04fSmrg
8720a966c04fSmrg# The TAGs below are defined such that we never get into a situation
8721a966c04fSmrg# in which we disable both kinds of libraries.  Given conflicting
8722a966c04fSmrg# choices, we go for a static library, that is the most portable,
8723a966c04fSmrg# since we can't tell whether shared libraries were disabled because
8724a966c04fSmrg# the user asked for that or because the platform doesn't support
8725a966c04fSmrg# them.  This is particularly important on AIX, because we don't
8726a966c04fSmrg# support having both static and shared libraries enabled at the same
8727a966c04fSmrg# time on that platform, so we default to a shared-only configuration.
8728a966c04fSmrg# If a disable-shared tag is given, we'll fallback to a static-only
8729a966c04fSmrg# configuration.  But we'll never go from static-only to shared-only.
8730a966c04fSmrg
8731a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
87326e7d3316Smrgbuild_libtool_libs=no
87336e7d3316Smrgbuild_old_libs=yes
8734a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-shared
8735a966c04fSmrg
8736a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
87376e7d3316Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
8738a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-static
8739a966c04fSmrg
8740a966c04fSmrg# Local Variables:
8741a966c04fSmrg# mode:shell-script
8742a966c04fSmrg# sh-indentation:2
8743a966c04fSmrg# End:
87446e7d3316Smrg# vi:sw=2
87456e7d3316Smrg
8746