ltmain.sh revision 7821949a
1de2362d3Smrg
27821949aSmrg# libtool (GNU libtool) 2.4.2
3de2362d3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4de2362d3Smrg
57821949aSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
67821949aSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7de2362d3Smrg# This is free software; see the source for copying conditions.  There is NO
8de2362d3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9de2362d3Smrg
10de2362d3Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11de2362d3Smrg# it under the terms of the GNU General Public License as published by
12de2362d3Smrg# the Free Software Foundation; either version 2 of the License, or
13de2362d3Smrg# (at your option) any later version.
14de2362d3Smrg#
15de2362d3Smrg# As a special exception to the GNU General Public License,
16de2362d3Smrg# if you distribute this file as part of a program or library that
17de2362d3Smrg# is built using GNU Libtool, you may include this file under the
18de2362d3Smrg# same distribution terms that you use for the rest of that program.
19de2362d3Smrg#
20de2362d3Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21de2362d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22de2362d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23de2362d3Smrg# General Public License for more details.
24de2362d3Smrg#
25de2362d3Smrg# You should have received a copy of the GNU General Public License
267821949aSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
277821949aSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
287821949aSmrg# or obtained by writing to the Free Software Foundation, Inc.,
297821949aSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
300d16fef4Smrg
317821949aSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
327821949aSmrg#
337821949aSmrg# Provide generalized library-building support services.
340d16fef4Smrg#
357821949aSmrg#       --config             show all configuration variables
367821949aSmrg#       --debug              enable verbose shell tracing
377821949aSmrg#   -n, --dry-run            display commands without modifying any files
387821949aSmrg#       --features           display basic configuration information and exit
397821949aSmrg#       --mode=MODE          use operation mode MODE
407821949aSmrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
417821949aSmrg#       --quiet, --silent    don't print informational messages
427821949aSmrg#       --no-quiet, --no-silent
437821949aSmrg#                            print informational messages (default)
447821949aSmrg#       --no-warn            don't display warning messages
457821949aSmrg#       --tag=TAG            use configuration variables from tag TAG
467821949aSmrg#   -v, --verbose            print more informational messages than default
477821949aSmrg#       --no-verbose         don't print the extra informational messages
487821949aSmrg#       --version            print version information
497821949aSmrg#   -h, --help, --help-all   print short, long, or detailed help message
500d16fef4Smrg#
517821949aSmrg# MODE must be one of the following:
527821949aSmrg#
537821949aSmrg#         clean              remove files from the build directory
547821949aSmrg#         compile            compile a source file into a libtool object
557821949aSmrg#         execute            automatically set library path, then run a program
567821949aSmrg#         finish             complete the installation of libtool libraries
577821949aSmrg#         install            install libraries or executables
587821949aSmrg#         link               create a library or an executable
597821949aSmrg#         uninstall          remove libraries from an installed directory
607821949aSmrg#
617821949aSmrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
627821949aSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
637821949aSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
647821949aSmrg#
657821949aSmrg# When reporting a bug, please describe a test case to reproduce it and
667821949aSmrg# include the following information:
677821949aSmrg#
687821949aSmrg#         host-triplet:	$host
697821949aSmrg#         shell:		$SHELL
707821949aSmrg#         compiler:		$LTCC
717821949aSmrg#         compiler flags:		$LTCFLAGS
727821949aSmrg#         linker:		$LD (gnu? $with_gnu_ld)
737821949aSmrg#         $progname:	(GNU libtool) 2.4.2
747821949aSmrg#         automake:	$automake_version
757821949aSmrg#         autoconf:	$autoconf_version
767821949aSmrg#
777821949aSmrg# Report bugs to <bug-libtool@gnu.org>.
787821949aSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
797821949aSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
800d16fef4Smrg
817821949aSmrgPROGRAM=libtool
827821949aSmrgPACKAGE=libtool
837821949aSmrgVERSION=2.4.2
847821949aSmrgTIMESTAMP=""
857821949aSmrgpackage_revision=1.3337
860d16fef4Smrg
877821949aSmrg# Be Bourne compatible
887821949aSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
89de2362d3Smrg  emulate sh
90de2362d3Smrg  NULLCMD=:
917821949aSmrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
92de2362d3Smrg  # is contrary to our usage.  Disable this feature.
93de2362d3Smrg  alias -g '${1+"$@"}'='"$@"'
94de2362d3Smrg  setopt NO_GLOB_SUBST
95de2362d3Smrgelse
967821949aSmrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
970d16fef4Smrgfi
987821949aSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
997821949aSmrgDUALCASE=1; export DUALCASE # for MKS sh
100de2362d3Smrg
1017821949aSmrg# A function that is used when there is no print builtin or printf.
1027821949aSmrgfunc_fallback_echo ()
1030d16fef4Smrg{
1047821949aSmrg  eval 'cat <<_LTECHO_EOF
1057821949aSmrg$1
1067821949aSmrg_LTECHO_EOF'
1070d16fef4Smrg}
1080d16fef4Smrg
1097821949aSmrg# NLS nuisances: We save the old values to restore during execute mode.
1107821949aSmrglt_user_locale=
1117821949aSmrglt_safe_locale=
1127821949aSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1137821949aSmrgdo
1147821949aSmrg  eval "if test \"\${$lt_var+set}\" = set; then
1157821949aSmrg          save_$lt_var=\$$lt_var
1167821949aSmrg          $lt_var=C
1177821949aSmrg	  export $lt_var
1187821949aSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
1197821949aSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1207821949aSmrg	fi"
1217821949aSmrgdone
1227821949aSmrgLC_ALL=C
1237821949aSmrgLANGUAGE=C
1247821949aSmrgexport LANGUAGE LC_ALL
1250d16fef4Smrg
1267821949aSmrg$lt_unset CDPATH
1270d16fef4Smrg
1280d16fef4Smrg
1297821949aSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1307821949aSmrg# is ksh but when the shell is invoked as "sh" and the current value of
1317821949aSmrg# the _XPG environment variable is not equal to 1 (one), the special
1327821949aSmrg# positional parameter $0, within a function call, is the name of the
1337821949aSmrg# function.
1347821949aSmrgprogpath="$0"
1350d16fef4Smrg
1360d16fef4Smrg
137de2362d3Smrg
138de2362d3Smrg: ${CP="cp -f"}
1397821949aSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140de2362d3Smrg: ${MAKE="make"}
141de2362d3Smrg: ${MKDIR="mkdir"}
142de2362d3Smrg: ${MV="mv -f"}
143de2362d3Smrg: ${RM="rm -f"}
144de2362d3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
1457821949aSmrg: ${Xsed="$SED -e 1s/^X//"}
146de2362d3Smrg
1477821949aSmrg# Global variables:
1487821949aSmrgEXIT_SUCCESS=0
1497821949aSmrgEXIT_FAILURE=1
1507821949aSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
1517821949aSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152de2362d3Smrg
1537821949aSmrgexit_status=$EXIT_SUCCESS
154de2362d3Smrg
1557821949aSmrg# Make sure IFS has a sensible default
1567821949aSmrglt_nl='
1577821949aSmrg'
1587821949aSmrgIFS=" 	$lt_nl"
159de2362d3Smrg
1607821949aSmrgdirname="s,/[^/]*$,,"
1617821949aSmrgbasename="s,^.*/,,"
162de2362d3Smrg
1637821949aSmrg# func_dirname file append nondir_replacement
1647821949aSmrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
1657821949aSmrg# otherwise set result to NONDIR_REPLACEMENT.
1667821949aSmrgfunc_dirname ()
1677821949aSmrg{
1687821949aSmrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
1697821949aSmrg    if test "X$func_dirname_result" = "X${1}"; then
1707821949aSmrg      func_dirname_result="${3}"
1717821949aSmrg    else
1727821949aSmrg      func_dirname_result="$func_dirname_result${2}"
1737821949aSmrg    fi
1747821949aSmrg} # func_dirname may be replaced by extended shell implementation
175de2362d3Smrg
176de2362d3Smrg
1777821949aSmrg# func_basename file
1787821949aSmrgfunc_basename ()
1797821949aSmrg{
1807821949aSmrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
1817821949aSmrg} # func_basename may be replaced by extended shell implementation
182de2362d3Smrg
183de2362d3Smrg
1847821949aSmrg# func_dirname_and_basename file append nondir_replacement
1857821949aSmrg# perform func_basename and func_dirname in a single function
1867821949aSmrg# call:
1877821949aSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
1887821949aSmrg#             add APPEND to the result, otherwise set result
1897821949aSmrg#             to NONDIR_REPLACEMENT.
1907821949aSmrg#             value returned in "$func_dirname_result"
1917821949aSmrg#   basename: Compute filename of FILE.
1927821949aSmrg#             value retuned in "$func_basename_result"
1937821949aSmrg# Implementation must be kept synchronized with func_dirname
1947821949aSmrg# and func_basename. For efficiency, we do not delegate to
1957821949aSmrg# those functions but instead duplicate the functionality here.
1967821949aSmrgfunc_dirname_and_basename ()
1977821949aSmrg{
1987821949aSmrg    # Extract subdirectory from the argument.
1997821949aSmrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
2007821949aSmrg    if test "X$func_dirname_result" = "X${1}"; then
2017821949aSmrg      func_dirname_result="${3}"
2027821949aSmrg    else
2037821949aSmrg      func_dirname_result="$func_dirname_result${2}"
2047821949aSmrg    fi
2057821949aSmrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
2067821949aSmrg} # func_dirname_and_basename may be replaced by extended shell implementation
207de2362d3Smrg
208de2362d3Smrg
2097821949aSmrg# func_stripname prefix suffix name
2107821949aSmrg# strip PREFIX and SUFFIX off of NAME.
2117821949aSmrg# PREFIX and SUFFIX must not contain globbing or regex special
2127821949aSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading
2137821949aSmrg# dot (in which case that matches only a dot).
2147821949aSmrg# func_strip_suffix prefix name
2157821949aSmrgfunc_stripname ()
2167821949aSmrg{
2177821949aSmrg    case ${2} in
2187821949aSmrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
2197821949aSmrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
2207821949aSmrg    esac
2217821949aSmrg} # func_stripname may be replaced by extended shell implementation
222de2362d3Smrg
223de2362d3Smrg
2247821949aSmrg# These SED scripts presuppose an absolute path with a trailing slash.
2257821949aSmrgpathcar='s,^/\([^/]*\).*$,\1,'
2267821949aSmrgpathcdr='s,^/[^/]*,,'
2277821949aSmrgremovedotparts=':dotsl
2287821949aSmrg		s@/\./@/@g
2297821949aSmrg		t dotsl
2307821949aSmrg		s,/\.$,/,'
2317821949aSmrgcollapseslashes='s@/\{1,\}@/@g'
2327821949aSmrgfinalslash='s,/*$,/,'
233de2362d3Smrg
2347821949aSmrg# func_normal_abspath PATH
2357821949aSmrg# Remove doubled-up and trailing slashes, "." path components,
2367821949aSmrg# and cancel out any ".." path components in PATH after making
2377821949aSmrg# it an absolute path.
2387821949aSmrg#             value returned in "$func_normal_abspath_result"
2397821949aSmrgfunc_normal_abspath ()
2407821949aSmrg{
2417821949aSmrg  # Start from root dir and reassemble the path.
2427821949aSmrg  func_normal_abspath_result=
2437821949aSmrg  func_normal_abspath_tpath=$1
2447821949aSmrg  func_normal_abspath_altnamespace=
2457821949aSmrg  case $func_normal_abspath_tpath in
2467821949aSmrg    "")
2477821949aSmrg      # Empty path, that just means $cwd.
2487821949aSmrg      func_stripname '' '/' "`pwd`"
2497821949aSmrg      func_normal_abspath_result=$func_stripname_result
2507821949aSmrg      return
2517821949aSmrg    ;;
2527821949aSmrg    # The next three entries are used to spot a run of precisely
2537821949aSmrg    # two leading slashes without using negated character classes;
2547821949aSmrg    # we take advantage of case's first-match behaviour.
2557821949aSmrg    ///*)
2567821949aSmrg      # Unusual form of absolute path, do nothing.
2577821949aSmrg    ;;
2587821949aSmrg    //*)
2597821949aSmrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2607821949aSmrg      # and for example Cygwin uses it to access remote file shares
2617821949aSmrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2627821949aSmrg      func_normal_abspath_altnamespace=/
2637821949aSmrg    ;;
2647821949aSmrg    /*)
2657821949aSmrg      # Absolute path, do nothing.
2667821949aSmrg    ;;
2677821949aSmrg    *)
2687821949aSmrg      # Relative path, prepend $cwd.
2697821949aSmrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2707821949aSmrg    ;;
2717821949aSmrg  esac
2727821949aSmrg  # Cancel out all the simple stuff to save iterations.  We also want
2737821949aSmrg  # the path to end with a slash for ease of parsing, so make sure
2747821949aSmrg  # there is one (and only one) here.
2757821949aSmrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2767821949aSmrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2777821949aSmrg  while :; do
2787821949aSmrg    # Processed it all yet?
2797821949aSmrg    if test "$func_normal_abspath_tpath" = / ; then
2807821949aSmrg      # If we ascended to the root using ".." the result may be empty now.
2817821949aSmrg      if test -z "$func_normal_abspath_result" ; then
2827821949aSmrg        func_normal_abspath_result=/
2837821949aSmrg      fi
2847821949aSmrg      break
2857821949aSmrg    fi
2867821949aSmrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2877821949aSmrg        -e "$pathcar"`
2887821949aSmrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2897821949aSmrg        -e "$pathcdr"`
2907821949aSmrg    # Figure out what to do with it
2917821949aSmrg    case $func_normal_abspath_tcomponent in
2927821949aSmrg      "")
2937821949aSmrg        # Trailing empty path component, ignore it.
2947821949aSmrg      ;;
2957821949aSmrg      ..)
2967821949aSmrg        # Parent dir; strip last assembled component from result.
2977821949aSmrg        func_dirname "$func_normal_abspath_result"
2987821949aSmrg        func_normal_abspath_result=$func_dirname_result
2997821949aSmrg      ;;
3007821949aSmrg      *)
3017821949aSmrg        # Actual path component, append it.
3027821949aSmrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3037821949aSmrg      ;;
3047821949aSmrg    esac
3057821949aSmrg  done
3067821949aSmrg  # Restore leading double-slash if one was found on entry.
3077821949aSmrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
3087821949aSmrg}
3097821949aSmrg
3107821949aSmrg# func_relative_path SRCDIR DSTDIR
3117821949aSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3127821949aSmrg# slash if non-empty, suitable for immediately appending a filename
3137821949aSmrg# without needing to append a separator.
3147821949aSmrg#             value returned in "$func_relative_path_result"
3157821949aSmrgfunc_relative_path ()
3167821949aSmrg{
3177821949aSmrg  func_relative_path_result=
3187821949aSmrg  func_normal_abspath "$1"
3197821949aSmrg  func_relative_path_tlibdir=$func_normal_abspath_result
3207821949aSmrg  func_normal_abspath "$2"
3217821949aSmrg  func_relative_path_tbindir=$func_normal_abspath_result
3227821949aSmrg
3237821949aSmrg  # Ascend the tree starting from libdir
3247821949aSmrg  while :; do
3257821949aSmrg    # check if we have found a prefix of bindir
3267821949aSmrg    case $func_relative_path_tbindir in
3277821949aSmrg      $func_relative_path_tlibdir)
3287821949aSmrg        # found an exact match
3297821949aSmrg        func_relative_path_tcancelled=
3307821949aSmrg        break
3317821949aSmrg        ;;
3327821949aSmrg      $func_relative_path_tlibdir*)
3337821949aSmrg        # found a matching prefix
3347821949aSmrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3357821949aSmrg        func_relative_path_tcancelled=$func_stripname_result
3367821949aSmrg        if test -z "$func_relative_path_result"; then
3377821949aSmrg          func_relative_path_result=.
3387821949aSmrg        fi
3397821949aSmrg        break
3407821949aSmrg        ;;
3417821949aSmrg      *)
3427821949aSmrg        func_dirname $func_relative_path_tlibdir
3437821949aSmrg        func_relative_path_tlibdir=${func_dirname_result}
3447821949aSmrg        if test "x$func_relative_path_tlibdir" = x ; then
3457821949aSmrg          # Have to descend all the way to the root!
3467821949aSmrg          func_relative_path_result=../$func_relative_path_result
3477821949aSmrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3487821949aSmrg          break
3497821949aSmrg        fi
3507821949aSmrg        func_relative_path_result=../$func_relative_path_result
3517821949aSmrg        ;;
3527821949aSmrg    esac
3537821949aSmrg  done
3547821949aSmrg
3557821949aSmrg  # Now calculate path; take care to avoid doubling-up slashes.
3567821949aSmrg  func_stripname '' '/' "$func_relative_path_result"
3577821949aSmrg  func_relative_path_result=$func_stripname_result
3587821949aSmrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3597821949aSmrg  if test "x$func_stripname_result" != x ; then
3607821949aSmrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3617821949aSmrg  fi
3627821949aSmrg
3637821949aSmrg  # Normalisation. If bindir is libdir, return empty string,
3647821949aSmrg  # else relative path ending with a slash; either way, target
3657821949aSmrg  # file name can be directly appended.
3667821949aSmrg  if test ! -z "$func_relative_path_result"; then
3677821949aSmrg    func_stripname './' '' "$func_relative_path_result/"
3687821949aSmrg    func_relative_path_result=$func_stripname_result
3697821949aSmrg  fi
3707821949aSmrg}
371de2362d3Smrg
3727821949aSmrg# The name of this program:
3737821949aSmrgfunc_dirname_and_basename "$progpath"
3747821949aSmrgprogname=$func_basename_result
375de2362d3Smrg
3767821949aSmrg# Make sure we have an absolute path for reexecution:
377de2362d3Smrgcase $progpath in
378de2362d3Smrg  [\\/]*|[A-Za-z]:\\*) ;;
379de2362d3Smrg  *[\\/]*)
3807821949aSmrg     progdir=$func_dirname_result
381de2362d3Smrg     progdir=`cd "$progdir" && pwd`
3827821949aSmrg     progpath="$progdir/$progname"
383de2362d3Smrg     ;;
384de2362d3Smrg  *)
3857821949aSmrg     save_IFS="$IFS"
386de2362d3Smrg     IFS=${PATH_SEPARATOR-:}
387de2362d3Smrg     for progdir in $PATH; do
3887821949aSmrg       IFS="$save_IFS"
389de2362d3Smrg       test -x "$progdir/$progname" && break
390de2362d3Smrg     done
3917821949aSmrg     IFS="$save_IFS"
392de2362d3Smrg     test -n "$progdir" || progdir=`pwd`
3937821949aSmrg     progpath="$progdir/$progname"
394de2362d3Smrg     ;;
395de2362d3Smrgesac
396de2362d3Smrg
3977821949aSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
3987821949aSmrg# metacharacters that are still active within double-quoted strings.
3997821949aSmrgXsed="${SED}"' -e 1s/^X//'
4007821949aSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
4017821949aSmrg
4027821949aSmrg# Same as above, but do not quote variable references.
4037821949aSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404de2362d3Smrg
4057821949aSmrg# Sed substitution that turns a string into a regex matching for the
4067821949aSmrg# string literally.
4077821949aSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
408de2362d3Smrg
4097821949aSmrg# Sed substitution that converts a w32 file name or path
4107821949aSmrg# which contains forward slashes, into one that contains
4117821949aSmrg# (escaped) backslashes.  A very naive implementation.
4127821949aSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
4137821949aSmrg
4147821949aSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
4157821949aSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
4167821949aSmrg# in input to double_quote_subst, that '$' was protected from expansion.
4177821949aSmrg# Since each input `\' is now two `\'s, look for any number of runs of
4187821949aSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
4197821949aSmrgbs='\\'
4207821949aSmrgbs2='\\\\'
4217821949aSmrgbs4='\\\\\\\\'
4227821949aSmrgdollar='\$'
4237821949aSmrgsed_double_backslash="\
4247821949aSmrg  s/$bs4/&\\
4257821949aSmrg/g
4267821949aSmrg  s/^$bs2$dollar/$bs&/
4277821949aSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
4287821949aSmrg  s/\n//g"
429de2362d3Smrg
4307821949aSmrg# Standard options:
431de2362d3Smrgopt_dry_run=false
4327821949aSmrgopt_help=false
433de2362d3Smrgopt_quiet=false
434de2362d3Smrgopt_verbose=false
4357821949aSmrgopt_warning=:
436de2362d3Smrg
4377821949aSmrg# func_echo arg...
4387821949aSmrg# Echo program name prefixed message, along with the current mode
4397821949aSmrg# name if it has been set yet.
4407821949aSmrgfunc_echo ()
4417821949aSmrg{
4427821949aSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
4437821949aSmrg}
444de2362d3Smrg
4457821949aSmrg# func_verbose arg...
4467821949aSmrg# Echo program name prefixed message in verbose mode only.
4477821949aSmrgfunc_verbose ()
4487821949aSmrg{
4497821949aSmrg    $opt_verbose && func_echo ${1+"$@"}
450de2362d3Smrg
4517821949aSmrg    # A bug in bash halts the script if the last line of a function
4527821949aSmrg    # fails when set -e is in force, so we need another command to
4537821949aSmrg    # work around that:
4547821949aSmrg    :
4557821949aSmrg}
456de2362d3Smrg
4577821949aSmrg# func_echo_all arg...
4587821949aSmrg# Invoke $ECHO with all args, space-separated.
4597821949aSmrgfunc_echo_all ()
4607821949aSmrg{
4617821949aSmrg    $ECHO "$*"
4627821949aSmrg}
463de2362d3Smrg
4647821949aSmrg# func_error arg...
4657821949aSmrg# Echo program name prefixed message to standard error.
4667821949aSmrgfunc_error ()
4677821949aSmrg{
4687821949aSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
4697821949aSmrg}
470de2362d3Smrg
4717821949aSmrg# func_warning arg...
4727821949aSmrg# Echo program name prefixed warning message to standard error.
4737821949aSmrgfunc_warning ()
4747821949aSmrg{
4757821949aSmrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476de2362d3Smrg
4777821949aSmrg    # bash bug again:
4787821949aSmrg    :
4797821949aSmrg}
480de2362d3Smrg
4817821949aSmrg# func_fatal_error arg...
4827821949aSmrg# Echo program name prefixed message to standard error, and exit.
4837821949aSmrgfunc_fatal_error ()
484de2362d3Smrg{
4857821949aSmrg    func_error ${1+"$@"}
4867821949aSmrg    exit $EXIT_FAILURE
4877821949aSmrg}
488de2362d3Smrg
4897821949aSmrg# func_fatal_help arg...
4907821949aSmrg# Echo program name prefixed message to standard error, followed by
4917821949aSmrg# a help hint, and exit.
4927821949aSmrgfunc_fatal_help ()
4937821949aSmrg{
4947821949aSmrg    func_error ${1+"$@"}
4957821949aSmrg    func_fatal_error "$help"
496de2362d3Smrg}
4977821949aSmrghelp="Try \`$progname --help' for more information."  ## default
498de2362d3Smrg
499de2362d3Smrg
5007821949aSmrg# func_grep expression filename
501de2362d3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502de2362d3Smrgfunc_grep ()
503de2362d3Smrg{
504de2362d3Smrg    $GREP "$1" "$2" >/dev/null 2>&1
505de2362d3Smrg}
506de2362d3Smrg
507de2362d3Smrg
5087821949aSmrg# func_mkdir_p directory-path
509de2362d3Smrg# Make sure the entire path to DIRECTORY-PATH is available.
510de2362d3Smrgfunc_mkdir_p ()
511de2362d3Smrg{
5127821949aSmrg    my_directory_path="$1"
5137821949aSmrg    my_dir_list=
514de2362d3Smrg
5157821949aSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516de2362d3Smrg
5177821949aSmrg      # Protect directory names starting with `-'
5187821949aSmrg      case $my_directory_path in
5197821949aSmrg        -*) my_directory_path="./$my_directory_path" ;;
520de2362d3Smrg      esac
521de2362d3Smrg
522de2362d3Smrg      # While some portion of DIR does not yet exist...
5237821949aSmrg      while test ! -d "$my_directory_path"; do
524de2362d3Smrg        # ...make a list in topmost first order.  Use a colon delimited
525de2362d3Smrg	# list incase some portion of path contains whitespace.
5267821949aSmrg        my_dir_list="$my_directory_path:$my_dir_list"
527de2362d3Smrg
528de2362d3Smrg        # If the last portion added has no slash in it, the list is done
5297821949aSmrg        case $my_directory_path in */*) ;; *) break ;; esac
530de2362d3Smrg
531de2362d3Smrg        # ...otherwise throw away the child directory and loop
5327821949aSmrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533de2362d3Smrg      done
5347821949aSmrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535de2362d3Smrg
5367821949aSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
5377821949aSmrg      for my_dir in $my_dir_list; do
5387821949aSmrg	IFS="$save_mkdir_p_IFS"
5397821949aSmrg        # mkdir can fail with a `File exist' error if two processes
540de2362d3Smrg        # try to create one of the directories concurrently.  Don't
541de2362d3Smrg        # stop in that case!
5427821949aSmrg        $MKDIR "$my_dir" 2>/dev/null || :
543de2362d3Smrg      done
5447821949aSmrg      IFS="$save_mkdir_p_IFS"
545de2362d3Smrg
546de2362d3Smrg      # Bail out if we (or some other process) failed to create a directory.
5477821949aSmrg      test -d "$my_directory_path" || \
5487821949aSmrg        func_fatal_error "Failed to create \`$1'"
549de2362d3Smrg    fi
550de2362d3Smrg}
551de2362d3Smrg
552de2362d3Smrg
5537821949aSmrg# func_mktempdir [string]
554de2362d3Smrg# Make a temporary directory that won't clash with other running
555de2362d3Smrg# libtool processes, and avoids race conditions if possible.  If
5567821949aSmrg# given, STRING is the basename for that directory.
557de2362d3Smrgfunc_mktempdir ()
558de2362d3Smrg{
5597821949aSmrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
5600d16fef4Smrg
5617821949aSmrg    if test "$opt_dry_run" = ":"; then
562de2362d3Smrg      # Return a directory name, but don't create it in dry-run mode
5637821949aSmrg      my_tmpdir="${my_template}-$$"
564de2362d3Smrg    else
565de2362d3Smrg
566de2362d3Smrg      # If mktemp works, use that first and foremost
5677821949aSmrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568de2362d3Smrg
5697821949aSmrg      if test ! -d "$my_tmpdir"; then
570de2362d3Smrg        # Failing that, at least try and use $RANDOM to avoid a race
5717821949aSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
572de2362d3Smrg
5737821949aSmrg        save_mktempdir_umask=`umask`
574de2362d3Smrg        umask 0077
5757821949aSmrg        $MKDIR "$my_tmpdir"
5767821949aSmrg        umask $save_mktempdir_umask
577de2362d3Smrg      fi
578de2362d3Smrg
579de2362d3Smrg      # If we're not in dry-run mode, bomb out on failure
5807821949aSmrg      test -d "$my_tmpdir" || \
5817821949aSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
5820d16fef4Smrg    fi
5830d16fef4Smrg
5847821949aSmrg    $ECHO "$my_tmpdir"
585de2362d3Smrg}
586de2362d3Smrg
587de2362d3Smrg
5887821949aSmrg# func_quote_for_eval arg
5897821949aSmrg# Aesthetically quote ARG to be evaled later.
5907821949aSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
5917821949aSmrg# is double-quoted, suitable for a subsequent eval, whereas
5927821949aSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
5937821949aSmrg# which are still active within double quotes backslashified.
5940d16fef4Smrgfunc_quote_for_eval ()
5950d16fef4Smrg{
596de2362d3Smrg    case $1 in
5977821949aSmrg      *[\\\`\"\$]*)
5987821949aSmrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599de2362d3Smrg      *)
6007821949aSmrg        func_quote_for_eval_unquoted_result="$1" ;;
601de2362d3Smrg    esac
602de2362d3Smrg
6037821949aSmrg    case $func_quote_for_eval_unquoted_result in
604de2362d3Smrg      # Double-quote args containing shell metacharacters to delay
6057821949aSmrg      # word splitting, command substitution and and variable
6067821949aSmrg      # expansion for a subsequent eval.
607de2362d3Smrg      # Many Bourne shells cannot handle close brackets correctly
608de2362d3Smrg      # in scan sets, so we specify it separately.
609de2362d3Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6107821949aSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611de2362d3Smrg        ;;
6127821949aSmrg      *)
6137821949aSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
614de2362d3Smrg    esac
6150d16fef4Smrg}
6160d16fef4Smrg
6170d16fef4Smrg
6187821949aSmrg# func_quote_for_expand arg
6197821949aSmrg# Aesthetically quote ARG to be evaled later; same as above,
6207821949aSmrg# but do not quote variable references.
6217821949aSmrgfunc_quote_for_expand ()
6220d16fef4Smrg{
6230d16fef4Smrg    case $1 in
6247821949aSmrg      *[\\\`\"]*)
6257821949aSmrg	my_arg=`$ECHO "$1" | $SED \
6267821949aSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
6277821949aSmrg      *)
6287821949aSmrg        my_arg="$1" ;;
6290d16fef4Smrg    esac
6300d16fef4Smrg
6317821949aSmrg    case $my_arg in
6327821949aSmrg      # Double-quote args containing shell metacharacters to delay
6337821949aSmrg      # word splitting and command substitution for a subsequent eval.
6347821949aSmrg      # Many Bourne shells cannot handle close brackets correctly
6357821949aSmrg      # in scan sets, so we specify it separately.
6367821949aSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6377821949aSmrg        my_arg="\"$my_arg\""
6387821949aSmrg        ;;
6397821949aSmrg    esac
6400d16fef4Smrg
6417821949aSmrg    func_quote_for_expand_result="$my_arg"
642de2362d3Smrg}
643de2362d3Smrg
644de2362d3Smrg
6457821949aSmrg# func_show_eval cmd [fail_exp]
6467821949aSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6477821949aSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6487821949aSmrg# is given, then evaluate it.
6497821949aSmrgfunc_show_eval ()
650de2362d3Smrg{
6517821949aSmrg    my_cmd="$1"
6527821949aSmrg    my_fail_exp="${2-:}"
653de2362d3Smrg
6547821949aSmrg    ${opt_silent-false} || {
6557821949aSmrg      func_quote_for_expand "$my_cmd"
6567821949aSmrg      eval "func_echo $func_quote_for_expand_result"
6577821949aSmrg    }
6580d16fef4Smrg
6597821949aSmrg    if ${opt_dry_run-false}; then :; else
6607821949aSmrg      eval "$my_cmd"
6617821949aSmrg      my_status=$?
6627821949aSmrg      if test "$my_status" -eq 0; then :; else
6637821949aSmrg	eval "(exit $my_status); $my_fail_exp"
6647821949aSmrg      fi
6657821949aSmrg    fi
666de2362d3Smrg}
667de2362d3Smrg
6680d16fef4Smrg
6697821949aSmrg# func_show_eval_locale cmd [fail_exp]
6707821949aSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6717821949aSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6727821949aSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
6737821949aSmrgfunc_show_eval_locale ()
674de2362d3Smrg{
6757821949aSmrg    my_cmd="$1"
6767821949aSmrg    my_fail_exp="${2-:}"
6770d16fef4Smrg
6787821949aSmrg    ${opt_silent-false} || {
6797821949aSmrg      func_quote_for_expand "$my_cmd"
6807821949aSmrg      eval "func_echo $func_quote_for_expand_result"
6817821949aSmrg    }
6820d16fef4Smrg
6837821949aSmrg    if ${opt_dry_run-false}; then :; else
6847821949aSmrg      eval "$lt_user_locale
6857821949aSmrg	    $my_cmd"
6867821949aSmrg      my_status=$?
6877821949aSmrg      eval "$lt_safe_locale"
6887821949aSmrg      if test "$my_status" -eq 0; then :; else
6897821949aSmrg	eval "(exit $my_status); $my_fail_exp"
6907821949aSmrg      fi
6917821949aSmrg    fi
692de2362d3Smrg}
693de2362d3Smrg
6947821949aSmrg# func_tr_sh
6957821949aSmrg# Turn $1 into a string suitable for a shell variable name.
6967821949aSmrg# Result is stored in $func_tr_sh_result.  All characters
6977821949aSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
6987821949aSmrg# if $1 begins with a digit, a '_' is prepended as well.
6997821949aSmrgfunc_tr_sh ()
700de2362d3Smrg{
7017821949aSmrg  case $1 in
7027821949aSmrg  [0-9]* | *[!a-zA-Z0-9_]*)
7037821949aSmrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7047821949aSmrg    ;;
7057821949aSmrg  * )
7067821949aSmrg    func_tr_sh_result=$1
7077821949aSmrg    ;;
7087821949aSmrg  esac
709de2362d3Smrg}
710de2362d3Smrg
7110d16fef4Smrg
7127821949aSmrg# func_version
7137821949aSmrg# Echo version message to standard output and exit.
7147821949aSmrgfunc_version ()
7157821949aSmrg{
7167821949aSmrg    $opt_debug
7170d16fef4Smrg
7187821949aSmrg    $SED -n '/(C)/!b go
7197821949aSmrg	:more
7207821949aSmrg	/\./!{
7217821949aSmrg	  N
7227821949aSmrg	  s/\n# / /
7237821949aSmrg	  b more
7247821949aSmrg	}
7257821949aSmrg	:go
7267821949aSmrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
7277821949aSmrg        s/^# //
7287821949aSmrg	s/^# *$//
7297821949aSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
7307821949aSmrg        p
7317821949aSmrg     }' < "$progpath"
7327821949aSmrg     exit $?
7337821949aSmrg}
7340d16fef4Smrg
7357821949aSmrg# func_usage
7367821949aSmrg# Echo short help message to standard output and exit.
7377821949aSmrgfunc_usage ()
738de2362d3Smrg{
7397821949aSmrg    $opt_debug
740de2362d3Smrg
7417821949aSmrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
7427821949aSmrg        s/^# //
7437821949aSmrg	s/^# *$//
7447821949aSmrg	s/\$progname/'$progname'/
7457821949aSmrg	p
7467821949aSmrg    }' < "$progpath"
7477821949aSmrg    echo
7487821949aSmrg    $ECHO "run \`$progname --help | more' for full usage"
7497821949aSmrg    exit $?
750de2362d3Smrg}
751de2362d3Smrg
7527821949aSmrg# func_help [NOEXIT]
7537821949aSmrg# Echo long help message to standard output and exit,
7547821949aSmrg# unless 'noexit' is passed as argument.
755de2362d3Smrgfunc_help ()
756de2362d3Smrg{
7577821949aSmrg    $opt_debug
7587821949aSmrg
7597821949aSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
7607821949aSmrg	:print
7617821949aSmrg        s/^# //
7627821949aSmrg	s/^# *$//
7637821949aSmrg	s*\$progname*'$progname'*
7647821949aSmrg	s*\$host*'"$host"'*
7657821949aSmrg	s*\$SHELL*'"$SHELL"'*
7667821949aSmrg	s*\$LTCC*'"$LTCC"'*
7677821949aSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
7687821949aSmrg	s*\$LD*'"$LD"'*
7697821949aSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7707821949aSmrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
7717821949aSmrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
7727821949aSmrg	p
7737821949aSmrg	d
7747821949aSmrg     }
7757821949aSmrg     /^# .* home page:/b print
7767821949aSmrg     /^# General help using/b print
7777821949aSmrg     ' < "$progpath"
7787821949aSmrg    ret=$?
7797821949aSmrg    if test -z "$1"; then
7807821949aSmrg      exit $ret
7817821949aSmrg    fi
782de2362d3Smrg}
783de2362d3Smrg
7847821949aSmrg# func_missing_arg argname
785de2362d3Smrg# Echo program name prefixed message to standard error and set global
786de2362d3Smrg# exit_cmd.
787de2362d3Smrgfunc_missing_arg ()
788de2362d3Smrg{
7897821949aSmrg    $opt_debug
790de2362d3Smrg
7917821949aSmrg    func_error "missing argument for $1."
792de2362d3Smrg    exit_cmd=exit
793de2362d3Smrg}
794de2362d3Smrg
795de2362d3Smrg
7967821949aSmrg# func_split_short_opt shortopt
797de2362d3Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
798de2362d3Smrg# variables after splitting SHORTOPT after the 2nd character.
7997821949aSmrgfunc_split_short_opt ()
800de2362d3Smrg{
8017821949aSmrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
8027821949aSmrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803de2362d3Smrg
8047821949aSmrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
8057821949aSmrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
8067821949aSmrg} # func_split_short_opt may be replaced by extended shell implementation
807de2362d3Smrg
808de2362d3Smrg
8097821949aSmrg# func_split_long_opt longopt
8107821949aSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
8117821949aSmrg# variables after splitting LONGOPT at the `=' sign.
8127821949aSmrgfunc_split_long_opt ()
813de2362d3Smrg{
8147821949aSmrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
8157821949aSmrg    my_sed_long_arg='1s/^--[^=]*=//'
816de2362d3Smrg
8177821949aSmrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
8187821949aSmrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
8197821949aSmrg} # func_split_long_opt may be replaced by extended shell implementation
820de2362d3Smrg
8217821949aSmrgexit_cmd=:
822de2362d3Smrg
823de2362d3Smrg
824de2362d3Smrg
825de2362d3Smrg
826de2362d3Smrg
8277821949aSmrgmagic="%%%MAGIC variable%%%"
8287821949aSmrgmagic_exe="%%%MAGIC EXE variable%%%"
829de2362d3Smrg
8307821949aSmrg# Global variables.
8317821949aSmrgnonopt=
8327821949aSmrgpreserve_args=
8337821949aSmrglo2o="s/\\.lo\$/.${objext}/"
8347821949aSmrgo2lo="s/\\.${objext}\$/.lo/"
8357821949aSmrgextracted_archives=
8367821949aSmrgextracted_serial=0
837de2362d3Smrg
8387821949aSmrg# If this variable is set in any of the actions, the command in it
8397821949aSmrg# will be execed at the end.  This prevents here-documents from being
8407821949aSmrg# left over by shells.
8417821949aSmrgexec_cmd=
842de2362d3Smrg
8437821949aSmrg# func_append var value
8447821949aSmrg# Append VALUE to the end of shell variable VAR.
8457821949aSmrgfunc_append ()
846de2362d3Smrg{
8477821949aSmrg    eval "${1}=\$${1}\${2}"
8487821949aSmrg} # func_append may be replaced by extended shell implementation
849de2362d3Smrg
8507821949aSmrg# func_append_quoted var value
8517821949aSmrg# Quote VALUE and append to the end of shell variable VAR, separated
8527821949aSmrg# by a space.
8537821949aSmrgfunc_append_quoted ()
854de2362d3Smrg{
8557821949aSmrg    func_quote_for_eval "${2}"
8567821949aSmrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
8577821949aSmrg} # func_append_quoted may be replaced by extended shell implementation
8580d16fef4Smrg
859de2362d3Smrg
8607821949aSmrg# func_arith arithmetic-term...
8617821949aSmrgfunc_arith ()
862de2362d3Smrg{
8637821949aSmrg    func_arith_result=`expr "${@}"`
8647821949aSmrg} # func_arith may be replaced by extended shell implementation
865de2362d3Smrg
866de2362d3Smrg
8677821949aSmrg# func_len string
8687821949aSmrg# STRING may not start with a hyphen.
8697821949aSmrgfunc_len ()
8707821949aSmrg{
8717821949aSmrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
8727821949aSmrg} # func_len may be replaced by extended shell implementation
873de2362d3Smrg
874de2362d3Smrg
8757821949aSmrg# func_lo2o object
8767821949aSmrgfunc_lo2o ()
8777821949aSmrg{
8787821949aSmrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
8797821949aSmrg} # func_lo2o may be replaced by extended shell implementation
8800d16fef4Smrg
8810d16fef4Smrg
8827821949aSmrg# func_xform libobj-or-source
8837821949aSmrgfunc_xform ()
8847821949aSmrg{
8857821949aSmrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
8867821949aSmrg} # func_xform may be replaced by extended shell implementation
887de2362d3Smrg
888de2362d3Smrg
8897821949aSmrg# func_fatal_configuration arg...
890de2362d3Smrg# Echo program name prefixed message to standard error, followed by
891de2362d3Smrg# a configuration failure hint, and exit.
892de2362d3Smrgfunc_fatal_configuration ()
893de2362d3Smrg{
8947821949aSmrg    func_error ${1+"$@"}
8957821949aSmrg    func_error "See the $PACKAGE documentation for more information."
8967821949aSmrg    func_fatal_error "Fatal configuration error."
897de2362d3Smrg}
898de2362d3Smrg
899de2362d3Smrg
900de2362d3Smrg# func_config
901de2362d3Smrg# Display the configuration for all the tags in this script.
902de2362d3Smrgfunc_config ()
903de2362d3Smrg{
904de2362d3Smrg    re_begincf='^# ### BEGIN LIBTOOL'
905de2362d3Smrg    re_endcf='^# ### END LIBTOOL'
906de2362d3Smrg
907de2362d3Smrg    # Default configuration.
908de2362d3Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
909de2362d3Smrg
910de2362d3Smrg    # Now print the configurations for the tags.
911de2362d3Smrg    for tagname in $taglist; do
912de2362d3Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913de2362d3Smrg    done
914de2362d3Smrg
915de2362d3Smrg    exit $?
916de2362d3Smrg}
917de2362d3Smrg
918de2362d3Smrg# func_features
919de2362d3Smrg# Display the features supported by this script.
920de2362d3Smrgfunc_features ()
921de2362d3Smrg{
922de2362d3Smrg    echo "host: $host"
9237821949aSmrg    if test "$build_libtool_libs" = yes; then
924de2362d3Smrg      echo "enable shared libraries"
925de2362d3Smrg    else
926de2362d3Smrg      echo "disable shared libraries"
927de2362d3Smrg    fi
9287821949aSmrg    if test "$build_old_libs" = yes; then
929de2362d3Smrg      echo "enable static libraries"
930de2362d3Smrg    else
931de2362d3Smrg      echo "disable static libraries"
932de2362d3Smrg    fi
933de2362d3Smrg
934de2362d3Smrg    exit $?
935de2362d3Smrg}
936de2362d3Smrg
9377821949aSmrg# func_enable_tag tagname
938de2362d3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939de2362d3Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940de2362d3Smrg# variable here.
941de2362d3Smrgfunc_enable_tag ()
942de2362d3Smrg{
9437821949aSmrg  # Global variable:
9447821949aSmrg  tagname="$1"
945de2362d3Smrg
9467821949aSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
9477821949aSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
9487821949aSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949de2362d3Smrg
9507821949aSmrg  # Validate tagname.
9517821949aSmrg  case $tagname in
9527821949aSmrg    *[!-_A-Za-z0-9,/]*)
9537821949aSmrg      func_fatal_error "invalid tag name: $tagname"
9547821949aSmrg      ;;
9557821949aSmrg  esac
956de2362d3Smrg
9577821949aSmrg  # Don't test for the "default" C tag, as we know it's
9587821949aSmrg  # there but not specially marked.
9597821949aSmrg  case $tagname in
9607821949aSmrg    CC) ;;
961de2362d3Smrg    *)
9627821949aSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
9637821949aSmrg	taglist="$taglist $tagname"
9647821949aSmrg
9657821949aSmrg	# Evaluate the configuration.  Be careful to quote the path
9667821949aSmrg	# and the sed script, to avoid splitting on whitespace, but
9677821949aSmrg	# also don't use non-portable quotes within backquotes within
9687821949aSmrg	# quotes we have to do it in 2 steps:
9697821949aSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
9707821949aSmrg	eval "$extractedcf"
9717821949aSmrg      else
9727821949aSmrg	func_error "ignoring unknown tag $tagname"
9737821949aSmrg      fi
9747821949aSmrg      ;;
9757821949aSmrg  esac
976de2362d3Smrg}
977de2362d3Smrg
978de2362d3Smrg# func_check_version_match
979de2362d3Smrg# Ensure that we are using m4 macros, and libtool script from the same
980de2362d3Smrg# release of libtool.
981de2362d3Smrgfunc_check_version_match ()
982de2362d3Smrg{
9837821949aSmrg  if test "$package_revision" != "$macro_revision"; then
9847821949aSmrg    if test "$VERSION" != "$macro_version"; then
9857821949aSmrg      if test -z "$macro_version"; then
9867821949aSmrg        cat >&2 <<_LT_EOF
987de2362d3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
988de2362d3Smrg$progname: definition of this LT_INIT comes from an older release.
989de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
990de2362d3Smrg$progname: and run autoconf again.
991de2362d3Smrg_LT_EOF
9927821949aSmrg      else
9937821949aSmrg        cat >&2 <<_LT_EOF
994de2362d3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
995de2362d3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
996de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
997de2362d3Smrg$progname: and run autoconf again.
998de2362d3Smrg_LT_EOF
9997821949aSmrg      fi
10007821949aSmrg    else
10017821949aSmrg      cat >&2 <<_LT_EOF
1002de2362d3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1003de2362d3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1004de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1005de2362d3Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
1006de2362d3Smrg_LT_EOF
10070d16fef4Smrg    fi
1008de2362d3Smrg
10097821949aSmrg    exit $EXIT_MISMATCH
10107821949aSmrg  fi
10117821949aSmrg}
1012de2362d3Smrg
1013de2362d3Smrg
10147821949aSmrg# Shorthand for --mode=foo, only valid as the first argument
10157821949aSmrgcase $1 in
10167821949aSmrgclean|clea|cle|cl)
10177821949aSmrg  shift; set dummy --mode clean ${1+"$@"}; shift
10187821949aSmrg  ;;
10197821949aSmrgcompile|compil|compi|comp|com|co|c)
10207821949aSmrg  shift; set dummy --mode compile ${1+"$@"}; shift
10217821949aSmrg  ;;
10227821949aSmrgexecute|execut|execu|exec|exe|ex|e)
10237821949aSmrg  shift; set dummy --mode execute ${1+"$@"}; shift
10247821949aSmrg  ;;
10257821949aSmrgfinish|finis|fini|fin|fi|f)
10267821949aSmrg  shift; set dummy --mode finish ${1+"$@"}; shift
10277821949aSmrg  ;;
10287821949aSmrginstall|instal|insta|inst|ins|in|i)
10297821949aSmrg  shift; set dummy --mode install ${1+"$@"}; shift
10307821949aSmrg  ;;
10317821949aSmrglink|lin|li|l)
10327821949aSmrg  shift; set dummy --mode link ${1+"$@"}; shift
10337821949aSmrg  ;;
10347821949aSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
10357821949aSmrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10367821949aSmrg  ;;
10377821949aSmrgesac
1038de2362d3Smrg
1039de2362d3Smrg
10400d16fef4Smrg
10417821949aSmrg# Option defaults:
10427821949aSmrgopt_debug=:
10437821949aSmrgopt_dry_run=false
10447821949aSmrgopt_config=false
10457821949aSmrgopt_preserve_dup_deps=false
10467821949aSmrgopt_features=false
10477821949aSmrgopt_finish=false
10487821949aSmrgopt_help=false
10497821949aSmrgopt_help_all=false
10507821949aSmrgopt_silent=:
10517821949aSmrgopt_warning=:
10527821949aSmrgopt_verbose=:
10537821949aSmrgopt_silent=false
10547821949aSmrgopt_verbose=false
1055de2362d3Smrg
1056de2362d3Smrg
10577821949aSmrg# Parse options once, thoroughly.  This comes as soon as possible in the
10587821949aSmrg# script to make things like `--version' happen as quickly as we can.
1059de2362d3Smrg{
10607821949aSmrg  # this just eases exit handling
10617821949aSmrg  while test $# -gt 0; do
10627821949aSmrg    opt="$1"
10637821949aSmrg    shift
10647821949aSmrg    case $opt in
10657821949aSmrg      --debug|-x)	opt_debug='set -x'
10667821949aSmrg			func_echo "enabling shell trace mode"
10677821949aSmrg			$opt_debug
10687821949aSmrg			;;
10697821949aSmrg      --dry-run|--dryrun|-n)
10707821949aSmrg			opt_dry_run=:
10717821949aSmrg			;;
10727821949aSmrg      --config)
10737821949aSmrg			opt_config=:
10747821949aSmrgfunc_config
10757821949aSmrg			;;
10767821949aSmrg      --dlopen|-dlopen)
10777821949aSmrg			optarg="$1"
10787821949aSmrg			opt_dlopen="${opt_dlopen+$opt_dlopen
10797821949aSmrg}$optarg"
10807821949aSmrg			shift
10817821949aSmrg			;;
10827821949aSmrg      --preserve-dup-deps)
10837821949aSmrg			opt_preserve_dup_deps=:
10847821949aSmrg			;;
10857821949aSmrg      --features)
10867821949aSmrg			opt_features=:
10877821949aSmrgfunc_features
10887821949aSmrg			;;
10897821949aSmrg      --finish)
10907821949aSmrg			opt_finish=:
10917821949aSmrgset dummy --mode finish ${1+"$@"}; shift
10927821949aSmrg			;;
10937821949aSmrg      --help)
10947821949aSmrg			opt_help=:
10957821949aSmrg			;;
10967821949aSmrg      --help-all)
10977821949aSmrg			opt_help_all=:
10987821949aSmrgopt_help=': help-all'
10997821949aSmrg			;;
11007821949aSmrg      --mode)
11017821949aSmrg			test $# = 0 && func_missing_arg $opt && break
11027821949aSmrg			optarg="$1"
11037821949aSmrg			opt_mode="$optarg"
11047821949aSmrgcase $optarg in
11057821949aSmrg  # Valid mode arguments:
11067821949aSmrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
11077821949aSmrg
11087821949aSmrg  # Catch anything else as an error
11097821949aSmrg  *) func_error "invalid argument for $opt"
11107821949aSmrg     exit_cmd=exit
11117821949aSmrg     break
11127821949aSmrg     ;;
11137821949aSmrgesac
11147821949aSmrg			shift
11157821949aSmrg			;;
11167821949aSmrg      --no-silent|--no-quiet)
11177821949aSmrg			opt_silent=false
11187821949aSmrgfunc_append preserve_args " $opt"
11197821949aSmrg			;;
11207821949aSmrg      --no-warning|--no-warn)
11217821949aSmrg			opt_warning=false
11227821949aSmrgfunc_append preserve_args " $opt"
11237821949aSmrg			;;
11247821949aSmrg      --no-verbose)
11257821949aSmrg			opt_verbose=false
11267821949aSmrgfunc_append preserve_args " $opt"
11277821949aSmrg			;;
11287821949aSmrg      --silent|--quiet)
11297821949aSmrg			opt_silent=:
11307821949aSmrgfunc_append preserve_args " $opt"
11317821949aSmrg        opt_verbose=false
11327821949aSmrg			;;
11337821949aSmrg      --verbose|-v)
11347821949aSmrg			opt_verbose=:
11357821949aSmrgfunc_append preserve_args " $opt"
11367821949aSmrgopt_silent=false
11377821949aSmrg			;;
11387821949aSmrg      --tag)
11397821949aSmrg			test $# = 0 && func_missing_arg $opt && break
11407821949aSmrg			optarg="$1"
11417821949aSmrg			opt_tag="$optarg"
11427821949aSmrgfunc_append preserve_args " $opt $optarg"
11437821949aSmrgfunc_enable_tag "$optarg"
11447821949aSmrg			shift
11457821949aSmrg			;;
11467821949aSmrg
11477821949aSmrg      -\?|-h)		func_usage				;;
11487821949aSmrg      --help)		func_help				;;
11497821949aSmrg      --version)	func_version				;;
11507821949aSmrg
11517821949aSmrg      # Separate optargs to long options:
11527821949aSmrg      --*=*)
11537821949aSmrg			func_split_long_opt "$opt"
11547821949aSmrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
11557821949aSmrg			shift
11567821949aSmrg			;;
11577821949aSmrg
11587821949aSmrg      # Separate non-argument short options:
11597821949aSmrg      -\?*|-h*|-n*|-v*)
11607821949aSmrg			func_split_short_opt "$opt"
11617821949aSmrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
11627821949aSmrg			shift
11637821949aSmrg			;;
11647821949aSmrg
11657821949aSmrg      --)		break					;;
11667821949aSmrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
11677821949aSmrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
11687821949aSmrg    esac
11697821949aSmrg  done
1170de2362d3Smrg
11717821949aSmrg  # Validate options:
1172de2362d3Smrg
11737821949aSmrg  # save first non-option argument
11747821949aSmrg  if test "$#" -gt 0; then
11757821949aSmrg    nonopt="$opt"
11767821949aSmrg    shift
11777821949aSmrg  fi
1178de2362d3Smrg
11797821949aSmrg  # preserve --debug
11807821949aSmrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181de2362d3Smrg
11827821949aSmrg  case $host in
11837821949aSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
11847821949aSmrg      # don't eliminate duplications in $postdeps and $predeps
11857821949aSmrg      opt_duplicate_compiler_generated_deps=:
11867821949aSmrg      ;;
11877821949aSmrg    *)
11887821949aSmrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
11897821949aSmrg      ;;
11907821949aSmrg  esac
1191de2362d3Smrg
11927821949aSmrg  $opt_help || {
11937821949aSmrg    # Sanity checks first:
11947821949aSmrg    func_check_version_match
1195de2362d3Smrg
11967821949aSmrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
11977821949aSmrg      func_fatal_configuration "not configured to build any kind of library"
1198de2362d3Smrg    fi
1199de2362d3Smrg
12007821949aSmrg    # Darwin sucks
12017821949aSmrg    eval std_shrext=\"$shrext_cmds\"
1202de2362d3Smrg
12037821949aSmrg    # Only execute mode is allowed to have -dlopen flags.
12047821949aSmrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
12057821949aSmrg      func_error "unrecognized option \`-dlopen'"
12067821949aSmrg      $ECHO "$help" 1>&2
12077821949aSmrg      exit $EXIT_FAILURE
12087821949aSmrg    fi
12090d16fef4Smrg
12107821949aSmrg    # Change the help message to a mode-specific one.
12117821949aSmrg    generic_help="$help"
12127821949aSmrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
12137821949aSmrg  }
12140d16fef4Smrg
12150d16fef4Smrg
12167821949aSmrg  # Bail if the options were screwed
12177821949aSmrg  $exit_cmd $EXIT_FAILURE
1218de2362d3Smrg}
1219de2362d3Smrg
1220de2362d3Smrg
1221de2362d3Smrg
1222de2362d3Smrg
1223de2362d3Smrg## ----------- ##
1224de2362d3Smrg##    Main.    ##
1225de2362d3Smrg## ----------- ##
1226de2362d3Smrg
1227de2362d3Smrg# func_lalib_p file
12287821949aSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
1230de2362d3Smrg# determined imposters.
1231de2362d3Smrgfunc_lalib_p ()
1232de2362d3Smrg{
1233de2362d3Smrg    test -f "$1" &&
12347821949aSmrg      $SED -e 4q "$1" 2>/dev/null \
12357821949aSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236de2362d3Smrg}
1237de2362d3Smrg
1238de2362d3Smrg# func_lalib_unsafe_p file
12397821949aSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240de2362d3Smrg# This function implements the same check as func_lalib_p without
1241de2362d3Smrg# resorting to external programs.  To this end, it redirects stdin and
1242de2362d3Smrg# closes it afterwards, without saving the original file descriptor.
1243de2362d3Smrg# As a safety measure, use it only where a negative result would be
12447821949aSmrg# fatal anyway.  Works if `file' does not exist.
1245de2362d3Smrgfunc_lalib_unsafe_p ()
1246de2362d3Smrg{
1247de2362d3Smrg    lalib_p=no
1248de2362d3Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249de2362d3Smrg	for lalib_p_l in 1 2 3 4
1250de2362d3Smrg	do
1251de2362d3Smrg	    read lalib_p_line
12527821949aSmrg	    case "$lalib_p_line" in
1253de2362d3Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254de2362d3Smrg	    esac
1255de2362d3Smrg	done
1256de2362d3Smrg	exec 0<&5 5<&-
1257de2362d3Smrg    fi
12587821949aSmrg    test "$lalib_p" = yes
1259de2362d3Smrg}
1260de2362d3Smrg
1261de2362d3Smrg# func_ltwrapper_script_p file
1262de2362d3Smrg# True iff FILE is a libtool wrapper script
1263de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
1264de2362d3Smrg# determined imposters.
1265de2362d3Smrgfunc_ltwrapper_script_p ()
1266de2362d3Smrg{
12677821949aSmrg    func_lalib_p "$1"
1268de2362d3Smrg}
1269de2362d3Smrg
1270de2362d3Smrg# func_ltwrapper_executable_p file
1271de2362d3Smrg# True iff FILE is a libtool wrapper executable
1272de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
1273de2362d3Smrg# determined imposters.
1274de2362d3Smrgfunc_ltwrapper_executable_p ()
1275de2362d3Smrg{
1276de2362d3Smrg    func_ltwrapper_exec_suffix=
1277de2362d3Smrg    case $1 in
1278de2362d3Smrg    *.exe) ;;
1279de2362d3Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280de2362d3Smrg    esac
1281de2362d3Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282de2362d3Smrg}
1283de2362d3Smrg
1284de2362d3Smrg# func_ltwrapper_scriptname file
1285de2362d3Smrg# Assumes file is an ltwrapper_executable
1286de2362d3Smrg# uses $file to determine the appropriate filename for a
1287de2362d3Smrg# temporary ltwrapper_script.
1288de2362d3Smrgfunc_ltwrapper_scriptname ()
1289de2362d3Smrg{
1290de2362d3Smrg    func_dirname_and_basename "$1" "" "."
1291de2362d3Smrg    func_stripname '' '.exe' "$func_basename_result"
12927821949aSmrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293de2362d3Smrg}
1294de2362d3Smrg
1295de2362d3Smrg# func_ltwrapper_p file
1296de2362d3Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1297de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
1298de2362d3Smrg# determined imposters.
1299de2362d3Smrgfunc_ltwrapper_p ()
1300de2362d3Smrg{
1301de2362d3Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302de2362d3Smrg}
1303de2362d3Smrg
1304de2362d3Smrg
1305de2362d3Smrg# func_execute_cmds commands fail_cmd
1306de2362d3Smrg# Execute tilde-delimited COMMANDS.
1307de2362d3Smrg# If FAIL_CMD is given, eval that upon failure.
1308de2362d3Smrg# FAIL_CMD may read-access the current command in variable CMD!
1309de2362d3Smrgfunc_execute_cmds ()
1310de2362d3Smrg{
13117821949aSmrg    $opt_debug
1312de2362d3Smrg    save_ifs=$IFS; IFS='~'
1313de2362d3Smrg    for cmd in $1; do
13140d16fef4Smrg      IFS=$save_ifs
13157821949aSmrg      eval cmd=\"$cmd\"
1316de2362d3Smrg      func_show_eval "$cmd" "${2-:}"
1317de2362d3Smrg    done
1318de2362d3Smrg    IFS=$save_ifs
1319de2362d3Smrg}
1320de2362d3Smrg
1321de2362d3Smrg
1322de2362d3Smrg# func_source file
1323de2362d3Smrg# Source FILE, adding directory component if necessary.
1324de2362d3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325de2362d3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326de2362d3Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
13277821949aSmrg# `FILE.' does not work on cygwin managed mounts.
1328de2362d3Smrgfunc_source ()
1329de2362d3Smrg{
13307821949aSmrg    $opt_debug
1331de2362d3Smrg    case $1 in
1332de2362d3Smrg    */* | *\\*)	. "$1" ;;
1333de2362d3Smrg    *)		. "./$1" ;;
1334de2362d3Smrg    esac
1335de2362d3Smrg}
1336de2362d3Smrg
1337de2362d3Smrg
1338de2362d3Smrg# func_resolve_sysroot PATH
1339de2362d3Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
1340de2362d3Smrg# func_resolve_sysroot_result
1341de2362d3Smrgfunc_resolve_sysroot ()
1342de2362d3Smrg{
1343de2362d3Smrg  func_resolve_sysroot_result=$1
1344de2362d3Smrg  case $func_resolve_sysroot_result in
1345de2362d3Smrg  =*)
1346de2362d3Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
1347de2362d3Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1348de2362d3Smrg    ;;
1349de2362d3Smrg  esac
1350de2362d3Smrg}
1351de2362d3Smrg
1352de2362d3Smrg# func_replace_sysroot PATH
1353de2362d3Smrg# If PATH begins with the sysroot, replace it with = and
1354de2362d3Smrg# store the result into func_replace_sysroot_result.
1355de2362d3Smrgfunc_replace_sysroot ()
1356de2362d3Smrg{
13577821949aSmrg  case "$lt_sysroot:$1" in
1358de2362d3Smrg  ?*:"$lt_sysroot"*)
1359de2362d3Smrg    func_stripname "$lt_sysroot" '' "$1"
13607821949aSmrg    func_replace_sysroot_result="=$func_stripname_result"
1361de2362d3Smrg    ;;
1362de2362d3Smrg  *)
1363de2362d3Smrg    # Including no sysroot.
1364de2362d3Smrg    func_replace_sysroot_result=$1
1365de2362d3Smrg    ;;
1366de2362d3Smrg  esac
1367de2362d3Smrg}
1368de2362d3Smrg
1369de2362d3Smrg# func_infer_tag arg
1370de2362d3Smrg# Infer tagged configuration to use if any are available and
1371de2362d3Smrg# if one wasn't chosen via the "--tag" command line option.
1372de2362d3Smrg# Only attempt this if the compiler in the base compile
1373de2362d3Smrg# command doesn't match the default compiler.
1374de2362d3Smrg# arg is usually of the form 'gcc ...'
1375de2362d3Smrgfunc_infer_tag ()
1376de2362d3Smrg{
13777821949aSmrg    $opt_debug
1378de2362d3Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1379de2362d3Smrg      CC_quoted=
1380de2362d3Smrg      for arg in $CC; do
1381de2362d3Smrg	func_append_quoted CC_quoted "$arg"
1382de2362d3Smrg      done
1383de2362d3Smrg      CC_expanded=`func_echo_all $CC`
1384de2362d3Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385de2362d3Smrg      case $@ in
1386de2362d3Smrg      # Blanks in the command may have been stripped by the calling shell,
1387de2362d3Smrg      # but not from the CC environment variable when configure was run.
1388de2362d3Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1389de2362d3Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390de2362d3Smrg      # Blanks at the start of $base_compile will cause this to fail
1391de2362d3Smrg      # if we don't check for them as well.
1392de2362d3Smrg      *)
1393de2362d3Smrg	for z in $available_tags; do
1394de2362d3Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395de2362d3Smrg	    # Evaluate the configuration.
13967821949aSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397de2362d3Smrg	    CC_quoted=
1398de2362d3Smrg	    for arg in $CC; do
1399de2362d3Smrg	      # Double-quote args containing other shell metacharacters.
1400de2362d3Smrg	      func_append_quoted CC_quoted "$arg"
1401de2362d3Smrg	    done
1402de2362d3Smrg	    CC_expanded=`func_echo_all $CC`
1403de2362d3Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404de2362d3Smrg	    case "$@ " in
1405de2362d3Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1406de2362d3Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407de2362d3Smrg	      # The compiler in the base compile command matches
1408de2362d3Smrg	      # the one in the tagged configuration.
1409de2362d3Smrg	      # Assume this is the tagged configuration we want.
1410de2362d3Smrg	      tagname=$z
1411de2362d3Smrg	      break
1412de2362d3Smrg	      ;;
1413de2362d3Smrg	    esac
1414de2362d3Smrg	  fi
1415de2362d3Smrg	done
1416de2362d3Smrg	# If $tagname still isn't set, then no tagged configuration
1417de2362d3Smrg	# was found and let the user know that the "--tag" command
1418de2362d3Smrg	# line option must be used.
1419de2362d3Smrg	if test -z "$tagname"; then
1420de2362d3Smrg	  func_echo "unable to infer tagged configuration"
14217821949aSmrg	  func_fatal_error "specify a tag with \`--tag'"
1422de2362d3Smrg#	else
1423de2362d3Smrg#	  func_verbose "using $tagname tagged configuration"
1424de2362d3Smrg	fi
1425de2362d3Smrg	;;
1426de2362d3Smrg      esac
1427de2362d3Smrg    fi
1428de2362d3Smrg}
1429de2362d3Smrg
1430de2362d3Smrg
1431de2362d3Smrg
1432de2362d3Smrg# func_write_libtool_object output_name pic_name nonpic_name
1433de2362d3Smrg# Create a libtool object file (analogous to a ".la" file),
1434de2362d3Smrg# but don't create it if we're doing a dry run.
1435de2362d3Smrgfunc_write_libtool_object ()
1436de2362d3Smrg{
14377821949aSmrg    write_libobj=${1}
14387821949aSmrg    if test "$build_libtool_libs" = yes; then
14397821949aSmrg      write_lobj=\'${2}\'
1440de2362d3Smrg    else
1441de2362d3Smrg      write_lobj=none
1442de2362d3Smrg    fi
1443de2362d3Smrg
14447821949aSmrg    if test "$build_old_libs" = yes; then
14457821949aSmrg      write_oldobj=\'${3}\'
1446de2362d3Smrg    else
1447de2362d3Smrg      write_oldobj=none
1448de2362d3Smrg    fi
1449de2362d3Smrg
1450de2362d3Smrg    $opt_dry_run || {
1451de2362d3Smrg      cat >${write_libobj}T <<EOF
1452de2362d3Smrg# $write_libobj - a libtool object file
14537821949aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454de2362d3Smrg#
1455de2362d3Smrg# Please DO NOT delete this file!
1456de2362d3Smrg# It is necessary for linking the library.
1457de2362d3Smrg
1458de2362d3Smrg# Name of the PIC object.
1459de2362d3Smrgpic_object=$write_lobj
1460de2362d3Smrg
1461de2362d3Smrg# Name of the non-PIC object
1462de2362d3Smrgnon_pic_object=$write_oldobj
1463de2362d3Smrg
1464de2362d3SmrgEOF
14657821949aSmrg      $MV "${write_libobj}T" "${write_libobj}"
1466de2362d3Smrg    }
1467de2362d3Smrg}
1468de2362d3Smrg
1469de2362d3Smrg
1470de2362d3Smrg##################################################
1471de2362d3Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1472de2362d3Smrg##################################################
1473de2362d3Smrg
1474de2362d3Smrg# func_convert_core_file_wine_to_w32 ARG
1475de2362d3Smrg# Helper function used by file name conversion functions when $build is *nix,
1476de2362d3Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1477de2362d3Smrg# correctly configured wine environment available, with the winepath program
1478de2362d3Smrg# in $build's $PATH.
1479de2362d3Smrg#
1480de2362d3Smrg# ARG is the $build file name to be converted to w32 format.
1481de2362d3Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1482de2362d3Smrg# be empty on error (or when ARG is empty)
1483de2362d3Smrgfunc_convert_core_file_wine_to_w32 ()
1484de2362d3Smrg{
14857821949aSmrg  $opt_debug
14867821949aSmrg  func_convert_core_file_wine_to_w32_result="$1"
1487de2362d3Smrg  if test -n "$1"; then
1488de2362d3Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
1489de2362d3Smrg    # are forced to check the contents of stdout. On the other hand, if the
1490de2362d3Smrg    # command is not found, the shell will set an exit code of 127 and print
1491de2362d3Smrg    # *an error message* to stdout. So we must check for both error code of
1492de2362d3Smrg    # zero AND non-empty stdout, which explains the odd construction:
1493de2362d3Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
14947821949aSmrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1495de2362d3Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
14967821949aSmrg        $SED -e "$lt_sed_naive_backslashify"`
1497de2362d3Smrg    else
1498de2362d3Smrg      func_convert_core_file_wine_to_w32_result=
1499de2362d3Smrg    fi
1500de2362d3Smrg  fi
1501de2362d3Smrg}
1502de2362d3Smrg# end: func_convert_core_file_wine_to_w32
1503de2362d3Smrg
1504de2362d3Smrg
1505de2362d3Smrg# func_convert_core_path_wine_to_w32 ARG
1506de2362d3Smrg# Helper function used by path conversion functions when $build is *nix, and
1507de2362d3Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1508de2362d3Smrg# configured wine environment available, with the winepath program in $build's
1509de2362d3Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
1510de2362d3Smrg#
1511de2362d3Smrg# ARG is path to be converted from $build format to win32.
1512de2362d3Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
1513de2362d3Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
1514de2362d3Smrg# are convertible, then the result may be empty.
1515de2362d3Smrgfunc_convert_core_path_wine_to_w32 ()
1516de2362d3Smrg{
15177821949aSmrg  $opt_debug
1518de2362d3Smrg  # unfortunately, winepath doesn't convert paths, only file names
15197821949aSmrg  func_convert_core_path_wine_to_w32_result=""
1520de2362d3Smrg  if test -n "$1"; then
1521de2362d3Smrg    oldIFS=$IFS
1522de2362d3Smrg    IFS=:
1523de2362d3Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
1524de2362d3Smrg      IFS=$oldIFS
1525de2362d3Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
15267821949aSmrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1527de2362d3Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
15287821949aSmrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1529de2362d3Smrg        else
1530de2362d3Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1531de2362d3Smrg        fi
1532de2362d3Smrg      fi
1533de2362d3Smrg    done
1534de2362d3Smrg    IFS=$oldIFS
1535de2362d3Smrg  fi
1536de2362d3Smrg}
1537de2362d3Smrg# end: func_convert_core_path_wine_to_w32
1538de2362d3Smrg
1539de2362d3Smrg
1540de2362d3Smrg# func_cygpath ARGS...
1541de2362d3Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1542de2362d3Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1543de2362d3Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1544de2362d3Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
1545de2362d3Smrg# file name or path is assumed to be in w32 format, as previously converted
1546de2362d3Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1547de2362d3Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
1548de2362d3Smrg# Cygwin format). Returns an empty string on error.
1549de2362d3Smrg#
1550de2362d3Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
1551de2362d3Smrg# be converted.
1552de2362d3Smrg#
1553de2362d3Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1554de2362d3Smrg# environment variable; do not put it in $PATH.
1555de2362d3Smrgfunc_cygpath ()
1556de2362d3Smrg{
15577821949aSmrg  $opt_debug
1558de2362d3Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1559de2362d3Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1560de2362d3Smrg    if test "$?" -ne 0; then
1561de2362d3Smrg      # on failure, ensure result is empty
1562de2362d3Smrg      func_cygpath_result=
1563de2362d3Smrg    fi
1564de2362d3Smrg  else
1565de2362d3Smrg    func_cygpath_result=
15667821949aSmrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1567de2362d3Smrg  fi
1568de2362d3Smrg}
1569de2362d3Smrg#end: func_cygpath
1570de2362d3Smrg
1571de2362d3Smrg
1572de2362d3Smrg# func_convert_core_msys_to_w32 ARG
1573de2362d3Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
1574de2362d3Smrg# result in func_convert_core_msys_to_w32_result.
1575de2362d3Smrgfunc_convert_core_msys_to_w32 ()
1576de2362d3Smrg{
15777821949aSmrg  $opt_debug
1578de2362d3Smrg  # awkward: cmd appends spaces to result
1579de2362d3Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
15807821949aSmrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1581de2362d3Smrg}
1582de2362d3Smrg#end: func_convert_core_msys_to_w32
1583de2362d3Smrg
1584de2362d3Smrg
1585de2362d3Smrg# func_convert_file_check ARG1 ARG2
1586de2362d3Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
1587de2362d3Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
1588de2362d3Smrg# func_to_host_file_result to ARG1).
1589de2362d3Smrgfunc_convert_file_check ()
1590de2362d3Smrg{
15917821949aSmrg  $opt_debug
15927821949aSmrg  if test -z "$2" && test -n "$1" ; then
1593de2362d3Smrg    func_error "Could not determine host file name corresponding to"
15947821949aSmrg    func_error "  \`$1'"
1595de2362d3Smrg    func_error "Continuing, but uninstalled executables may not work."
1596de2362d3Smrg    # Fallback:
15977821949aSmrg    func_to_host_file_result="$1"
1598de2362d3Smrg  fi
1599de2362d3Smrg}
1600de2362d3Smrg# end func_convert_file_check
1601de2362d3Smrg
1602de2362d3Smrg
1603de2362d3Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1604de2362d3Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
1605de2362d3Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1606de2362d3Smrg# func_to_host_file_result to a simplistic fallback value (see below).
1607de2362d3Smrgfunc_convert_path_check ()
1608de2362d3Smrg{
16097821949aSmrg  $opt_debug
1610de2362d3Smrg  if test -z "$4" && test -n "$3"; then
1611de2362d3Smrg    func_error "Could not determine the host path corresponding to"
16127821949aSmrg    func_error "  \`$3'"
1613de2362d3Smrg    func_error "Continuing, but uninstalled executables may not work."
1614de2362d3Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
1615de2362d3Smrg    # should not be "improved".  See libtool.info.
1616de2362d3Smrg    if test "x$1" != "x$2"; then
1617de2362d3Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
1618de2362d3Smrg      func_to_host_path_result=`echo "$3" |
1619de2362d3Smrg        $SED -e "$lt_replace_pathsep_chars"`
1620de2362d3Smrg    else
16217821949aSmrg      func_to_host_path_result="$3"
1622de2362d3Smrg    fi
1623de2362d3Smrg  fi
1624de2362d3Smrg}
1625de2362d3Smrg# end func_convert_path_check
1626de2362d3Smrg
1627de2362d3Smrg
1628de2362d3Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1629de2362d3Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1630de2362d3Smrg# and appending REPL if ORIG matches BACKPAT.
1631de2362d3Smrgfunc_convert_path_front_back_pathsep ()
1632de2362d3Smrg{
16337821949aSmrg  $opt_debug
1634de2362d3Smrg  case $4 in
16357821949aSmrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1636de2362d3Smrg    ;;
1637de2362d3Smrg  esac
1638de2362d3Smrg  case $4 in
1639de2362d3Smrg  $2 ) func_append func_to_host_path_result "$3"
1640de2362d3Smrg    ;;
1641de2362d3Smrg  esac
1642de2362d3Smrg}
1643de2362d3Smrg# end func_convert_path_front_back_pathsep
1644de2362d3Smrg
1645de2362d3Smrg
1646de2362d3Smrg##################################################
1647de2362d3Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
1648de2362d3Smrg##################################################
16497821949aSmrg# invoked via `$to_host_file_cmd ARG'
1650de2362d3Smrg#
1651de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format.
1652de2362d3Smrg# Result will be available in $func_to_host_file_result.
1653de2362d3Smrg
1654de2362d3Smrg
1655de2362d3Smrg# func_to_host_file ARG
1656de2362d3Smrg# Converts the file name ARG from $build format to $host format. Return result
1657de2362d3Smrg# in func_to_host_file_result.
1658de2362d3Smrgfunc_to_host_file ()
1659de2362d3Smrg{
16607821949aSmrg  $opt_debug
1661de2362d3Smrg  $to_host_file_cmd "$1"
1662de2362d3Smrg}
1663de2362d3Smrg# end func_to_host_file
1664de2362d3Smrg
1665de2362d3Smrg
1666de2362d3Smrg# func_to_tool_file ARG LAZY
1667de2362d3Smrg# converts the file name ARG from $build format to toolchain format. Return
1668de2362d3Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
1669de2362d3Smrg# in (the comma separated) LAZY, no conversion takes place.
1670de2362d3Smrgfunc_to_tool_file ()
1671de2362d3Smrg{
16727821949aSmrg  $opt_debug
1673de2362d3Smrg  case ,$2, in
1674de2362d3Smrg    *,"$to_tool_file_cmd",*)
1675de2362d3Smrg      func_to_tool_file_result=$1
1676de2362d3Smrg      ;;
1677de2362d3Smrg    *)
1678de2362d3Smrg      $to_tool_file_cmd "$1"
1679de2362d3Smrg      func_to_tool_file_result=$func_to_host_file_result
1680de2362d3Smrg      ;;
1681de2362d3Smrg  esac
1682de2362d3Smrg}
1683de2362d3Smrg# end func_to_tool_file
1684de2362d3Smrg
1685de2362d3Smrg
1686de2362d3Smrg# func_convert_file_noop ARG
1687de2362d3Smrg# Copy ARG to func_to_host_file_result.
1688de2362d3Smrgfunc_convert_file_noop ()
1689de2362d3Smrg{
16907821949aSmrg  func_to_host_file_result="$1"
1691de2362d3Smrg}
1692de2362d3Smrg# end func_convert_file_noop
1693de2362d3Smrg
1694de2362d3Smrg
1695de2362d3Smrg# func_convert_file_msys_to_w32 ARG
1696de2362d3Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1697de2362d3Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1698de2362d3Smrg# func_to_host_file_result.
1699de2362d3Smrgfunc_convert_file_msys_to_w32 ()
1700de2362d3Smrg{
17017821949aSmrg  $opt_debug
17027821949aSmrg  func_to_host_file_result="$1"
1703de2362d3Smrg  if test -n "$1"; then
1704de2362d3Smrg    func_convert_core_msys_to_w32 "$1"
17057821949aSmrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1706de2362d3Smrg  fi
1707de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1708de2362d3Smrg}
1709de2362d3Smrg# end func_convert_file_msys_to_w32
1710de2362d3Smrg
1711de2362d3Smrg
1712de2362d3Smrg# func_convert_file_cygwin_to_w32 ARG
1713de2362d3Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
1714de2362d3Smrg# func_to_host_file_result.
1715de2362d3Smrgfunc_convert_file_cygwin_to_w32 ()
1716de2362d3Smrg{
17177821949aSmrg  $opt_debug
17187821949aSmrg  func_to_host_file_result="$1"
1719de2362d3Smrg  if test -n "$1"; then
1720de2362d3Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1721de2362d3Smrg    # LT_CYGPATH in this case.
1722de2362d3Smrg    func_to_host_file_result=`cygpath -m "$1"`
1723de2362d3Smrg  fi
1724de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1725de2362d3Smrg}
1726de2362d3Smrg# end func_convert_file_cygwin_to_w32
1727de2362d3Smrg
1728de2362d3Smrg
1729de2362d3Smrg# func_convert_file_nix_to_w32 ARG
1730de2362d3Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1731de2362d3Smrg# and a working winepath. Returns result in func_to_host_file_result.
1732de2362d3Smrgfunc_convert_file_nix_to_w32 ()
1733de2362d3Smrg{
17347821949aSmrg  $opt_debug
17357821949aSmrg  func_to_host_file_result="$1"
1736de2362d3Smrg  if test -n "$1"; then
1737de2362d3Smrg    func_convert_core_file_wine_to_w32 "$1"
17387821949aSmrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1739de2362d3Smrg  fi
1740de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1741de2362d3Smrg}
1742de2362d3Smrg# end func_convert_file_nix_to_w32
1743de2362d3Smrg
1744de2362d3Smrg
1745de2362d3Smrg# func_convert_file_msys_to_cygwin ARG
1746de2362d3Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1747de2362d3Smrg# Returns result in func_to_host_file_result.
1748de2362d3Smrgfunc_convert_file_msys_to_cygwin ()
1749de2362d3Smrg{
17507821949aSmrg  $opt_debug
17517821949aSmrg  func_to_host_file_result="$1"
1752de2362d3Smrg  if test -n "$1"; then
1753de2362d3Smrg    func_convert_core_msys_to_w32 "$1"
1754de2362d3Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
17557821949aSmrg    func_to_host_file_result="$func_cygpath_result"
1756de2362d3Smrg  fi
1757de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1758de2362d3Smrg}
1759de2362d3Smrg# end func_convert_file_msys_to_cygwin
1760de2362d3Smrg
1761de2362d3Smrg
1762de2362d3Smrg# func_convert_file_nix_to_cygwin ARG
1763de2362d3Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1764de2362d3Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1765de2362d3Smrg# in func_to_host_file_result.
1766de2362d3Smrgfunc_convert_file_nix_to_cygwin ()
1767de2362d3Smrg{
17687821949aSmrg  $opt_debug
17697821949aSmrg  func_to_host_file_result="$1"
1770de2362d3Smrg  if test -n "$1"; then
1771de2362d3Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1772de2362d3Smrg    func_convert_core_file_wine_to_w32 "$1"
1773de2362d3Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
17747821949aSmrg    func_to_host_file_result="$func_cygpath_result"
1775de2362d3Smrg  fi
1776de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1777de2362d3Smrg}
1778de2362d3Smrg# end func_convert_file_nix_to_cygwin
1779de2362d3Smrg
1780de2362d3Smrg
1781de2362d3Smrg#############################################
1782de2362d3Smrg# $build to $host PATH CONVERSION FUNCTIONS #
1783de2362d3Smrg#############################################
17847821949aSmrg# invoked via `$to_host_path_cmd ARG'
1785de2362d3Smrg#
1786de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format.
1787de2362d3Smrg# The result will be available in $func_to_host_path_result.
1788de2362d3Smrg#
1789de2362d3Smrg# Path separators are also converted from $build format to $host format.  If
1790de2362d3Smrg# ARG begins or ends with a path separator character, it is preserved (but
1791de2362d3Smrg# converted to $host format) on output.
1792de2362d3Smrg#
1793de2362d3Smrg# All path conversion functions are named using the following convention:
1794de2362d3Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
1795de2362d3Smrg#   path conversion function         : func_convert_path_X_to_Y ()
1796de2362d3Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
1797de2362d3Smrg# same.  If conversion functions are added for new $build/$host combinations,
1798de2362d3Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1799de2362d3Smrg# will break.
1800de2362d3Smrg
1801de2362d3Smrg
1802de2362d3Smrg# func_init_to_host_path_cmd
1803de2362d3Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1804de2362d3Smrg# appropriate value, based on the value of $to_host_file_cmd.
1805de2362d3Smrgto_host_path_cmd=
1806de2362d3Smrgfunc_init_to_host_path_cmd ()
1807de2362d3Smrg{
18087821949aSmrg  $opt_debug
1809de2362d3Smrg  if test -z "$to_host_path_cmd"; then
1810de2362d3Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
18117821949aSmrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1812de2362d3Smrg  fi
1813de2362d3Smrg}
1814de2362d3Smrg
1815de2362d3Smrg
1816de2362d3Smrg# func_to_host_path ARG
1817de2362d3Smrg# Converts the path ARG from $build format to $host format. Return result
1818de2362d3Smrg# in func_to_host_path_result.
1819de2362d3Smrgfunc_to_host_path ()
1820de2362d3Smrg{
18217821949aSmrg  $opt_debug
1822de2362d3Smrg  func_init_to_host_path_cmd
1823de2362d3Smrg  $to_host_path_cmd "$1"
1824de2362d3Smrg}
1825de2362d3Smrg# end func_to_host_path
1826de2362d3Smrg
1827de2362d3Smrg
1828de2362d3Smrg# func_convert_path_noop ARG
1829de2362d3Smrg# Copy ARG to func_to_host_path_result.
1830de2362d3Smrgfunc_convert_path_noop ()
1831de2362d3Smrg{
18327821949aSmrg  func_to_host_path_result="$1"
1833de2362d3Smrg}
1834de2362d3Smrg# end func_convert_path_noop
1835de2362d3Smrg
1836de2362d3Smrg
1837de2362d3Smrg# func_convert_path_msys_to_w32 ARG
1838de2362d3Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1839de2362d3Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1840de2362d3Smrg# func_to_host_path_result.
1841de2362d3Smrgfunc_convert_path_msys_to_w32 ()
1842de2362d3Smrg{
18437821949aSmrg  $opt_debug
18447821949aSmrg  func_to_host_path_result="$1"
1845de2362d3Smrg  if test -n "$1"; then
1846de2362d3Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
1847de2362d3Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1848de2362d3Smrg    # and winepath ignores them completely.
1849de2362d3Smrg    func_stripname : : "$1"
1850de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
1851de2362d3Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
18527821949aSmrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1853de2362d3Smrg    func_convert_path_check : ";" \
1854de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1855de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1856de2362d3Smrg  fi
1857de2362d3Smrg}
1858de2362d3Smrg# end func_convert_path_msys_to_w32
1859de2362d3Smrg
1860de2362d3Smrg
1861de2362d3Smrg# func_convert_path_cygwin_to_w32 ARG
1862de2362d3Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
1863de2362d3Smrg# func_to_host_file_result.
1864de2362d3Smrgfunc_convert_path_cygwin_to_w32 ()
1865de2362d3Smrg{
18667821949aSmrg  $opt_debug
18677821949aSmrg  func_to_host_path_result="$1"
1868de2362d3Smrg  if test -n "$1"; then
1869de2362d3Smrg    # See func_convert_path_msys_to_w32:
1870de2362d3Smrg    func_stripname : : "$1"
1871de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
1872de2362d3Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1873de2362d3Smrg    func_convert_path_check : ";" \
1874de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1875de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1876de2362d3Smrg  fi
1877de2362d3Smrg}
1878de2362d3Smrg# end func_convert_path_cygwin_to_w32
1879de2362d3Smrg
1880de2362d3Smrg
1881de2362d3Smrg# func_convert_path_nix_to_w32 ARG
1882de2362d3Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1883de2362d3Smrg# a working winepath.  Returns result in func_to_host_file_result.
1884de2362d3Smrgfunc_convert_path_nix_to_w32 ()
1885de2362d3Smrg{
18867821949aSmrg  $opt_debug
18877821949aSmrg  func_to_host_path_result="$1"
1888de2362d3Smrg  if test -n "$1"; then
1889de2362d3Smrg    # See func_convert_path_msys_to_w32:
1890de2362d3Smrg    func_stripname : : "$1"
1891de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
1892de2362d3Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
18937821949aSmrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1894de2362d3Smrg    func_convert_path_check : ";" \
1895de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1896de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1897de2362d3Smrg  fi
1898de2362d3Smrg}
1899de2362d3Smrg# end func_convert_path_nix_to_w32
1900de2362d3Smrg
1901de2362d3Smrg
1902de2362d3Smrg# func_convert_path_msys_to_cygwin ARG
1903de2362d3Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1904de2362d3Smrg# Returns result in func_to_host_file_result.
1905de2362d3Smrgfunc_convert_path_msys_to_cygwin ()
1906de2362d3Smrg{
19077821949aSmrg  $opt_debug
19087821949aSmrg  func_to_host_path_result="$1"
1909de2362d3Smrg  if test -n "$1"; then
1910de2362d3Smrg    # See func_convert_path_msys_to_w32:
1911de2362d3Smrg    func_stripname : : "$1"
1912de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
1913de2362d3Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1914de2362d3Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
19157821949aSmrg    func_to_host_path_result="$func_cygpath_result"
1916de2362d3Smrg    func_convert_path_check : : \
1917de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1918de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1919de2362d3Smrg  fi
1920de2362d3Smrg}
1921de2362d3Smrg# end func_convert_path_msys_to_cygwin
1922de2362d3Smrg
1923de2362d3Smrg
1924de2362d3Smrg# func_convert_path_nix_to_cygwin ARG
1925de2362d3Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1926de2362d3Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1927de2362d3Smrg# func_to_host_file_result.
1928de2362d3Smrgfunc_convert_path_nix_to_cygwin ()
1929de2362d3Smrg{
19307821949aSmrg  $opt_debug
19317821949aSmrg  func_to_host_path_result="$1"
1932de2362d3Smrg  if test -n "$1"; then
1933de2362d3Smrg    # Remove leading and trailing path separator characters from
1934de2362d3Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
1935de2362d3Smrg    # into '.;' and ';.', and winepath ignores them completely.
1936de2362d3Smrg    func_stripname : : "$1"
1937de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
1938de2362d3Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1939de2362d3Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
19407821949aSmrg    func_to_host_path_result="$func_cygpath_result"
1941de2362d3Smrg    func_convert_path_check : : \
1942de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1943de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1944de2362d3Smrg  fi
1945de2362d3Smrg}
1946de2362d3Smrg# end func_convert_path_nix_to_cygwin
1947de2362d3Smrg
1948de2362d3Smrg
1949de2362d3Smrg# func_mode_compile arg...
1950de2362d3Smrgfunc_mode_compile ()
1951de2362d3Smrg{
19527821949aSmrg    $opt_debug
1953de2362d3Smrg    # Get the compilation command and the source file.
1954de2362d3Smrg    base_compile=
19557821949aSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956de2362d3Smrg    suppress_opt=yes
1957de2362d3Smrg    suppress_output=
1958de2362d3Smrg    arg_mode=normal
1959de2362d3Smrg    libobj=
1960de2362d3Smrg    later=
1961de2362d3Smrg    pie_flag=
1962de2362d3Smrg
1963de2362d3Smrg    for arg
1964de2362d3Smrg    do
1965de2362d3Smrg      case $arg_mode in
1966de2362d3Smrg      arg  )
1967de2362d3Smrg	# do not "continue".  Instead, add this to base_compile
19687821949aSmrg	lastarg="$arg"
1969de2362d3Smrg	arg_mode=normal
1970de2362d3Smrg	;;
1971de2362d3Smrg
1972de2362d3Smrg      target )
19737821949aSmrg	libobj="$arg"
1974de2362d3Smrg	arg_mode=normal
1975de2362d3Smrg	continue
1976de2362d3Smrg	;;
1977de2362d3Smrg
1978de2362d3Smrg      normal )
1979de2362d3Smrg	# Accept any command-line options.
1980de2362d3Smrg	case $arg in
1981de2362d3Smrg	-o)
1982de2362d3Smrg	  test -n "$libobj" && \
19837821949aSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984de2362d3Smrg	  arg_mode=target
1985de2362d3Smrg	  continue
1986de2362d3Smrg	  ;;
1987de2362d3Smrg
1988de2362d3Smrg	-pie | -fpie | -fPIE)
1989de2362d3Smrg          func_append pie_flag " $arg"
1990de2362d3Smrg	  continue
1991de2362d3Smrg	  ;;
1992de2362d3Smrg
1993de2362d3Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1994de2362d3Smrg	  func_append later " $arg"
1995de2362d3Smrg	  continue
1996de2362d3Smrg	  ;;
1997de2362d3Smrg
1998de2362d3Smrg	-no-suppress)
1999de2362d3Smrg	  suppress_opt=no
2000de2362d3Smrg	  continue
2001de2362d3Smrg	  ;;
2002de2362d3Smrg
2003de2362d3Smrg	-Xcompiler)
2004de2362d3Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005de2362d3Smrg	  continue      #  The current "srcfile" will either be retained or
2006de2362d3Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007de2362d3Smrg
2008de2362d3Smrg	-Wc,*)
2009de2362d3Smrg	  func_stripname '-Wc,' '' "$arg"
2010de2362d3Smrg	  args=$func_stripname_result
2011de2362d3Smrg	  lastarg=
20127821949aSmrg	  save_ifs="$IFS"; IFS=','
2013de2362d3Smrg	  for arg in $args; do
20147821949aSmrg	    IFS="$save_ifs"
2015de2362d3Smrg	    func_append_quoted lastarg "$arg"
2016de2362d3Smrg	  done
20177821949aSmrg	  IFS="$save_ifs"
2018de2362d3Smrg	  func_stripname ' ' '' "$lastarg"
2019de2362d3Smrg	  lastarg=$func_stripname_result
2020de2362d3Smrg
2021de2362d3Smrg	  # Add the arguments to base_compile.
2022de2362d3Smrg	  func_append base_compile " $lastarg"
2023de2362d3Smrg	  continue
2024de2362d3Smrg	  ;;
2025de2362d3Smrg
2026de2362d3Smrg	*)
2027de2362d3Smrg	  # Accept the current argument as the source file.
2028de2362d3Smrg	  # The previous "srcfile" becomes the current argument.
2029de2362d3Smrg	  #
20307821949aSmrg	  lastarg="$srcfile"
20317821949aSmrg	  srcfile="$arg"
2032de2362d3Smrg	  ;;
2033de2362d3Smrg	esac  #  case $arg
2034de2362d3Smrg	;;
2035de2362d3Smrg      esac    #  case $arg_mode
2036de2362d3Smrg
2037de2362d3Smrg      # Aesthetically quote the previous argument.
2038de2362d3Smrg      func_append_quoted base_compile "$lastarg"
2039de2362d3Smrg    done # for arg
2040de2362d3Smrg
2041de2362d3Smrg    case $arg_mode in
2042de2362d3Smrg    arg)
2043de2362d3Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2044de2362d3Smrg      ;;
2045de2362d3Smrg    target)
20467821949aSmrg      func_fatal_error "you must specify a target with \`-o'"
2047de2362d3Smrg      ;;
2048de2362d3Smrg    *)
2049de2362d3Smrg      # Get the name of the library object.
2050de2362d3Smrg      test -z "$libobj" && {
2051de2362d3Smrg	func_basename "$srcfile"
20527821949aSmrg	libobj="$func_basename_result"
2053de2362d3Smrg      }
2054de2362d3Smrg      ;;
2055de2362d3Smrg    esac
2056de2362d3Smrg
2057de2362d3Smrg    # Recognize several different file suffixes.
2058de2362d3Smrg    # If the user specifies -o file.o, it is replaced with file.lo
2059de2362d3Smrg    case $libobj in
2060de2362d3Smrg    *.[cCFSifmso] | \
2061de2362d3Smrg    *.ada | *.adb | *.ads | *.asm | \
2062de2362d3Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063de2362d3Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064de2362d3Smrg      func_xform "$libobj"
2065de2362d3Smrg      libobj=$func_xform_result
2066de2362d3Smrg      ;;
2067de2362d3Smrg    esac
2068de2362d3Smrg
2069de2362d3Smrg    case $libobj in
2070de2362d3Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071de2362d3Smrg    *)
20727821949aSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073de2362d3Smrg      ;;
2074de2362d3Smrg    esac
2075de2362d3Smrg
2076de2362d3Smrg    func_infer_tag $base_compile
2077de2362d3Smrg
2078de2362d3Smrg    for arg in $later; do
2079de2362d3Smrg      case $arg in
2080de2362d3Smrg      -shared)
20817821949aSmrg	test "$build_libtool_libs" != yes && \
20827821949aSmrg	  func_fatal_configuration "can not build a shared library"
2083de2362d3Smrg	build_old_libs=no
2084de2362d3Smrg	continue
2085de2362d3Smrg	;;
2086de2362d3Smrg
2087de2362d3Smrg      -static)
2088de2362d3Smrg	build_libtool_libs=no
2089de2362d3Smrg	build_old_libs=yes
2090de2362d3Smrg	continue
2091de2362d3Smrg	;;
2092de2362d3Smrg
2093de2362d3Smrg      -prefer-pic)
2094de2362d3Smrg	pic_mode=yes
2095de2362d3Smrg	continue
2096de2362d3Smrg	;;
2097de2362d3Smrg
2098de2362d3Smrg      -prefer-non-pic)
2099de2362d3Smrg	pic_mode=no
2100de2362d3Smrg	continue
2101de2362d3Smrg	;;
2102de2362d3Smrg      esac
2103de2362d3Smrg    done
2104de2362d3Smrg
2105de2362d3Smrg    func_quote_for_eval "$libobj"
2106de2362d3Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107de2362d3Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
21087821949aSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109de2362d3Smrg    func_dirname_and_basename "$obj" "/" ""
21107821949aSmrg    objname="$func_basename_result"
21117821949aSmrg    xdir="$func_dirname_result"
21127821949aSmrg    lobj=${xdir}$objdir/$objname
2113de2362d3Smrg
2114de2362d3Smrg    test -z "$base_compile" && \
2115de2362d3Smrg      func_fatal_help "you must specify a compilation command"
2116de2362d3Smrg
2117de2362d3Smrg    # Delete any leftover library objects.
21187821949aSmrg    if test "$build_old_libs" = yes; then
2119de2362d3Smrg      removelist="$obj $lobj $libobj ${libobj}T"
2120de2362d3Smrg    else
2121de2362d3Smrg      removelist="$lobj $libobj ${libobj}T"
2122de2362d3Smrg    fi
2123de2362d3Smrg
2124de2362d3Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2125de2362d3Smrg    case $host_os in
2126de2362d3Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127de2362d3Smrg      pic_mode=default
2128de2362d3Smrg      ;;
2129de2362d3Smrg    esac
21307821949aSmrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131de2362d3Smrg      # non-PIC code in shared libraries is not supported
2132de2362d3Smrg      pic_mode=default
2133de2362d3Smrg    fi
2134de2362d3Smrg
2135de2362d3Smrg    # Calculate the filename of the output object if compiler does
2136de2362d3Smrg    # not support -o with -c
21377821949aSmrg    if test "$compiler_c_o" = no; then
21387821949aSmrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
21397821949aSmrg      lockfile="$output_obj.lock"
2140de2362d3Smrg    else
2141de2362d3Smrg      output_obj=
2142de2362d3Smrg      need_locks=no
2143de2362d3Smrg      lockfile=
2144de2362d3Smrg    fi
2145de2362d3Smrg
2146de2362d3Smrg    # Lock this critical section if it is needed
2147de2362d3Smrg    # We use this script file to make the link, it avoids creating a new file
21487821949aSmrg    if test "$need_locks" = yes; then
2149de2362d3Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150de2362d3Smrg	func_echo "Waiting for $lockfile to be removed"
2151de2362d3Smrg	sleep 2
2152de2362d3Smrg      done
21537821949aSmrg    elif test "$need_locks" = warn; then
2154de2362d3Smrg      if test -f "$lockfile"; then
2155de2362d3Smrg	$ECHO "\
2156de2362d3Smrg*** ERROR, $lockfile exists and contains:
2157de2362d3Smrg`cat $lockfile 2>/dev/null`
2158de2362d3Smrg
2159de2362d3SmrgThis indicates that another process is trying to use the same
2160de2362d3Smrgtemporary object file, and libtool could not work around it because
21617821949aSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2162de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
2163de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better
2164de2362d3Smrgcompiler."
2165de2362d3Smrg
2166de2362d3Smrg	$opt_dry_run || $RM $removelist
2167de2362d3Smrg	exit $EXIT_FAILURE
2168de2362d3Smrg      fi
2169de2362d3Smrg      func_append removelist " $output_obj"
2170de2362d3Smrg      $ECHO "$srcfile" > "$lockfile"
2171de2362d3Smrg    fi
2172de2362d3Smrg
2173de2362d3Smrg    $opt_dry_run || $RM $removelist
2174de2362d3Smrg    func_append removelist " $lockfile"
2175de2362d3Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176de2362d3Smrg
2177de2362d3Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2178de2362d3Smrg    srcfile=$func_to_tool_file_result
2179de2362d3Smrg    func_quote_for_eval "$srcfile"
2180de2362d3Smrg    qsrcfile=$func_quote_for_eval_result
2181de2362d3Smrg
2182de2362d3Smrg    # Only build a PIC object if we are building libtool libraries.
21837821949aSmrg    if test "$build_libtool_libs" = yes; then
2184de2362d3Smrg      # Without this assignment, base_compile gets emptied.
2185de2362d3Smrg      fbsd_hideous_sh_bug=$base_compile
2186de2362d3Smrg
21877821949aSmrg      if test "$pic_mode" != no; then
2188de2362d3Smrg	command="$base_compile $qsrcfile $pic_flag"
2189de2362d3Smrg      else
2190de2362d3Smrg	# Don't build PIC code
2191de2362d3Smrg	command="$base_compile $qsrcfile"
2192de2362d3Smrg      fi
2193de2362d3Smrg
2194de2362d3Smrg      func_mkdir_p "$xdir$objdir"
2195de2362d3Smrg
2196de2362d3Smrg      if test -z "$output_obj"; then
2197de2362d3Smrg	# Place PIC objects in $objdir
2198de2362d3Smrg	func_append command " -o $lobj"
2199de2362d3Smrg      fi
2200de2362d3Smrg
2201de2362d3Smrg      func_show_eval_locale "$command"	\
2202de2362d3Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203de2362d3Smrg
22047821949aSmrg      if test "$need_locks" = warn &&
2205de2362d3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206de2362d3Smrg	$ECHO "\
2207de2362d3Smrg*** ERROR, $lockfile contains:
2208de2362d3Smrg`cat $lockfile 2>/dev/null`
2209de2362d3Smrg
2210de2362d3Smrgbut it should contain:
2211de2362d3Smrg$srcfile
2212de2362d3Smrg
2213de2362d3SmrgThis indicates that another process is trying to use the same
2214de2362d3Smrgtemporary object file, and libtool could not work around it because
22157821949aSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2216de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
2217de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better
2218de2362d3Smrgcompiler."
2219de2362d3Smrg
2220de2362d3Smrg	$opt_dry_run || $RM $removelist
2221de2362d3Smrg	exit $EXIT_FAILURE
2222de2362d3Smrg      fi
2223de2362d3Smrg
2224de2362d3Smrg      # Just move the object if needed, then go on to compile the next one
2225de2362d3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226de2362d3Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227de2362d3Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228de2362d3Smrg      fi
2229de2362d3Smrg
2230de2362d3Smrg      # Allow error messages only from the first compilation.
22317821949aSmrg      if test "$suppress_opt" = yes; then
2232de2362d3Smrg	suppress_output=' >/dev/null 2>&1'
2233de2362d3Smrg      fi
2234de2362d3Smrg    fi
2235de2362d3Smrg
2236de2362d3Smrg    # Only build a position-dependent object if we build old libraries.
22377821949aSmrg    if test "$build_old_libs" = yes; then
22387821949aSmrg      if test "$pic_mode" != yes; then
2239de2362d3Smrg	# Don't build PIC code
2240de2362d3Smrg	command="$base_compile $qsrcfile$pie_flag"
2241de2362d3Smrg      else
2242de2362d3Smrg	command="$base_compile $qsrcfile $pic_flag"
2243de2362d3Smrg      fi
22447821949aSmrg      if test "$compiler_c_o" = yes; then
2245de2362d3Smrg	func_append command " -o $obj"
2246de2362d3Smrg      fi
2247de2362d3Smrg
2248de2362d3Smrg      # Suppress compiler output if we already did a PIC compilation.
2249de2362d3Smrg      func_append command "$suppress_output"
2250de2362d3Smrg      func_show_eval_locale "$command" \
2251de2362d3Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252de2362d3Smrg
22537821949aSmrg      if test "$need_locks" = warn &&
2254de2362d3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255de2362d3Smrg	$ECHO "\
2256de2362d3Smrg*** ERROR, $lockfile contains:
2257de2362d3Smrg`cat $lockfile 2>/dev/null`
2258de2362d3Smrg
2259de2362d3Smrgbut it should contain:
2260de2362d3Smrg$srcfile
2261de2362d3Smrg
2262de2362d3SmrgThis indicates that another process is trying to use the same
2263de2362d3Smrgtemporary object file, and libtool could not work around it because
22647821949aSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2265de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
2266de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better
2267de2362d3Smrgcompiler."
2268de2362d3Smrg
2269de2362d3Smrg	$opt_dry_run || $RM $removelist
2270de2362d3Smrg	exit $EXIT_FAILURE
2271de2362d3Smrg      fi
2272de2362d3Smrg
2273de2362d3Smrg      # Just move the object if needed
2274de2362d3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275de2362d3Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276de2362d3Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277de2362d3Smrg      fi
2278de2362d3Smrg    fi
2279de2362d3Smrg
2280de2362d3Smrg    $opt_dry_run || {
2281de2362d3Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282de2362d3Smrg
2283de2362d3Smrg      # Unlock the critical section if it was locked
22847821949aSmrg      if test "$need_locks" != no; then
2285de2362d3Smrg	removelist=$lockfile
2286de2362d3Smrg        $RM "$lockfile"
2287de2362d3Smrg      fi
2288de2362d3Smrg    }
2289de2362d3Smrg
2290de2362d3Smrg    exit $EXIT_SUCCESS
2291de2362d3Smrg}
2292de2362d3Smrg
2293de2362d3Smrg$opt_help || {
22947821949aSmrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295de2362d3Smrg}
2296de2362d3Smrg
2297de2362d3Smrgfunc_mode_help ()
2298de2362d3Smrg{
2299de2362d3Smrg    # We need to display help for each of the modes.
2300de2362d3Smrg    case $opt_mode in
2301de2362d3Smrg      "")
2302de2362d3Smrg        # Generic help is extracted from the usage comments
2303de2362d3Smrg        # at the start of this file.
2304de2362d3Smrg        func_help
2305de2362d3Smrg        ;;
2306de2362d3Smrg
2307de2362d3Smrg      clean)
2308de2362d3Smrg        $ECHO \
2309de2362d3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310de2362d3Smrg
2311de2362d3SmrgRemove files from the build directory.
2312de2362d3Smrg
2313de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE
23147821949aSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315de2362d3Smrgto RM.
2316de2362d3Smrg
2317de2362d3SmrgIf FILE is a libtool library, object or program, all the files associated
2318de2362d3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319de2362d3Smrg        ;;
2320de2362d3Smrg
2321de2362d3Smrg      compile)
2322de2362d3Smrg      $ECHO \
2323de2362d3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324de2362d3Smrg
2325de2362d3SmrgCompile a source file into a libtool library object.
2326de2362d3Smrg
2327de2362d3SmrgThis mode accepts the following additional options:
2328de2362d3Smrg
2329de2362d3Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330de2362d3Smrg  -no-suppress      do not suppress compiler output for multiple passes
2331de2362d3Smrg  -prefer-pic       try to build PIC objects only
2332de2362d3Smrg  -prefer-non-pic   try to build non-PIC objects only
23337821949aSmrg  -shared           do not build a \`.o' file suitable for static linking
23347821949aSmrg  -static           only build a \`.o' file suitable for static linking
2335de2362d3Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2336de2362d3Smrg
23377821949aSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338de2362d3Smrgfrom the given SOURCEFILE.
2339de2362d3Smrg
2340de2362d3SmrgThe output file name is determined by removing the directory component from
23417821949aSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
23427821949aSmrglibrary object suffix, \`.lo'."
2343de2362d3Smrg        ;;
2344de2362d3Smrg
2345de2362d3Smrg      execute)
2346de2362d3Smrg        $ECHO \
2347de2362d3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348de2362d3Smrg
2349de2362d3SmrgAutomatically set library path, then run a program.
2350de2362d3Smrg
2351de2362d3SmrgThis mode accepts the following additional options:
2352de2362d3Smrg
2353de2362d3Smrg  -dlopen FILE      add the directory containing FILE to the library path
2354de2362d3Smrg
23557821949aSmrgThis mode sets the library path environment variable according to \`-dlopen'
2356de2362d3Smrgflags.
2357de2362d3Smrg
2358de2362d3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359de2362d3Smrginto their corresponding uninstalled binary, and any of their required library
2360de2362d3Smrgdirectories are added to the library path.
2361de2362d3Smrg
2362de2362d3SmrgThen, COMMAND is executed, with ARGS as arguments."
2363de2362d3Smrg        ;;
2364de2362d3Smrg
2365de2362d3Smrg      finish)
2366de2362d3Smrg        $ECHO \
2367de2362d3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368de2362d3Smrg
2369de2362d3SmrgComplete the installation of libtool libraries.
2370de2362d3Smrg
2371de2362d3SmrgEach LIBDIR is a directory that contains libtool libraries.
2372de2362d3Smrg
2373de2362d3SmrgThe commands that this mode executes may require superuser privileges.  Use
23747821949aSmrgthe \`--dry-run' option if you just want to see what would be executed."
2375de2362d3Smrg        ;;
2376de2362d3Smrg
2377de2362d3Smrg      install)
2378de2362d3Smrg        $ECHO \
2379de2362d3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380de2362d3Smrg
2381de2362d3SmrgInstall executables or libraries.
2382de2362d3Smrg
2383de2362d3SmrgINSTALL-COMMAND is the installation command.  The first component should be
23847821949aSmrgeither the \`install' or \`cp' program.
2385de2362d3Smrg
2386de2362d3SmrgThe following components of INSTALL-COMMAND are treated specially:
2387de2362d3Smrg
2388de2362d3Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389de2362d3Smrg
2390de2362d3SmrgThe rest of the components are interpreted as arguments to that command (only
2391de2362d3SmrgBSD-compatible install options are recognized)."
2392de2362d3Smrg        ;;
2393de2362d3Smrg
2394de2362d3Smrg      link)
2395de2362d3Smrg        $ECHO \
2396de2362d3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397de2362d3Smrg
2398de2362d3SmrgLink object files or libraries together to form another library, or to
2399de2362d3Smrgcreate an executable program.
2400de2362d3Smrg
2401de2362d3SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402de2362d3Smrga program from several object files.
2403de2362d3Smrg
2404de2362d3SmrgThe following components of LINK-COMMAND are treated specially:
2405de2362d3Smrg
2406de2362d3Smrg  -all-static       do not do any dynamic linking at all
2407de2362d3Smrg  -avoid-version    do not add a version suffix if possible
2408de2362d3Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
2409de2362d3Smrg                    libraries must be found in the PATH setting at runtime)
24107821949aSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411de2362d3Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412de2362d3Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413de2362d3Smrg  -export-symbols SYMFILE
2414de2362d3Smrg                    try to export only the symbols listed in SYMFILE
2415de2362d3Smrg  -export-symbols-regex REGEX
2416de2362d3Smrg                    try to export only the symbols matching REGEX
2417de2362d3Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2418de2362d3Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419de2362d3Smrg  -module           build a library that can dlopened
2420de2362d3Smrg  -no-fast-install  disable the fast-install mode
2421de2362d3Smrg  -no-install       link a not-installable executable
2422de2362d3Smrg  -no-undefined     declare that a library does not refer to external symbols
2423de2362d3Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
24247821949aSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425de2362d3Smrg  -precious-files-regex REGEX
2426de2362d3Smrg                    don't remove output files matching REGEX
2427de2362d3Smrg  -release RELEASE  specify package release information
2428de2362d3Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429de2362d3Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430de2362d3Smrg  -shared           only do dynamic linking of libtool libraries
2431de2362d3Smrg  -shrext SUFFIX    override the standard shared library file extension
2432de2362d3Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433de2362d3Smrg  -static-libtool-libs
2434de2362d3Smrg                    do not do any dynamic linking of libtool libraries
2435de2362d3Smrg  -version-info CURRENT[:REVISION[:AGE]]
2436de2362d3Smrg                    specify library version info [each variable defaults to 0]
2437de2362d3Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
2438de2362d3Smrg  -Wc,FLAG
2439de2362d3Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2440de2362d3Smrg  -Wl,FLAG
2441de2362d3Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2442de2362d3Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443de2362d3Smrg
24447821949aSmrgAll other options (arguments beginning with \`-') are ignored.
2445de2362d3Smrg
24467821949aSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447de2362d3Smrgtreated as uninstalled libtool libraries, other files are standard or library
2448de2362d3Smrgobject files.
2449de2362d3Smrg
24507821949aSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
24517821949aSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452de2362d3Smrgrequired, except when creating a convenience library.
2453de2362d3Smrg
24547821949aSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
24557821949aSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2456de2362d3Smrg
24577821949aSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458de2362d3Smrgis created, otherwise an executable program is created."
2459de2362d3Smrg        ;;
2460de2362d3Smrg
2461de2362d3Smrg      uninstall)
2462de2362d3Smrg        $ECHO \
2463de2362d3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464de2362d3Smrg
2465de2362d3SmrgRemove libraries from an installation directory.
2466de2362d3Smrg
2467de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE
24687821949aSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469de2362d3Smrgto RM.
2470de2362d3Smrg
2471de2362d3SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472de2362d3SmrgOtherwise, only FILE itself is deleted using RM."
2473de2362d3Smrg        ;;
2474de2362d3Smrg
2475de2362d3Smrg      *)
24767821949aSmrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477de2362d3Smrg        ;;
2478de2362d3Smrg    esac
2479de2362d3Smrg
2480de2362d3Smrg    echo
24817821949aSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482de2362d3Smrg}
2483de2362d3Smrg
2484de2362d3Smrg# Now that we've collected a possible --mode arg, show help if necessary
2485de2362d3Smrgif $opt_help; then
24867821949aSmrg  if test "$opt_help" = :; then
2487de2362d3Smrg    func_mode_help
2488de2362d3Smrg  else
2489de2362d3Smrg    {
2490de2362d3Smrg      func_help noexit
2491de2362d3Smrg      for opt_mode in compile link execute install finish uninstall clean; do
2492de2362d3Smrg	func_mode_help
2493de2362d3Smrg      done
24947821949aSmrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2495de2362d3Smrg    {
2496de2362d3Smrg      func_help noexit
2497de2362d3Smrg      for opt_mode in compile link execute install finish uninstall clean; do
2498de2362d3Smrg	echo
2499de2362d3Smrg	func_mode_help
2500de2362d3Smrg      done
2501de2362d3Smrg    } |
25027821949aSmrg    sed '1d
2503de2362d3Smrg      /^When reporting/,/^Report/{
2504de2362d3Smrg	H
2505de2362d3Smrg	d
2506de2362d3Smrg      }
2507de2362d3Smrg      $x
2508de2362d3Smrg      /information about other modes/d
2509de2362d3Smrg      /more detailed .*MODE/d
2510de2362d3Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2511de2362d3Smrg  fi
2512de2362d3Smrg  exit $?
2513de2362d3Smrgfi
2514de2362d3Smrg
2515de2362d3Smrg
2516de2362d3Smrg# func_mode_execute arg...
2517de2362d3Smrgfunc_mode_execute ()
2518de2362d3Smrg{
25197821949aSmrg    $opt_debug
2520de2362d3Smrg    # The first argument is the command name.
25217821949aSmrg    cmd="$nonopt"
2522de2362d3Smrg    test -z "$cmd" && \
2523de2362d3Smrg      func_fatal_help "you must specify a COMMAND"
2524de2362d3Smrg
2525de2362d3Smrg    # Handle -dlopen flags immediately.
2526de2362d3Smrg    for file in $opt_dlopen; do
2527de2362d3Smrg      test -f "$file" \
25287821949aSmrg	|| func_fatal_help "\`$file' is not a file"
2529de2362d3Smrg
2530de2362d3Smrg      dir=
2531de2362d3Smrg      case $file in
2532de2362d3Smrg      *.la)
2533de2362d3Smrg	func_resolve_sysroot "$file"
2534de2362d3Smrg	file=$func_resolve_sysroot_result
2535de2362d3Smrg
2536de2362d3Smrg	# Check to see that this really is a libtool archive.
2537de2362d3Smrg	func_lalib_unsafe_p "$file" \
25387821949aSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539de2362d3Smrg
2540de2362d3Smrg	# Read the libtool library.
2541de2362d3Smrg	dlname=
2542de2362d3Smrg	library_names=
2543de2362d3Smrg	func_source "$file"
2544de2362d3Smrg
2545de2362d3Smrg	# Skip this library if it cannot be dlopened.
2546de2362d3Smrg	if test -z "$dlname"; then
2547de2362d3Smrg	  # Warn if it was a shared library.
2548de2362d3Smrg	  test -n "$library_names" && \
25497821949aSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550de2362d3Smrg	  continue
2551de2362d3Smrg	fi
2552de2362d3Smrg
2553de2362d3Smrg	func_dirname "$file" "" "."
25547821949aSmrg	dir="$func_dirname_result"
2555de2362d3Smrg
2556de2362d3Smrg	if test -f "$dir/$objdir/$dlname"; then
2557de2362d3Smrg	  func_append dir "/$objdir"
2558de2362d3Smrg	else
2559de2362d3Smrg	  if test ! -f "$dir/$dlname"; then
25607821949aSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561de2362d3Smrg	  fi
2562de2362d3Smrg	fi
2563de2362d3Smrg	;;
2564de2362d3Smrg
2565de2362d3Smrg      *.lo)
2566de2362d3Smrg	# Just add the directory containing the .lo file.
2567de2362d3Smrg	func_dirname "$file" "" "."
25687821949aSmrg	dir="$func_dirname_result"
2569de2362d3Smrg	;;
2570de2362d3Smrg
2571de2362d3Smrg      *)
25727821949aSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573de2362d3Smrg	continue
2574de2362d3Smrg	;;
2575de2362d3Smrg      esac
2576de2362d3Smrg
2577de2362d3Smrg      # Get the absolute pathname.
2578de2362d3Smrg      absdir=`cd "$dir" && pwd`
25797821949aSmrg      test -n "$absdir" && dir="$absdir"
2580de2362d3Smrg
2581de2362d3Smrg      # Now add the directory to shlibpath_var.
2582de2362d3Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2583de2362d3Smrg	eval "$shlibpath_var=\"\$dir\""
2584de2362d3Smrg      else
2585de2362d3Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586de2362d3Smrg      fi
2587de2362d3Smrg    done
2588de2362d3Smrg
2589de2362d3Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2590de2362d3Smrg    # rather than running their programs.
25917821949aSmrg    libtool_execute_magic="$magic"
2592de2362d3Smrg
2593de2362d3Smrg    # Check if any of the arguments is a wrapper script.
2594de2362d3Smrg    args=
2595de2362d3Smrg    for file
2596de2362d3Smrg    do
2597de2362d3Smrg      case $file in
2598de2362d3Smrg      -* | *.la | *.lo ) ;;
2599de2362d3Smrg      *)
2600de2362d3Smrg	# Do a test to see if this is really a libtool program.
2601de2362d3Smrg	if func_ltwrapper_script_p "$file"; then
2602de2362d3Smrg	  func_source "$file"
2603de2362d3Smrg	  # Transform arg to wrapped name.
26047821949aSmrg	  file="$progdir/$program"
2605de2362d3Smrg	elif func_ltwrapper_executable_p "$file"; then
2606de2362d3Smrg	  func_ltwrapper_scriptname "$file"
2607de2362d3Smrg	  func_source "$func_ltwrapper_scriptname_result"
2608de2362d3Smrg	  # Transform arg to wrapped name.
26097821949aSmrg	  file="$progdir/$program"
2610de2362d3Smrg	fi
2611de2362d3Smrg	;;
2612de2362d3Smrg      esac
2613de2362d3Smrg      # Quote arguments (to preserve shell metacharacters).
2614de2362d3Smrg      func_append_quoted args "$file"
2615de2362d3Smrg    done
2616de2362d3Smrg
26177821949aSmrg    if test "X$opt_dry_run" = Xfalse; then
2618de2362d3Smrg      if test -n "$shlibpath_var"; then
2619de2362d3Smrg	# Export the shlibpath_var.
2620de2362d3Smrg	eval "export $shlibpath_var"
2621de2362d3Smrg      fi
2622de2362d3Smrg
2623de2362d3Smrg      # Restore saved environment variables
2624de2362d3Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625de2362d3Smrg      do
2626de2362d3Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627de2362d3Smrg                $lt_var=\$save_$lt_var; export $lt_var
2628de2362d3Smrg	      else
2629de2362d3Smrg		$lt_unset $lt_var
2630de2362d3Smrg	      fi"
2631de2362d3Smrg      done
2632de2362d3Smrg
2633de2362d3Smrg      # Now prepare to actually exec the command.
26347821949aSmrg      exec_cmd="\$cmd$args"
26357821949aSmrg    else
26367821949aSmrg      # Display what would be done.
26377821949aSmrg      if test -n "$shlibpath_var"; then
26387821949aSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26397821949aSmrg	echo "export $shlibpath_var"
26407821949aSmrg      fi
26417821949aSmrg      $ECHO "$cmd$args"
26427821949aSmrg      exit $EXIT_SUCCESS
2643de2362d3Smrg    fi
2644de2362d3Smrg}
2645de2362d3Smrg
26467821949aSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647de2362d3Smrg
2648de2362d3Smrg
2649de2362d3Smrg# func_mode_finish arg...
2650de2362d3Smrgfunc_mode_finish ()
2651de2362d3Smrg{
26527821949aSmrg    $opt_debug
2653de2362d3Smrg    libs=
2654de2362d3Smrg    libdirs=
2655de2362d3Smrg    admincmds=
2656de2362d3Smrg
2657de2362d3Smrg    for opt in "$nonopt" ${1+"$@"}
2658de2362d3Smrg    do
2659de2362d3Smrg      if test -d "$opt"; then
2660de2362d3Smrg	func_append libdirs " $opt"
2661de2362d3Smrg
2662de2362d3Smrg      elif test -f "$opt"; then
2663de2362d3Smrg	if func_lalib_unsafe_p "$opt"; then
2664de2362d3Smrg	  func_append libs " $opt"
2665de2362d3Smrg	else
26667821949aSmrg	  func_warning "\`$opt' is not a valid libtool archive"
2667de2362d3Smrg	fi
2668de2362d3Smrg
2669de2362d3Smrg      else
26707821949aSmrg	func_fatal_error "invalid argument \`$opt'"
2671de2362d3Smrg      fi
2672de2362d3Smrg    done
2673de2362d3Smrg
2674de2362d3Smrg    if test -n "$libs"; then
2675de2362d3Smrg      if test -n "$lt_sysroot"; then
2676de2362d3Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2677de2362d3Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2678de2362d3Smrg      else
2679de2362d3Smrg        sysroot_cmd=
2680de2362d3Smrg      fi
2681de2362d3Smrg
2682de2362d3Smrg      # Remove sysroot references
2683de2362d3Smrg      if $opt_dry_run; then
2684de2362d3Smrg        for lib in $libs; do
26857821949aSmrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2686de2362d3Smrg        done
2687de2362d3Smrg      else
2688de2362d3Smrg        tmpdir=`func_mktempdir`
2689de2362d3Smrg        for lib in $libs; do
26907821949aSmrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2691de2362d3Smrg	    > $tmpdir/tmp-la
2692de2362d3Smrg	  mv -f $tmpdir/tmp-la $lib
2693de2362d3Smrg	done
2694de2362d3Smrg        ${RM}r "$tmpdir"
2695de2362d3Smrg      fi
2696de2362d3Smrg    fi
2697de2362d3Smrg
2698de2362d3Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699de2362d3Smrg      for libdir in $libdirs; do
2700de2362d3Smrg	if test -n "$finish_cmds"; then
2701de2362d3Smrg	  # Do each command in the finish commands.
2702de2362d3Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703de2362d3Smrg'"$cmd"'"'
2704de2362d3Smrg	fi
2705de2362d3Smrg	if test -n "$finish_eval"; then
2706de2362d3Smrg	  # Do the single finish_eval.
2707de2362d3Smrg	  eval cmds=\"$finish_eval\"
2708de2362d3Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709de2362d3Smrg       $cmds"
2710de2362d3Smrg	fi
2711de2362d3Smrg      done
2712de2362d3Smrg    fi
2713de2362d3Smrg
2714de2362d3Smrg    # Exit here if they wanted silent mode.
27157821949aSmrg    $opt_silent && exit $EXIT_SUCCESS
2716de2362d3Smrg
2717de2362d3Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2718de2362d3Smrg      echo "----------------------------------------------------------------------"
2719de2362d3Smrg      echo "Libraries have been installed in:"
2720de2362d3Smrg      for libdir in $libdirs; do
2721de2362d3Smrg	$ECHO "   $libdir"
2722de2362d3Smrg      done
2723de2362d3Smrg      echo
2724de2362d3Smrg      echo "If you ever happen to want to link against installed libraries"
2725de2362d3Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
27267821949aSmrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2727de2362d3Smrg      echo "flag during linking and do at least one of the following:"
2728de2362d3Smrg      if test -n "$shlibpath_var"; then
27297821949aSmrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2730de2362d3Smrg	echo "     during execution"
2731de2362d3Smrg      fi
2732de2362d3Smrg      if test -n "$runpath_var"; then
27337821949aSmrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2734de2362d3Smrg	echo "     during linking"
2735de2362d3Smrg      fi
2736de2362d3Smrg      if test -n "$hardcode_libdir_flag_spec"; then
2737de2362d3Smrg	libdir=LIBDIR
2738de2362d3Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739de2362d3Smrg
27407821949aSmrg	$ECHO "   - use the \`$flag' linker flag"
2741de2362d3Smrg      fi
2742de2362d3Smrg      if test -n "$admincmds"; then
2743de2362d3Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
2744de2362d3Smrg      fi
2745de2362d3Smrg      if test -f /etc/ld.so.conf; then
27467821949aSmrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2747de2362d3Smrg      fi
2748de2362d3Smrg      echo
2749de2362d3Smrg
2750de2362d3Smrg      echo "See any operating system documentation about shared libraries for"
2751de2362d3Smrg      case $host in
2752de2362d3Smrg	solaris2.[6789]|solaris2.1[0-9])
2753de2362d3Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2754de2362d3Smrg	  echo "pages."
2755de2362d3Smrg	  ;;
2756de2362d3Smrg	*)
2757de2362d3Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2758de2362d3Smrg	  ;;
2759de2362d3Smrg      esac
2760de2362d3Smrg      echo "----------------------------------------------------------------------"
2761de2362d3Smrg    fi
2762de2362d3Smrg    exit $EXIT_SUCCESS
2763de2362d3Smrg}
2764de2362d3Smrg
27657821949aSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766de2362d3Smrg
2767de2362d3Smrg
2768de2362d3Smrg# func_mode_install arg...
2769de2362d3Smrgfunc_mode_install ()
2770de2362d3Smrg{
27717821949aSmrg    $opt_debug
2772de2362d3Smrg    # There may be an optional sh(1) argument at the beginning of
2773de2362d3Smrg    # install_prog (especially on Windows NT).
27747821949aSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775de2362d3Smrg       # Allow the use of GNU shtool's install command.
27767821949aSmrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777de2362d3Smrg      # Aesthetically quote it.
2778de2362d3Smrg      func_quote_for_eval "$nonopt"
2779de2362d3Smrg      install_prog="$func_quote_for_eval_result "
2780de2362d3Smrg      arg=$1
2781de2362d3Smrg      shift
2782de2362d3Smrg    else
2783de2362d3Smrg      install_prog=
2784de2362d3Smrg      arg=$nonopt
2785de2362d3Smrg    fi
2786de2362d3Smrg
2787de2362d3Smrg    # The real first argument should be the name of the installation program.
2788de2362d3Smrg    # Aesthetically quote it.
2789de2362d3Smrg    func_quote_for_eval "$arg"
2790de2362d3Smrg    func_append install_prog "$func_quote_for_eval_result"
2791de2362d3Smrg    install_shared_prog=$install_prog
2792de2362d3Smrg    case " $install_prog " in
2793de2362d3Smrg      *[\\\ /]cp\ *) install_cp=: ;;
2794de2362d3Smrg      *) install_cp=false ;;
2795de2362d3Smrg    esac
2796de2362d3Smrg
2797de2362d3Smrg    # We need to accept at least all the BSD install flags.
2798de2362d3Smrg    dest=
2799de2362d3Smrg    files=
2800de2362d3Smrg    opts=
2801de2362d3Smrg    prev=
2802de2362d3Smrg    install_type=
28037821949aSmrg    isdir=no
2804de2362d3Smrg    stripme=
2805de2362d3Smrg    no_mode=:
2806de2362d3Smrg    for arg
2807de2362d3Smrg    do
2808de2362d3Smrg      arg2=
2809de2362d3Smrg      if test -n "$dest"; then
2810de2362d3Smrg	func_append files " $dest"
2811de2362d3Smrg	dest=$arg
2812de2362d3Smrg	continue
2813de2362d3Smrg      fi
2814de2362d3Smrg
2815de2362d3Smrg      case $arg in
28167821949aSmrg      -d) isdir=yes ;;
2817de2362d3Smrg      -f)
2818de2362d3Smrg	if $install_cp; then :; else
2819de2362d3Smrg	  prev=$arg
2820de2362d3Smrg	fi
2821de2362d3Smrg	;;
2822de2362d3Smrg      -g | -m | -o)
2823de2362d3Smrg	prev=$arg
2824de2362d3Smrg	;;
2825de2362d3Smrg      -s)
2826de2362d3Smrg	stripme=" -s"
2827de2362d3Smrg	continue
2828de2362d3Smrg	;;
2829de2362d3Smrg      -*)
2830de2362d3Smrg	;;
2831de2362d3Smrg      *)
2832de2362d3Smrg	# If the previous option needed an argument, then skip it.
2833de2362d3Smrg	if test -n "$prev"; then
28347821949aSmrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2835de2362d3Smrg	    arg2=$install_override_mode
2836de2362d3Smrg	    no_mode=false
2837de2362d3Smrg	  fi
2838de2362d3Smrg	  prev=
2839de2362d3Smrg	else
2840de2362d3Smrg	  dest=$arg
2841de2362d3Smrg	  continue
2842de2362d3Smrg	fi
2843de2362d3Smrg	;;
2844de2362d3Smrg      esac
2845de2362d3Smrg
2846de2362d3Smrg      # Aesthetically quote the argument.
2847de2362d3Smrg      func_quote_for_eval "$arg"
2848de2362d3Smrg      func_append install_prog " $func_quote_for_eval_result"
2849de2362d3Smrg      if test -n "$arg2"; then
2850de2362d3Smrg	func_quote_for_eval "$arg2"
2851de2362d3Smrg      fi
2852de2362d3Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853de2362d3Smrg    done
2854de2362d3Smrg
2855de2362d3Smrg    test -z "$install_prog" && \
2856de2362d3Smrg      func_fatal_help "you must specify an install program"
2857de2362d3Smrg
2858de2362d3Smrg    test -n "$prev" && \
28597821949aSmrg      func_fatal_help "the \`$prev' option requires an argument"
2860de2362d3Smrg
2861de2362d3Smrg    if test -n "$install_override_mode" && $no_mode; then
2862de2362d3Smrg      if $install_cp; then :; else
2863de2362d3Smrg	func_quote_for_eval "$install_override_mode"
2864de2362d3Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
2865de2362d3Smrg      fi
2866de2362d3Smrg    fi
2867de2362d3Smrg
2868de2362d3Smrg    if test -z "$files"; then
2869de2362d3Smrg      if test -z "$dest"; then
2870de2362d3Smrg	func_fatal_help "no file or destination specified"
2871de2362d3Smrg      else
2872de2362d3Smrg	func_fatal_help "you must specify a destination"
2873de2362d3Smrg      fi
2874de2362d3Smrg    fi
2875de2362d3Smrg
2876de2362d3Smrg    # Strip any trailing slash from the destination.
2877de2362d3Smrg    func_stripname '' '/' "$dest"
2878de2362d3Smrg    dest=$func_stripname_result
2879de2362d3Smrg
2880de2362d3Smrg    # Check to see that the destination is a directory.
28817821949aSmrg    test -d "$dest" && isdir=yes
28827821949aSmrg    if test "$isdir" = yes; then
28837821949aSmrg      destdir="$dest"
2884de2362d3Smrg      destname=
2885de2362d3Smrg    else
2886de2362d3Smrg      func_dirname_and_basename "$dest" "" "."
28877821949aSmrg      destdir="$func_dirname_result"
28887821949aSmrg      destname="$func_basename_result"
2889de2362d3Smrg
2890de2362d3Smrg      # Not a directory, so check to see that there is only one file specified.
2891de2362d3Smrg      set dummy $files; shift
2892de2362d3Smrg      test "$#" -gt 1 && \
28937821949aSmrg	func_fatal_help "\`$dest' is not a directory"
2894de2362d3Smrg    fi
2895de2362d3Smrg    case $destdir in
2896de2362d3Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897de2362d3Smrg    *)
2898de2362d3Smrg      for file in $files; do
2899de2362d3Smrg	case $file in
2900de2362d3Smrg	*.lo) ;;
2901de2362d3Smrg	*)
29027821949aSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903de2362d3Smrg	  ;;
2904de2362d3Smrg	esac
2905de2362d3Smrg      done
2906de2362d3Smrg      ;;
2907de2362d3Smrg    esac
2908de2362d3Smrg
2909de2362d3Smrg    # This variable tells wrapper scripts just to set variables rather
2910de2362d3Smrg    # than running their programs.
29117821949aSmrg    libtool_install_magic="$magic"
2912de2362d3Smrg
2913de2362d3Smrg    staticlibs=
2914de2362d3Smrg    future_libdirs=
2915de2362d3Smrg    current_libdirs=
2916de2362d3Smrg    for file in $files; do
2917de2362d3Smrg
2918de2362d3Smrg      # Do each installation.
2919de2362d3Smrg      case $file in
2920de2362d3Smrg      *.$libext)
2921de2362d3Smrg	# Do the static libraries later.
2922de2362d3Smrg	func_append staticlibs " $file"
2923de2362d3Smrg	;;
2924de2362d3Smrg
2925de2362d3Smrg      *.la)
2926de2362d3Smrg	func_resolve_sysroot "$file"
2927de2362d3Smrg	file=$func_resolve_sysroot_result
2928de2362d3Smrg
2929de2362d3Smrg	# Check to see that this really is a libtool archive.
2930de2362d3Smrg	func_lalib_unsafe_p "$file" \
29317821949aSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932de2362d3Smrg
2933de2362d3Smrg	library_names=
2934de2362d3Smrg	old_library=
2935de2362d3Smrg	relink_command=
2936de2362d3Smrg	func_source "$file"
2937de2362d3Smrg
2938de2362d3Smrg	# Add the libdir to current_libdirs if it is the destination.
2939de2362d3Smrg	if test "X$destdir" = "X$libdir"; then
2940de2362d3Smrg	  case "$current_libdirs " in
2941de2362d3Smrg	  *" $libdir "*) ;;
2942de2362d3Smrg	  *) func_append current_libdirs " $libdir" ;;
2943de2362d3Smrg	  esac
2944de2362d3Smrg	else
2945de2362d3Smrg	  # Note the libdir as a future libdir.
2946de2362d3Smrg	  case "$future_libdirs " in
2947de2362d3Smrg	  *" $libdir "*) ;;
2948de2362d3Smrg	  *) func_append future_libdirs " $libdir" ;;
2949de2362d3Smrg	  esac
2950de2362d3Smrg	fi
2951de2362d3Smrg
2952de2362d3Smrg	func_dirname "$file" "/" ""
29537821949aSmrg	dir="$func_dirname_result"
2954de2362d3Smrg	func_append dir "$objdir"
2955de2362d3Smrg
2956de2362d3Smrg	if test -n "$relink_command"; then
2957de2362d3Smrg	  # Determine the prefix the user has applied to our future dir.
2958de2362d3Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959de2362d3Smrg
2960de2362d3Smrg	  # Don't allow the user to place us outside of our expected
2961de2362d3Smrg	  # location b/c this prevents finding dependent libraries that
2962de2362d3Smrg	  # are installed to the same prefix.
2963de2362d3Smrg	  # At present, this check doesn't affect windows .dll's that
2964de2362d3Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2965de2362d3Smrg	  # but it's something to keep an eye on.
2966de2362d3Smrg	  test "$inst_prefix_dir" = "$destdir" && \
29677821949aSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968de2362d3Smrg
2969de2362d3Smrg	  if test -n "$inst_prefix_dir"; then
2970de2362d3Smrg	    # Stick the inst_prefix_dir data into the link command.
2971de2362d3Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972de2362d3Smrg	  else
2973de2362d3Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974de2362d3Smrg	  fi
2975de2362d3Smrg
29767821949aSmrg	  func_warning "relinking \`$file'"
2977de2362d3Smrg	  func_show_eval "$relink_command" \
29787821949aSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979de2362d3Smrg	fi
2980de2362d3Smrg
2981de2362d3Smrg	# See the names of the shared library.
2982de2362d3Smrg	set dummy $library_names; shift
2983de2362d3Smrg	if test -n "$1"; then
29847821949aSmrg	  realname="$1"
2985de2362d3Smrg	  shift
2986de2362d3Smrg
29877821949aSmrg	  srcname="$realname"
29887821949aSmrg	  test -n "$relink_command" && srcname="$realname"T
2989de2362d3Smrg
2990de2362d3Smrg	  # Install the shared library and build the symlinks.
2991de2362d3Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992de2362d3Smrg	      'exit $?'
29937821949aSmrg	  tstripme="$stripme"
2994de2362d3Smrg	  case $host_os in
2995de2362d3Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2996de2362d3Smrg	    case $realname in
2997de2362d3Smrg	    *.dll.a)
29987821949aSmrg	      tstripme=""
2999de2362d3Smrg	      ;;
3000de2362d3Smrg	    esac
3001de2362d3Smrg	    ;;
3002de2362d3Smrg	  esac
3003de2362d3Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004de2362d3Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005de2362d3Smrg	  fi
3006de2362d3Smrg
3007de2362d3Smrg	  if test "$#" -gt 0; then
3008de2362d3Smrg	    # Delete the old symlinks, and create new ones.
30097821949aSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010de2362d3Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011de2362d3Smrg	    # so we also need to try rm && ln -s.
3012de2362d3Smrg	    for linkname
3013de2362d3Smrg	    do
3014de2362d3Smrg	      test "$linkname" != "$realname" \
3015de2362d3Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016de2362d3Smrg	    done
3017de2362d3Smrg	  fi
3018de2362d3Smrg
3019de2362d3Smrg	  # Do each command in the postinstall commands.
30207821949aSmrg	  lib="$destdir/$realname"
3021de2362d3Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022de2362d3Smrg	fi
3023de2362d3Smrg
3024de2362d3Smrg	# Install the pseudo-library for information purposes.
3025de2362d3Smrg	func_basename "$file"
30267821949aSmrg	name="$func_basename_result"
30277821949aSmrg	instname="$dir/$name"i
3028de2362d3Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3029de2362d3Smrg
3030de2362d3Smrg	# Maybe install the static library, too.
3031de2362d3Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032de2362d3Smrg	;;
3033de2362d3Smrg
3034de2362d3Smrg      *.lo)
3035de2362d3Smrg	# Install (i.e. copy) a libtool object.
3036de2362d3Smrg
3037de2362d3Smrg	# Figure out destination file name, if it wasn't already specified.
3038de2362d3Smrg	if test -n "$destname"; then
30397821949aSmrg	  destfile="$destdir/$destname"
3040de2362d3Smrg	else
3041de2362d3Smrg	  func_basename "$file"
30427821949aSmrg	  destfile="$func_basename_result"
30437821949aSmrg	  destfile="$destdir/$destfile"
3044de2362d3Smrg	fi
3045de2362d3Smrg
3046de2362d3Smrg	# Deduce the name of the destination old-style object file.
3047de2362d3Smrg	case $destfile in
3048de2362d3Smrg	*.lo)
3049de2362d3Smrg	  func_lo2o "$destfile"
3050de2362d3Smrg	  staticdest=$func_lo2o_result
3051de2362d3Smrg	  ;;
3052de2362d3Smrg	*.$objext)
30537821949aSmrg	  staticdest="$destfile"
3054de2362d3Smrg	  destfile=
3055de2362d3Smrg	  ;;
3056de2362d3Smrg	*)
30577821949aSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058de2362d3Smrg	  ;;
3059de2362d3Smrg	esac
3060de2362d3Smrg
3061de2362d3Smrg	# Install the libtool object if requested.
3062de2362d3Smrg	test -n "$destfile" && \
3063de2362d3Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064de2362d3Smrg
3065de2362d3Smrg	# Install the old object if enabled.
30667821949aSmrg	if test "$build_old_libs" = yes; then
3067de2362d3Smrg	  # Deduce the name of the old-style object file.
3068de2362d3Smrg	  func_lo2o "$file"
3069de2362d3Smrg	  staticobj=$func_lo2o_result
3070de2362d3Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071de2362d3Smrg	fi
3072de2362d3Smrg	exit $EXIT_SUCCESS
3073de2362d3Smrg	;;
3074de2362d3Smrg
3075de2362d3Smrg      *)
3076de2362d3Smrg	# Figure out destination file name, if it wasn't already specified.
3077de2362d3Smrg	if test -n "$destname"; then
30787821949aSmrg	  destfile="$destdir/$destname"
3079de2362d3Smrg	else
3080de2362d3Smrg	  func_basename "$file"
30817821949aSmrg	  destfile="$func_basename_result"
30827821949aSmrg	  destfile="$destdir/$destfile"
3083de2362d3Smrg	fi
3084de2362d3Smrg
3085de2362d3Smrg	# If the file is missing, and there is a .exe on the end, strip it
3086de2362d3Smrg	# because it is most likely a libtool script we actually want to
3087de2362d3Smrg	# install
30887821949aSmrg	stripped_ext=""
3089de2362d3Smrg	case $file in
3090de2362d3Smrg	  *.exe)
3091de2362d3Smrg	    if test ! -f "$file"; then
3092de2362d3Smrg	      func_stripname '' '.exe' "$file"
3093de2362d3Smrg	      file=$func_stripname_result
30947821949aSmrg	      stripped_ext=".exe"
3095de2362d3Smrg	    fi
3096de2362d3Smrg	    ;;
3097de2362d3Smrg	esac
3098de2362d3Smrg
3099de2362d3Smrg	# Do a test to see if this is really a libtool program.
3100de2362d3Smrg	case $host in
3101de2362d3Smrg	*cygwin* | *mingw*)
3102de2362d3Smrg	    if func_ltwrapper_executable_p "$file"; then
3103de2362d3Smrg	      func_ltwrapper_scriptname "$file"
3104de2362d3Smrg	      wrapper=$func_ltwrapper_scriptname_result
3105de2362d3Smrg	    else
3106de2362d3Smrg	      func_stripname '' '.exe' "$file"
3107de2362d3Smrg	      wrapper=$func_stripname_result
3108de2362d3Smrg	    fi
3109de2362d3Smrg	    ;;
3110de2362d3Smrg	*)
3111de2362d3Smrg	    wrapper=$file
3112de2362d3Smrg	    ;;
3113de2362d3Smrg	esac
3114de2362d3Smrg	if func_ltwrapper_script_p "$wrapper"; then
3115de2362d3Smrg	  notinst_deplibs=
3116de2362d3Smrg	  relink_command=
3117de2362d3Smrg
3118de2362d3Smrg	  func_source "$wrapper"
3119de2362d3Smrg
3120de2362d3Smrg	  # Check the variables that should have been set.
3121de2362d3Smrg	  test -z "$generated_by_libtool_version" && \
31227821949aSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123de2362d3Smrg
31247821949aSmrg	  finalize=yes
3125de2362d3Smrg	  for lib in $notinst_deplibs; do
3126de2362d3Smrg	    # Check to see that each library is installed.
3127de2362d3Smrg	    libdir=
3128de2362d3Smrg	    if test -f "$lib"; then
3129de2362d3Smrg	      func_source "$lib"
3130de2362d3Smrg	    fi
31317821949aSmrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132de2362d3Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
31337821949aSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
31347821949aSmrg	      finalize=no
3135de2362d3Smrg	    fi
3136de2362d3Smrg	  done
3137de2362d3Smrg
3138de2362d3Smrg	  relink_command=
3139de2362d3Smrg	  func_source "$wrapper"
3140de2362d3Smrg
3141de2362d3Smrg	  outputname=
31427821949aSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143de2362d3Smrg	    $opt_dry_run || {
31447821949aSmrg	      if test "$finalize" = yes; then
3145de2362d3Smrg	        tmpdir=`func_mktempdir`
3146de2362d3Smrg		func_basename "$file$stripped_ext"
31477821949aSmrg		file="$func_basename_result"
31487821949aSmrg	        outputname="$tmpdir/$file"
3149de2362d3Smrg	        # Replace the output file specification.
3150de2362d3Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151de2362d3Smrg
31527821949aSmrg	        $opt_silent || {
3153de2362d3Smrg	          func_quote_for_expand "$relink_command"
3154de2362d3Smrg		  eval "func_echo $func_quote_for_expand_result"
3155de2362d3Smrg	        }
3156de2362d3Smrg	        if eval "$relink_command"; then :
3157de2362d3Smrg	          else
31587821949aSmrg		  func_error "error: relink \`$file' with the above command before installing it"
3159de2362d3Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160de2362d3Smrg		  continue
3161de2362d3Smrg	        fi
31627821949aSmrg	        file="$outputname"
3163de2362d3Smrg	      else
31647821949aSmrg	        func_warning "cannot relink \`$file'"
3165de2362d3Smrg	      fi
3166de2362d3Smrg	    }
3167de2362d3Smrg	  else
3168de2362d3Smrg	    # Install the binary that we compiled earlier.
3169de2362d3Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170de2362d3Smrg	  fi
3171de2362d3Smrg	fi
3172de2362d3Smrg
3173de2362d3Smrg	# remove .exe since cygwin /usr/bin/install will append another
3174de2362d3Smrg	# one anyway
3175de2362d3Smrg	case $install_prog,$host in
3176de2362d3Smrg	*/usr/bin/install*,*cygwin*)
3177de2362d3Smrg	  case $file:$destfile in
3178de2362d3Smrg	  *.exe:*.exe)
3179de2362d3Smrg	    # this is ok
3180de2362d3Smrg	    ;;
3181de2362d3Smrg	  *.exe:*)
3182de2362d3Smrg	    destfile=$destfile.exe
3183de2362d3Smrg	    ;;
3184de2362d3Smrg	  *:*.exe)
3185de2362d3Smrg	    func_stripname '' '.exe' "$destfile"
3186de2362d3Smrg	    destfile=$func_stripname_result
3187de2362d3Smrg	    ;;
3188de2362d3Smrg	  esac
3189de2362d3Smrg	  ;;
3190de2362d3Smrg	esac
3191de2362d3Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192de2362d3Smrg	$opt_dry_run || if test -n "$outputname"; then
3193de2362d3Smrg	  ${RM}r "$tmpdir"
3194de2362d3Smrg	fi
3195de2362d3Smrg	;;
3196de2362d3Smrg      esac
3197de2362d3Smrg    done
3198de2362d3Smrg
3199de2362d3Smrg    for file in $staticlibs; do
3200de2362d3Smrg      func_basename "$file"
32017821949aSmrg      name="$func_basename_result"
3202de2362d3Smrg
3203de2362d3Smrg      # Set up the ranlib parameters.
32047821949aSmrg      oldlib="$destdir/$name"
3205de2362d3Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206de2362d3Smrg      tool_oldlib=$func_to_tool_file_result
3207de2362d3Smrg
3208de2362d3Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209de2362d3Smrg
3210de2362d3Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
3211de2362d3Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212de2362d3Smrg      fi
3213de2362d3Smrg
3214de2362d3Smrg      # Do each command in the postinstall commands.
3215de2362d3Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216de2362d3Smrg    done
3217de2362d3Smrg
3218de2362d3Smrg    test -n "$future_libdirs" && \
32197821949aSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220de2362d3Smrg
3221de2362d3Smrg    if test -n "$current_libdirs"; then
3222de2362d3Smrg      # Maybe just do a dry run.
3223de2362d3Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
32247821949aSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225de2362d3Smrg    else
3226de2362d3Smrg      exit $EXIT_SUCCESS
3227de2362d3Smrg    fi
3228de2362d3Smrg}
3229de2362d3Smrg
32307821949aSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231de2362d3Smrg
3232de2362d3Smrg
3233de2362d3Smrg# func_generate_dlsyms outputname originator pic_p
3234de2362d3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235de2362d3Smrg# a dlpreopen symbol table.
3236de2362d3Smrgfunc_generate_dlsyms ()
3237de2362d3Smrg{
32387821949aSmrg    $opt_debug
32397821949aSmrg    my_outputname="$1"
32407821949aSmrg    my_originator="$2"
32417821949aSmrg    my_pic_p="${3-no}"
32427821949aSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243de2362d3Smrg    my_dlsyms=
3244de2362d3Smrg
32457821949aSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246de2362d3Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
32477821949aSmrg	my_dlsyms="${my_outputname}S.c"
3248de2362d3Smrg      else
3249de2362d3Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3250de2362d3Smrg      fi
3251de2362d3Smrg    fi
3252de2362d3Smrg
3253de2362d3Smrg    if test -n "$my_dlsyms"; then
3254de2362d3Smrg      case $my_dlsyms in
3255de2362d3Smrg      "") ;;
3256de2362d3Smrg      *.c)
3257de2362d3Smrg	# Discover the nlist of each of the dlfiles.
32587821949aSmrg	nlist="$output_objdir/${my_outputname}.nm"
3259de2362d3Smrg
3260de2362d3Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261de2362d3Smrg
3262de2362d3Smrg	# Parse the name list into a source file.
3263de2362d3Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264de2362d3Smrg
3265de2362d3Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
32667821949aSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
32677821949aSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268de2362d3Smrg
3269de2362d3Smrg#ifdef __cplusplus
3270de2362d3Smrgextern \"C\" {
3271de2362d3Smrg#endif
3272de2362d3Smrg
32737821949aSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3274de2362d3Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3275de2362d3Smrg#endif
3276de2362d3Smrg
3277de2362d3Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
32787821949aSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
32797821949aSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
3280de2362d3Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3281de2362d3Smrg# define LT_DLSYM_CONST
32827821949aSmrg#elif defined(__osf__)
3283de2362d3Smrg/* This system does not cope well with relocations in const data.  */
3284de2362d3Smrg# define LT_DLSYM_CONST
3285de2362d3Smrg#else
3286de2362d3Smrg# define LT_DLSYM_CONST const
3287de2362d3Smrg#endif
3288de2362d3Smrg
3289de2362d3Smrg/* External symbol declarations for the compiler. */\
3290de2362d3Smrg"
3291de2362d3Smrg
32927821949aSmrg	if test "$dlself" = yes; then
32937821949aSmrg	  func_verbose "generating symbol list for \`$output'"
3294de2362d3Smrg
3295de2362d3Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296de2362d3Smrg
3297de2362d3Smrg	  # Add our own program objects to the symbol list.
3298de2362d3Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299de2362d3Smrg	  for progfile in $progfiles; do
3300de2362d3Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
33017821949aSmrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3302de2362d3Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303de2362d3Smrg	  done
3304de2362d3Smrg
3305de2362d3Smrg	  if test -n "$exclude_expsyms"; then
3306de2362d3Smrg	    $opt_dry_run || {
3307de2362d3Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308de2362d3Smrg	      eval '$MV "$nlist"T "$nlist"'
3309de2362d3Smrg	    }
3310de2362d3Smrg	  fi
3311de2362d3Smrg
3312de2362d3Smrg	  if test -n "$export_symbols_regex"; then
3313de2362d3Smrg	    $opt_dry_run || {
3314de2362d3Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315de2362d3Smrg	      eval '$MV "$nlist"T "$nlist"'
3316de2362d3Smrg	    }
3317de2362d3Smrg	  fi
3318de2362d3Smrg
3319de2362d3Smrg	  # Prepare the list of exported symbols
3320de2362d3Smrg	  if test -z "$export_symbols"; then
33217821949aSmrg	    export_symbols="$output_objdir/$outputname.exp"
3322de2362d3Smrg	    $opt_dry_run || {
3323de2362d3Smrg	      $RM $export_symbols
33247821949aSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325de2362d3Smrg	      case $host in
3326de2362d3Smrg	      *cygwin* | *mingw* | *cegcc* )
3327de2362d3Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328de2362d3Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329de2362d3Smrg	        ;;
3330de2362d3Smrg	      esac
3331de2362d3Smrg	    }
3332de2362d3Smrg	  else
3333de2362d3Smrg	    $opt_dry_run || {
33347821949aSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335de2362d3Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336de2362d3Smrg	      eval '$MV "$nlist"T "$nlist"'
3337de2362d3Smrg	      case $host in
3338de2362d3Smrg	        *cygwin* | *mingw* | *cegcc* )
3339de2362d3Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340de2362d3Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341de2362d3Smrg	          ;;
3342de2362d3Smrg	      esac
3343de2362d3Smrg	    }
3344de2362d3Smrg	  fi
3345de2362d3Smrg	fi
3346de2362d3Smrg
3347de2362d3Smrg	for dlprefile in $dlprefiles; do
33487821949aSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349de2362d3Smrg	  func_basename "$dlprefile"
33507821949aSmrg	  name="$func_basename_result"
3351de2362d3Smrg          case $host in
3352de2362d3Smrg	    *cygwin* | *mingw* | *cegcc* )
3353de2362d3Smrg	      # if an import library, we need to obtain dlname
3354de2362d3Smrg	      if func_win32_import_lib_p "$dlprefile"; then
3355de2362d3Smrg	        func_tr_sh "$dlprefile"
3356de2362d3Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
33577821949aSmrg	        dlprefile_dlbasename=""
3358de2362d3Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3359de2362d3Smrg	          # Use subshell, to avoid clobbering current variable values
3360de2362d3Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
33617821949aSmrg	          if test -n "$dlprefile_dlname" ; then
3362de2362d3Smrg	            func_basename "$dlprefile_dlname"
33637821949aSmrg	            dlprefile_dlbasename="$func_basename_result"
3364de2362d3Smrg	          else
3365de2362d3Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
3366de2362d3Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
3367de2362d3Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3368de2362d3Smrg	          fi
3369de2362d3Smrg	        fi
3370de2362d3Smrg	        $opt_dry_run || {
33717821949aSmrg	          if test -n "$dlprefile_dlbasename" ; then
3372de2362d3Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3373de2362d3Smrg	          else
3374de2362d3Smrg	            func_warning "Could not compute DLL name from $name"
3375de2362d3Smrg	            eval '$ECHO ": $name " >> "$nlist"'
3376de2362d3Smrg	          fi
3377de2362d3Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3378de2362d3Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3379de2362d3Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3380de2362d3Smrg	        }
3381de2362d3Smrg	      else # not an import lib
3382de2362d3Smrg	        $opt_dry_run || {
3383de2362d3Smrg	          eval '$ECHO ": $name " >> "$nlist"'
3384de2362d3Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3385de2362d3Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3386de2362d3Smrg	        }
3387de2362d3Smrg	      fi
3388de2362d3Smrg	    ;;
3389de2362d3Smrg	    *)
3390de2362d3Smrg	      $opt_dry_run || {
3391de2362d3Smrg	        eval '$ECHO ": $name " >> "$nlist"'
3392de2362d3Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3393de2362d3Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3394de2362d3Smrg	      }
3395de2362d3Smrg	    ;;
3396de2362d3Smrg          esac
3397de2362d3Smrg	done
3398de2362d3Smrg
3399de2362d3Smrg	$opt_dry_run || {
3400de2362d3Smrg	  # Make sure we have at least an empty file.
3401de2362d3Smrg	  test -f "$nlist" || : > "$nlist"
3402de2362d3Smrg
3403de2362d3Smrg	  if test -n "$exclude_expsyms"; then
3404de2362d3Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405de2362d3Smrg	    $MV "$nlist"T "$nlist"
3406de2362d3Smrg	  fi
3407de2362d3Smrg
3408de2362d3Smrg	  # Try sorting and uniquifying the output.
3409de2362d3Smrg	  if $GREP -v "^: " < "$nlist" |
3410de2362d3Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411de2362d3Smrg		sort -k 3
3412de2362d3Smrg	      else
3413de2362d3Smrg		sort +2
3414de2362d3Smrg	      fi |
3415de2362d3Smrg	      uniq > "$nlist"S; then
3416de2362d3Smrg	    :
3417de2362d3Smrg	  else
3418de2362d3Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419de2362d3Smrg	  fi
3420de2362d3Smrg
3421de2362d3Smrg	  if test -f "$nlist"S; then
3422de2362d3Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423de2362d3Smrg	  else
3424de2362d3Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425de2362d3Smrg	  fi
3426de2362d3Smrg
3427de2362d3Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3428de2362d3Smrg
3429de2362d3Smrg/* The mapping between symbol names and symbols.  */
3430de2362d3Smrgtypedef struct {
3431de2362d3Smrg  const char *name;
3432de2362d3Smrg  void *address;
3433de2362d3Smrg} lt_dlsymlist;
3434de2362d3Smrgextern LT_DLSYM_CONST lt_dlsymlist
34357821949aSmrglt_${my_prefix}_LTX_preloaded_symbols[];
3436de2362d3SmrgLT_DLSYM_CONST lt_dlsymlist
3437de2362d3Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
34387821949aSmrg{\
34397821949aSmrg  { \"$my_originator\", (void *) 0 },"
3440de2362d3Smrg
3441de2362d3Smrg	  case $need_lib_prefix in
3442de2362d3Smrg	  no)
3443de2362d3Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444de2362d3Smrg	    ;;
3445de2362d3Smrg	  *)
3446de2362d3Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447de2362d3Smrg	    ;;
3448de2362d3Smrg	  esac
3449de2362d3Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450de2362d3Smrg  {0, (void *) 0}
3451de2362d3Smrg};
3452de2362d3Smrg
3453de2362d3Smrg/* This works around a problem in FreeBSD linker */
3454de2362d3Smrg#ifdef FREEBSD_WORKAROUND
3455de2362d3Smrgstatic const void *lt_preloaded_setup() {
3456de2362d3Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457de2362d3Smrg}
3458de2362d3Smrg#endif
3459de2362d3Smrg
3460de2362d3Smrg#ifdef __cplusplus
3461de2362d3Smrg}
3462de2362d3Smrg#endif\
3463de2362d3Smrg"
3464de2362d3Smrg	} # !$opt_dry_run
3465de2362d3Smrg
3466de2362d3Smrg	pic_flag_for_symtable=
3467de2362d3Smrg	case "$compile_command " in
3468de2362d3Smrg	*" -static "*) ;;
3469de2362d3Smrg	*)
3470de2362d3Smrg	  case $host in
3471de2362d3Smrg	  # compiling the symbol table file with pic_flag works around
3472de2362d3Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473de2362d3Smrg	  # linked before any other PIC object.  But we must not use
3474de2362d3Smrg	  # pic_flag when linking with -static.  The problem exists in
3475de2362d3Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476de2362d3Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477de2362d3Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478de2362d3Smrg	  *-*-hpux*)
3479de2362d3Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480de2362d3Smrg	  *)
34817821949aSmrg	    if test "X$my_pic_p" != Xno; then
34827821949aSmrg	      pic_flag_for_symtable=" $pic_flag"
34837821949aSmrg	    fi
3484de2362d3Smrg	    ;;
3485de2362d3Smrg	  esac
3486de2362d3Smrg	  ;;
3487de2362d3Smrg	esac
3488de2362d3Smrg	symtab_cflags=
3489de2362d3Smrg	for arg in $LTCFLAGS; do
3490de2362d3Smrg	  case $arg in
3491de2362d3Smrg	  -pie | -fpie | -fPIE) ;;
3492de2362d3Smrg	  *) func_append symtab_cflags " $arg" ;;
3493de2362d3Smrg	  esac
3494de2362d3Smrg	done
3495de2362d3Smrg
3496de2362d3Smrg	# Now compile the dynamic symbol file.
3497de2362d3Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498de2362d3Smrg
3499de2362d3Smrg	# Clean up the generated files.
35007821949aSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501de2362d3Smrg
3502de2362d3Smrg	# Transform the symbol file into the correct name.
35037821949aSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504de2362d3Smrg	case $host in
3505de2362d3Smrg	*cygwin* | *mingw* | *cegcc* )
3506de2362d3Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
3507de2362d3Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3508de2362d3Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509de2362d3Smrg	  else
3510de2362d3Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3511de2362d3Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512de2362d3Smrg	  fi
3513de2362d3Smrg	  ;;
3514de2362d3Smrg	*)
3515de2362d3Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3516de2362d3Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517de2362d3Smrg	  ;;
3518de2362d3Smrg	esac
3519de2362d3Smrg	;;
3520de2362d3Smrg      *)
35217821949aSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522de2362d3Smrg	;;
3523de2362d3Smrg      esac
3524de2362d3Smrg    else
3525de2362d3Smrg      # We keep going just in case the user didn't refer to
3526de2362d3Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527de2362d3Smrg      # really was required.
3528de2362d3Smrg
3529de2362d3Smrg      # Nullify the symbol file.
3530de2362d3Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3531de2362d3Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532de2362d3Smrg    fi
3533de2362d3Smrg}
3534de2362d3Smrg
3535de2362d3Smrg# func_win32_libid arg
3536de2362d3Smrg# return the library type of file 'arg'
3537de2362d3Smrg#
3538de2362d3Smrg# Need a lot of goo to handle *both* DLLs and import libs
3539de2362d3Smrg# Has to be a shell function in order to 'eat' the argument
3540de2362d3Smrg# that is supplied when $file_magic_command is called.
3541de2362d3Smrg# Despite the name, also deal with 64 bit binaries.
3542de2362d3Smrgfunc_win32_libid ()
3543de2362d3Smrg{
35447821949aSmrg  $opt_debug
35457821949aSmrg  win32_libid_type="unknown"
3546de2362d3Smrg  win32_fileres=`file -L $1 2>/dev/null`
3547de2362d3Smrg  case $win32_fileres in
3548de2362d3Smrg  *ar\ archive\ import\ library*) # definitely import
3549de2362d3Smrg    win32_libid_type="x86 archive import"
3550de2362d3Smrg    ;;
3551de2362d3Smrg  *ar\ archive*) # could be an import, or static
3552de2362d3Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553de2362d3Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3554de2362d3Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
35557821949aSmrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
35567821949aSmrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
35577821949aSmrg	$SED -n -e '
3558de2362d3Smrg	    1,100{
3559de2362d3Smrg		/ I /{
35607821949aSmrg		    s,.*,import,
3561de2362d3Smrg		    p
3562de2362d3Smrg		    q
3563de2362d3Smrg		}
3564de2362d3Smrg	    }'`
3565de2362d3Smrg      case $win32_nmres in
3566de2362d3Smrg      import*)  win32_libid_type="x86 archive import";;
3567de2362d3Smrg      *)        win32_libid_type="x86 archive static";;
3568de2362d3Smrg      esac
3569de2362d3Smrg    fi
3570de2362d3Smrg    ;;
3571de2362d3Smrg  *DLL*)
3572de2362d3Smrg    win32_libid_type="x86 DLL"
3573de2362d3Smrg    ;;
3574de2362d3Smrg  *executable*) # but shell scripts are "executable" too...
3575de2362d3Smrg    case $win32_fileres in
3576de2362d3Smrg    *MS\ Windows\ PE\ Intel*)
3577de2362d3Smrg      win32_libid_type="x86 DLL"
3578de2362d3Smrg      ;;
3579de2362d3Smrg    esac
3580de2362d3Smrg    ;;
3581de2362d3Smrg  esac
3582de2362d3Smrg  $ECHO "$win32_libid_type"
3583de2362d3Smrg}
3584de2362d3Smrg
3585de2362d3Smrg# func_cygming_dll_for_implib ARG
3586de2362d3Smrg#
3587de2362d3Smrg# Platform-specific function to extract the
3588de2362d3Smrg# name of the DLL associated with the specified
3589de2362d3Smrg# import library ARG.
3590de2362d3Smrg# Invoked by eval'ing the libtool variable
3591de2362d3Smrg#    $sharedlib_from_linklib_cmd
3592de2362d3Smrg# Result is available in the variable
3593de2362d3Smrg#    $sharedlib_from_linklib_result
3594de2362d3Smrgfunc_cygming_dll_for_implib ()
3595de2362d3Smrg{
35967821949aSmrg  $opt_debug
3597de2362d3Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3598de2362d3Smrg}
3599de2362d3Smrg
3600de2362d3Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3601de2362d3Smrg#
3602de2362d3Smrg# The is the core of a fallback implementation of a
3603de2362d3Smrg# platform-specific function to extract the name of the
3604de2362d3Smrg# DLL associated with the specified import library LIBNAME.
3605de2362d3Smrg#
3606de2362d3Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
3607de2362d3Smrg# on the platform and compiler that created the implib.
3608de2362d3Smrg#
3609de2362d3Smrg# Echos the name of the DLL associated with the
3610de2362d3Smrg# specified import library.
3611de2362d3Smrgfunc_cygming_dll_for_implib_fallback_core ()
3612de2362d3Smrg{
36137821949aSmrg  $opt_debug
3614de2362d3Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3615de2362d3Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3616de2362d3Smrg    $SED '/^Contents of section '"$match_literal"':/{
3617de2362d3Smrg      # Place marker at beginning of archive member dllname section
3618de2362d3Smrg      s/.*/====MARK====/
3619de2362d3Smrg      p
3620de2362d3Smrg      d
3621de2362d3Smrg    }
3622de2362d3Smrg    # These lines can sometimes be longer than 43 characters, but
3623de2362d3Smrg    # are always uninteresting
3624de2362d3Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
3625de2362d3Smrg    /^In archive [^:]*:/d
3626de2362d3Smrg    # Ensure marker is printed
3627de2362d3Smrg    /^====MARK====/p
3628de2362d3Smrg    # Remove all lines with less than 43 characters
3629de2362d3Smrg    /^.\{43\}/!d
3630de2362d3Smrg    # From remaining lines, remove first 43 characters
3631de2362d3Smrg    s/^.\{43\}//' |
3632de2362d3Smrg    $SED -n '
3633de2362d3Smrg      # Join marker and all lines until next marker into a single line
3634de2362d3Smrg      /^====MARK====/ b para
3635de2362d3Smrg      H
3636de2362d3Smrg      $ b para
3637de2362d3Smrg      b
3638de2362d3Smrg      :para
3639de2362d3Smrg      x
3640de2362d3Smrg      s/\n//g
3641de2362d3Smrg      # Remove the marker
3642de2362d3Smrg      s/^====MARK====//
3643de2362d3Smrg      # Remove trailing dots and whitespace
3644de2362d3Smrg      s/[\. \t]*$//
3645de2362d3Smrg      # Print
3646de2362d3Smrg      /./p' |
3647de2362d3Smrg    # we now have a list, one entry per line, of the stringified
3648de2362d3Smrg    # contents of the appropriate section of all members of the
36497821949aSmrg    # archive which possess that section. Heuristic: eliminate
36507821949aSmrg    # all those which have a first or second character that is
3651de2362d3Smrg    # a '.' (that is, objdump's representation of an unprintable
3652de2362d3Smrg    # character.) This should work for all archives with less than
3653de2362d3Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
3654de2362d3Smrg    # begins with a literal '.' or a single character followed by
3655de2362d3Smrg    # a '.'.
3656de2362d3Smrg    #
3657de2362d3Smrg    # Of those that remain, print the first one.
3658de2362d3Smrg    $SED -e '/^\./d;/^.\./d;q'
3659de2362d3Smrg}
3660de2362d3Smrg
36617821949aSmrg# func_cygming_gnu_implib_p ARG
36627821949aSmrg# This predicate returns with zero status (TRUE) if
36637821949aSmrg# ARG is a GNU/binutils-style import library. Returns
36647821949aSmrg# with nonzero status (FALSE) otherwise.
36657821949aSmrgfunc_cygming_gnu_implib_p ()
36667821949aSmrg{
36677821949aSmrg  $opt_debug
36687821949aSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36697821949aSmrg  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
36707821949aSmrg  test -n "$func_cygming_gnu_implib_tmp"
36717821949aSmrg}
36727821949aSmrg
36737821949aSmrg# func_cygming_ms_implib_p ARG
36747821949aSmrg# This predicate returns with zero status (TRUE) if
36757821949aSmrg# ARG is an MS-style import library. Returns
36767821949aSmrg# with nonzero status (FALSE) otherwise.
36777821949aSmrgfunc_cygming_ms_implib_p ()
36787821949aSmrg{
36797821949aSmrg  $opt_debug
36807821949aSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36817821949aSmrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
36827821949aSmrg  test -n "$func_cygming_ms_implib_tmp"
36837821949aSmrg}
36847821949aSmrg
3685de2362d3Smrg# func_cygming_dll_for_implib_fallback ARG
3686de2362d3Smrg# Platform-specific function to extract the
3687de2362d3Smrg# name of the DLL associated with the specified
3688de2362d3Smrg# import library ARG.
3689de2362d3Smrg#
3690de2362d3Smrg# This fallback implementation is for use when $DLLTOOL
3691de2362d3Smrg# does not support the --identify-strict option.
3692de2362d3Smrg# Invoked by eval'ing the libtool variable
3693de2362d3Smrg#    $sharedlib_from_linklib_cmd
3694de2362d3Smrg# Result is available in the variable
3695de2362d3Smrg#    $sharedlib_from_linklib_result
3696de2362d3Smrgfunc_cygming_dll_for_implib_fallback ()
3697de2362d3Smrg{
36987821949aSmrg  $opt_debug
36997821949aSmrg  if func_cygming_gnu_implib_p "$1" ; then
3700de2362d3Smrg    # binutils import library
3701de2362d3Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
37027821949aSmrg  elif func_cygming_ms_implib_p "$1" ; then
3703de2362d3Smrg    # ms-generated import library
3704de2362d3Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3705de2362d3Smrg  else
3706de2362d3Smrg    # unknown
37077821949aSmrg    sharedlib_from_linklib_result=""
3708de2362d3Smrg  fi
3709de2362d3Smrg}
3710de2362d3Smrg
3711de2362d3Smrg
3712de2362d3Smrg# func_extract_an_archive dir oldlib
3713de2362d3Smrgfunc_extract_an_archive ()
3714de2362d3Smrg{
37157821949aSmrg    $opt_debug
37167821949aSmrg    f_ex_an_ar_dir="$1"; shift
37177821949aSmrg    f_ex_an_ar_oldlib="$1"
37187821949aSmrg    if test "$lock_old_archive_extraction" = yes; then
3719de2362d3Smrg      lockfile=$f_ex_an_ar_oldlib.lock
3720de2362d3Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3721de2362d3Smrg	func_echo "Waiting for $lockfile to be removed"
3722de2362d3Smrg	sleep 2
3723de2362d3Smrg      done
3724de2362d3Smrg    fi
3725de2362d3Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3726de2362d3Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37277821949aSmrg    if test "$lock_old_archive_extraction" = yes; then
3728de2362d3Smrg      $opt_dry_run || rm -f "$lockfile"
3729de2362d3Smrg    fi
3730de2362d3Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731de2362d3Smrg     :
3732de2362d3Smrg    else
3733de2362d3Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734de2362d3Smrg    fi
3735de2362d3Smrg}
3736de2362d3Smrg
3737de2362d3Smrg
3738de2362d3Smrg# func_extract_archives gentop oldlib ...
3739de2362d3Smrgfunc_extract_archives ()
3740de2362d3Smrg{
37417821949aSmrg    $opt_debug
37427821949aSmrg    my_gentop="$1"; shift
3743de2362d3Smrg    my_oldlibs=${1+"$@"}
37447821949aSmrg    my_oldobjs=""
37457821949aSmrg    my_xlib=""
37467821949aSmrg    my_xabs=""
37477821949aSmrg    my_xdir=""
3748de2362d3Smrg
3749de2362d3Smrg    for my_xlib in $my_oldlibs; do
3750de2362d3Smrg      # Extract the objects.
3751de2362d3Smrg      case $my_xlib in
37527821949aSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753de2362d3Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754de2362d3Smrg      esac
3755de2362d3Smrg      func_basename "$my_xlib"
37567821949aSmrg      my_xlib="$func_basename_result"
3757de2362d3Smrg      my_xlib_u=$my_xlib
3758de2362d3Smrg      while :; do
3759de2362d3Smrg        case " $extracted_archives " in
3760de2362d3Smrg	*" $my_xlib_u "*)
3761de2362d3Smrg	  func_arith $extracted_serial + 1
3762de2362d3Smrg	  extracted_serial=$func_arith_result
3763de2362d3Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764de2362d3Smrg	*) break ;;
3765de2362d3Smrg	esac
3766de2362d3Smrg      done
3767de2362d3Smrg      extracted_archives="$extracted_archives $my_xlib_u"
37687821949aSmrg      my_xdir="$my_gentop/$my_xlib_u"
3769de2362d3Smrg
3770de2362d3Smrg      func_mkdir_p "$my_xdir"
3771de2362d3Smrg
3772de2362d3Smrg      case $host in
3773de2362d3Smrg      *-darwin*)
3774de2362d3Smrg	func_verbose "Extracting $my_xabs"
3775de2362d3Smrg	# Do not bother doing anything if just a dry run
3776de2362d3Smrg	$opt_dry_run || {
3777de2362d3Smrg	  darwin_orig_dir=`pwd`
3778de2362d3Smrg	  cd $my_xdir || exit $?
3779de2362d3Smrg	  darwin_archive=$my_xabs
3780de2362d3Smrg	  darwin_curdir=`pwd`
37817821949aSmrg	  darwin_base_archive=`basename "$darwin_archive"`
3782de2362d3Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783de2362d3Smrg	  if test -n "$darwin_arches"; then
3784de2362d3Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785de2362d3Smrg	    darwin_arch=
3786de2362d3Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
37877821949aSmrg	    for darwin_arch in  $darwin_arches ; do
37887821949aSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37897821949aSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
37907821949aSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37917821949aSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792de2362d3Smrg	      cd "$darwin_curdir"
37937821949aSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794de2362d3Smrg	    done # $darwin_arches
3795de2362d3Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
37967821949aSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797de2362d3Smrg	    darwin_file=
3798de2362d3Smrg	    darwin_files=
3799de2362d3Smrg	    for darwin_file in $darwin_filelist; do
3800de2362d3Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801de2362d3Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802de2362d3Smrg	    done # $darwin_filelist
3803de2362d3Smrg	    $RM -rf unfat-$$
3804de2362d3Smrg	    cd "$darwin_orig_dir"
3805de2362d3Smrg	  else
3806de2362d3Smrg	    cd $darwin_orig_dir
3807de2362d3Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808de2362d3Smrg	  fi # $darwin_arches
3809de2362d3Smrg	} # !$opt_dry_run
3810de2362d3Smrg	;;
3811de2362d3Smrg      *)
3812de2362d3Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813de2362d3Smrg	;;
3814de2362d3Smrg      esac
3815de2362d3Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816de2362d3Smrg    done
3817de2362d3Smrg
38187821949aSmrg    func_extract_archives_result="$my_oldobjs"
3819de2362d3Smrg}
3820de2362d3Smrg
3821de2362d3Smrg
3822de2362d3Smrg# func_emit_wrapper [arg=no]
3823de2362d3Smrg#
3824de2362d3Smrg# Emit a libtool wrapper script on stdout.
3825de2362d3Smrg# Don't directly open a file because we may want to
3826de2362d3Smrg# incorporate the script contents within a cygwin/mingw
3827de2362d3Smrg# wrapper executable.  Must ONLY be called from within
3828de2362d3Smrg# func_mode_link because it depends on a number of variables
3829de2362d3Smrg# set therein.
3830de2362d3Smrg#
3831de2362d3Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3832de2362d3Smrg# variable will take.  If 'yes', then the emitted script
38337821949aSmrg# will assume that the directory in which it is stored is
3834de2362d3Smrg# the $objdir directory.  This is a cygwin/mingw-specific
3835de2362d3Smrg# behavior.
3836de2362d3Smrgfunc_emit_wrapper ()
3837de2362d3Smrg{
3838de2362d3Smrg	func_emit_wrapper_arg1=${1-no}
3839de2362d3Smrg
3840de2362d3Smrg	$ECHO "\
3841de2362d3Smrg#! $SHELL
3842de2362d3Smrg
3843de2362d3Smrg# $output - temporary wrapper script for $objdir/$outputname
38447821949aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845de2362d3Smrg#
3846de2362d3Smrg# The $output program cannot be directly executed until all the libtool
3847de2362d3Smrg# libraries that it depends on are installed.
3848de2362d3Smrg#
3849de2362d3Smrg# This wrapper script should never be moved out of the build directory.
3850de2362d3Smrg# If it is, it will not operate correctly.
3851de2362d3Smrg
3852de2362d3Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853de2362d3Smrg# metacharacters that are still active within double-quoted strings.
3854de2362d3Smrgsed_quote_subst='$sed_quote_subst'
3855de2362d3Smrg
3856de2362d3Smrg# Be Bourne compatible
3857de2362d3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858de2362d3Smrg  emulate sh
3859de2362d3Smrg  NULLCMD=:
3860de2362d3Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861de2362d3Smrg  # is contrary to our usage.  Disable this feature.
3862de2362d3Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863de2362d3Smrg  setopt NO_GLOB_SUBST
3864de2362d3Smrgelse
3865de2362d3Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866de2362d3Smrgfi
3867de2362d3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868de2362d3SmrgDUALCASE=1; export DUALCASE # for MKS sh
3869de2362d3Smrg
3870de2362d3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871de2362d3Smrg# if CDPATH is set.
3872de2362d3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873de2362d3Smrg
3874de2362d3Smrgrelink_command=\"$relink_command\"
3875de2362d3Smrg
3876de2362d3Smrg# This environment variable determines our operation mode.
3877de2362d3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878de2362d3Smrg  # install mode needs the following variables:
3879de2362d3Smrg  generated_by_libtool_version='$macro_version'
3880de2362d3Smrg  notinst_deplibs='$notinst_deplibs'
3881de2362d3Smrgelse
3882de2362d3Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883de2362d3Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3884de2362d3Smrg    file=\"\$0\""
3885de2362d3Smrg
3886de2362d3Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3887de2362d3Smrg    $ECHO "\
3888de2362d3Smrg
3889de2362d3Smrg# A function that is used when there is no print builtin or printf.
3890de2362d3Smrgfunc_fallback_echo ()
3891de2362d3Smrg{
3892de2362d3Smrg  eval 'cat <<_LTECHO_EOF
3893de2362d3Smrg\$1
3894de2362d3Smrg_LTECHO_EOF'
3895de2362d3Smrg}
3896de2362d3Smrg    ECHO=\"$qECHO\"
3897de2362d3Smrg  fi
3898de2362d3Smrg
3899de2362d3Smrg# Very basic option parsing. These options are (a) specific to
3900de2362d3Smrg# the libtool wrapper, (b) are identical between the wrapper
39017821949aSmrg# /script/ and the wrapper /executable/ which is used only on
3902de2362d3Smrg# windows platforms, and (c) all begin with the string "--lt-"
39037821949aSmrg# (application programs are unlikely to have options which match
3904de2362d3Smrg# this pattern).
3905de2362d3Smrg#
3906de2362d3Smrg# There are only two supported options: --lt-debug and
3907de2362d3Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
3908de2362d3Smrg#
3909de2362d3Smrg# The first argument to this parsing function should be the
3910de2362d3Smrg# script's $0 value, followed by "$@".
3911de2362d3Smrglt_option_debug=
3912de2362d3Smrgfunc_parse_lt_options ()
3913de2362d3Smrg{
3914de2362d3Smrg  lt_script_arg0=\$0
3915de2362d3Smrg  shift
3916de2362d3Smrg  for lt_opt
3917de2362d3Smrg  do
3918de2362d3Smrg    case \"\$lt_opt\" in
3919de2362d3Smrg    --lt-debug) lt_option_debug=1 ;;
3920de2362d3Smrg    --lt-dump-script)
3921de2362d3Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3922de2362d3Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3923de2362d3Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3924de2362d3Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
3925de2362d3Smrg        exit 0
3926de2362d3Smrg      ;;
3927de2362d3Smrg    --lt-*)
3928de2362d3Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3929de2362d3Smrg        exit 1
3930de2362d3Smrg      ;;
3931de2362d3Smrg    esac
3932de2362d3Smrg  done
3933de2362d3Smrg
3934de2362d3Smrg  # Print the debug banner immediately:
3935de2362d3Smrg  if test -n \"\$lt_option_debug\"; then
39367821949aSmrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3937de2362d3Smrg  fi
3938de2362d3Smrg}
3939de2362d3Smrg
3940de2362d3Smrg# Used when --lt-debug. Prints its arguments to stdout
3941de2362d3Smrg# (redirection is the responsibility of the caller)
3942de2362d3Smrgfunc_lt_dump_args ()
3943de2362d3Smrg{
3944de2362d3Smrg  lt_dump_args_N=1;
3945de2362d3Smrg  for lt_arg
3946de2362d3Smrg  do
39477821949aSmrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3948de2362d3Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3949de2362d3Smrg  done
3950de2362d3Smrg}
3951de2362d3Smrg
3952de2362d3Smrg# Core function for launching the target application
3953de2362d3Smrgfunc_exec_program_core ()
3954de2362d3Smrg{
3955de2362d3Smrg"
3956de2362d3Smrg  case $host in
3957de2362d3Smrg  # Backslashes separate directories on plain windows
3958de2362d3Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
3959de2362d3Smrg    $ECHO "\
3960de2362d3Smrg      if test -n \"\$lt_option_debug\"; then
39617821949aSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3962de2362d3Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3963de2362d3Smrg      fi
3964de2362d3Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3965de2362d3Smrg"
3966de2362d3Smrg    ;;
3967de2362d3Smrg
3968de2362d3Smrg  *)
3969de2362d3Smrg    $ECHO "\
3970de2362d3Smrg      if test -n \"\$lt_option_debug\"; then
39717821949aSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3972de2362d3Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
3973de2362d3Smrg      fi
3974de2362d3Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3975de2362d3Smrg"
3976de2362d3Smrg    ;;
3977de2362d3Smrg  esac
3978de2362d3Smrg  $ECHO "\
3979de2362d3Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3980de2362d3Smrg      exit 1
3981de2362d3Smrg}
3982de2362d3Smrg
3983de2362d3Smrg# A function to encapsulate launching the target application
3984de2362d3Smrg# Strips options in the --lt-* namespace from \$@ and
3985de2362d3Smrg# launches target application with the remaining arguments.
3986de2362d3Smrgfunc_exec_program ()
3987de2362d3Smrg{
3988de2362d3Smrg  case \" \$* \" in
3989de2362d3Smrg  *\\ --lt-*)
3990de2362d3Smrg    for lt_wr_arg
3991de2362d3Smrg    do
3992de2362d3Smrg      case \$lt_wr_arg in
3993de2362d3Smrg      --lt-*) ;;
3994de2362d3Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995de2362d3Smrg      esac
3996de2362d3Smrg      shift
3997de2362d3Smrg    done ;;
3998de2362d3Smrg  esac
3999de2362d3Smrg  func_exec_program_core \${1+\"\$@\"}
4000de2362d3Smrg}
4001de2362d3Smrg
4002de2362d3Smrg  # Parse options
4003de2362d3Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004de2362d3Smrg
4005de2362d3Smrg  # Find the directory that this script lives in.
4006de2362d3Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007de2362d3Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008de2362d3Smrg
4009de2362d3Smrg  # Follow symbolic links until we get to the real thisdir.
4010de2362d3Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011de2362d3Smrg  while test -n \"\$file\"; do
4012de2362d3Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013de2362d3Smrg
4014de2362d3Smrg    # If there was a directory component, then change thisdir.
4015de2362d3Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4016de2362d3Smrg      case \"\$destdir\" in
4017de2362d3Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018de2362d3Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019de2362d3Smrg      esac
4020de2362d3Smrg    fi
4021de2362d3Smrg
4022de2362d3Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4023de2362d3Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024de2362d3Smrg  done
4025de2362d3Smrg
4026de2362d3Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4027de2362d3Smrg  # the cwrapper.
4028de2362d3Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029de2362d3Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030de2362d3Smrg    # special case for '.'
4031de2362d3Smrg    if test \"\$thisdir\" = \".\"; then
4032de2362d3Smrg      thisdir=\`pwd\`
4033de2362d3Smrg    fi
4034de2362d3Smrg    # remove .libs from thisdir
4035de2362d3Smrg    case \"\$thisdir\" in
4036de2362d3Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037de2362d3Smrg    $objdir )   thisdir=. ;;
4038de2362d3Smrg    esac
4039de2362d3Smrg  fi
4040de2362d3Smrg
4041de2362d3Smrg  # Try to get the absolute directory name.
4042de2362d3Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043de2362d3Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044de2362d3Smrg"
4045de2362d3Smrg
40467821949aSmrg	if test "$fast_install" = yes; then
4047de2362d3Smrg	  $ECHO "\
4048de2362d3Smrg  program=lt-'$outputname'$exeext
4049de2362d3Smrg  progdir=\"\$thisdir/$objdir\"
4050de2362d3Smrg
4051de2362d3Smrg  if test ! -f \"\$progdir/\$program\" ||
40527821949aSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053de2362d3Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054de2362d3Smrg
4055de2362d3Smrg    file=\"\$\$-\$program\"
4056de2362d3Smrg
4057de2362d3Smrg    if test ! -d \"\$progdir\"; then
4058de2362d3Smrg      $MKDIR \"\$progdir\"
4059de2362d3Smrg    else
4060de2362d3Smrg      $RM \"\$progdir/\$file\"
4061de2362d3Smrg    fi"
4062de2362d3Smrg
4063de2362d3Smrg	  $ECHO "\
4064de2362d3Smrg
4065de2362d3Smrg    # relink executable if necessary
4066de2362d3Smrg    if test -n \"\$relink_command\"; then
4067de2362d3Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068de2362d3Smrg      else
40697821949aSmrg	$ECHO \"\$relink_command_output\" >&2
4070de2362d3Smrg	$RM \"\$progdir/\$file\"
4071de2362d3Smrg	exit 1
4072de2362d3Smrg      fi
4073de2362d3Smrg    fi
4074de2362d3Smrg
4075de2362d3Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076de2362d3Smrg    { $RM \"\$progdir/\$program\";
4077de2362d3Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078de2362d3Smrg    $RM \"\$progdir/\$file\"
4079de2362d3Smrg  fi"
4080de2362d3Smrg	else
4081de2362d3Smrg	  $ECHO "\
4082de2362d3Smrg  program='$outputname'
4083de2362d3Smrg  progdir=\"\$thisdir/$objdir\"
4084de2362d3Smrg"
4085de2362d3Smrg	fi
4086de2362d3Smrg
4087de2362d3Smrg	$ECHO "\
4088de2362d3Smrg
4089de2362d3Smrg  if test -f \"\$progdir/\$program\"; then"
4090de2362d3Smrg
4091de2362d3Smrg	# fixup the dll searchpath if we need to.
4092de2362d3Smrg	#
4093de2362d3Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
4094de2362d3Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
4095de2362d3Smrg	# libraries must come first.
4096de2362d3Smrg	if test -n "$dllsearchpath"; then
4097de2362d3Smrg	  $ECHO "\
4098de2362d3Smrg    # Add the dll search path components to the executable PATH
4099de2362d3Smrg    PATH=$dllsearchpath:\$PATH
4100de2362d3Smrg"
4101de2362d3Smrg	fi
4102de2362d3Smrg
4103de2362d3Smrg	# Export our shlibpath_var if we have one.
41047821949aSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105de2362d3Smrg	  $ECHO "\
4106de2362d3Smrg    # Add our own library path to $shlibpath_var
4107de2362d3Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108de2362d3Smrg
4109de2362d3Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110de2362d3Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
4111de2362d3Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112de2362d3Smrg
4113de2362d3Smrg    export $shlibpath_var
4114de2362d3Smrg"
4115de2362d3Smrg	fi
4116de2362d3Smrg
4117de2362d3Smrg	$ECHO "\
4118de2362d3Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119de2362d3Smrg      # Run the actual program with our arguments.
4120de2362d3Smrg      func_exec_program \${1+\"\$@\"}
4121de2362d3Smrg    fi
4122de2362d3Smrg  else
4123de2362d3Smrg    # The program doesn't exist.
41247821949aSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125de2362d3Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4126de2362d3Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127de2362d3Smrg    exit 1
4128de2362d3Smrg  fi
4129de2362d3Smrgfi\
4130de2362d3Smrg"
4131de2362d3Smrg}
4132de2362d3Smrg
4133de2362d3Smrg
4134de2362d3Smrg# func_emit_cwrapperexe_src
4135de2362d3Smrg# emit the source code for a wrapper executable on stdout
4136de2362d3Smrg# Must ONLY be called from within func_mode_link because
4137de2362d3Smrg# it depends on a number of variable set therein.
4138de2362d3Smrgfunc_emit_cwrapperexe_src ()
4139de2362d3Smrg{
4140de2362d3Smrg	cat <<EOF
4141de2362d3Smrg
4142de2362d3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
41437821949aSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144de2362d3Smrg
4145de2362d3Smrg   The $output program cannot be directly executed until all the libtool
4146de2362d3Smrg   libraries that it depends on are installed.
4147de2362d3Smrg
4148de2362d3Smrg   This wrapper executable should never be moved out of the build directory.
4149de2362d3Smrg   If it is, it will not operate correctly.
4150de2362d3Smrg*/
4151de2362d3SmrgEOF
4152de2362d3Smrg	    cat <<"EOF"
4153de2362d3Smrg#ifdef _MSC_VER
4154de2362d3Smrg# define _CRT_SECURE_NO_DEPRECATE 1
4155de2362d3Smrg#endif
4156de2362d3Smrg#include <stdio.h>
4157de2362d3Smrg#include <stdlib.h>
4158de2362d3Smrg#ifdef _MSC_VER
4159de2362d3Smrg# include <direct.h>
4160de2362d3Smrg# include <process.h>
4161de2362d3Smrg# include <io.h>
4162de2362d3Smrg#else
4163de2362d3Smrg# include <unistd.h>
4164de2362d3Smrg# include <stdint.h>
4165de2362d3Smrg# ifdef __CYGWIN__
4166de2362d3Smrg#  include <io.h>
4167de2362d3Smrg# endif
4168de2362d3Smrg#endif
4169de2362d3Smrg#include <malloc.h>
4170de2362d3Smrg#include <stdarg.h>
4171de2362d3Smrg#include <assert.h>
4172de2362d3Smrg#include <string.h>
4173de2362d3Smrg#include <ctype.h>
4174de2362d3Smrg#include <errno.h>
4175de2362d3Smrg#include <fcntl.h>
4176de2362d3Smrg#include <sys/stat.h>
4177de2362d3Smrg
4178de2362d3Smrg/* declarations of non-ANSI functions */
41797821949aSmrg#if defined(__MINGW32__)
4180de2362d3Smrg# ifdef __STRICT_ANSI__
4181de2362d3Smrgint _putenv (const char *);
4182de2362d3Smrg# endif
41837821949aSmrg#elif defined(__CYGWIN__)
4184de2362d3Smrg# ifdef __STRICT_ANSI__
4185de2362d3Smrgchar *realpath (const char *, char *);
4186de2362d3Smrgint putenv (char *);
4187de2362d3Smrgint setenv (const char *, const char *, int);
4188de2362d3Smrg# endif
41897821949aSmrg/* #elif defined (other platforms) ... */
4190de2362d3Smrg#endif
4191de2362d3Smrg
4192de2362d3Smrg/* portability defines, excluding path handling macros */
41937821949aSmrg#if defined(_MSC_VER)
4194de2362d3Smrg# define setmode _setmode
4195de2362d3Smrg# define stat    _stat
4196de2362d3Smrg# define chmod   _chmod
4197de2362d3Smrg# define getcwd  _getcwd
4198de2362d3Smrg# define putenv  _putenv
4199de2362d3Smrg# define S_IXUSR _S_IEXEC
42007821949aSmrg# ifndef _INTPTR_T_DEFINED
42017821949aSmrg#  define _INTPTR_T_DEFINED
42027821949aSmrg#  define intptr_t int
42037821949aSmrg# endif
42047821949aSmrg#elif defined(__MINGW32__)
4205de2362d3Smrg# define setmode _setmode
4206de2362d3Smrg# define stat    _stat
4207de2362d3Smrg# define chmod   _chmod
4208de2362d3Smrg# define getcwd  _getcwd
4209de2362d3Smrg# define putenv  _putenv
42107821949aSmrg#elif defined(__CYGWIN__)
4211de2362d3Smrg# define HAVE_SETENV
4212de2362d3Smrg# define FOPEN_WB "wb"
42137821949aSmrg/* #elif defined (other platforms) ... */
4214de2362d3Smrg#endif
4215de2362d3Smrg
42167821949aSmrg#if defined(PATH_MAX)
4217de2362d3Smrg# define LT_PATHMAX PATH_MAX
42187821949aSmrg#elif defined(MAXPATHLEN)
4219de2362d3Smrg# define LT_PATHMAX MAXPATHLEN
4220de2362d3Smrg#else
4221de2362d3Smrg# define LT_PATHMAX 1024
4222de2362d3Smrg#endif
4223de2362d3Smrg
4224de2362d3Smrg#ifndef S_IXOTH
4225de2362d3Smrg# define S_IXOTH 0
4226de2362d3Smrg#endif
4227de2362d3Smrg#ifndef S_IXGRP
4228de2362d3Smrg# define S_IXGRP 0
4229de2362d3Smrg#endif
4230de2362d3Smrg
4231de2362d3Smrg/* path handling portability macros */
4232de2362d3Smrg#ifndef DIR_SEPARATOR
4233de2362d3Smrg# define DIR_SEPARATOR '/'
4234de2362d3Smrg# define PATH_SEPARATOR ':'
4235de2362d3Smrg#endif
4236de2362d3Smrg
42377821949aSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
42387821949aSmrg  defined (__OS2__)
4239de2362d3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240de2362d3Smrg# define FOPEN_WB "wb"
4241de2362d3Smrg# ifndef DIR_SEPARATOR_2
4242de2362d3Smrg#  define DIR_SEPARATOR_2 '\\'
4243de2362d3Smrg# endif
4244de2362d3Smrg# ifndef PATH_SEPARATOR_2
4245de2362d3Smrg#  define PATH_SEPARATOR_2 ';'
4246de2362d3Smrg# endif
4247de2362d3Smrg#endif
4248de2362d3Smrg
4249de2362d3Smrg#ifndef DIR_SEPARATOR_2
4250de2362d3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251de2362d3Smrg#else /* DIR_SEPARATOR_2 */
4252de2362d3Smrg# define IS_DIR_SEPARATOR(ch) \
4253de2362d3Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254de2362d3Smrg#endif /* DIR_SEPARATOR_2 */
4255de2362d3Smrg
4256de2362d3Smrg#ifndef PATH_SEPARATOR_2
4257de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258de2362d3Smrg#else /* PATH_SEPARATOR_2 */
4259de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260de2362d3Smrg#endif /* PATH_SEPARATOR_2 */
4261de2362d3Smrg
4262de2362d3Smrg#ifndef FOPEN_WB
4263de2362d3Smrg# define FOPEN_WB "w"
4264de2362d3Smrg#endif
4265de2362d3Smrg#ifndef _O_BINARY
4266de2362d3Smrg# define _O_BINARY 0
4267de2362d3Smrg#endif
4268de2362d3Smrg
4269de2362d3Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270de2362d3Smrg#define XFREE(stale) do { \
42717821949aSmrg  if (stale) { free ((void *) stale); stale = 0; } \
4272de2362d3Smrg} while (0)
4273de2362d3Smrg
42747821949aSmrg#if defined(LT_DEBUGWRAPPER)
4275de2362d3Smrgstatic int lt_debug = 1;
4276de2362d3Smrg#else
4277de2362d3Smrgstatic int lt_debug = 0;
4278de2362d3Smrg#endif
4279de2362d3Smrg
4280de2362d3Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281de2362d3Smrg
4282de2362d3Smrgvoid *xmalloc (size_t num);
4283de2362d3Smrgchar *xstrdup (const char *string);
4284de2362d3Smrgconst char *base_name (const char *name);
4285de2362d3Smrgchar *find_executable (const char *wrapper);
4286de2362d3Smrgchar *chase_symlinks (const char *pathspec);
4287de2362d3Smrgint make_executable (const char *path);
4288de2362d3Smrgint check_executable (const char *path);
4289de2362d3Smrgchar *strendzap (char *str, const char *pat);
4290de2362d3Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4291de2362d3Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
4292de2362d3Smrgstatic const char *nonnull (const char *s);
4293de2362d3Smrgstatic const char *nonempty (const char *s);
4294de2362d3Smrgvoid lt_setenv (const char *name, const char *value);
4295de2362d3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296de2362d3Smrgvoid lt_update_exe_path (const char *name, const char *value);
4297de2362d3Smrgvoid lt_update_lib_path (const char *name, const char *value);
4298de2362d3Smrgchar **prepare_spawn (char **argv);
4299de2362d3Smrgvoid lt_dump_script (FILE *f);
4300de2362d3SmrgEOF
4301de2362d3Smrg
4302de2362d3Smrg	    cat <<EOF
43037821949aSmrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304de2362d3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305de2362d3SmrgEOF
4306de2362d3Smrg
43077821949aSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4308de2362d3Smrg              func_to_host_path "$temp_rpath"
4309de2362d3Smrg	      cat <<EOF
4310de2362d3Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311de2362d3SmrgEOF
4312de2362d3Smrg	    else
4313de2362d3Smrg	      cat <<"EOF"
4314de2362d3Smrgconst char * LIB_PATH_VALUE   = "";
4315de2362d3SmrgEOF
4316de2362d3Smrg	    fi
4317de2362d3Smrg
4318de2362d3Smrg	    if test -n "$dllsearchpath"; then
4319de2362d3Smrg              func_to_host_path "$dllsearchpath:"
4320de2362d3Smrg	      cat <<EOF
4321de2362d3Smrgconst char * EXE_PATH_VARNAME = "PATH";
4322de2362d3Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323de2362d3SmrgEOF
4324de2362d3Smrg	    else
4325de2362d3Smrg	      cat <<"EOF"
4326de2362d3Smrgconst char * EXE_PATH_VARNAME = "";
4327de2362d3Smrgconst char * EXE_PATH_VALUE   = "";
4328de2362d3SmrgEOF
4329de2362d3Smrg	    fi
4330de2362d3Smrg
43317821949aSmrg	    if test "$fast_install" = yes; then
4332de2362d3Smrg	      cat <<EOF
4333de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334de2362d3SmrgEOF
4335de2362d3Smrg	    else
4336de2362d3Smrg	      cat <<EOF
4337de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338de2362d3SmrgEOF
4339de2362d3Smrg	    fi
4340de2362d3Smrg
4341de2362d3Smrg
4342de2362d3Smrg	    cat <<"EOF"
4343de2362d3Smrg
4344de2362d3Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345de2362d3Smrg
4346de2362d3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347de2362d3Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4348de2362d3Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349de2362d3Smrg
4350de2362d3Smrgint
4351de2362d3Smrgmain (int argc, char *argv[])
4352de2362d3Smrg{
4353de2362d3Smrg  char **newargz;
4354de2362d3Smrg  int  newargc;
4355de2362d3Smrg  char *tmp_pathspec;
4356de2362d3Smrg  char *actual_cwrapper_path;
4357de2362d3Smrg  char *actual_cwrapper_name;
4358de2362d3Smrg  char *target_name;
4359de2362d3Smrg  char *lt_argv_zero;
43607821949aSmrg  intptr_t rval = 127;
4361de2362d3Smrg
4362de2362d3Smrg  int i;
4363de2362d3Smrg
4364de2362d3Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
43657821949aSmrg  newargz = XMALLOC (char *, argc + 1);
4366de2362d3Smrg
4367de2362d3Smrg  /* very simple arg parsing; don't want to rely on getopt
4368de2362d3Smrg   * also, copy all non cwrapper options to newargz, except
4369de2362d3Smrg   * argz[0], which is handled differently
4370de2362d3Smrg   */
4371de2362d3Smrg  newargc=0;
4372de2362d3Smrg  for (i = 1; i < argc; i++)
4373de2362d3Smrg    {
43747821949aSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375de2362d3Smrg	{
4376de2362d3SmrgEOF
43777821949aSmrg	    case "$host" in
4378de2362d3Smrg	      *mingw* | *cygwin* )
4379de2362d3Smrg		# make stdout use "unix" line endings
4380de2362d3Smrg		echo "          setmode(1,_O_BINARY);"
4381de2362d3Smrg		;;
4382de2362d3Smrg	      esac
4383de2362d3Smrg
4384de2362d3Smrg	    cat <<"EOF"
4385de2362d3Smrg	  lt_dump_script (stdout);
4386de2362d3Smrg	  return 0;
4387de2362d3Smrg	}
43887821949aSmrg      if (strcmp (argv[i], debug_opt) == 0)
4389de2362d3Smrg	{
4390de2362d3Smrg          lt_debug = 1;
4391de2362d3Smrg          continue;
4392de2362d3Smrg	}
43937821949aSmrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4394de2362d3Smrg        {
4395de2362d3Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4396de2362d3Smrg             namespace, but it is not one of the ones we know about and
4397de2362d3Smrg             have already dealt with, above (inluding dump-script), then
4398de2362d3Smrg             report an error. Otherwise, targets might begin to believe
4399de2362d3Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4400de2362d3Smrg             namespace. The first time any user complains about this, we'll
4401de2362d3Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4402de2362d3Smrg             or a configure.ac-settable value.
4403de2362d3Smrg           */
4404de2362d3Smrg          lt_fatal (__FILE__, __LINE__,
4405de2362d3Smrg		    "unrecognized %s option: '%s'",
4406de2362d3Smrg                    ltwrapper_option_prefix, argv[i]);
4407de2362d3Smrg        }
4408de2362d3Smrg      /* otherwise ... */
4409de2362d3Smrg      newargz[++newargc] = xstrdup (argv[i]);
4410de2362d3Smrg    }
4411de2362d3Smrg  newargz[++newargc] = NULL;
4412de2362d3Smrg
4413de2362d3SmrgEOF
4414de2362d3Smrg	    cat <<EOF
4415de2362d3Smrg  /* The GNU banner must be the first non-error debug message */
44167821949aSmrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4417de2362d3SmrgEOF
4418de2362d3Smrg	    cat <<"EOF"
4419de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4420de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4421de2362d3Smrg
4422de2362d3Smrg  tmp_pathspec = find_executable (argv[0]);
4423de2362d3Smrg  if (tmp_pathspec == NULL)
4424de2362d3Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4425de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
4426de2362d3Smrg                  "(main) found exe (before symlink chase) at: %s\n",
4427de2362d3Smrg		  tmp_pathspec);
4428de2362d3Smrg
4429de2362d3Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4430de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
4431de2362d3Smrg                  "(main) found exe (after symlink chase) at: %s\n",
4432de2362d3Smrg		  actual_cwrapper_path);
4433de2362d3Smrg  XFREE (tmp_pathspec);
4434de2362d3Smrg
4435de2362d3Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436de2362d3Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437de2362d3Smrg
4438de2362d3Smrg  /* wrapper name transforms */
4439de2362d3Smrg  strendzap (actual_cwrapper_name, ".exe");
4440de2362d3Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441de2362d3Smrg  XFREE (actual_cwrapper_name);
4442de2362d3Smrg  actual_cwrapper_name = tmp_pathspec;
4443de2362d3Smrg  tmp_pathspec = 0;
4444de2362d3Smrg
4445de2362d3Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446de2362d3Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447de2362d3Smrg  strendzap (target_name, ".exe");
4448de2362d3Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449de2362d3Smrg  XFREE (target_name);
4450de2362d3Smrg  target_name = tmp_pathspec;
4451de2362d3Smrg  tmp_pathspec = 0;
4452de2362d3Smrg
4453de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
4454de2362d3Smrg		  "(main) libtool target name: %s\n",
4455de2362d3Smrg		  target_name);
4456de2362d3SmrgEOF
4457de2362d3Smrg
4458de2362d3Smrg	    cat <<EOF
4459de2362d3Smrg  newargz[0] =
4460de2362d3Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461de2362d3Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462de2362d3Smrg  strcpy (newargz[0], actual_cwrapper_path);
4463de2362d3Smrg  strcat (newargz[0], "$objdir");
4464de2362d3Smrg  strcat (newargz[0], "/");
4465de2362d3SmrgEOF
4466de2362d3Smrg
4467de2362d3Smrg	    cat <<"EOF"
4468de2362d3Smrg  /* stop here, and copy so we don't have to do this twice */
4469de2362d3Smrg  tmp_pathspec = xstrdup (newargz[0]);
4470de2362d3Smrg
4471de2362d3Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472de2362d3Smrg  strcat (newargz[0], actual_cwrapper_name);
4473de2362d3Smrg
4474de2362d3Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475de2362d3Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476de2362d3Smrg  XFREE (tmp_pathspec);
4477de2362d3Smrg  tmp_pathspec = NULL;
4478de2362d3SmrgEOF
4479de2362d3Smrg
4480de2362d3Smrg	    case $host_os in
4481de2362d3Smrg	      mingw*)
4482de2362d3Smrg	    cat <<"EOF"
4483de2362d3Smrg  {
4484de2362d3Smrg    char* p;
4485de2362d3Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486de2362d3Smrg      {
4487de2362d3Smrg	*p = '/';
4488de2362d3Smrg      }
4489de2362d3Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490de2362d3Smrg      {
4491de2362d3Smrg	*p = '/';
4492de2362d3Smrg      }
4493de2362d3Smrg  }
4494de2362d3SmrgEOF
4495de2362d3Smrg	    ;;
4496de2362d3Smrg	    esac
4497de2362d3Smrg
4498de2362d3Smrg	    cat <<"EOF"
4499de2362d3Smrg  XFREE (target_name);
4500de2362d3Smrg  XFREE (actual_cwrapper_path);
4501de2362d3Smrg  XFREE (actual_cwrapper_name);
4502de2362d3Smrg
4503de2362d3Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504de2362d3Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4505de2362d3Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4506de2362d3Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4507de2362d3Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
4508de2362d3Smrg     libraries must come first. */
4509de2362d3Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4510de2362d3Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511de2362d3Smrg
4512de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4513de2362d3Smrg		  nonnull (lt_argv_zero));
4514de2362d3Smrg  for (i = 0; i < newargc; i++)
4515de2362d3Smrg    {
4516de2362d3Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4517de2362d3Smrg		      i, nonnull (newargz[i]));
4518de2362d3Smrg    }
4519de2362d3Smrg
4520de2362d3SmrgEOF
4521de2362d3Smrg
4522de2362d3Smrg	    case $host_os in
4523de2362d3Smrg	      mingw*)
4524de2362d3Smrg		cat <<"EOF"
4525de2362d3Smrg  /* execv doesn't actually work on mingw as expected on unix */
4526de2362d3Smrg  newargz = prepare_spawn (newargz);
45277821949aSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528de2362d3Smrg  if (rval == -1)
4529de2362d3Smrg    {
4530de2362d3Smrg      /* failed to start process */
4531de2362d3Smrg      lt_debugprintf (__FILE__, __LINE__,
4532de2362d3Smrg		      "(main) failed to launch target \"%s\": %s\n",
4533de2362d3Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4534de2362d3Smrg      return 127;
4535de2362d3Smrg    }
4536de2362d3Smrg  return rval;
4537de2362d3SmrgEOF
4538de2362d3Smrg		;;
4539de2362d3Smrg	      *)
4540de2362d3Smrg		cat <<"EOF"
4541de2362d3Smrg  execv (lt_argv_zero, newargz);
4542de2362d3Smrg  return rval; /* =127, but avoids unused variable warning */
4543de2362d3SmrgEOF
4544de2362d3Smrg		;;
4545de2362d3Smrg	    esac
4546de2362d3Smrg
4547de2362d3Smrg	    cat <<"EOF"
4548de2362d3Smrg}
4549de2362d3Smrg
4550de2362d3Smrgvoid *
4551de2362d3Smrgxmalloc (size_t num)
4552de2362d3Smrg{
4553de2362d3Smrg  void *p = (void *) malloc (num);
4554de2362d3Smrg  if (!p)
4555de2362d3Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556de2362d3Smrg
4557de2362d3Smrg  return p;
4558de2362d3Smrg}
4559de2362d3Smrg
4560de2362d3Smrgchar *
4561de2362d3Smrgxstrdup (const char *string)
4562de2362d3Smrg{
4563de2362d3Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564de2362d3Smrg			  string) : NULL;
4565de2362d3Smrg}
4566de2362d3Smrg
4567de2362d3Smrgconst char *
4568de2362d3Smrgbase_name (const char *name)
4569de2362d3Smrg{
4570de2362d3Smrg  const char *base;
4571de2362d3Smrg
45727821949aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573de2362d3Smrg  /* Skip over the disk name in MSDOS pathnames. */
4574de2362d3Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575de2362d3Smrg    name += 2;
4576de2362d3Smrg#endif
4577de2362d3Smrg
4578de2362d3Smrg  for (base = name; *name; name++)
4579de2362d3Smrg    if (IS_DIR_SEPARATOR (*name))
4580de2362d3Smrg      base = name + 1;
4581de2362d3Smrg  return base;
4582de2362d3Smrg}
4583de2362d3Smrg
4584de2362d3Smrgint
4585de2362d3Smrgcheck_executable (const char *path)
4586de2362d3Smrg{
4587de2362d3Smrg  struct stat st;
4588de2362d3Smrg
4589de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4590de2362d3Smrg                  nonempty (path));
4591de2362d3Smrg  if ((!path) || (!*path))
4592de2362d3Smrg    return 0;
4593de2362d3Smrg
4594de2362d3Smrg  if ((stat (path, &st) >= 0)
4595de2362d3Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596de2362d3Smrg    return 1;
4597de2362d3Smrg  else
4598de2362d3Smrg    return 0;
4599de2362d3Smrg}
4600de2362d3Smrg
4601de2362d3Smrgint
4602de2362d3Smrgmake_executable (const char *path)
4603de2362d3Smrg{
4604de2362d3Smrg  int rval = 0;
4605de2362d3Smrg  struct stat st;
4606de2362d3Smrg
4607de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4608de2362d3Smrg                  nonempty (path));
4609de2362d3Smrg  if ((!path) || (!*path))
4610de2362d3Smrg    return 0;
4611de2362d3Smrg
4612de2362d3Smrg  if (stat (path, &st) >= 0)
4613de2362d3Smrg    {
4614de2362d3Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615de2362d3Smrg    }
4616de2362d3Smrg  return rval;
4617de2362d3Smrg}
4618de2362d3Smrg
4619de2362d3Smrg/* Searches for the full path of the wrapper.  Returns
4620de2362d3Smrg   newly allocated full path name if found, NULL otherwise
4621de2362d3Smrg   Does not chase symlinks, even on platforms that support them.
4622de2362d3Smrg*/
4623de2362d3Smrgchar *
4624de2362d3Smrgfind_executable (const char *wrapper)
4625de2362d3Smrg{
4626de2362d3Smrg  int has_slash = 0;
4627de2362d3Smrg  const char *p;
4628de2362d3Smrg  const char *p_next;
4629de2362d3Smrg  /* static buffer for getcwd */
4630de2362d3Smrg  char tmp[LT_PATHMAX + 1];
46317821949aSmrg  int tmp_len;
4632de2362d3Smrg  char *concat_name;
4633de2362d3Smrg
4634de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4635de2362d3Smrg                  nonempty (wrapper));
4636de2362d3Smrg
4637de2362d3Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638de2362d3Smrg    return NULL;
4639de2362d3Smrg
4640de2362d3Smrg  /* Absolute path? */
46417821949aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642de2362d3Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643de2362d3Smrg    {
4644de2362d3Smrg      concat_name = xstrdup (wrapper);
4645de2362d3Smrg      if (check_executable (concat_name))
4646de2362d3Smrg	return concat_name;
4647de2362d3Smrg      XFREE (concat_name);
4648de2362d3Smrg    }
4649de2362d3Smrg  else
4650de2362d3Smrg    {
4651de2362d3Smrg#endif
4652de2362d3Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653de2362d3Smrg	{
4654de2362d3Smrg	  concat_name = xstrdup (wrapper);
4655de2362d3Smrg	  if (check_executable (concat_name))
4656de2362d3Smrg	    return concat_name;
4657de2362d3Smrg	  XFREE (concat_name);
4658de2362d3Smrg	}
46597821949aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660de2362d3Smrg    }
4661de2362d3Smrg#endif
4662de2362d3Smrg
4663de2362d3Smrg  for (p = wrapper; *p; p++)
4664de2362d3Smrg    if (*p == '/')
4665de2362d3Smrg      {
4666de2362d3Smrg	has_slash = 1;
4667de2362d3Smrg	break;
4668de2362d3Smrg      }
4669de2362d3Smrg  if (!has_slash)
4670de2362d3Smrg    {
4671de2362d3Smrg      /* no slashes; search PATH */
4672de2362d3Smrg      const char *path = getenv ("PATH");
4673de2362d3Smrg      if (path != NULL)
4674de2362d3Smrg	{
4675de2362d3Smrg	  for (p = path; *p; p = p_next)
4676de2362d3Smrg	    {
4677de2362d3Smrg	      const char *q;
4678de2362d3Smrg	      size_t p_len;
4679de2362d3Smrg	      for (q = p; *q; q++)
4680de2362d3Smrg		if (IS_PATH_SEPARATOR (*q))
4681de2362d3Smrg		  break;
46827821949aSmrg	      p_len = q - p;
4683de2362d3Smrg	      p_next = (*q == '\0' ? q : q + 1);
4684de2362d3Smrg	      if (p_len == 0)
4685de2362d3Smrg		{
4686de2362d3Smrg		  /* empty path: current directory */
4687de2362d3Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4688de2362d3Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4689de2362d3Smrg                              nonnull (strerror (errno)));
4690de2362d3Smrg		  tmp_len = strlen (tmp);
4691de2362d3Smrg		  concat_name =
4692de2362d3Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693de2362d3Smrg		  memcpy (concat_name, tmp, tmp_len);
4694de2362d3Smrg		  concat_name[tmp_len] = '/';
4695de2362d3Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696de2362d3Smrg		}
4697de2362d3Smrg	      else
4698de2362d3Smrg		{
4699de2362d3Smrg		  concat_name =
4700de2362d3Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701de2362d3Smrg		  memcpy (concat_name, p, p_len);
4702de2362d3Smrg		  concat_name[p_len] = '/';
4703de2362d3Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4704de2362d3Smrg		}
4705de2362d3Smrg	      if (check_executable (concat_name))
4706de2362d3Smrg		return concat_name;
4707de2362d3Smrg	      XFREE (concat_name);
4708de2362d3Smrg	    }
4709de2362d3Smrg	}
4710de2362d3Smrg      /* not found in PATH; assume curdir */
4711de2362d3Smrg    }
4712de2362d3Smrg  /* Relative path | not found in path: prepend cwd */
4713de2362d3Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
4714de2362d3Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4715de2362d3Smrg              nonnull (strerror (errno)));
4716de2362d3Smrg  tmp_len = strlen (tmp);
4717de2362d3Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718de2362d3Smrg  memcpy (concat_name, tmp, tmp_len);
4719de2362d3Smrg  concat_name[tmp_len] = '/';
4720de2362d3Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4721de2362d3Smrg
4722de2362d3Smrg  if (check_executable (concat_name))
4723de2362d3Smrg    return concat_name;
4724de2362d3Smrg  XFREE (concat_name);
4725de2362d3Smrg  return NULL;
4726de2362d3Smrg}
4727de2362d3Smrg
4728de2362d3Smrgchar *
4729de2362d3Smrgchase_symlinks (const char *pathspec)
4730de2362d3Smrg{
4731de2362d3Smrg#ifndef S_ISLNK
4732de2362d3Smrg  return xstrdup (pathspec);
4733de2362d3Smrg#else
4734de2362d3Smrg  char buf[LT_PATHMAX];
4735de2362d3Smrg  struct stat s;
4736de2362d3Smrg  char *tmp_pathspec = xstrdup (pathspec);
4737de2362d3Smrg  char *p;
4738de2362d3Smrg  int has_symlinks = 0;
4739de2362d3Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740de2362d3Smrg    {
4741de2362d3Smrg      lt_debugprintf (__FILE__, __LINE__,
4742de2362d3Smrg		      "checking path component for symlinks: %s\n",
4743de2362d3Smrg		      tmp_pathspec);
4744de2362d3Smrg      if (lstat (tmp_pathspec, &s) == 0)
4745de2362d3Smrg	{
4746de2362d3Smrg	  if (S_ISLNK (s.st_mode) != 0)
4747de2362d3Smrg	    {
4748de2362d3Smrg	      has_symlinks = 1;
4749de2362d3Smrg	      break;
4750de2362d3Smrg	    }
4751de2362d3Smrg
4752de2362d3Smrg	  /* search backwards for last DIR_SEPARATOR */
4753de2362d3Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754de2362d3Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755de2362d3Smrg	    p--;
4756de2362d3Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757de2362d3Smrg	    {
4758de2362d3Smrg	      /* no more DIR_SEPARATORS left */
4759de2362d3Smrg	      break;
4760de2362d3Smrg	    }
4761de2362d3Smrg	  *p = '\0';
4762de2362d3Smrg	}
4763de2362d3Smrg      else
4764de2362d3Smrg	{
4765de2362d3Smrg	  lt_fatal (__FILE__, __LINE__,
4766de2362d3Smrg		    "error accessing file \"%s\": %s",
4767de2362d3Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4768de2362d3Smrg	}
4769de2362d3Smrg    }
4770de2362d3Smrg  XFREE (tmp_pathspec);
4771de2362d3Smrg
4772de2362d3Smrg  if (!has_symlinks)
4773de2362d3Smrg    {
4774de2362d3Smrg      return xstrdup (pathspec);
4775de2362d3Smrg    }
4776de2362d3Smrg
4777de2362d3Smrg  tmp_pathspec = realpath (pathspec, buf);
4778de2362d3Smrg  if (tmp_pathspec == 0)
4779de2362d3Smrg    {
4780de2362d3Smrg      lt_fatal (__FILE__, __LINE__,
4781de2362d3Smrg		"could not follow symlinks for %s", pathspec);
4782de2362d3Smrg    }
4783de2362d3Smrg  return xstrdup (tmp_pathspec);
4784de2362d3Smrg#endif
4785de2362d3Smrg}
4786de2362d3Smrg
4787de2362d3Smrgchar *
4788de2362d3Smrgstrendzap (char *str, const char *pat)
4789de2362d3Smrg{
4790de2362d3Smrg  size_t len, patlen;
4791de2362d3Smrg
4792de2362d3Smrg  assert (str != NULL);
4793de2362d3Smrg  assert (pat != NULL);
4794de2362d3Smrg
4795de2362d3Smrg  len = strlen (str);
4796de2362d3Smrg  patlen = strlen (pat);
4797de2362d3Smrg
4798de2362d3Smrg  if (patlen <= len)
4799de2362d3Smrg    {
4800de2362d3Smrg      str += len - patlen;
48017821949aSmrg      if (strcmp (str, pat) == 0)
4802de2362d3Smrg	*str = '\0';
4803de2362d3Smrg    }
4804de2362d3Smrg  return str;
4805de2362d3Smrg}
4806de2362d3Smrg
4807de2362d3Smrgvoid
4808de2362d3Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
4809de2362d3Smrg{
4810de2362d3Smrg  va_list args;
4811de2362d3Smrg  if (lt_debug)
4812de2362d3Smrg    {
4813de2362d3Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4814de2362d3Smrg      va_start (args, fmt);
4815de2362d3Smrg      (void) vfprintf (stderr, fmt, args);
4816de2362d3Smrg      va_end (args);
4817de2362d3Smrg    }
4818de2362d3Smrg}
4819de2362d3Smrg
4820de2362d3Smrgstatic void
4821de2362d3Smrglt_error_core (int exit_status, const char *file,
4822de2362d3Smrg	       int line, const char *mode,
4823de2362d3Smrg	       const char *message, va_list ap)
4824de2362d3Smrg{
4825de2362d3Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826de2362d3Smrg  vfprintf (stderr, message, ap);
4827de2362d3Smrg  fprintf (stderr, ".\n");
4828de2362d3Smrg
4829de2362d3Smrg  if (exit_status >= 0)
4830de2362d3Smrg    exit (exit_status);
4831de2362d3Smrg}
4832de2362d3Smrg
4833de2362d3Smrgvoid
4834de2362d3Smrglt_fatal (const char *file, int line, const char *message, ...)
4835de2362d3Smrg{
4836de2362d3Smrg  va_list ap;
4837de2362d3Smrg  va_start (ap, message);
4838de2362d3Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839de2362d3Smrg  va_end (ap);
4840de2362d3Smrg}
4841de2362d3Smrg
4842de2362d3Smrgstatic const char *
4843de2362d3Smrgnonnull (const char *s)
4844de2362d3Smrg{
4845de2362d3Smrg  return s ? s : "(null)";
4846de2362d3Smrg}
4847de2362d3Smrg
4848de2362d3Smrgstatic const char *
4849de2362d3Smrgnonempty (const char *s)
4850de2362d3Smrg{
4851de2362d3Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
4852de2362d3Smrg}
4853de2362d3Smrg
4854de2362d3Smrgvoid
4855de2362d3Smrglt_setenv (const char *name, const char *value)
4856de2362d3Smrg{
4857de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
4858de2362d3Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
4859de2362d3Smrg                  nonnull (name), nonnull (value));
4860de2362d3Smrg  {
4861de2362d3Smrg#ifdef HAVE_SETENV
4862de2362d3Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863de2362d3Smrg    char *str = xstrdup (value);
4864de2362d3Smrg    setenv (name, str, 1);
4865de2362d3Smrg#else
48667821949aSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867de2362d3Smrg    char *str = XMALLOC (char, len);
4868de2362d3Smrg    sprintf (str, "%s=%s", name, value);
4869de2362d3Smrg    if (putenv (str) != EXIT_SUCCESS)
4870de2362d3Smrg      {
4871de2362d3Smrg        XFREE (str);
4872de2362d3Smrg      }
4873de2362d3Smrg#endif
4874de2362d3Smrg  }
4875de2362d3Smrg}
4876de2362d3Smrg
4877de2362d3Smrgchar *
4878de2362d3Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879de2362d3Smrg{
4880de2362d3Smrg  char *new_value;
4881de2362d3Smrg  if (orig_value && *orig_value)
4882de2362d3Smrg    {
48837821949aSmrg      int orig_value_len = strlen (orig_value);
48847821949aSmrg      int add_len = strlen (add);
4885de2362d3Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886de2362d3Smrg      if (to_end)
4887de2362d3Smrg        {
4888de2362d3Smrg          strcpy (new_value, orig_value);
4889de2362d3Smrg          strcpy (new_value + orig_value_len, add);
4890de2362d3Smrg        }
4891de2362d3Smrg      else
4892de2362d3Smrg        {
4893de2362d3Smrg          strcpy (new_value, add);
4894de2362d3Smrg          strcpy (new_value + add_len, orig_value);
4895de2362d3Smrg        }
4896de2362d3Smrg    }
4897de2362d3Smrg  else
4898de2362d3Smrg    {
4899de2362d3Smrg      new_value = xstrdup (add);
4900de2362d3Smrg    }
4901de2362d3Smrg  return new_value;
4902de2362d3Smrg}
4903de2362d3Smrg
4904de2362d3Smrgvoid
4905de2362d3Smrglt_update_exe_path (const char *name, const char *value)
4906de2362d3Smrg{
4907de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
4908de2362d3Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4909de2362d3Smrg                  nonnull (name), nonnull (value));
4910de2362d3Smrg
4911de2362d3Smrg  if (name && *name && value && *value)
4912de2362d3Smrg    {
4913de2362d3Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914de2362d3Smrg      /* some systems can't cope with a ':'-terminated path #' */
49157821949aSmrg      int len = strlen (new_value);
49167821949aSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917de2362d3Smrg        {
49187821949aSmrg          new_value[len-1] = '\0';
4919de2362d3Smrg        }
4920de2362d3Smrg      lt_setenv (name, new_value);
4921de2362d3Smrg      XFREE (new_value);
4922de2362d3Smrg    }
4923de2362d3Smrg}
4924de2362d3Smrg
4925de2362d3Smrgvoid
4926de2362d3Smrglt_update_lib_path (const char *name, const char *value)
4927de2362d3Smrg{
4928de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
4929de2362d3Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4930de2362d3Smrg                  nonnull (name), nonnull (value));
4931de2362d3Smrg
4932de2362d3Smrg  if (name && *name && value && *value)
4933de2362d3Smrg    {
4934de2362d3Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935de2362d3Smrg      lt_setenv (name, new_value);
4936de2362d3Smrg      XFREE (new_value);
4937de2362d3Smrg    }
4938de2362d3Smrg}
4939de2362d3Smrg
4940de2362d3SmrgEOF
4941de2362d3Smrg	    case $host_os in
4942de2362d3Smrg	      mingw*)
4943de2362d3Smrg		cat <<"EOF"
4944de2362d3Smrg
4945de2362d3Smrg/* Prepares an argument vector before calling spawn().
4946de2362d3Smrg   Note that spawn() does not by itself call the command interpreter
4947de2362d3Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4948de2362d3Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4949de2362d3Smrg         GetVersionEx(&v);
4950de2362d3Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4951de2362d3Smrg      }) ? "cmd.exe" : "command.com").
4952de2362d3Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
4953de2362d3Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4954de2362d3Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4955de2362d3Smrg   special way:
4956de2362d3Smrg   - Space and tab are interpreted as delimiters. They are not treated as
4957de2362d3Smrg     delimiters if they are surrounded by double quotes: "...".
4958de2362d3Smrg   - Unescaped double quotes are removed from the input. Their only effect is
4959de2362d3Smrg     that within double quotes, space and tab are treated like normal
4960de2362d3Smrg     characters.
4961de2362d3Smrg   - Backslashes not followed by double quotes are not special.
4962de2362d3Smrg   - But 2*n+1 backslashes followed by a double quote become
4963de2362d3Smrg     n backslashes followed by a double quote (n >= 0):
4964de2362d3Smrg       \" -> "
4965de2362d3Smrg       \\\" -> \"
4966de2362d3Smrg       \\\\\" -> \\"
4967de2362d3Smrg */
4968de2362d3Smrg#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"
4969de2362d3Smrg#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"
4970de2362d3Smrgchar **
4971de2362d3Smrgprepare_spawn (char **argv)
4972de2362d3Smrg{
4973de2362d3Smrg  size_t argc;
4974de2362d3Smrg  char **new_argv;
4975de2362d3Smrg  size_t i;
4976de2362d3Smrg
4977de2362d3Smrg  /* Count number of arguments.  */
4978de2362d3Smrg  for (argc = 0; argv[argc] != NULL; argc++)
4979de2362d3Smrg    ;
4980de2362d3Smrg
4981de2362d3Smrg  /* Allocate new argument vector.  */
4982de2362d3Smrg  new_argv = XMALLOC (char *, argc + 1);
4983de2362d3Smrg
4984de2362d3Smrg  /* Put quoted arguments into the new argument vector.  */
4985de2362d3Smrg  for (i = 0; i < argc; i++)
4986de2362d3Smrg    {
4987de2362d3Smrg      const char *string = argv[i];
4988de2362d3Smrg
4989de2362d3Smrg      if (string[0] == '\0')
4990de2362d3Smrg	new_argv[i] = xstrdup ("\"\"");
4991de2362d3Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4992de2362d3Smrg	{
4993de2362d3Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4994de2362d3Smrg	  size_t length;
4995de2362d3Smrg	  unsigned int backslashes;
4996de2362d3Smrg	  const char *s;
4997de2362d3Smrg	  char *quoted_string;
4998de2362d3Smrg	  char *p;
4999de2362d3Smrg
5000de2362d3Smrg	  length = 0;
5001de2362d3Smrg	  backslashes = 0;
5002de2362d3Smrg	  if (quote_around)
5003de2362d3Smrg	    length++;
5004de2362d3Smrg	  for (s = string; *s != '\0'; s++)
5005de2362d3Smrg	    {
5006de2362d3Smrg	      char c = *s;
5007de2362d3Smrg	      if (c == '"')
5008de2362d3Smrg		length += backslashes + 1;
5009de2362d3Smrg	      length++;
5010de2362d3Smrg	      if (c == '\\')
5011de2362d3Smrg		backslashes++;
5012de2362d3Smrg	      else
5013de2362d3Smrg		backslashes = 0;
5014de2362d3Smrg	    }
5015de2362d3Smrg	  if (quote_around)
5016de2362d3Smrg	    length += backslashes + 1;
5017de2362d3Smrg
5018de2362d3Smrg	  quoted_string = XMALLOC (char, length + 1);
5019de2362d3Smrg
5020de2362d3Smrg	  p = quoted_string;
5021de2362d3Smrg	  backslashes = 0;
5022de2362d3Smrg	  if (quote_around)
5023de2362d3Smrg	    *p++ = '"';
5024de2362d3Smrg	  for (s = string; *s != '\0'; s++)
5025de2362d3Smrg	    {
5026de2362d3Smrg	      char c = *s;
5027de2362d3Smrg	      if (c == '"')
5028de2362d3Smrg		{
5029de2362d3Smrg		  unsigned int j;
5030de2362d3Smrg		  for (j = backslashes + 1; j > 0; j--)
5031de2362d3Smrg		    *p++ = '\\';
5032de2362d3Smrg		}
5033de2362d3Smrg	      *p++ = c;
5034de2362d3Smrg	      if (c == '\\')
5035de2362d3Smrg		backslashes++;
5036de2362d3Smrg	      else
5037de2362d3Smrg		backslashes = 0;
5038de2362d3Smrg	    }
5039de2362d3Smrg	  if (quote_around)
5040de2362d3Smrg	    {
5041de2362d3Smrg	      unsigned int j;
5042de2362d3Smrg	      for (j = backslashes; j > 0; j--)
5043de2362d3Smrg		*p++ = '\\';
5044de2362d3Smrg	      *p++ = '"';
5045de2362d3Smrg	    }
5046de2362d3Smrg	  *p = '\0';
5047de2362d3Smrg
5048de2362d3Smrg	  new_argv[i] = quoted_string;
5049de2362d3Smrg	}
5050de2362d3Smrg      else
5051de2362d3Smrg	new_argv[i] = (char *) string;
5052de2362d3Smrg    }
5053de2362d3Smrg  new_argv[argc] = NULL;
5054de2362d3Smrg
5055de2362d3Smrg  return new_argv;
5056de2362d3Smrg}
5057de2362d3SmrgEOF
5058de2362d3Smrg		;;
5059de2362d3Smrg	    esac
5060de2362d3Smrg
5061de2362d3Smrg            cat <<"EOF"
5062de2362d3Smrgvoid lt_dump_script (FILE* f)
5063de2362d3Smrg{
5064de2362d3SmrgEOF
5065de2362d3Smrg	    func_emit_wrapper yes |
5066de2362d3Smrg	      $SED -n -e '
5067de2362d3Smrgs/^\(.\{79\}\)\(..*\)/\1\
5068de2362d3Smrg\2/
5069de2362d3Smrgh
5070de2362d3Smrgs/\([\\"]\)/\\\1/g
5071de2362d3Smrgs/$/\\n/
5072de2362d3Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
5073de2362d3Smrgg
5074de2362d3SmrgD'
5075de2362d3Smrg            cat <<"EOF"
5076de2362d3Smrg}
5077de2362d3SmrgEOF
5078de2362d3Smrg}
5079de2362d3Smrg# end: func_emit_cwrapperexe_src
5080de2362d3Smrg
5081de2362d3Smrg# func_win32_import_lib_p ARG
5082de2362d3Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
5083de2362d3Smrgfunc_win32_import_lib_p ()
5084de2362d3Smrg{
50857821949aSmrg    $opt_debug
5086de2362d3Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5087de2362d3Smrg    *import*) : ;;
5088de2362d3Smrg    *) false ;;
5089de2362d3Smrg    esac
5090de2362d3Smrg}
5091de2362d3Smrg
5092de2362d3Smrg# func_mode_link arg...
5093de2362d3Smrgfunc_mode_link ()
5094de2362d3Smrg{
50957821949aSmrg    $opt_debug
5096de2362d3Smrg    case $host in
5097de2362d3Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098de2362d3Smrg      # It is impossible to link a dll without this setting, and
5099de2362d3Smrg      # we shouldn't force the makefile maintainer to figure out
51007821949aSmrg      # which system we are compiling for in order to pass an extra
5101de2362d3Smrg      # flag for every libtool invocation.
5102de2362d3Smrg      # allow_undefined=no
5103de2362d3Smrg
5104de2362d3Smrg      # FIXME: Unfortunately, there are problems with the above when trying
51057821949aSmrg      # to make a dll which has undefined symbols, in which case not
5106de2362d3Smrg      # even a static library is built.  For now, we need to specify
5107de2362d3Smrg      # -no-undefined on the libtool link line when we can be certain
5108de2362d3Smrg      # that all symbols are satisfied, otherwise we get a static library.
5109de2362d3Smrg      allow_undefined=yes
5110de2362d3Smrg      ;;
5111de2362d3Smrg    *)
5112de2362d3Smrg      allow_undefined=yes
5113de2362d3Smrg      ;;
5114de2362d3Smrg    esac
5115de2362d3Smrg    libtool_args=$nonopt
5116de2362d3Smrg    base_compile="$nonopt $@"
5117de2362d3Smrg    compile_command=$nonopt
5118de2362d3Smrg    finalize_command=$nonopt
5119de2362d3Smrg
5120de2362d3Smrg    compile_rpath=
5121de2362d3Smrg    finalize_rpath=
5122de2362d3Smrg    compile_shlibpath=
5123de2362d3Smrg    finalize_shlibpath=
5124de2362d3Smrg    convenience=
5125de2362d3Smrg    old_convenience=
5126de2362d3Smrg    deplibs=
5127de2362d3Smrg    old_deplibs=
5128de2362d3Smrg    compiler_flags=
5129de2362d3Smrg    linker_flags=
5130de2362d3Smrg    dllsearchpath=
5131de2362d3Smrg    lib_search_path=`pwd`
5132de2362d3Smrg    inst_prefix_dir=
5133de2362d3Smrg    new_inherited_linker_flags=
5134de2362d3Smrg
5135de2362d3Smrg    avoid_version=no
5136de2362d3Smrg    bindir=
5137de2362d3Smrg    dlfiles=
5138de2362d3Smrg    dlprefiles=
5139de2362d3Smrg    dlself=no
5140de2362d3Smrg    export_dynamic=no
5141de2362d3Smrg    export_symbols=
5142de2362d3Smrg    export_symbols_regex=
5143de2362d3Smrg    generated=
5144de2362d3Smrg    libobjs=
5145de2362d3Smrg    ltlibs=
5146de2362d3Smrg    module=no
5147de2362d3Smrg    no_install=no
5148de2362d3Smrg    objs=
5149de2362d3Smrg    non_pic_objects=
5150de2362d3Smrg    precious_files_regex=
5151de2362d3Smrg    prefer_static_libs=no
51527821949aSmrg    preload=no
5153de2362d3Smrg    prev=
5154de2362d3Smrg    prevarg=
5155de2362d3Smrg    release=
5156de2362d3Smrg    rpath=
5157de2362d3Smrg    xrpath=
5158de2362d3Smrg    perm_rpath=
5159de2362d3Smrg    temp_rpath=
5160de2362d3Smrg    thread_safe=no
5161de2362d3Smrg    vinfo=
5162de2362d3Smrg    vinfo_number=no
5163de2362d3Smrg    weak_libs=
51647821949aSmrg    single_module="${wl}-single_module"
5165de2362d3Smrg    func_infer_tag $base_compile
5166de2362d3Smrg
5167de2362d3Smrg    # We need to know -static, to get the right output filenames.
5168de2362d3Smrg    for arg
5169de2362d3Smrg    do
5170de2362d3Smrg      case $arg in
5171de2362d3Smrg      -shared)
51727821949aSmrg	test "$build_libtool_libs" != yes && \
51737821949aSmrg	  func_fatal_configuration "can not build a shared library"
5174de2362d3Smrg	build_old_libs=no
5175de2362d3Smrg	break
5176de2362d3Smrg	;;
5177de2362d3Smrg      -all-static | -static | -static-libtool-libs)
5178de2362d3Smrg	case $arg in
5179de2362d3Smrg	-all-static)
51807821949aSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181de2362d3Smrg	    func_warning "complete static linking is impossible in this configuration"
5182de2362d3Smrg	  fi
5183de2362d3Smrg	  if test -n "$link_static_flag"; then
5184de2362d3Smrg	    dlopen_self=$dlopen_self_static
5185de2362d3Smrg	  fi
5186de2362d3Smrg	  prefer_static_libs=yes
5187de2362d3Smrg	  ;;
5188de2362d3Smrg	-static)
5189de2362d3Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190de2362d3Smrg	    dlopen_self=$dlopen_self_static
5191de2362d3Smrg	  fi
5192de2362d3Smrg	  prefer_static_libs=built
5193de2362d3Smrg	  ;;
5194de2362d3Smrg	-static-libtool-libs)
5195de2362d3Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196de2362d3Smrg	    dlopen_self=$dlopen_self_static
5197de2362d3Smrg	  fi
5198de2362d3Smrg	  prefer_static_libs=yes
5199de2362d3Smrg	  ;;
5200de2362d3Smrg	esac
5201de2362d3Smrg	build_libtool_libs=no
5202de2362d3Smrg	build_old_libs=yes
5203de2362d3Smrg	break
5204de2362d3Smrg	;;
5205de2362d3Smrg      esac
5206de2362d3Smrg    done
5207de2362d3Smrg
5208de2362d3Smrg    # See if our shared archives depend on static archives.
5209de2362d3Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210de2362d3Smrg
5211de2362d3Smrg    # Go through the arguments, transforming them on the way.
5212de2362d3Smrg    while test "$#" -gt 0; do
52137821949aSmrg      arg="$1"
5214de2362d3Smrg      shift
5215de2362d3Smrg      func_quote_for_eval "$arg"
5216de2362d3Smrg      qarg=$func_quote_for_eval_unquoted_result
5217de2362d3Smrg      func_append libtool_args " $func_quote_for_eval_result"
5218de2362d3Smrg
5219de2362d3Smrg      # If the previous option needs an argument, assign it.
5220de2362d3Smrg      if test -n "$prev"; then
5221de2362d3Smrg	case $prev in
5222de2362d3Smrg	output)
5223de2362d3Smrg	  func_append compile_command " @OUTPUT@"
5224de2362d3Smrg	  func_append finalize_command " @OUTPUT@"
5225de2362d3Smrg	  ;;
5226de2362d3Smrg	esac
5227de2362d3Smrg
5228de2362d3Smrg	case $prev in
5229de2362d3Smrg	bindir)
52307821949aSmrg	  bindir="$arg"
5231de2362d3Smrg	  prev=
5232de2362d3Smrg	  continue
5233de2362d3Smrg	  ;;
5234de2362d3Smrg	dlfiles|dlprefiles)
52357821949aSmrg	  if test "$preload" = no; then
5236de2362d3Smrg	    # Add the symbol object into the linking commands.
5237de2362d3Smrg	    func_append compile_command " @SYMFILE@"
5238de2362d3Smrg	    func_append finalize_command " @SYMFILE@"
52397821949aSmrg	    preload=yes
52407821949aSmrg	  fi
5241de2362d3Smrg	  case $arg in
5242de2362d3Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5243de2362d3Smrg	  force)
52447821949aSmrg	    if test "$dlself" = no; then
5245de2362d3Smrg	      dlself=needless
5246de2362d3Smrg	      export_dynamic=yes
5247de2362d3Smrg	    fi
5248de2362d3Smrg	    prev=
5249de2362d3Smrg	    continue
5250de2362d3Smrg	    ;;
5251de2362d3Smrg	  self)
52527821949aSmrg	    if test "$prev" = dlprefiles; then
5253de2362d3Smrg	      dlself=yes
52547821949aSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255de2362d3Smrg	      dlself=yes
5256de2362d3Smrg	    else
5257de2362d3Smrg	      dlself=needless
5258de2362d3Smrg	      export_dynamic=yes
5259de2362d3Smrg	    fi
5260de2362d3Smrg	    prev=
5261de2362d3Smrg	    continue
5262de2362d3Smrg	    ;;
5263de2362d3Smrg	  *)
52647821949aSmrg	    if test "$prev" = dlfiles; then
5265de2362d3Smrg	      func_append dlfiles " $arg"
5266de2362d3Smrg	    else
5267de2362d3Smrg	      func_append dlprefiles " $arg"
5268de2362d3Smrg	    fi
5269de2362d3Smrg	    prev=
5270de2362d3Smrg	    continue
5271de2362d3Smrg	    ;;
5272de2362d3Smrg	  esac
5273de2362d3Smrg	  ;;
5274de2362d3Smrg	expsyms)
52757821949aSmrg	  export_symbols="$arg"
5276de2362d3Smrg	  test -f "$arg" \
52777821949aSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278de2362d3Smrg	  prev=
5279de2362d3Smrg	  continue
5280de2362d3Smrg	  ;;
5281de2362d3Smrg	expsyms_regex)
52827821949aSmrg	  export_symbols_regex="$arg"
5283de2362d3Smrg	  prev=
5284de2362d3Smrg	  continue
5285de2362d3Smrg	  ;;
5286de2362d3Smrg	framework)
5287de2362d3Smrg	  case $host in
5288de2362d3Smrg	    *-*-darwin*)
5289de2362d3Smrg	      case "$deplibs " in
5290de2362d3Smrg		*" $qarg.ltframework "*) ;;
5291de2362d3Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292de2362d3Smrg		   ;;
5293de2362d3Smrg	      esac
5294de2362d3Smrg	      ;;
5295de2362d3Smrg	  esac
5296de2362d3Smrg	  prev=
5297de2362d3Smrg	  continue
5298de2362d3Smrg	  ;;
5299de2362d3Smrg	inst_prefix)
53007821949aSmrg	  inst_prefix_dir="$arg"
5301de2362d3Smrg	  prev=
5302de2362d3Smrg	  continue
5303de2362d3Smrg	  ;;
5304de2362d3Smrg	objectlist)
5305de2362d3Smrg	  if test -f "$arg"; then
5306de2362d3Smrg	    save_arg=$arg
5307de2362d3Smrg	    moreargs=
5308de2362d3Smrg	    for fil in `cat "$save_arg"`
5309de2362d3Smrg	    do
5310de2362d3Smrg#	      func_append moreargs " $fil"
5311de2362d3Smrg	      arg=$fil
5312de2362d3Smrg	      # A libtool-controlled object.
5313de2362d3Smrg
5314de2362d3Smrg	      # Check to see that this really is a libtool object.
5315de2362d3Smrg	      if func_lalib_unsafe_p "$arg"; then
5316de2362d3Smrg		pic_object=
5317de2362d3Smrg		non_pic_object=
5318de2362d3Smrg
5319de2362d3Smrg		# Read the .lo file
5320de2362d3Smrg		func_source "$arg"
5321de2362d3Smrg
5322de2362d3Smrg		if test -z "$pic_object" ||
5323de2362d3Smrg		   test -z "$non_pic_object" ||
53247821949aSmrg		   test "$pic_object" = none &&
53257821949aSmrg		   test "$non_pic_object" = none; then
53267821949aSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327de2362d3Smrg		fi
5328de2362d3Smrg
5329de2362d3Smrg		# Extract subdirectory from the argument.
5330de2362d3Smrg		func_dirname "$arg" "/" ""
53317821949aSmrg		xdir="$func_dirname_result"
5332de2362d3Smrg
53337821949aSmrg		if test "$pic_object" != none; then
5334de2362d3Smrg		  # Prepend the subdirectory the object is found in.
53357821949aSmrg		  pic_object="$xdir$pic_object"
5336de2362d3Smrg
53377821949aSmrg		  if test "$prev" = dlfiles; then
53387821949aSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5339de2362d3Smrg		      func_append dlfiles " $pic_object"
5340de2362d3Smrg		      prev=
5341de2362d3Smrg		      continue
5342de2362d3Smrg		    else
5343de2362d3Smrg		      # If libtool objects are unsupported, then we need to preload.
5344de2362d3Smrg		      prev=dlprefiles
5345de2362d3Smrg		    fi
5346de2362d3Smrg		  fi
5347de2362d3Smrg
5348de2362d3Smrg		  # CHECK ME:  I think I busted this.  -Ossama
53497821949aSmrg		  if test "$prev" = dlprefiles; then
5350de2362d3Smrg		    # Preload the old-style object.
5351de2362d3Smrg		    func_append dlprefiles " $pic_object"
5352de2362d3Smrg		    prev=
5353de2362d3Smrg		  fi
5354de2362d3Smrg
5355de2362d3Smrg		  # A PIC object.
5356de2362d3Smrg		  func_append libobjs " $pic_object"
53577821949aSmrg		  arg="$pic_object"
5358de2362d3Smrg		fi
5359de2362d3Smrg
5360de2362d3Smrg		# Non-PIC object.
53617821949aSmrg		if test "$non_pic_object" != none; then
5362de2362d3Smrg		  # Prepend the subdirectory the object is found in.
53637821949aSmrg		  non_pic_object="$xdir$non_pic_object"
5364de2362d3Smrg
5365de2362d3Smrg		  # A standard non-PIC object
5366de2362d3Smrg		  func_append non_pic_objects " $non_pic_object"
53677821949aSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
53687821949aSmrg		    arg="$non_pic_object"
5369de2362d3Smrg		  fi
5370de2362d3Smrg		else
5371de2362d3Smrg		  # If the PIC object exists, use it instead.
5372de2362d3Smrg		  # $xdir was prepended to $pic_object above.
53737821949aSmrg		  non_pic_object="$pic_object"
5374de2362d3Smrg		  func_append non_pic_objects " $non_pic_object"
5375de2362d3Smrg		fi
5376de2362d3Smrg	      else
5377de2362d3Smrg		# Only an error if not doing a dry-run.
5378de2362d3Smrg		if $opt_dry_run; then
5379de2362d3Smrg		  # Extract subdirectory from the argument.
5380de2362d3Smrg		  func_dirname "$arg" "/" ""
53817821949aSmrg		  xdir="$func_dirname_result"
5382de2362d3Smrg
5383de2362d3Smrg		  func_lo2o "$arg"
5384de2362d3Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385de2362d3Smrg		  non_pic_object=$xdir$func_lo2o_result
5386de2362d3Smrg		  func_append libobjs " $pic_object"
5387de2362d3Smrg		  func_append non_pic_objects " $non_pic_object"
5388de2362d3Smrg	        else
53897821949aSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390de2362d3Smrg		fi
5391de2362d3Smrg	      fi
5392de2362d3Smrg	    done
5393de2362d3Smrg	  else
53947821949aSmrg	    func_fatal_error "link input file \`$arg' does not exist"
5395de2362d3Smrg	  fi
5396de2362d3Smrg	  arg=$save_arg
5397de2362d3Smrg	  prev=
5398de2362d3Smrg	  continue
5399de2362d3Smrg	  ;;
5400de2362d3Smrg	precious_regex)
54017821949aSmrg	  precious_files_regex="$arg"
5402de2362d3Smrg	  prev=
5403de2362d3Smrg	  continue
5404de2362d3Smrg	  ;;
5405de2362d3Smrg	release)
54067821949aSmrg	  release="-$arg"
5407de2362d3Smrg	  prev=
5408de2362d3Smrg	  continue
5409de2362d3Smrg	  ;;
5410de2362d3Smrg	rpath | xrpath)
5411de2362d3Smrg	  # We need an absolute path.
5412de2362d3Smrg	  case $arg in
5413de2362d3Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414de2362d3Smrg	  *)
5415de2362d3Smrg	    func_fatal_error "only absolute run-paths are allowed"
5416de2362d3Smrg	    ;;
5417de2362d3Smrg	  esac
54187821949aSmrg	  if test "$prev" = rpath; then
5419de2362d3Smrg	    case "$rpath " in
5420de2362d3Smrg	    *" $arg "*) ;;
5421de2362d3Smrg	    *) func_append rpath " $arg" ;;
5422de2362d3Smrg	    esac
5423de2362d3Smrg	  else
5424de2362d3Smrg	    case "$xrpath " in
5425de2362d3Smrg	    *" $arg "*) ;;
5426de2362d3Smrg	    *) func_append xrpath " $arg" ;;
5427de2362d3Smrg	    esac
5428de2362d3Smrg	  fi
5429de2362d3Smrg	  prev=
5430de2362d3Smrg	  continue
5431de2362d3Smrg	  ;;
5432de2362d3Smrg	shrext)
54337821949aSmrg	  shrext_cmds="$arg"
5434de2362d3Smrg	  prev=
5435de2362d3Smrg	  continue
5436de2362d3Smrg	  ;;
5437de2362d3Smrg	weak)
5438de2362d3Smrg	  func_append weak_libs " $arg"
5439de2362d3Smrg	  prev=
5440de2362d3Smrg	  continue
5441de2362d3Smrg	  ;;
5442de2362d3Smrg	xcclinker)
5443de2362d3Smrg	  func_append linker_flags " $qarg"
5444de2362d3Smrg	  func_append compiler_flags " $qarg"
5445de2362d3Smrg	  prev=
5446de2362d3Smrg	  func_append compile_command " $qarg"
5447de2362d3Smrg	  func_append finalize_command " $qarg"
5448de2362d3Smrg	  continue
5449de2362d3Smrg	  ;;
5450de2362d3Smrg	xcompiler)
5451de2362d3Smrg	  func_append compiler_flags " $qarg"
5452de2362d3Smrg	  prev=
5453de2362d3Smrg	  func_append compile_command " $qarg"
5454de2362d3Smrg	  func_append finalize_command " $qarg"
5455de2362d3Smrg	  continue
5456de2362d3Smrg	  ;;
5457de2362d3Smrg	xlinker)
5458de2362d3Smrg	  func_append linker_flags " $qarg"
5459de2362d3Smrg	  func_append compiler_flags " $wl$qarg"
5460de2362d3Smrg	  prev=
5461de2362d3Smrg	  func_append compile_command " $wl$qarg"
5462de2362d3Smrg	  func_append finalize_command " $wl$qarg"
5463de2362d3Smrg	  continue
5464de2362d3Smrg	  ;;
5465de2362d3Smrg	*)
5466de2362d3Smrg	  eval "$prev=\"\$arg\""
5467de2362d3Smrg	  prev=
5468de2362d3Smrg	  continue
5469de2362d3Smrg	  ;;
5470de2362d3Smrg	esac
5471de2362d3Smrg      fi # test -n "$prev"
5472de2362d3Smrg
54737821949aSmrg      prevarg="$arg"
5474de2362d3Smrg
5475de2362d3Smrg      case $arg in
5476de2362d3Smrg      -all-static)
5477de2362d3Smrg	if test -n "$link_static_flag"; then
5478de2362d3Smrg	  # See comment for -static flag below, for more details.
5479de2362d3Smrg	  func_append compile_command " $link_static_flag"
5480de2362d3Smrg	  func_append finalize_command " $link_static_flag"
5481de2362d3Smrg	fi
5482de2362d3Smrg	continue
5483de2362d3Smrg	;;
5484de2362d3Smrg
5485de2362d3Smrg      -allow-undefined)
5486de2362d3Smrg	# FIXME: remove this flag sometime in the future.
54877821949aSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488de2362d3Smrg	;;
5489de2362d3Smrg
5490de2362d3Smrg      -avoid-version)
5491de2362d3Smrg	avoid_version=yes
5492de2362d3Smrg	continue
5493de2362d3Smrg	;;
5494de2362d3Smrg
5495de2362d3Smrg      -bindir)
5496de2362d3Smrg	prev=bindir
5497de2362d3Smrg	continue
5498de2362d3Smrg	;;
5499de2362d3Smrg
5500de2362d3Smrg      -dlopen)
5501de2362d3Smrg	prev=dlfiles
5502de2362d3Smrg	continue
5503de2362d3Smrg	;;
5504de2362d3Smrg
5505de2362d3Smrg      -dlpreopen)
5506de2362d3Smrg	prev=dlprefiles
5507de2362d3Smrg	continue
5508de2362d3Smrg	;;
5509de2362d3Smrg
5510de2362d3Smrg      -export-dynamic)
5511de2362d3Smrg	export_dynamic=yes
5512de2362d3Smrg	continue
5513de2362d3Smrg	;;
5514de2362d3Smrg
5515de2362d3Smrg      -export-symbols | -export-symbols-regex)
5516de2362d3Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517de2362d3Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518de2362d3Smrg	fi
55197821949aSmrg	if test "X$arg" = "X-export-symbols"; then
5520de2362d3Smrg	  prev=expsyms
5521de2362d3Smrg	else
5522de2362d3Smrg	  prev=expsyms_regex
5523de2362d3Smrg	fi
5524de2362d3Smrg	continue
5525de2362d3Smrg	;;
5526de2362d3Smrg
5527de2362d3Smrg      -framework)
5528de2362d3Smrg	prev=framework
5529de2362d3Smrg	continue
5530de2362d3Smrg	;;
5531de2362d3Smrg
5532de2362d3Smrg      -inst-prefix-dir)
5533de2362d3Smrg	prev=inst_prefix
5534de2362d3Smrg	continue
5535de2362d3Smrg	;;
5536de2362d3Smrg
5537de2362d3Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538de2362d3Smrg      # so, if we see these flags be careful not to treat them like -L
5539de2362d3Smrg      -L[A-Z][A-Z]*:*)
5540de2362d3Smrg	case $with_gcc/$host in
5541de2362d3Smrg	no/*-*-irix* | /*-*-irix*)
5542de2362d3Smrg	  func_append compile_command " $arg"
5543de2362d3Smrg	  func_append finalize_command " $arg"
5544de2362d3Smrg	  ;;
5545de2362d3Smrg	esac
5546de2362d3Smrg	continue
5547de2362d3Smrg	;;
5548de2362d3Smrg
5549de2362d3Smrg      -L*)
5550de2362d3Smrg	func_stripname "-L" '' "$arg"
5551de2362d3Smrg	if test -z "$func_stripname_result"; then
5552de2362d3Smrg	  if test "$#" -gt 0; then
55537821949aSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554de2362d3Smrg	  else
55557821949aSmrg	    func_fatal_error "need path for \`-L' option"
5556de2362d3Smrg	  fi
5557de2362d3Smrg	fi
5558de2362d3Smrg	func_resolve_sysroot "$func_stripname_result"
5559de2362d3Smrg	dir=$func_resolve_sysroot_result
5560de2362d3Smrg	# We need an absolute path.
5561de2362d3Smrg	case $dir in
5562de2362d3Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563de2362d3Smrg	*)
5564de2362d3Smrg	  absdir=`cd "$dir" && pwd`
5565de2362d3Smrg	  test -z "$absdir" && \
55667821949aSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
55677821949aSmrg	  dir="$absdir"
5568de2362d3Smrg	  ;;
5569de2362d3Smrg	esac
5570de2362d3Smrg	case "$deplibs " in
5571de2362d3Smrg	*" -L$dir "* | *" $arg "*)
5572de2362d3Smrg	  # Will only happen for absolute or sysroot arguments
5573de2362d3Smrg	  ;;
5574de2362d3Smrg	*)
5575de2362d3Smrg	  # Preserve sysroot, but never include relative directories
5576de2362d3Smrg	  case $dir in
5577de2362d3Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5578de2362d3Smrg	    *) func_append deplibs " -L$dir" ;;
5579de2362d3Smrg	  esac
5580de2362d3Smrg	  func_append lib_search_path " $dir"
5581de2362d3Smrg	  ;;
5582de2362d3Smrg	esac
5583de2362d3Smrg	case $host in
5584de2362d3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5585de2362d3Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586de2362d3Smrg	  case :$dllsearchpath: in
5587de2362d3Smrg	  *":$dir:"*) ;;
5588de2362d3Smrg	  ::) dllsearchpath=$dir;;
5589de2362d3Smrg	  *) func_append dllsearchpath ":$dir";;
5590de2362d3Smrg	  esac
5591de2362d3Smrg	  case :$dllsearchpath: in
5592de2362d3Smrg	  *":$testbindir:"*) ;;
5593de2362d3Smrg	  ::) dllsearchpath=$testbindir;;
5594de2362d3Smrg	  *) func_append dllsearchpath ":$testbindir";;
5595de2362d3Smrg	  esac
5596de2362d3Smrg	  ;;
5597de2362d3Smrg	esac
5598de2362d3Smrg	continue
5599de2362d3Smrg	;;
5600de2362d3Smrg
5601de2362d3Smrg      -l*)
56027821949aSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603de2362d3Smrg	  case $host in
5604de2362d3Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605de2362d3Smrg	    # These systems don't actually have a C or math library (as such)
5606de2362d3Smrg	    continue
5607de2362d3Smrg	    ;;
5608de2362d3Smrg	  *-*-os2*)
5609de2362d3Smrg	    # These systems don't actually have a C library (as such)
56107821949aSmrg	    test "X$arg" = "X-lc" && continue
5611de2362d3Smrg	    ;;
56127821949aSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613de2362d3Smrg	    # Do not include libc due to us having libc/libc_r.
56147821949aSmrg	    test "X$arg" = "X-lc" && continue
5615de2362d3Smrg	    ;;
5616de2362d3Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617de2362d3Smrg	    # Rhapsody C and math libraries are in the System framework
5618de2362d3Smrg	    func_append deplibs " System.ltframework"
5619de2362d3Smrg	    continue
5620de2362d3Smrg	    ;;
5621de2362d3Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622de2362d3Smrg	    # Causes problems with __ctype
56237821949aSmrg	    test "X$arg" = "X-lc" && continue
5624de2362d3Smrg	    ;;
5625de2362d3Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626de2362d3Smrg	    # Compiler inserts libc in the correct place for threads to work
56277821949aSmrg	    test "X$arg" = "X-lc" && continue
5628de2362d3Smrg	    ;;
5629de2362d3Smrg	  esac
56307821949aSmrg	elif test "X$arg" = "X-lc_r"; then
5631de2362d3Smrg	 case $host in
56327821949aSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633de2362d3Smrg	   # Do not include libc_r directly, use -pthread flag.
5634de2362d3Smrg	   continue
5635de2362d3Smrg	   ;;
5636de2362d3Smrg	 esac
5637de2362d3Smrg	fi
5638de2362d3Smrg	func_append deplibs " $arg"
5639de2362d3Smrg	continue
5640de2362d3Smrg	;;
5641de2362d3Smrg
5642de2362d3Smrg      -module)
5643de2362d3Smrg	module=yes
5644de2362d3Smrg	continue
5645de2362d3Smrg	;;
5646de2362d3Smrg
5647de2362d3Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648de2362d3Smrg      # classes, name mangling, and exception handling.
5649de2362d3Smrg      # Darwin uses the -arch flag to determine output architecture.
5650de2362d3Smrg      -model|-arch|-isysroot|--sysroot)
5651de2362d3Smrg	func_append compiler_flags " $arg"
5652de2362d3Smrg	func_append compile_command " $arg"
5653de2362d3Smrg	func_append finalize_command " $arg"
5654de2362d3Smrg	prev=xcompiler
5655de2362d3Smrg	continue
5656de2362d3Smrg	;;
5657de2362d3Smrg
5658de2362d3Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659de2362d3Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
5660de2362d3Smrg	func_append compiler_flags " $arg"
5661de2362d3Smrg	func_append compile_command " $arg"
5662de2362d3Smrg	func_append finalize_command " $arg"
5663de2362d3Smrg	case "$new_inherited_linker_flags " in
5664de2362d3Smrg	    *" $arg "*) ;;
5665de2362d3Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666de2362d3Smrg	esac
5667de2362d3Smrg	continue
5668de2362d3Smrg	;;
5669de2362d3Smrg
5670de2362d3Smrg      -multi_module)
56717821949aSmrg	single_module="${wl}-multi_module"
5672de2362d3Smrg	continue
5673de2362d3Smrg	;;
5674de2362d3Smrg
5675de2362d3Smrg      -no-fast-install)
5676de2362d3Smrg	fast_install=no
5677de2362d3Smrg	continue
5678de2362d3Smrg	;;
5679de2362d3Smrg
5680de2362d3Smrg      -no-install)
5681de2362d3Smrg	case $host in
5682de2362d3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683de2362d3Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5684de2362d3Smrg	  # and Darwin in order for the loader to find any dlls it needs.
56857821949aSmrg	  func_warning "\`-no-install' is ignored for $host"
56867821949aSmrg	  func_warning "assuming \`-no-fast-install' instead"
5687de2362d3Smrg	  fast_install=no
5688de2362d3Smrg	  ;;
5689de2362d3Smrg	*) no_install=yes ;;
5690de2362d3Smrg	esac
5691de2362d3Smrg	continue
5692de2362d3Smrg	;;
5693de2362d3Smrg
5694de2362d3Smrg      -no-undefined)
5695de2362d3Smrg	allow_undefined=no
5696de2362d3Smrg	continue
5697de2362d3Smrg	;;
5698de2362d3Smrg
5699de2362d3Smrg      -objectlist)
5700de2362d3Smrg	prev=objectlist
5701de2362d3Smrg	continue
5702de2362d3Smrg	;;
5703de2362d3Smrg
5704de2362d3Smrg      -o) prev=output ;;
5705de2362d3Smrg
5706de2362d3Smrg      -precious-files-regex)
5707de2362d3Smrg	prev=precious_regex
5708de2362d3Smrg	continue
5709de2362d3Smrg	;;
5710de2362d3Smrg
5711de2362d3Smrg      -release)
5712de2362d3Smrg	prev=release
5713de2362d3Smrg	continue
5714de2362d3Smrg	;;
5715de2362d3Smrg
5716de2362d3Smrg      -rpath)
5717de2362d3Smrg	prev=rpath
5718de2362d3Smrg	continue
5719de2362d3Smrg	;;
5720de2362d3Smrg
5721de2362d3Smrg      -R)
5722de2362d3Smrg	prev=xrpath
5723de2362d3Smrg	continue
5724de2362d3Smrg	;;
5725de2362d3Smrg
5726de2362d3Smrg      -R*)
5727de2362d3Smrg	func_stripname '-R' '' "$arg"
5728de2362d3Smrg	dir=$func_stripname_result
5729de2362d3Smrg	# We need an absolute path.
5730de2362d3Smrg	case $dir in
5731de2362d3Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5732de2362d3Smrg	=*)
5733de2362d3Smrg	  func_stripname '=' '' "$dir"
5734de2362d3Smrg	  dir=$lt_sysroot$func_stripname_result
5735de2362d3Smrg	  ;;
5736de2362d3Smrg	*)
5737de2362d3Smrg	  func_fatal_error "only absolute run-paths are allowed"
5738de2362d3Smrg	  ;;
5739de2362d3Smrg	esac
5740de2362d3Smrg	case "$xrpath " in
5741de2362d3Smrg	*" $dir "*) ;;
5742de2362d3Smrg	*) func_append xrpath " $dir" ;;
5743de2362d3Smrg	esac
5744de2362d3Smrg	continue
5745de2362d3Smrg	;;
5746de2362d3Smrg
5747de2362d3Smrg      -shared)
5748de2362d3Smrg	# The effects of -shared are defined in a previous loop.
5749de2362d3Smrg	continue
5750de2362d3Smrg	;;
5751de2362d3Smrg
5752de2362d3Smrg      -shrext)
5753de2362d3Smrg	prev=shrext
5754de2362d3Smrg	continue
5755de2362d3Smrg	;;
5756de2362d3Smrg
5757de2362d3Smrg      -static | -static-libtool-libs)
5758de2362d3Smrg	# The effects of -static are defined in a previous loop.
5759de2362d3Smrg	# We used to do the same as -all-static on platforms that
5760de2362d3Smrg	# didn't have a PIC flag, but the assumption that the effects
5761de2362d3Smrg	# would be equivalent was wrong.  It would break on at least
5762de2362d3Smrg	# Digital Unix and AIX.
5763de2362d3Smrg	continue
5764de2362d3Smrg	;;
5765de2362d3Smrg
5766de2362d3Smrg      -thread-safe)
5767de2362d3Smrg	thread_safe=yes
5768de2362d3Smrg	continue
5769de2362d3Smrg	;;
5770de2362d3Smrg
5771de2362d3Smrg      -version-info)
5772de2362d3Smrg	prev=vinfo
5773de2362d3Smrg	continue
5774de2362d3Smrg	;;
5775de2362d3Smrg
5776de2362d3Smrg      -version-number)
5777de2362d3Smrg	prev=vinfo
5778de2362d3Smrg	vinfo_number=yes
5779de2362d3Smrg	continue
5780de2362d3Smrg	;;
5781de2362d3Smrg
5782de2362d3Smrg      -weak)
5783de2362d3Smrg        prev=weak
5784de2362d3Smrg	continue
5785de2362d3Smrg	;;
5786de2362d3Smrg
5787de2362d3Smrg      -Wc,*)
5788de2362d3Smrg	func_stripname '-Wc,' '' "$arg"
5789de2362d3Smrg	args=$func_stripname_result
5790de2362d3Smrg	arg=
57917821949aSmrg	save_ifs="$IFS"; IFS=','
5792de2362d3Smrg	for flag in $args; do
57937821949aSmrg	  IFS="$save_ifs"
5794de2362d3Smrg          func_quote_for_eval "$flag"
5795de2362d3Smrg	  func_append arg " $func_quote_for_eval_result"
5796de2362d3Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797de2362d3Smrg	done
57987821949aSmrg	IFS="$save_ifs"
5799de2362d3Smrg	func_stripname ' ' '' "$arg"
5800de2362d3Smrg	arg=$func_stripname_result
5801de2362d3Smrg	;;
5802de2362d3Smrg
5803de2362d3Smrg      -Wl,*)
5804de2362d3Smrg	func_stripname '-Wl,' '' "$arg"
5805de2362d3Smrg	args=$func_stripname_result
5806de2362d3Smrg	arg=
58077821949aSmrg	save_ifs="$IFS"; IFS=','
5808de2362d3Smrg	for flag in $args; do
58097821949aSmrg	  IFS="$save_ifs"
5810de2362d3Smrg          func_quote_for_eval "$flag"
5811de2362d3Smrg	  func_append arg " $wl$func_quote_for_eval_result"
5812de2362d3Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5813de2362d3Smrg	  func_append linker_flags " $func_quote_for_eval_result"
5814de2362d3Smrg	done
58157821949aSmrg	IFS="$save_ifs"
5816de2362d3Smrg	func_stripname ' ' '' "$arg"
5817de2362d3Smrg	arg=$func_stripname_result
5818de2362d3Smrg	;;
5819de2362d3Smrg
5820de2362d3Smrg      -Xcompiler)
5821de2362d3Smrg	prev=xcompiler
5822de2362d3Smrg	continue
5823de2362d3Smrg	;;
5824de2362d3Smrg
5825de2362d3Smrg      -Xlinker)
5826de2362d3Smrg	prev=xlinker
5827de2362d3Smrg	continue
5828de2362d3Smrg	;;
5829de2362d3Smrg
5830de2362d3Smrg      -XCClinker)
5831de2362d3Smrg	prev=xcclinker
5832de2362d3Smrg	continue
5833de2362d3Smrg	;;
5834de2362d3Smrg
5835de2362d3Smrg      # -msg_* for osf cc
5836de2362d3Smrg      -msg_*)
5837de2362d3Smrg	func_quote_for_eval "$arg"
58387821949aSmrg	arg="$func_quote_for_eval_result"
5839de2362d3Smrg	;;
5840de2362d3Smrg
5841de2362d3Smrg      # Flags to be passed through unchanged, with rationale:
5842de2362d3Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5843de2362d3Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
5844de2362d3Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5845de2362d3Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5846de2362d3Smrg      # -q*                  compiler args for the IBM compiler
5847de2362d3Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5848de2362d3Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
5849de2362d3Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5850de2362d3Smrg      # @file                GCC response files
5851de2362d3Smrg      # -tp=*                Portland pgcc target processor selection
5852de2362d3Smrg      # --sysroot=*          for sysroot support
58537821949aSmrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854de2362d3Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5855de2362d3Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
58567821949aSmrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857de2362d3Smrg        func_quote_for_eval "$arg"
58587821949aSmrg	arg="$func_quote_for_eval_result"
5859de2362d3Smrg        func_append compile_command " $arg"
5860de2362d3Smrg        func_append finalize_command " $arg"
5861de2362d3Smrg        func_append compiler_flags " $arg"
5862de2362d3Smrg        continue
5863de2362d3Smrg        ;;
5864de2362d3Smrg
5865de2362d3Smrg      # Some other compiler flag.
5866de2362d3Smrg      -* | +*)
5867de2362d3Smrg        func_quote_for_eval "$arg"
58687821949aSmrg	arg="$func_quote_for_eval_result"
5869de2362d3Smrg	;;
5870de2362d3Smrg
5871de2362d3Smrg      *.$objext)
5872de2362d3Smrg	# A standard object.
5873de2362d3Smrg	func_append objs " $arg"
5874de2362d3Smrg	;;
5875de2362d3Smrg
5876de2362d3Smrg      *.lo)
5877de2362d3Smrg	# A libtool-controlled object.
5878de2362d3Smrg
5879de2362d3Smrg	# Check to see that this really is a libtool object.
5880de2362d3Smrg	if func_lalib_unsafe_p "$arg"; then
5881de2362d3Smrg	  pic_object=
5882de2362d3Smrg	  non_pic_object=
5883de2362d3Smrg
5884de2362d3Smrg	  # Read the .lo file
5885de2362d3Smrg	  func_source "$arg"
5886de2362d3Smrg
5887de2362d3Smrg	  if test -z "$pic_object" ||
5888de2362d3Smrg	     test -z "$non_pic_object" ||
58897821949aSmrg	     test "$pic_object" = none &&
58907821949aSmrg	     test "$non_pic_object" = none; then
58917821949aSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892de2362d3Smrg	  fi
5893de2362d3Smrg
5894de2362d3Smrg	  # Extract subdirectory from the argument.
5895de2362d3Smrg	  func_dirname "$arg" "/" ""
58967821949aSmrg	  xdir="$func_dirname_result"
5897de2362d3Smrg
58987821949aSmrg	  if test "$pic_object" != none; then
5899de2362d3Smrg	    # Prepend the subdirectory the object is found in.
59007821949aSmrg	    pic_object="$xdir$pic_object"
5901de2362d3Smrg
59027821949aSmrg	    if test "$prev" = dlfiles; then
59037821949aSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5904de2362d3Smrg		func_append dlfiles " $pic_object"
5905de2362d3Smrg		prev=
5906de2362d3Smrg		continue
5907de2362d3Smrg	      else
5908de2362d3Smrg		# If libtool objects are unsupported, then we need to preload.
5909de2362d3Smrg		prev=dlprefiles
5910de2362d3Smrg	      fi
5911de2362d3Smrg	    fi
5912de2362d3Smrg
5913de2362d3Smrg	    # CHECK ME:  I think I busted this.  -Ossama
59147821949aSmrg	    if test "$prev" = dlprefiles; then
5915de2362d3Smrg	      # Preload the old-style object.
5916de2362d3Smrg	      func_append dlprefiles " $pic_object"
5917de2362d3Smrg	      prev=
5918de2362d3Smrg	    fi
5919de2362d3Smrg
5920de2362d3Smrg	    # A PIC object.
5921de2362d3Smrg	    func_append libobjs " $pic_object"
59227821949aSmrg	    arg="$pic_object"
59237821949aSmrg	  fi
5924de2362d3Smrg
5925de2362d3Smrg	  # Non-PIC object.
59267821949aSmrg	  if test "$non_pic_object" != none; then
5927de2362d3Smrg	    # Prepend the subdirectory the object is found in.
59287821949aSmrg	    non_pic_object="$xdir$non_pic_object"
5929de2362d3Smrg
5930de2362d3Smrg	    # A standard non-PIC object
5931de2362d3Smrg	    func_append non_pic_objects " $non_pic_object"
59327821949aSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
59337821949aSmrg	      arg="$non_pic_object"
5934de2362d3Smrg	    fi
5935de2362d3Smrg	  else
5936de2362d3Smrg	    # If the PIC object exists, use it instead.
5937de2362d3Smrg	    # $xdir was prepended to $pic_object above.
59387821949aSmrg	    non_pic_object="$pic_object"
5939de2362d3Smrg	    func_append non_pic_objects " $non_pic_object"
5940de2362d3Smrg	  fi
5941de2362d3Smrg	else
5942de2362d3Smrg	  # Only an error if not doing a dry-run.
5943de2362d3Smrg	  if $opt_dry_run; then
5944de2362d3Smrg	    # Extract subdirectory from the argument.
5945de2362d3Smrg	    func_dirname "$arg" "/" ""
59467821949aSmrg	    xdir="$func_dirname_result"
5947de2362d3Smrg
5948de2362d3Smrg	    func_lo2o "$arg"
5949de2362d3Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950de2362d3Smrg	    non_pic_object=$xdir$func_lo2o_result
5951de2362d3Smrg	    func_append libobjs " $pic_object"
5952de2362d3Smrg	    func_append non_pic_objects " $non_pic_object"
5953de2362d3Smrg	  else
59547821949aSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955de2362d3Smrg	  fi
5956de2362d3Smrg	fi
5957de2362d3Smrg	;;
5958de2362d3Smrg
5959de2362d3Smrg      *.$libext)
5960de2362d3Smrg	# An archive.
5961de2362d3Smrg	func_append deplibs " $arg"
5962de2362d3Smrg	func_append old_deplibs " $arg"
5963de2362d3Smrg	continue
5964de2362d3Smrg	;;
5965de2362d3Smrg
5966de2362d3Smrg      *.la)
5967de2362d3Smrg	# A libtool-controlled library.
5968de2362d3Smrg
5969de2362d3Smrg	func_resolve_sysroot "$arg"
59707821949aSmrg	if test "$prev" = dlfiles; then
5971de2362d3Smrg	  # This library was specified with -dlopen.
5972de2362d3Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973de2362d3Smrg	  prev=
59747821949aSmrg	elif test "$prev" = dlprefiles; then
5975de2362d3Smrg	  # The library was specified with -dlpreopen.
5976de2362d3Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977de2362d3Smrg	  prev=
5978de2362d3Smrg	else
5979de2362d3Smrg	  func_append deplibs " $func_resolve_sysroot_result"
5980de2362d3Smrg	fi
5981de2362d3Smrg	continue
5982de2362d3Smrg	;;
5983de2362d3Smrg
5984de2362d3Smrg      # Some other compiler argument.
5985de2362d3Smrg      *)
5986de2362d3Smrg	# Unknown arguments in both finalize_command and compile_command need
5987de2362d3Smrg	# to be aesthetically quoted because they are evaled later.
5988de2362d3Smrg	func_quote_for_eval "$arg"
59897821949aSmrg	arg="$func_quote_for_eval_result"
5990de2362d3Smrg	;;
5991de2362d3Smrg      esac # arg
5992de2362d3Smrg
5993de2362d3Smrg      # Now actually substitute the argument into the commands.
5994de2362d3Smrg      if test -n "$arg"; then
5995de2362d3Smrg	func_append compile_command " $arg"
5996de2362d3Smrg	func_append finalize_command " $arg"
5997de2362d3Smrg      fi
5998de2362d3Smrg    done # argument parsing loop
5999de2362d3Smrg
6000de2362d3Smrg    test -n "$prev" && \
60017821949aSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002de2362d3Smrg
60037821949aSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004de2362d3Smrg      eval arg=\"$export_dynamic_flag_spec\"
6005de2362d3Smrg      func_append compile_command " $arg"
6006de2362d3Smrg      func_append finalize_command " $arg"
6007de2362d3Smrg    fi
6008de2362d3Smrg
6009de2362d3Smrg    oldlibs=
6010de2362d3Smrg    # calculate the name of the file, without its directory
6011de2362d3Smrg    func_basename "$output"
60127821949aSmrg    outputname="$func_basename_result"
60137821949aSmrg    libobjs_save="$libobjs"
6014de2362d3Smrg
6015de2362d3Smrg    if test -n "$shlibpath_var"; then
6016de2362d3Smrg      # get the directories listed in $shlibpath_var
60177821949aSmrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018de2362d3Smrg    else
6019de2362d3Smrg      shlib_search_path=
6020de2362d3Smrg    fi
6021de2362d3Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022de2362d3Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023de2362d3Smrg
6024de2362d3Smrg    func_dirname "$output" "/" ""
60257821949aSmrg    output_objdir="$func_dirname_result$objdir"
6026de2362d3Smrg    func_to_tool_file "$output_objdir/"
6027de2362d3Smrg    tool_output_objdir=$func_to_tool_file_result
6028de2362d3Smrg    # Create the object directory.
6029de2362d3Smrg    func_mkdir_p "$output_objdir"
6030de2362d3Smrg
6031de2362d3Smrg    # Determine the type of output
6032de2362d3Smrg    case $output in
6033de2362d3Smrg    "")
6034de2362d3Smrg      func_fatal_help "you must specify an output file"
6035de2362d3Smrg      ;;
6036de2362d3Smrg    *.$libext) linkmode=oldlib ;;
6037de2362d3Smrg    *.lo | *.$objext) linkmode=obj ;;
6038de2362d3Smrg    *.la) linkmode=lib ;;
6039de2362d3Smrg    *) linkmode=prog ;; # Anything else should be a program.
6040de2362d3Smrg    esac
6041de2362d3Smrg
6042de2362d3Smrg    specialdeplibs=
6043de2362d3Smrg
6044de2362d3Smrg    libs=
6045de2362d3Smrg    # Find all interdependent deplibs by searching for libraries
6046de2362d3Smrg    # that are linked more than once (e.g. -la -lb -la)
6047de2362d3Smrg    for deplib in $deplibs; do
60487821949aSmrg      if $opt_preserve_dup_deps ; then
6049de2362d3Smrg	case "$libs " in
6050de2362d3Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051de2362d3Smrg	esac
6052de2362d3Smrg      fi
6053de2362d3Smrg      func_append libs " $deplib"
6054de2362d3Smrg    done
6055de2362d3Smrg
60567821949aSmrg    if test "$linkmode" = lib; then
6057de2362d3Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058de2362d3Smrg
6059de2362d3Smrg      # Compute libraries that are listed more than once in $predeps
6060de2362d3Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061de2362d3Smrg      # not to be eliminated).
6062de2362d3Smrg      pre_post_deps=
6063de2362d3Smrg      if $opt_duplicate_compiler_generated_deps; then
6064de2362d3Smrg	for pre_post_dep in $predeps $postdeps; do
6065de2362d3Smrg	  case "$pre_post_deps " in
6066de2362d3Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067de2362d3Smrg	  esac
6068de2362d3Smrg	  func_append pre_post_deps " $pre_post_dep"
6069de2362d3Smrg	done
6070de2362d3Smrg      fi
6071de2362d3Smrg      pre_post_deps=
6072de2362d3Smrg    fi
6073de2362d3Smrg
6074de2362d3Smrg    deplibs=
6075de2362d3Smrg    newdependency_libs=
6076de2362d3Smrg    newlib_search_path=
6077de2362d3Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078de2362d3Smrg    notinst_deplibs= # not-installed libtool libraries
6079de2362d3Smrg    notinst_path= # paths that contain not-installed libtool libraries
6080de2362d3Smrg
6081de2362d3Smrg    case $linkmode in
6082de2362d3Smrg    lib)
6083de2362d3Smrg	passes="conv dlpreopen link"
6084de2362d3Smrg	for file in $dlfiles $dlprefiles; do
6085de2362d3Smrg	  case $file in
6086de2362d3Smrg	  *.la) ;;
6087de2362d3Smrg	  *)
60887821949aSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089de2362d3Smrg	    ;;
6090de2362d3Smrg	  esac
6091de2362d3Smrg	done
6092de2362d3Smrg	;;
6093de2362d3Smrg    prog)
6094de2362d3Smrg	compile_deplibs=
6095de2362d3Smrg	finalize_deplibs=
60967821949aSmrg	alldeplibs=no
6097de2362d3Smrg	newdlfiles=
6098de2362d3Smrg	newdlprefiles=
6099de2362d3Smrg	passes="conv scan dlopen dlpreopen link"
6100de2362d3Smrg	;;
6101de2362d3Smrg    *)  passes="conv"
6102de2362d3Smrg	;;
6103de2362d3Smrg    esac
6104de2362d3Smrg
6105de2362d3Smrg    for pass in $passes; do
6106de2362d3Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107de2362d3Smrg      # so that -L comes before libs that need it for instance...
61087821949aSmrg      if test "$linkmode,$pass" = "lib,link"; then
6109de2362d3Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110de2362d3Smrg	##        order, and fix it there properly
6111de2362d3Smrg        tmp_deplibs=
6112de2362d3Smrg	for deplib in $deplibs; do
6113de2362d3Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114de2362d3Smrg	done
61157821949aSmrg	deplibs="$tmp_deplibs"
6116de2362d3Smrg      fi
6117de2362d3Smrg
61187821949aSmrg      if test "$linkmode,$pass" = "lib,link" ||
61197821949aSmrg	 test "$linkmode,$pass" = "prog,scan"; then
61207821949aSmrg	libs="$deplibs"
6121de2362d3Smrg	deplibs=
6122de2362d3Smrg      fi
61237821949aSmrg      if test "$linkmode" = prog; then
6124de2362d3Smrg	case $pass in
61257821949aSmrg	dlopen) libs="$dlfiles" ;;
61267821949aSmrg	dlpreopen) libs="$dlprefiles" ;;
61277821949aSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128de2362d3Smrg	esac
6129de2362d3Smrg      fi
61307821949aSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131de2362d3Smrg	# Collect and forward deplibs of preopened libtool libs
6132de2362d3Smrg	for lib in $dlprefiles; do
6133de2362d3Smrg	  # Ignore non-libtool-libs
6134de2362d3Smrg	  dependency_libs=
6135de2362d3Smrg	  func_resolve_sysroot "$lib"
6136de2362d3Smrg	  case $lib in
6137de2362d3Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138de2362d3Smrg	  esac
6139de2362d3Smrg
6140de2362d3Smrg	  # Collect preopened libtool deplibs, except any this library
6141de2362d3Smrg	  # has declared as weak libs
6142de2362d3Smrg	  for deplib in $dependency_libs; do
6143de2362d3Smrg	    func_basename "$deplib"
6144de2362d3Smrg            deplib_base=$func_basename_result
6145de2362d3Smrg	    case " $weak_libs " in
6146de2362d3Smrg	    *" $deplib_base "*) ;;
6147de2362d3Smrg	    *) func_append deplibs " $deplib" ;;
6148de2362d3Smrg	    esac
6149de2362d3Smrg	  done
6150de2362d3Smrg	done
61517821949aSmrg	libs="$dlprefiles"
6152de2362d3Smrg      fi
61537821949aSmrg      if test "$pass" = dlopen; then
6154de2362d3Smrg	# Collect dlpreopened libraries
61557821949aSmrg	save_deplibs="$deplibs"
6156de2362d3Smrg	deplibs=
6157de2362d3Smrg      fi
6158de2362d3Smrg
6159de2362d3Smrg      for deplib in $libs; do
6160de2362d3Smrg	lib=
61617821949aSmrg	found=no
6162de2362d3Smrg	case $deplib in
6163de2362d3Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6164de2362d3Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
61657821949aSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6166de2362d3Smrg	    compile_deplibs="$deplib $compile_deplibs"
6167de2362d3Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168de2362d3Smrg	  else
6169de2362d3Smrg	    func_append compiler_flags " $deplib"
61707821949aSmrg	    if test "$linkmode" = lib ; then
6171de2362d3Smrg		case "$new_inherited_linker_flags " in
6172de2362d3Smrg		    *" $deplib "*) ;;
6173de2362d3Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174de2362d3Smrg		esac
6175de2362d3Smrg	    fi
6176de2362d3Smrg	  fi
6177de2362d3Smrg	  continue
6178de2362d3Smrg	  ;;
6179de2362d3Smrg	-l*)
61807821949aSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
61817821949aSmrg	    func_warning "\`-l' is ignored for archives/objects"
6182de2362d3Smrg	    continue
6183de2362d3Smrg	  fi
6184de2362d3Smrg	  func_stripname '-l' '' "$deplib"
6185de2362d3Smrg	  name=$func_stripname_result
61867821949aSmrg	  if test "$linkmode" = lib; then
6187de2362d3Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188de2362d3Smrg	  else
6189de2362d3Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190de2362d3Smrg	  fi
6191de2362d3Smrg	  for searchdir in $searchdirs; do
6192de2362d3Smrg	    for search_ext in .la $std_shrext .so .a; do
6193de2362d3Smrg	      # Search the libtool library
61947821949aSmrg	      lib="$searchdir/lib${name}${search_ext}"
6195de2362d3Smrg	      if test -f "$lib"; then
61967821949aSmrg		if test "$search_ext" = ".la"; then
61977821949aSmrg		  found=yes
6198de2362d3Smrg		else
61997821949aSmrg		  found=no
6200de2362d3Smrg		fi
6201de2362d3Smrg		break 2
6202de2362d3Smrg	      fi
6203de2362d3Smrg	    done
6204de2362d3Smrg	  done
62057821949aSmrg	  if test "$found" != yes; then
62067821949aSmrg	    # deplib doesn't seem to be a libtool library
62077821949aSmrg	    if test "$linkmode,$pass" = "prog,link"; then
62087821949aSmrg	      compile_deplibs="$deplib $compile_deplibs"
62097821949aSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
62107821949aSmrg	    else
62117821949aSmrg	      deplibs="$deplib $deplibs"
62127821949aSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
62137821949aSmrg	    fi
62147821949aSmrg	    continue
62157821949aSmrg	  else # deplib is a libtool library
6216de2362d3Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217de2362d3Smrg	    # We need to do some special things here, and not later.
62187821949aSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219de2362d3Smrg	      case " $predeps $postdeps " in
6220de2362d3Smrg	      *" $deplib "*)
6221de2362d3Smrg		if func_lalib_p "$lib"; then
6222de2362d3Smrg		  library_names=
6223de2362d3Smrg		  old_library=
6224de2362d3Smrg		  func_source "$lib"
6225de2362d3Smrg		  for l in $old_library $library_names; do
62267821949aSmrg		    ll="$l"
6227de2362d3Smrg		  done
62287821949aSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
62297821949aSmrg		    found=no
6230de2362d3Smrg		    func_dirname "$lib" "" "."
62317821949aSmrg		    ladir="$func_dirname_result"
6232de2362d3Smrg		    lib=$ladir/$old_library
62337821949aSmrg		    if test "$linkmode,$pass" = "prog,link"; then
6234de2362d3Smrg		      compile_deplibs="$deplib $compile_deplibs"
6235de2362d3Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236de2362d3Smrg		    else
6237de2362d3Smrg		      deplibs="$deplib $deplibs"
62387821949aSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239de2362d3Smrg		    fi
6240de2362d3Smrg		    continue
6241de2362d3Smrg		  fi
6242de2362d3Smrg		fi
6243de2362d3Smrg		;;
6244de2362d3Smrg	      *) ;;
6245de2362d3Smrg	      esac
6246de2362d3Smrg	    fi
6247de2362d3Smrg	  fi
6248de2362d3Smrg	  ;; # -l
6249de2362d3Smrg	*.ltframework)
62507821949aSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6251de2362d3Smrg	    compile_deplibs="$deplib $compile_deplibs"
6252de2362d3Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253de2362d3Smrg	  else
6254de2362d3Smrg	    deplibs="$deplib $deplibs"
62557821949aSmrg	    if test "$linkmode" = lib ; then
6256de2362d3Smrg		case "$new_inherited_linker_flags " in
6257de2362d3Smrg		    *" $deplib "*) ;;
6258de2362d3Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259de2362d3Smrg		esac
6260de2362d3Smrg	    fi
6261de2362d3Smrg	  fi
6262de2362d3Smrg	  continue
6263de2362d3Smrg	  ;;
6264de2362d3Smrg	-L*)
6265de2362d3Smrg	  case $linkmode in
6266de2362d3Smrg	  lib)
6267de2362d3Smrg	    deplibs="$deplib $deplibs"
62687821949aSmrg	    test "$pass" = conv && continue
6269de2362d3Smrg	    newdependency_libs="$deplib $newdependency_libs"
6270de2362d3Smrg	    func_stripname '-L' '' "$deplib"
6271de2362d3Smrg	    func_resolve_sysroot "$func_stripname_result"
6272de2362d3Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273de2362d3Smrg	    ;;
6274de2362d3Smrg	  prog)
62757821949aSmrg	    if test "$pass" = conv; then
6276de2362d3Smrg	      deplibs="$deplib $deplibs"
6277de2362d3Smrg	      continue
6278de2362d3Smrg	    fi
62797821949aSmrg	    if test "$pass" = scan; then
6280de2362d3Smrg	      deplibs="$deplib $deplibs"
6281de2362d3Smrg	    else
6282de2362d3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6283de2362d3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284de2362d3Smrg	    fi
6285de2362d3Smrg	    func_stripname '-L' '' "$deplib"
6286de2362d3Smrg	    func_resolve_sysroot "$func_stripname_result"
6287de2362d3Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288de2362d3Smrg	    ;;
6289de2362d3Smrg	  *)
62907821949aSmrg	    func_warning "\`-L' is ignored for archives/objects"
6291de2362d3Smrg	    ;;
6292de2362d3Smrg	  esac # linkmode
6293de2362d3Smrg	  continue
6294de2362d3Smrg	  ;; # -L
6295de2362d3Smrg	-R*)
62967821949aSmrg	  if test "$pass" = link; then
6297de2362d3Smrg	    func_stripname '-R' '' "$deplib"
6298de2362d3Smrg	    func_resolve_sysroot "$func_stripname_result"
6299de2362d3Smrg	    dir=$func_resolve_sysroot_result
6300de2362d3Smrg	    # Make sure the xrpath contains only unique directories.
6301de2362d3Smrg	    case "$xrpath " in
6302de2362d3Smrg	    *" $dir "*) ;;
6303de2362d3Smrg	    *) func_append xrpath " $dir" ;;
6304de2362d3Smrg	    esac
6305de2362d3Smrg	  fi
6306de2362d3Smrg	  deplibs="$deplib $deplibs"
6307de2362d3Smrg	  continue
6308de2362d3Smrg	  ;;
6309de2362d3Smrg	*.la)
6310de2362d3Smrg	  func_resolve_sysroot "$deplib"
6311de2362d3Smrg	  lib=$func_resolve_sysroot_result
6312de2362d3Smrg	  ;;
6313de2362d3Smrg	*.$libext)
63147821949aSmrg	  if test "$pass" = conv; then
6315de2362d3Smrg	    deplibs="$deplib $deplibs"
6316de2362d3Smrg	    continue
6317de2362d3Smrg	  fi
6318de2362d3Smrg	  case $linkmode in
6319de2362d3Smrg	  lib)
6320de2362d3Smrg	    # Linking convenience modules into shared libraries is allowed,
6321de2362d3Smrg	    # but linking other static libraries is non-portable.
6322de2362d3Smrg	    case " $dlpreconveniencelibs " in
6323de2362d3Smrg	    *" $deplib "*) ;;
6324de2362d3Smrg	    *)
63257821949aSmrg	      valid_a_lib=no
6326de2362d3Smrg	      case $deplibs_check_method in
6327de2362d3Smrg		match_pattern*)
6328de2362d3Smrg		  set dummy $deplibs_check_method; shift
6329de2362d3Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6330de2362d3Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331de2362d3Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
63327821949aSmrg		    valid_a_lib=yes
6333de2362d3Smrg		  fi
6334de2362d3Smrg		;;
6335de2362d3Smrg		pass_all)
63367821949aSmrg		  valid_a_lib=yes
6337de2362d3Smrg		;;
6338de2362d3Smrg	      esac
63397821949aSmrg	      if test "$valid_a_lib" != yes; then
6340de2362d3Smrg		echo
6341de2362d3Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6342de2362d3Smrg		echo "*** I have the capability to make that library automatically link in when"
6343de2362d3Smrg		echo "*** you link to this library.  But I can only do this if you have a"
6344de2362d3Smrg		echo "*** shared version of the library, which you do not appear to have"
6345de2362d3Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
6346de2362d3Smrg		echo "*** that it is just a static archive that I should not use here."
63477821949aSmrg	      else
63487821949aSmrg		echo
63497821949aSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
63507821949aSmrg		$ECHO "*** static library $deplib is not portable!"
63517821949aSmrg		deplibs="$deplib $deplibs"
6352de2362d3Smrg	      fi
6353de2362d3Smrg	      ;;
6354de2362d3Smrg	    esac
6355de2362d3Smrg	    continue
6356de2362d3Smrg	    ;;
6357de2362d3Smrg	  prog)
63587821949aSmrg	    if test "$pass" != link; then
6359de2362d3Smrg	      deplibs="$deplib $deplibs"
6360de2362d3Smrg	    else
6361de2362d3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6362de2362d3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363de2362d3Smrg	    fi
6364de2362d3Smrg	    continue
6365de2362d3Smrg	    ;;
6366de2362d3Smrg	  esac # linkmode
6367de2362d3Smrg	  ;; # *.$libext
6368de2362d3Smrg	*.lo | *.$objext)
63697821949aSmrg	  if test "$pass" = conv; then
6370de2362d3Smrg	    deplibs="$deplib $deplibs"
63717821949aSmrg	  elif test "$linkmode" = prog; then
63727821949aSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373de2362d3Smrg	      # If there is no dlopen support or we're linking statically,
6374de2362d3Smrg	      # we need to preload.
6375de2362d3Smrg	      func_append newdlprefiles " $deplib"
6376de2362d3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6377de2362d3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378de2362d3Smrg	    else
6379de2362d3Smrg	      func_append newdlfiles " $deplib"
6380de2362d3Smrg	    fi
6381de2362d3Smrg	  fi
6382de2362d3Smrg	  continue
6383de2362d3Smrg	  ;;
6384de2362d3Smrg	%DEPLIBS%)
63857821949aSmrg	  alldeplibs=yes
6386de2362d3Smrg	  continue
6387de2362d3Smrg	  ;;
6388de2362d3Smrg	esac # case $deplib
6389de2362d3Smrg
63907821949aSmrg	if test "$found" = yes || test -f "$lib"; then :
63917821949aSmrg	else
63927821949aSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
63937821949aSmrg	fi
6394de2362d3Smrg
6395de2362d3Smrg	# Check to see that this really is a libtool archive.
6396de2362d3Smrg	func_lalib_unsafe_p "$lib" \
63977821949aSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398de2362d3Smrg
6399de2362d3Smrg	func_dirname "$lib" "" "."
64007821949aSmrg	ladir="$func_dirname_result"
6401de2362d3Smrg
6402de2362d3Smrg	dlname=
6403de2362d3Smrg	dlopen=
6404de2362d3Smrg	dlpreopen=
6405de2362d3Smrg	libdir=
6406de2362d3Smrg	library_names=
6407de2362d3Smrg	old_library=
6408de2362d3Smrg	inherited_linker_flags=
6409de2362d3Smrg	# If the library was installed with an old release of libtool,
6410de2362d3Smrg	# it will not redefine variables installed, or shouldnotlink
6411de2362d3Smrg	installed=yes
6412de2362d3Smrg	shouldnotlink=no
6413de2362d3Smrg	avoidtemprpath=
6414de2362d3Smrg
6415de2362d3Smrg
6416de2362d3Smrg	# Read the .la file
6417de2362d3Smrg	func_source "$lib"
6418de2362d3Smrg
6419de2362d3Smrg	# Convert "-framework foo" to "foo.ltframework"
6420de2362d3Smrg	if test -n "$inherited_linker_flags"; then
6421de2362d3Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422de2362d3Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423de2362d3Smrg	    case " $new_inherited_linker_flags " in
6424de2362d3Smrg	      *" $tmp_inherited_linker_flag "*) ;;
6425de2362d3Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426de2362d3Smrg	    esac
6427de2362d3Smrg	  done
6428de2362d3Smrg	fi
6429de2362d3Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
64307821949aSmrg	if test "$linkmode,$pass" = "lib,link" ||
64317821949aSmrg	   test "$linkmode,$pass" = "prog,scan" ||
64327821949aSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6433de2362d3Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6434de2362d3Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435de2362d3Smrg	fi
6436de2362d3Smrg
64377821949aSmrg	if test "$pass" = conv; then
6438de2362d3Smrg	  # Only check for convenience libraries
6439de2362d3Smrg	  deplibs="$lib $deplibs"
6440de2362d3Smrg	  if test -z "$libdir"; then
6441de2362d3Smrg	    if test -z "$old_library"; then
64427821949aSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443de2362d3Smrg	    fi
6444de2362d3Smrg	    # It is a libtool convenience library, so add in its objects.
6445de2362d3Smrg	    func_append convenience " $ladir/$objdir/$old_library"
6446de2362d3Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
64477821949aSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
64487821949aSmrg	    func_fatal_error "\`$lib' is not a convenience library"
6449de2362d3Smrg	  fi
64507821949aSmrg	  tmp_libs=
64517821949aSmrg	  for deplib in $dependency_libs; do
64527821949aSmrg	    deplibs="$deplib $deplibs"
64537821949aSmrg	    if $opt_preserve_dup_deps ; then
64547821949aSmrg	      case "$tmp_libs " in
64557821949aSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
64567821949aSmrg	      esac
64577821949aSmrg	    fi
64587821949aSmrg	    func_append tmp_libs " $deplib"
64597821949aSmrg	  done
6460de2362d3Smrg	  continue
6461de2362d3Smrg	fi # $pass = conv
6462de2362d3Smrg
6463de2362d3Smrg
6464de2362d3Smrg	# Get the name of the library we link against.
6465de2362d3Smrg	linklib=
6466de2362d3Smrg	if test -n "$old_library" &&
64677821949aSmrg	   { test "$prefer_static_libs" = yes ||
64687821949aSmrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6469de2362d3Smrg	  linklib=$old_library
6470de2362d3Smrg	else
6471de2362d3Smrg	  for l in $old_library $library_names; do
64727821949aSmrg	    linklib="$l"
6473de2362d3Smrg	  done
6474de2362d3Smrg	fi
6475de2362d3Smrg	if test -z "$linklib"; then
64767821949aSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477de2362d3Smrg	fi
6478de2362d3Smrg
6479de2362d3Smrg	# This library was specified with -dlopen.
64807821949aSmrg	if test "$pass" = dlopen; then
64817821949aSmrg	  if test -z "$libdir"; then
64827821949aSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
64837821949aSmrg	  fi
6484de2362d3Smrg	  if test -z "$dlname" ||
64857821949aSmrg	     test "$dlopen_support" != yes ||
64867821949aSmrg	     test "$build_libtool_libs" = no; then
6487de2362d3Smrg	    # If there is no dlname, no dlopen support or we're linking
6488de2362d3Smrg	    # statically, we need to preload.  We also need to preload any
6489de2362d3Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490de2362d3Smrg	    # bomb out in the load deplibs phase.
6491de2362d3Smrg	    func_append dlprefiles " $lib $dependency_libs"
6492de2362d3Smrg	  else
6493de2362d3Smrg	    func_append newdlfiles " $lib"
6494de2362d3Smrg	  fi
6495de2362d3Smrg	  continue
6496de2362d3Smrg	fi # $pass = dlopen
6497de2362d3Smrg
6498de2362d3Smrg	# We need an absolute path.
6499de2362d3Smrg	case $ladir in
65007821949aSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501de2362d3Smrg	*)
6502de2362d3Smrg	  abs_ladir=`cd "$ladir" && pwd`
6503de2362d3Smrg	  if test -z "$abs_ladir"; then
65047821949aSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505de2362d3Smrg	    func_warning "passing it literally to the linker, although it might fail"
65067821949aSmrg	    abs_ladir="$ladir"
6507de2362d3Smrg	  fi
6508de2362d3Smrg	  ;;
6509de2362d3Smrg	esac
6510de2362d3Smrg	func_basename "$lib"
65117821949aSmrg	laname="$func_basename_result"
6512de2362d3Smrg
6513de2362d3Smrg	# Find the relevant object directory and library name.
65147821949aSmrg	if test "X$installed" = Xyes; then
6515de2362d3Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65167821949aSmrg	    func_warning "library \`$lib' was moved."
65177821949aSmrg	    dir="$ladir"
65187821949aSmrg	    absdir="$abs_ladir"
65197821949aSmrg	    libdir="$abs_ladir"
6520de2362d3Smrg	  else
65217821949aSmrg	    dir="$lt_sysroot$libdir"
65227821949aSmrg	    absdir="$lt_sysroot$libdir"
6523de2362d3Smrg	  fi
65247821949aSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525de2362d3Smrg	else
6526de2362d3Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65277821949aSmrg	    dir="$ladir"
65287821949aSmrg	    absdir="$abs_ladir"
6529de2362d3Smrg	    # Remove this search path later
6530de2362d3Smrg	    func_append notinst_path " $abs_ladir"
6531de2362d3Smrg	  else
65327821949aSmrg	    dir="$ladir/$objdir"
65337821949aSmrg	    absdir="$abs_ladir/$objdir"
6534de2362d3Smrg	    # Remove this search path later
6535de2362d3Smrg	    func_append notinst_path " $abs_ladir"
6536de2362d3Smrg	  fi
6537de2362d3Smrg	fi # $installed = yes
6538de2362d3Smrg	func_stripname 'lib' '.la' "$laname"
6539de2362d3Smrg	name=$func_stripname_result
6540de2362d3Smrg
6541de2362d3Smrg	# This library was specified with -dlpreopen.
65427821949aSmrg	if test "$pass" = dlpreopen; then
65437821949aSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
65447821949aSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545de2362d3Smrg	  fi
65467821949aSmrg	  case "$host" in
6547de2362d3Smrg	    # special handling for platforms with PE-DLLs.
6548de2362d3Smrg	    *cygwin* | *mingw* | *cegcc* )
6549de2362d3Smrg	      # Linker will automatically link against shared library if both
6550de2362d3Smrg	      # static and shared are present.  Therefore, ensure we extract
6551de2362d3Smrg	      # symbols from the import library if a shared library is present
6552de2362d3Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
6553de2362d3Smrg	      # this by putting the import library name into $newdlprefiles.
6554de2362d3Smrg	      # We recover the dlopen module name by 'saving' the la file
6555de2362d3Smrg	      # name in a special purpose variable, and (later) extracting the
6556de2362d3Smrg	      # dlname from the la file.
6557de2362d3Smrg	      if test -n "$dlname"; then
6558de2362d3Smrg	        func_tr_sh "$dir/$linklib"
6559de2362d3Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6560de2362d3Smrg	        func_append newdlprefiles " $dir/$linklib"
6561de2362d3Smrg	      else
6562de2362d3Smrg	        func_append newdlprefiles " $dir/$old_library"
6563de2362d3Smrg	        # Keep a list of preopened convenience libraries to check
6564de2362d3Smrg	        # that they are being used correctly in the link pass.
6565de2362d3Smrg	        test -z "$libdir" && \
6566de2362d3Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6567de2362d3Smrg	      fi
6568de2362d3Smrg	    ;;
6569de2362d3Smrg	    * )
6570de2362d3Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6571de2362d3Smrg	      # are required to link).
6572de2362d3Smrg	      if test -n "$old_library"; then
6573de2362d3Smrg	        func_append newdlprefiles " $dir/$old_library"
6574de2362d3Smrg	        # Keep a list of preopened convenience libraries to check
6575de2362d3Smrg	        # that they are being used correctly in the link pass.
6576de2362d3Smrg	        test -z "$libdir" && \
6577de2362d3Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6578de2362d3Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6579de2362d3Smrg	      elif test -n "$dlname"; then
6580de2362d3Smrg	        func_append newdlprefiles " $dir/$dlname"
6581de2362d3Smrg	      else
6582de2362d3Smrg	        func_append newdlprefiles " $dir/$linklib"
6583de2362d3Smrg	      fi
6584de2362d3Smrg	    ;;
6585de2362d3Smrg	  esac
6586de2362d3Smrg	fi # $pass = dlpreopen
6587de2362d3Smrg
6588de2362d3Smrg	if test -z "$libdir"; then
6589de2362d3Smrg	  # Link the convenience library
65907821949aSmrg	  if test "$linkmode" = lib; then
6591de2362d3Smrg	    deplibs="$dir/$old_library $deplibs"
65927821949aSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593de2362d3Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594de2362d3Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595de2362d3Smrg	  else
6596de2362d3Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597de2362d3Smrg	  fi
6598de2362d3Smrg	  continue
6599de2362d3Smrg	fi
6600de2362d3Smrg
6601de2362d3Smrg
66027821949aSmrg	if test "$linkmode" = prog && test "$pass" != link; then
6603de2362d3Smrg	  func_append newlib_search_path " $ladir"
6604de2362d3Smrg	  deplibs="$lib $deplibs"
6605de2362d3Smrg
66067821949aSmrg	  linkalldeplibs=no
66077821949aSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
66087821949aSmrg	     test "$build_libtool_libs" = no; then
66097821949aSmrg	    linkalldeplibs=yes
6610de2362d3Smrg	  fi
6611de2362d3Smrg
6612de2362d3Smrg	  tmp_libs=
6613de2362d3Smrg	  for deplib in $dependency_libs; do
6614de2362d3Smrg	    case $deplib in
6615de2362d3Smrg	    -L*) func_stripname '-L' '' "$deplib"
6616de2362d3Smrg	         func_resolve_sysroot "$func_stripname_result"
6617de2362d3Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618de2362d3Smrg		 ;;
6619de2362d3Smrg	    esac
6620de2362d3Smrg	    # Need to link against all dependency_libs?
66217821949aSmrg	    if test "$linkalldeplibs" = yes; then
6622de2362d3Smrg	      deplibs="$deplib $deplibs"
6623de2362d3Smrg	    else
6624de2362d3Smrg	      # Need to hardcode shared library paths
6625de2362d3Smrg	      # or/and link against static libraries
6626de2362d3Smrg	      newdependency_libs="$deplib $newdependency_libs"
6627de2362d3Smrg	    fi
66287821949aSmrg	    if $opt_preserve_dup_deps ; then
6629de2362d3Smrg	      case "$tmp_libs " in
6630de2362d3Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631de2362d3Smrg	      esac
6632de2362d3Smrg	    fi
6633de2362d3Smrg	    func_append tmp_libs " $deplib"
6634de2362d3Smrg	  done # for deplib
6635de2362d3Smrg	  continue
6636de2362d3Smrg	fi # $linkmode = prog...
6637de2362d3Smrg
66387821949aSmrg	if test "$linkmode,$pass" = "prog,link"; then
6639de2362d3Smrg	  if test -n "$library_names" &&
66407821949aSmrg	     { { test "$prefer_static_libs" = no ||
66417821949aSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642de2362d3Smrg	       test -z "$old_library"; }; then
6643de2362d3Smrg	    # We need to hardcode the library path
66447821949aSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645de2362d3Smrg	      # Make sure the rpath contains only unique directories.
66467821949aSmrg	      case "$temp_rpath:" in
6647de2362d3Smrg	      *"$absdir:"*) ;;
6648de2362d3Smrg	      *) func_append temp_rpath "$absdir:" ;;
6649de2362d3Smrg	      esac
6650de2362d3Smrg	    fi
6651de2362d3Smrg
6652de2362d3Smrg	    # Hardcode the library path.
6653de2362d3Smrg	    # Skip directories that are in the system default run-time
6654de2362d3Smrg	    # search path.
6655de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
6656de2362d3Smrg	    *" $absdir "*) ;;
6657de2362d3Smrg	    *)
6658de2362d3Smrg	      case "$compile_rpath " in
6659de2362d3Smrg	      *" $absdir "*) ;;
6660de2362d3Smrg	      *) func_append compile_rpath " $absdir" ;;
6661de2362d3Smrg	      esac
6662de2362d3Smrg	      ;;
6663de2362d3Smrg	    esac
6664de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
6665de2362d3Smrg	    *" $libdir "*) ;;
6666de2362d3Smrg	    *)
6667de2362d3Smrg	      case "$finalize_rpath " in
6668de2362d3Smrg	      *" $libdir "*) ;;
6669de2362d3Smrg	      *) func_append finalize_rpath " $libdir" ;;
6670de2362d3Smrg	      esac
6671de2362d3Smrg	      ;;
6672de2362d3Smrg	    esac
6673de2362d3Smrg	  fi # $linkmode,$pass = prog,link...
6674de2362d3Smrg
66757821949aSmrg	  if test "$alldeplibs" = yes &&
66767821949aSmrg	     { test "$deplibs_check_method" = pass_all ||
66777821949aSmrg	       { test "$build_libtool_libs" = yes &&
6678de2362d3Smrg		 test -n "$library_names"; }; }; then
6679de2362d3Smrg	    # We only need to search for static libraries
6680de2362d3Smrg	    continue
6681de2362d3Smrg	  fi
6682de2362d3Smrg	fi
6683de2362d3Smrg
6684de2362d3Smrg	link_static=no # Whether the deplib will be linked statically
6685de2362d3Smrg	use_static_libs=$prefer_static_libs
66867821949aSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687de2362d3Smrg	  use_static_libs=no
6688de2362d3Smrg	fi
6689de2362d3Smrg	if test -n "$library_names" &&
66907821949aSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691de2362d3Smrg	  case $host in
66927821949aSmrg	  *cygwin* | *mingw* | *cegcc*)
6693de2362d3Smrg	      # No point in relinking DLLs because paths are not encoded
6694de2362d3Smrg	      func_append notinst_deplibs " $lib"
6695de2362d3Smrg	      need_relink=no
6696de2362d3Smrg	    ;;
6697de2362d3Smrg	  *)
66987821949aSmrg	    if test "$installed" = no; then
6699de2362d3Smrg	      func_append notinst_deplibs " $lib"
6700de2362d3Smrg	      need_relink=yes
6701de2362d3Smrg	    fi
6702de2362d3Smrg	    ;;
6703de2362d3Smrg	  esac
6704de2362d3Smrg	  # This is a shared library
6705de2362d3Smrg
6706de2362d3Smrg	  # Warn about portability, can't link against -module's on some
6707de2362d3Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
67087821949aSmrg	  dlopenmodule=""
6709de2362d3Smrg	  for dlpremoduletest in $dlprefiles; do
6710de2362d3Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
67117821949aSmrg	      dlopenmodule="$dlpremoduletest"
6712de2362d3Smrg	      break
6713de2362d3Smrg	    fi
6714de2362d3Smrg	  done
67157821949aSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6716de2362d3Smrg	    echo
67177821949aSmrg	    if test "$linkmode" = prog; then
6718de2362d3Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719de2362d3Smrg	    else
6720de2362d3Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721de2362d3Smrg	    fi
6722de2362d3Smrg	    $ECHO "*** $linklib is not portable!"
6723de2362d3Smrg	  fi
67247821949aSmrg	  if test "$linkmode" = lib &&
67257821949aSmrg	     test "$hardcode_into_libs" = yes; then
6726de2362d3Smrg	    # Hardcode the library path.
6727de2362d3Smrg	    # Skip directories that are in the system default run-time
6728de2362d3Smrg	    # search path.
6729de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
6730de2362d3Smrg	    *" $absdir "*) ;;
6731de2362d3Smrg	    *)
6732de2362d3Smrg	      case "$compile_rpath " in
6733de2362d3Smrg	      *" $absdir "*) ;;
6734de2362d3Smrg	      *) func_append compile_rpath " $absdir" ;;
6735de2362d3Smrg	      esac
6736de2362d3Smrg	      ;;
6737de2362d3Smrg	    esac
6738de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
6739de2362d3Smrg	    *" $libdir "*) ;;
6740de2362d3Smrg	    *)
6741de2362d3Smrg	      case "$finalize_rpath " in
6742de2362d3Smrg	      *" $libdir "*) ;;
6743de2362d3Smrg	      *) func_append finalize_rpath " $libdir" ;;
6744de2362d3Smrg	      esac
6745de2362d3Smrg	      ;;
6746de2362d3Smrg	    esac
6747de2362d3Smrg	  fi
6748de2362d3Smrg
6749de2362d3Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750de2362d3Smrg	    # figure out the soname
6751de2362d3Smrg	    set dummy $library_names
6752de2362d3Smrg	    shift
67537821949aSmrg	    realname="$1"
6754de2362d3Smrg	    shift
6755de2362d3Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756de2362d3Smrg	    # use dlname if we got it. it's perfectly good, no?
6757de2362d3Smrg	    if test -n "$dlname"; then
67587821949aSmrg	      soname="$dlname"
6759de2362d3Smrg	    elif test -n "$soname_spec"; then
6760de2362d3Smrg	      # bleh windows
6761de2362d3Smrg	      case $host in
67627821949aSmrg	      *cygwin* | mingw* | *cegcc*)
6763de2362d3Smrg	        func_arith $current - $age
6764de2362d3Smrg		major=$func_arith_result
67657821949aSmrg		versuffix="-$major"
6766de2362d3Smrg		;;
6767de2362d3Smrg	      esac
6768de2362d3Smrg	      eval soname=\"$soname_spec\"
6769de2362d3Smrg	    else
67707821949aSmrg	      soname="$realname"
6771de2362d3Smrg	    fi
6772de2362d3Smrg
6773de2362d3Smrg	    # Make a new name for the extract_expsyms_cmds to use
67747821949aSmrg	    soroot="$soname"
6775de2362d3Smrg	    func_basename "$soroot"
67767821949aSmrg	    soname="$func_basename_result"
6777de2362d3Smrg	    func_stripname 'lib' '.dll' "$soname"
6778de2362d3Smrg	    newlib=libimp-$func_stripname_result.a
6779de2362d3Smrg
6780de2362d3Smrg	    # If the library has no export list, then create one now
6781de2362d3Smrg	    if test -f "$output_objdir/$soname-def"; then :
6782de2362d3Smrg	    else
67837821949aSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784de2362d3Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785de2362d3Smrg	    fi
6786de2362d3Smrg
6787de2362d3Smrg	    # Create $newlib
6788de2362d3Smrg	    if test -f "$output_objdir/$newlib"; then :; else
67897821949aSmrg	      func_verbose "generating import library for \`$soname'"
6790de2362d3Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791de2362d3Smrg	    fi
6792de2362d3Smrg	    # make sure the library variables are pointing to the new library
6793de2362d3Smrg	    dir=$output_objdir
6794de2362d3Smrg	    linklib=$newlib
6795de2362d3Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796de2362d3Smrg
67977821949aSmrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798de2362d3Smrg	    add_shlibpath=
6799de2362d3Smrg	    add_dir=
6800de2362d3Smrg	    add=
6801de2362d3Smrg	    lib_linked=yes
6802de2362d3Smrg	    case $hardcode_action in
6803de2362d3Smrg	    immediate | unsupported)
68047821949aSmrg	      if test "$hardcode_direct" = no; then
68057821949aSmrg		add="$dir/$linklib"
6806de2362d3Smrg		case $host in
68077821949aSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
68087821949aSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809de2362d3Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
68107821949aSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811de2362d3Smrg		  *-*-darwin* )
68127821949aSmrg		    # if the lib is a (non-dlopened) module then we can not
6813de2362d3Smrg		    # link against it, someone is ignoring the earlier warnings
6814de2362d3Smrg		    if /usr/bin/file -L $add 2> /dev/null |
68157821949aSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816de2362d3Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6817de2362d3Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
68187821949aSmrg			if test -z "$old_library" ; then
6819de2362d3Smrg			  echo
6820de2362d3Smrg			  echo "*** And there doesn't seem to be a static archive available"
6821de2362d3Smrg			  echo "*** The link will probably fail, sorry"
6822de2362d3Smrg			else
68237821949aSmrg			  add="$dir/$old_library"
6824de2362d3Smrg			fi
6825de2362d3Smrg		      elif test -n "$old_library"; then
68267821949aSmrg			add="$dir/$old_library"
6827de2362d3Smrg		      fi
6828de2362d3Smrg		    fi
6829de2362d3Smrg		esac
68307821949aSmrg	      elif test "$hardcode_minus_L" = no; then
6831de2362d3Smrg		case $host in
68327821949aSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833de2362d3Smrg		esac
68347821949aSmrg		add_dir="-L$dir"
68357821949aSmrg		add="-l$name"
68367821949aSmrg	      elif test "$hardcode_shlibpath_var" = no; then
68377821949aSmrg		add_shlibpath="$dir"
68387821949aSmrg		add="-l$name"
6839de2362d3Smrg	      else
6840de2362d3Smrg		lib_linked=no
6841de2362d3Smrg	      fi
6842de2362d3Smrg	      ;;
6843de2362d3Smrg	    relink)
68447821949aSmrg	      if test "$hardcode_direct" = yes &&
68457821949aSmrg	         test "$hardcode_direct_absolute" = no; then
68467821949aSmrg		add="$dir/$linklib"
68477821949aSmrg	      elif test "$hardcode_minus_L" = yes; then
68487821949aSmrg		add_dir="-L$absdir"
6849de2362d3Smrg		# Try looking first in the location we're being installed to.
6850de2362d3Smrg		if test -n "$inst_prefix_dir"; then
6851de2362d3Smrg		  case $libdir in
6852de2362d3Smrg		    [\\/]*)
6853de2362d3Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854de2362d3Smrg		      ;;
6855de2362d3Smrg		  esac
6856de2362d3Smrg		fi
68577821949aSmrg		add="-l$name"
68587821949aSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
68597821949aSmrg		add_shlibpath="$dir"
68607821949aSmrg		add="-l$name"
6861de2362d3Smrg	      else
6862de2362d3Smrg		lib_linked=no
6863de2362d3Smrg	      fi
6864de2362d3Smrg	      ;;
6865de2362d3Smrg	    *) lib_linked=no ;;
6866de2362d3Smrg	    esac
6867de2362d3Smrg
68687821949aSmrg	    if test "$lib_linked" != yes; then
6869de2362d3Smrg	      func_fatal_configuration "unsupported hardcode properties"
6870de2362d3Smrg	    fi
6871de2362d3Smrg
6872de2362d3Smrg	    if test -n "$add_shlibpath"; then
6873de2362d3Smrg	      case :$compile_shlibpath: in
6874de2362d3Smrg	      *":$add_shlibpath:"*) ;;
6875de2362d3Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876de2362d3Smrg	      esac
6877de2362d3Smrg	    fi
68787821949aSmrg	    if test "$linkmode" = prog; then
6879de2362d3Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880de2362d3Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881de2362d3Smrg	    else
6882de2362d3Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883de2362d3Smrg	      test -n "$add" && deplibs="$add $deplibs"
68847821949aSmrg	      if test "$hardcode_direct" != yes &&
68857821949aSmrg		 test "$hardcode_minus_L" != yes &&
68867821949aSmrg		 test "$hardcode_shlibpath_var" = yes; then
6887de2362d3Smrg		case :$finalize_shlibpath: in
6888de2362d3Smrg		*":$libdir:"*) ;;
6889de2362d3Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890de2362d3Smrg		esac
6891de2362d3Smrg	      fi
6892de2362d3Smrg	    fi
6893de2362d3Smrg	  fi
6894de2362d3Smrg
68957821949aSmrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896de2362d3Smrg	    add_shlibpath=
6897de2362d3Smrg	    add_dir=
6898de2362d3Smrg	    add=
6899de2362d3Smrg	    # Finalize command for both is simple: just hardcode it.
69007821949aSmrg	    if test "$hardcode_direct" = yes &&
69017821949aSmrg	       test "$hardcode_direct_absolute" = no; then
69027821949aSmrg	      add="$libdir/$linklib"
69037821949aSmrg	    elif test "$hardcode_minus_L" = yes; then
69047821949aSmrg	      add_dir="-L$libdir"
69057821949aSmrg	      add="-l$name"
69067821949aSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907de2362d3Smrg	      case :$finalize_shlibpath: in
6908de2362d3Smrg	      *":$libdir:"*) ;;
6909de2362d3Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910de2362d3Smrg	      esac
69117821949aSmrg	      add="-l$name"
69127821949aSmrg	    elif test "$hardcode_automatic" = yes; then
6913de2362d3Smrg	      if test -n "$inst_prefix_dir" &&
69147821949aSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
69157821949aSmrg		add="$inst_prefix_dir$libdir/$linklib"
6916de2362d3Smrg	      else
69177821949aSmrg		add="$libdir/$linklib"
6918de2362d3Smrg	      fi
6919de2362d3Smrg	    else
6920de2362d3Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
69217821949aSmrg	      add_dir="-L$libdir"
6922de2362d3Smrg	      # Try looking first in the location we're being installed to.
6923de2362d3Smrg	      if test -n "$inst_prefix_dir"; then
6924de2362d3Smrg		case $libdir in
6925de2362d3Smrg		  [\\/]*)
6926de2362d3Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927de2362d3Smrg		    ;;
6928de2362d3Smrg		esac
6929de2362d3Smrg	      fi
69307821949aSmrg	      add="-l$name"
6931de2362d3Smrg	    fi
6932de2362d3Smrg
69337821949aSmrg	    if test "$linkmode" = prog; then
6934de2362d3Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935de2362d3Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936de2362d3Smrg	    else
6937de2362d3Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938de2362d3Smrg	      test -n "$add" && deplibs="$add $deplibs"
6939de2362d3Smrg	    fi
6940de2362d3Smrg	  fi
69417821949aSmrg	elif test "$linkmode" = prog; then
6942de2362d3Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943de2362d3Smrg	  # is not unsupported.  This is valid on all known static and
6944de2362d3Smrg	  # shared platforms.
69457821949aSmrg	  if test "$hardcode_direct" != unsupported; then
69467821949aSmrg	    test -n "$old_library" && linklib="$old_library"
6947de2362d3Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948de2362d3Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949de2362d3Smrg	  else
6950de2362d3Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951de2362d3Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952de2362d3Smrg	  fi
69537821949aSmrg	elif test "$build_libtool_libs" = yes; then
6954de2362d3Smrg	  # Not a shared library
69557821949aSmrg	  if test "$deplibs_check_method" != pass_all; then
6956de2362d3Smrg	    # We're trying link a shared library against a static one
6957de2362d3Smrg	    # but the system doesn't support it.
6958de2362d3Smrg
6959de2362d3Smrg	    # Just print a warning and add the library to dependency_libs so
6960de2362d3Smrg	    # that the program can be linked against the static library.
6961de2362d3Smrg	    echo
69627821949aSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6963de2362d3Smrg	    echo "*** I have the capability to make that library automatically link in when"
6964de2362d3Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
6965de2362d3Smrg	    echo "*** shared version of the library, which you do not appear to have."
69667821949aSmrg	    if test "$module" = yes; then
6967de2362d3Smrg	      echo "*** But as you try to build a module library, libtool will still create "
6968de2362d3Smrg	      echo "*** a static module, that should work as long as the dlopening application"
6969de2362d3Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970de2362d3Smrg	      if test -z "$global_symbol_pipe"; then
6971de2362d3Smrg		echo
6972de2362d3Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69737821949aSmrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6974de2362d3Smrg		echo "*** not find such a program.  So, this module is probably useless."
69757821949aSmrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976de2362d3Smrg	      fi
69777821949aSmrg	      if test "$build_old_libs" = no; then
6978de2362d3Smrg		build_libtool_libs=module
6979de2362d3Smrg		build_old_libs=yes
6980de2362d3Smrg	      else
6981de2362d3Smrg		build_libtool_libs=no
6982de2362d3Smrg	      fi
6983de2362d3Smrg	    fi
6984de2362d3Smrg	  else
6985de2362d3Smrg	    deplibs="$dir/$old_library $deplibs"
6986de2362d3Smrg	    link_static=yes
6987de2362d3Smrg	  fi
6988de2362d3Smrg	fi # link shared/static library?
6989de2362d3Smrg
69907821949aSmrg	if test "$linkmode" = lib; then
6991de2362d3Smrg	  if test -n "$dependency_libs" &&
69927821949aSmrg	     { test "$hardcode_into_libs" != yes ||
69937821949aSmrg	       test "$build_old_libs" = yes ||
69947821949aSmrg	       test "$link_static" = yes; }; then
6995de2362d3Smrg	    # Extract -R from dependency_libs
6996de2362d3Smrg	    temp_deplibs=
6997de2362d3Smrg	    for libdir in $dependency_libs; do
6998de2362d3Smrg	      case $libdir in
6999de2362d3Smrg	      -R*) func_stripname '-R' '' "$libdir"
7000de2362d3Smrg	           temp_xrpath=$func_stripname_result
7001de2362d3Smrg		   case " $xrpath " in
7002de2362d3Smrg		   *" $temp_xrpath "*) ;;
7003de2362d3Smrg		   *) func_append xrpath " $temp_xrpath";;
7004de2362d3Smrg		   esac;;
7005de2362d3Smrg	      *) func_append temp_deplibs " $libdir";;
7006de2362d3Smrg	      esac
7007de2362d3Smrg	    done
70087821949aSmrg	    dependency_libs="$temp_deplibs"
7009de2362d3Smrg	  fi
7010de2362d3Smrg
7011de2362d3Smrg	  func_append newlib_search_path " $absdir"
7012de2362d3Smrg	  # Link against this library
70137821949aSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014de2362d3Smrg	  # ... and its dependency_libs
7015de2362d3Smrg	  tmp_libs=
7016de2362d3Smrg	  for deplib in $dependency_libs; do
7017de2362d3Smrg	    newdependency_libs="$deplib $newdependency_libs"
7018de2362d3Smrg	    case $deplib in
7019de2362d3Smrg              -L*) func_stripname '-L' '' "$deplib"
7020de2362d3Smrg                   func_resolve_sysroot "$func_stripname_result";;
7021de2362d3Smrg              *) func_resolve_sysroot "$deplib" ;;
7022de2362d3Smrg            esac
70237821949aSmrg	    if $opt_preserve_dup_deps ; then
7024de2362d3Smrg	      case "$tmp_libs " in
7025de2362d3Smrg	      *" $func_resolve_sysroot_result "*)
7026de2362d3Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027de2362d3Smrg	      esac
7028de2362d3Smrg	    fi
7029de2362d3Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030de2362d3Smrg	  done
7031de2362d3Smrg
70327821949aSmrg	  if test "$link_all_deplibs" != no; then
7033de2362d3Smrg	    # Add the search paths of all dependency libraries
7034de2362d3Smrg	    for deplib in $dependency_libs; do
7035de2362d3Smrg	      path=
7036de2362d3Smrg	      case $deplib in
70377821949aSmrg	      -L*) path="$deplib" ;;
7038de2362d3Smrg	      *.la)
7039de2362d3Smrg	        func_resolve_sysroot "$deplib"
7040de2362d3Smrg	        deplib=$func_resolve_sysroot_result
7041de2362d3Smrg	        func_dirname "$deplib" "" "."
7042de2362d3Smrg		dir=$func_dirname_result
7043de2362d3Smrg		# We need an absolute path.
7044de2362d3Smrg		case $dir in
70457821949aSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046de2362d3Smrg		*)
7047de2362d3Smrg		  absdir=`cd "$dir" && pwd`
7048de2362d3Smrg		  if test -z "$absdir"; then
70497821949aSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
70507821949aSmrg		    absdir="$dir"
7051de2362d3Smrg		  fi
7052de2362d3Smrg		  ;;
7053de2362d3Smrg		esac
7054de2362d3Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055de2362d3Smrg		case $host in
7056de2362d3Smrg		*-*-darwin*)
7057de2362d3Smrg		  depdepl=
70587821949aSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
70597821949aSmrg		  if test -n "$deplibrary_names" ; then
70607821949aSmrg		    for tmp in $deplibrary_names ; do
7061de2362d3Smrg		      depdepl=$tmp
7062de2362d3Smrg		    done
70637821949aSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
70647821949aSmrg		      depdepl="$absdir/$objdir/$depdepl"
70657821949aSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066de2362d3Smrg                      if test -z "$darwin_install_name"; then
70677821949aSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068de2362d3Smrg                      fi
70697821949aSmrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70707821949aSmrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071de2362d3Smrg		      path=
7072de2362d3Smrg		    fi
7073de2362d3Smrg		  fi
7074de2362d3Smrg		  ;;
7075de2362d3Smrg		*)
70767821949aSmrg		  path="-L$absdir/$objdir"
7077de2362d3Smrg		  ;;
7078de2362d3Smrg		esac
7079de2362d3Smrg		else
70807821949aSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081de2362d3Smrg		  test -z "$libdir" && \
70827821949aSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083de2362d3Smrg		  test "$absdir" != "$libdir" && \
70847821949aSmrg		    func_warning "\`$deplib' seems to be moved"
7085de2362d3Smrg
70867821949aSmrg		  path="-L$absdir"
7087de2362d3Smrg		fi
7088de2362d3Smrg		;;
7089de2362d3Smrg	      esac
7090de2362d3Smrg	      case " $deplibs " in
7091de2362d3Smrg	      *" $path "*) ;;
7092de2362d3Smrg	      *) deplibs="$path $deplibs" ;;
7093de2362d3Smrg	      esac
7094de2362d3Smrg	    done
7095de2362d3Smrg	  fi # link_all_deplibs != no
7096de2362d3Smrg	fi # linkmode = lib
7097de2362d3Smrg      done # for deplib in $libs
70987821949aSmrg      if test "$pass" = link; then
70997821949aSmrg	if test "$linkmode" = "prog"; then
7100de2362d3Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101de2362d3Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102de2362d3Smrg	else
7103de2362d3Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104de2362d3Smrg	fi
7105de2362d3Smrg      fi
71067821949aSmrg      dependency_libs="$newdependency_libs"
71077821949aSmrg      if test "$pass" = dlpreopen; then
7108de2362d3Smrg	# Link the dlpreopened libraries before other libraries
7109de2362d3Smrg	for deplib in $save_deplibs; do
7110de2362d3Smrg	  deplibs="$deplib $deplibs"
7111de2362d3Smrg	done
7112de2362d3Smrg      fi
71137821949aSmrg      if test "$pass" != dlopen; then
71147821949aSmrg	if test "$pass" != conv; then
7115de2362d3Smrg	  # Make sure lib_search_path contains only unique directories.
7116de2362d3Smrg	  lib_search_path=
7117de2362d3Smrg	  for dir in $newlib_search_path; do
7118de2362d3Smrg	    case "$lib_search_path " in
7119de2362d3Smrg	    *" $dir "*) ;;
7120de2362d3Smrg	    *) func_append lib_search_path " $dir" ;;
7121de2362d3Smrg	    esac
7122de2362d3Smrg	  done
7123de2362d3Smrg	  newlib_search_path=
71247821949aSmrg	fi
7125de2362d3Smrg
71267821949aSmrg	if test "$linkmode,$pass" != "prog,link"; then
71277821949aSmrg	  vars="deplibs"
71280d16fef4Smrg	else
71297821949aSmrg	  vars="compile_deplibs finalize_deplibs"
7130de2362d3Smrg	fi
7131de2362d3Smrg	for var in $vars dependency_libs; do
7132de2362d3Smrg	  # Add libraries to $var in reverse order
7133de2362d3Smrg	  eval tmp_libs=\"\$$var\"
7134de2362d3Smrg	  new_libs=
7135de2362d3Smrg	  for deplib in $tmp_libs; do
7136de2362d3Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7137de2362d3Smrg	    #        that some nasty dependency loop isn't accidentally
7138de2362d3Smrg	    #        broken:
7139de2362d3Smrg	    #new_libs="$deplib $new_libs"
7140de2362d3Smrg	    # Pragmatically, this seems to cause very few problems in
7141de2362d3Smrg	    # practice:
7142de2362d3Smrg	    case $deplib in
7143de2362d3Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7144de2362d3Smrg	    -R*) ;;
7145de2362d3Smrg	    *)
7146de2362d3Smrg	      # And here is the reason: when a library appears more
7147de2362d3Smrg	      # than once as an explicit dependence of a library, or
7148de2362d3Smrg	      # is implicitly linked in more than once by the
7149de2362d3Smrg	      # compiler, it is considered special, and multiple
7150de2362d3Smrg	      # occurrences thereof are not removed.  Compare this
7151de2362d3Smrg	      # with having the same library being listed as a
7152de2362d3Smrg	      # dependency of multiple other libraries: in this case,
7153de2362d3Smrg	      # we know (pedantically, we assume) the library does not
7154de2362d3Smrg	      # need to be listed more than once, so we keep only the
7155de2362d3Smrg	      # last copy.  This is not always right, but it is rare
7156de2362d3Smrg	      # enough that we require users that really mean to play
7157de2362d3Smrg	      # such unportable linking tricks to link the library
7158de2362d3Smrg	      # using -Wl,-lname, so that libtool does not consider it
7159de2362d3Smrg	      # for duplicate removal.
7160de2362d3Smrg	      case " $specialdeplibs " in
7161de2362d3Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162de2362d3Smrg	      *)
7163de2362d3Smrg		case " $new_libs " in
7164de2362d3Smrg		*" $deplib "*) ;;
7165de2362d3Smrg		*) new_libs="$deplib $new_libs" ;;
7166de2362d3Smrg		esac
7167de2362d3Smrg		;;
7168de2362d3Smrg	      esac
7169de2362d3Smrg	      ;;
7170de2362d3Smrg	    esac
7171de2362d3Smrg	  done
7172de2362d3Smrg	  tmp_libs=
7173de2362d3Smrg	  for deplib in $new_libs; do
7174de2362d3Smrg	    case $deplib in
7175de2362d3Smrg	    -L*)
7176de2362d3Smrg	      case " $tmp_libs " in
7177de2362d3Smrg	      *" $deplib "*) ;;
7178de2362d3Smrg	      *) func_append tmp_libs " $deplib" ;;
7179de2362d3Smrg	      esac
7180de2362d3Smrg	      ;;
7181de2362d3Smrg	    *) func_append tmp_libs " $deplib" ;;
7182de2362d3Smrg	    esac
7183de2362d3Smrg	  done
7184de2362d3Smrg	  eval $var=\"$tmp_libs\"
7185de2362d3Smrg	done # for var
7186de2362d3Smrg      fi
7187de2362d3Smrg      # Last step: remove runtime libs from dependency_libs
7188de2362d3Smrg      # (they stay in deplibs)
7189de2362d3Smrg      tmp_libs=
71907821949aSmrg      for i in $dependency_libs ; do
7191de2362d3Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192de2362d3Smrg	*" $i "*)
71937821949aSmrg	  i=""
7194de2362d3Smrg	  ;;
7195de2362d3Smrg	esac
71967821949aSmrg	if test -n "$i" ; then
7197de2362d3Smrg	  func_append tmp_libs " $i"
7198de2362d3Smrg	fi
7199de2362d3Smrg      done
7200de2362d3Smrg      dependency_libs=$tmp_libs
7201de2362d3Smrg    done # for pass
72027821949aSmrg    if test "$linkmode" = prog; then
72037821949aSmrg      dlfiles="$newdlfiles"
7204de2362d3Smrg    fi
72057821949aSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
72067821949aSmrg      dlprefiles="$newdlprefiles"
7207de2362d3Smrg    fi
7208de2362d3Smrg
7209de2362d3Smrg    case $linkmode in
7210de2362d3Smrg    oldlib)
72117821949aSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
72127821949aSmrg	func_warning "\`-dlopen' is ignored for archives"
7213de2362d3Smrg      fi
7214de2362d3Smrg
7215de2362d3Smrg      case " $deplibs" in
7216de2362d3Smrg      *\ -l* | *\ -L*)
72177821949aSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218de2362d3Smrg      esac
7219de2362d3Smrg
7220de2362d3Smrg      test -n "$rpath" && \
72217821949aSmrg	func_warning "\`-rpath' is ignored for archives"
7222de2362d3Smrg
7223de2362d3Smrg      test -n "$xrpath" && \
72247821949aSmrg	func_warning "\`-R' is ignored for archives"
7225de2362d3Smrg
7226de2362d3Smrg      test -n "$vinfo" && \
72277821949aSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228de2362d3Smrg
7229de2362d3Smrg      test -n "$release" && \
72307821949aSmrg	func_warning "\`-release' is ignored for archives"
7231de2362d3Smrg
7232de2362d3Smrg      test -n "$export_symbols$export_symbols_regex" && \
72337821949aSmrg	func_warning "\`-export-symbols' is ignored for archives"
7234de2362d3Smrg
7235de2362d3Smrg      # Now set the variables for building old libraries.
7236de2362d3Smrg      build_libtool_libs=no
72377821949aSmrg      oldlibs="$output"
7238de2362d3Smrg      func_append objs "$old_deplibs"
7239de2362d3Smrg      ;;
7240de2362d3Smrg
7241de2362d3Smrg    lib)
72427821949aSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243de2362d3Smrg      case $outputname in
7244de2362d3Smrg      lib*)
7245de2362d3Smrg	func_stripname 'lib' '.la' "$outputname"
7246de2362d3Smrg	name=$func_stripname_result
7247de2362d3Smrg	eval shared_ext=\"$shrext_cmds\"
7248de2362d3Smrg	eval libname=\"$libname_spec\"
7249de2362d3Smrg	;;
7250de2362d3Smrg      *)
72517821949aSmrg	test "$module" = no && \
72527821949aSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253de2362d3Smrg
72547821949aSmrg	if test "$need_lib_prefix" != no; then
7255de2362d3Smrg	  # Add the "lib" prefix for modules if required
7256de2362d3Smrg	  func_stripname '' '.la' "$outputname"
7257de2362d3Smrg	  name=$func_stripname_result
7258de2362d3Smrg	  eval shared_ext=\"$shrext_cmds\"
7259de2362d3Smrg	  eval libname=\"$libname_spec\"
7260de2362d3Smrg	else
7261de2362d3Smrg	  func_stripname '' '.la' "$outputname"
7262de2362d3Smrg	  libname=$func_stripname_result
7263de2362d3Smrg	fi
7264de2362d3Smrg	;;
7265de2362d3Smrg      esac
7266de2362d3Smrg
7267de2362d3Smrg      if test -n "$objs"; then
72687821949aSmrg	if test "$deplibs_check_method" != pass_all; then
72697821949aSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270de2362d3Smrg	else
7271de2362d3Smrg	  echo
7272de2362d3Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273de2362d3Smrg	  $ECHO "*** objects $objs is not portable!"
7274de2362d3Smrg	  func_append libobjs " $objs"
7275de2362d3Smrg	fi
7276de2362d3Smrg      fi
7277de2362d3Smrg
72787821949aSmrg      test "$dlself" != no && \
72797821949aSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280de2362d3Smrg
7281de2362d3Smrg      set dummy $rpath
7282de2362d3Smrg      shift
72837821949aSmrg      test "$#" -gt 1 && \
72847821949aSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285de2362d3Smrg
72867821949aSmrg      install_libdir="$1"
7287de2362d3Smrg
7288de2362d3Smrg      oldlibs=
7289de2362d3Smrg      if test -z "$rpath"; then
72907821949aSmrg	if test "$build_libtool_libs" = yes; then
7291de2362d3Smrg	  # Building a libtool convenience library.
72927821949aSmrg	  # Some compilers have problems with a `.al' extension so
7293de2362d3Smrg	  # convenience libraries should have the same extension an
7294de2362d3Smrg	  # archive normally would.
7295de2362d3Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296de2362d3Smrg	  build_libtool_libs=convenience
7297de2362d3Smrg	  build_old_libs=yes
7298de2362d3Smrg	fi
7299de2362d3Smrg
7300de2362d3Smrg	test -n "$vinfo" && \
73017821949aSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302de2362d3Smrg
7303de2362d3Smrg	test -n "$release" && \
73047821949aSmrg	  func_warning "\`-release' is ignored for convenience libraries"
7305de2362d3Smrg      else
7306de2362d3Smrg
7307de2362d3Smrg	# Parse the version information argument.
73087821949aSmrg	save_ifs="$IFS"; IFS=':'
7309de2362d3Smrg	set dummy $vinfo 0 0 0
7310de2362d3Smrg	shift
73117821949aSmrg	IFS="$save_ifs"
7312de2362d3Smrg
7313de2362d3Smrg	test -n "$7" && \
73147821949aSmrg	  func_fatal_help "too many parameters to \`-version-info'"
7315de2362d3Smrg
7316de2362d3Smrg	# convert absolute version numbers to libtool ages
7317de2362d3Smrg	# this retains compatibility with .la files and attempts
7318de2362d3Smrg	# to make the code below a bit more comprehensible
7319de2362d3Smrg
7320de2362d3Smrg	case $vinfo_number in
7321de2362d3Smrg	yes)
73227821949aSmrg	  number_major="$1"
73237821949aSmrg	  number_minor="$2"
73247821949aSmrg	  number_revision="$3"
7325de2362d3Smrg	  #
7326de2362d3Smrg	  # There are really only two kinds -- those that
7327de2362d3Smrg	  # use the current revision as the major version
7328de2362d3Smrg	  # and those that subtract age and use age as
7329de2362d3Smrg	  # a minor version.  But, then there is irix
73307821949aSmrg	  # which has an extra 1 added just for fun
7331de2362d3Smrg	  #
7332de2362d3Smrg	  case $version_type in
7333de2362d3Smrg	  # correct linux to gnu/linux during the next big refactor
73347821949aSmrg	  darwin|linux|osf|windows|none)
7335de2362d3Smrg	    func_arith $number_major + $number_minor
7336de2362d3Smrg	    current=$func_arith_result
73377821949aSmrg	    age="$number_minor"
73387821949aSmrg	    revision="$number_revision"
7339de2362d3Smrg	    ;;
73407821949aSmrg	  freebsd-aout|freebsd-elf|qnx|sunos)
73417821949aSmrg	    current="$number_major"
73427821949aSmrg	    revision="$number_minor"
73437821949aSmrg	    age="0"
7344de2362d3Smrg	    ;;
7345de2362d3Smrg	  irix|nonstopux)
7346de2362d3Smrg	    func_arith $number_major + $number_minor
7347de2362d3Smrg	    current=$func_arith_result
73487821949aSmrg	    age="$number_minor"
73497821949aSmrg	    revision="$number_minor"
7350de2362d3Smrg	    lt_irix_increment=no
7351de2362d3Smrg	    ;;
7352de2362d3Smrg	  esac
7353de2362d3Smrg	  ;;
7354de2362d3Smrg	no)
73557821949aSmrg	  current="$1"
73567821949aSmrg	  revision="$2"
73577821949aSmrg	  age="$3"
7358de2362d3Smrg	  ;;
7359de2362d3Smrg	esac
7360de2362d3Smrg
7361de2362d3Smrg	# Check that each of the things are valid numbers.
7362de2362d3Smrg	case $current in
7363de2362d3Smrg	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]) ;;
7364de2362d3Smrg	*)
73657821949aSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
73667821949aSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367de2362d3Smrg	  ;;
7368de2362d3Smrg	esac
7369de2362d3Smrg
7370de2362d3Smrg	case $revision in
7371de2362d3Smrg	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]) ;;
7372de2362d3Smrg	*)
73737821949aSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
73747821949aSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375de2362d3Smrg	  ;;
7376de2362d3Smrg	esac
7377de2362d3Smrg
7378de2362d3Smrg	case $age in
7379de2362d3Smrg	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]) ;;
7380de2362d3Smrg	*)
73817821949aSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
73827821949aSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383de2362d3Smrg	  ;;
7384de2362d3Smrg	esac
7385de2362d3Smrg
7386de2362d3Smrg	if test "$age" -gt "$current"; then
73877821949aSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
73887821949aSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389de2362d3Smrg	fi
7390de2362d3Smrg
7391de2362d3Smrg	# Calculate the version variables.
7392de2362d3Smrg	major=
7393de2362d3Smrg	versuffix=
7394de2362d3Smrg	verstring=
7395de2362d3Smrg	case $version_type in
7396de2362d3Smrg	none) ;;
7397de2362d3Smrg
7398de2362d3Smrg	darwin)
7399de2362d3Smrg	  # Like Linux, but with the current version available in
7400de2362d3Smrg	  # verstring for coding it into the library header
7401de2362d3Smrg	  func_arith $current - $age
7402de2362d3Smrg	  major=.$func_arith_result
74037821949aSmrg	  versuffix="$major.$age.$revision"
7404de2362d3Smrg	  # Darwin ld doesn't like 0 for these options...
7405de2362d3Smrg	  func_arith $current + 1
7406de2362d3Smrg	  minor_current=$func_arith_result
74077821949aSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408de2362d3Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409de2362d3Smrg	  ;;
7410de2362d3Smrg
7411de2362d3Smrg	freebsd-aout)
74127821949aSmrg	  major=".$current"
74137821949aSmrg	  versuffix=".$current.$revision";
7414de2362d3Smrg	  ;;
7415de2362d3Smrg
7416de2362d3Smrg	freebsd-elf)
74177821949aSmrg	  major=".$current"
74187821949aSmrg	  versuffix=".$current"
7419de2362d3Smrg	  ;;
7420de2362d3Smrg
7421de2362d3Smrg	irix | nonstopux)
74227821949aSmrg	  if test "X$lt_irix_increment" = "Xno"; then
7423de2362d3Smrg	    func_arith $current - $age
7424de2362d3Smrg	  else
7425de2362d3Smrg	    func_arith $current - $age + 1
7426de2362d3Smrg	  fi
7427de2362d3Smrg	  major=$func_arith_result
7428de2362d3Smrg
7429de2362d3Smrg	  case $version_type in
7430de2362d3Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7431de2362d3Smrg	    *)         verstring_prefix=sgi ;;
7432de2362d3Smrg	  esac
74337821949aSmrg	  verstring="$verstring_prefix$major.$revision"
7434de2362d3Smrg
7435de2362d3Smrg	  # Add in all the interfaces that we are compatible with.
7436de2362d3Smrg	  loop=$revision
74377821949aSmrg	  while test "$loop" -ne 0; do
7438de2362d3Smrg	    func_arith $revision - $loop
7439de2362d3Smrg	    iface=$func_arith_result
7440de2362d3Smrg	    func_arith $loop - 1
7441de2362d3Smrg	    loop=$func_arith_result
74427821949aSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443de2362d3Smrg	  done
7444de2362d3Smrg
74457821949aSmrg	  # Before this point, $major must not contain `.'.
7446de2362d3Smrg	  major=.$major
74477821949aSmrg	  versuffix="$major.$revision"
7448de2362d3Smrg	  ;;
7449de2362d3Smrg
7450de2362d3Smrg	linux) # correct to gnu/linux during the next big refactor
7451de2362d3Smrg	  func_arith $current - $age
7452de2362d3Smrg	  major=.$func_arith_result
74537821949aSmrg	  versuffix="$major.$age.$revision"
7454de2362d3Smrg	  ;;
7455de2362d3Smrg
7456de2362d3Smrg	osf)
7457de2362d3Smrg	  func_arith $current - $age
7458de2362d3Smrg	  major=.$func_arith_result
74597821949aSmrg	  versuffix=".$current.$age.$revision"
74607821949aSmrg	  verstring="$current.$age.$revision"
7461de2362d3Smrg
7462de2362d3Smrg	  # Add in all the interfaces that we are compatible with.
7463de2362d3Smrg	  loop=$age
74647821949aSmrg	  while test "$loop" -ne 0; do
7465de2362d3Smrg	    func_arith $current - $loop
7466de2362d3Smrg	    iface=$func_arith_result
7467de2362d3Smrg	    func_arith $loop - 1
7468de2362d3Smrg	    loop=$func_arith_result
74697821949aSmrg	    verstring="$verstring:${iface}.0"
7470de2362d3Smrg	  done
7471de2362d3Smrg
7472de2362d3Smrg	  # Make executables depend on our current version.
74737821949aSmrg	  func_append verstring ":${current}.0"
7474de2362d3Smrg	  ;;
7475de2362d3Smrg
7476de2362d3Smrg	qnx)
74777821949aSmrg	  major=".$current"
74787821949aSmrg	  versuffix=".$current"
7479de2362d3Smrg	  ;;
7480de2362d3Smrg
7481de2362d3Smrg	sunos)
74827821949aSmrg	  major=".$current"
74837821949aSmrg	  versuffix=".$current.$revision"
7484de2362d3Smrg	  ;;
7485de2362d3Smrg
7486de2362d3Smrg	windows)
7487de2362d3Smrg	  # Use '-' rather than '.', since we only want one
74887821949aSmrg	  # extension on DOS 8.3 filesystems.
7489de2362d3Smrg	  func_arith $current - $age
7490de2362d3Smrg	  major=$func_arith_result
74917821949aSmrg	  versuffix="-$major"
7492de2362d3Smrg	  ;;
7493de2362d3Smrg
7494de2362d3Smrg	*)
74957821949aSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496de2362d3Smrg	  ;;
7497de2362d3Smrg	esac
7498de2362d3Smrg
7499de2362d3Smrg	# Clear the version info if we defaulted, and they specified a release.
7500de2362d3Smrg	if test -z "$vinfo" && test -n "$release"; then
7501de2362d3Smrg	  major=
7502de2362d3Smrg	  case $version_type in
7503de2362d3Smrg	  darwin)
7504de2362d3Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505de2362d3Smrg	    # problems, so we reset it completely
7506de2362d3Smrg	    verstring=
7507de2362d3Smrg	    ;;
7508de2362d3Smrg	  *)
75097821949aSmrg	    verstring="0.0"
7510de2362d3Smrg	    ;;
7511de2362d3Smrg	  esac
75127821949aSmrg	  if test "$need_version" = no; then
7513de2362d3Smrg	    versuffix=
7514de2362d3Smrg	  else
75157821949aSmrg	    versuffix=".0.0"
7516de2362d3Smrg	  fi
7517de2362d3Smrg	fi
7518de2362d3Smrg
7519de2362d3Smrg	# Remove version info from name if versioning should be avoided
75207821949aSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521de2362d3Smrg	  major=
7522de2362d3Smrg	  versuffix=
75237821949aSmrg	  verstring=""
7524de2362d3Smrg	fi
7525de2362d3Smrg
7526de2362d3Smrg	# Check to see if the archive will have undefined symbols.
75277821949aSmrg	if test "$allow_undefined" = yes; then
75287821949aSmrg	  if test "$allow_undefined_flag" = unsupported; then
75297821949aSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
75307821949aSmrg	    build_libtool_libs=no
75317821949aSmrg	    build_old_libs=yes
7532de2362d3Smrg	  fi
7533de2362d3Smrg	else
7534de2362d3Smrg	  # Don't allow undefined symbols.
75357821949aSmrg	  allow_undefined_flag="$no_undefined_flag"
7536de2362d3Smrg	fi
7537de2362d3Smrg
7538de2362d3Smrg      fi
7539de2362d3Smrg
75407821949aSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
7541de2362d3Smrg      func_append libobjs " $symfileobj"
75427821949aSmrg      test "X$libobjs" = "X " && libobjs=
7543de2362d3Smrg
75447821949aSmrg      if test "$opt_mode" != relink; then
7545de2362d3Smrg	# Remove our outputs, but don't remove object files since they
7546de2362d3Smrg	# may have been created when compiling PIC objects.
7547de2362d3Smrg	removelist=
7548de2362d3Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549de2362d3Smrg	for p in $tempremovelist; do
7550de2362d3Smrg	  case $p in
7551de2362d3Smrg	    *.$objext | *.gcno)
7552de2362d3Smrg	       ;;
75537821949aSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
75547821949aSmrg	       if test "X$precious_files_regex" != "X"; then
7555de2362d3Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556de2362d3Smrg		 then
7557de2362d3Smrg		   continue
7558de2362d3Smrg		 fi
7559de2362d3Smrg	       fi
7560de2362d3Smrg	       func_append removelist " $p"
7561de2362d3Smrg	       ;;
7562de2362d3Smrg	    *) ;;
7563de2362d3Smrg	  esac
7564de2362d3Smrg	done
7565de2362d3Smrg	test -n "$removelist" && \
7566de2362d3Smrg	  func_show_eval "${RM}r \$removelist"
7567de2362d3Smrg      fi
7568de2362d3Smrg
7569de2362d3Smrg      # Now set the variables for building old libraries.
75707821949aSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7571de2362d3Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572de2362d3Smrg
7573de2362d3Smrg	# Transform .lo files to .o files.
75747821949aSmrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575de2362d3Smrg      fi
7576de2362d3Smrg
7577de2362d3Smrg      # Eliminate all temporary directories.
7578de2362d3Smrg      #for path in $notinst_path; do
7579de2362d3Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7580de2362d3Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7581de2362d3Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582de2362d3Smrg      #done
7583de2362d3Smrg
7584de2362d3Smrg      if test -n "$xrpath"; then
7585de2362d3Smrg	# If the user specified any rpath flags, then add them.
7586de2362d3Smrg	temp_xrpath=
7587de2362d3Smrg	for libdir in $xrpath; do
7588de2362d3Smrg	  func_replace_sysroot "$libdir"
7589de2362d3Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590de2362d3Smrg	  case "$finalize_rpath " in
7591de2362d3Smrg	  *" $libdir "*) ;;
7592de2362d3Smrg	  *) func_append finalize_rpath " $libdir" ;;
7593de2362d3Smrg	  esac
7594de2362d3Smrg	done
75957821949aSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596de2362d3Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597de2362d3Smrg	fi
7598de2362d3Smrg      fi
7599de2362d3Smrg
7600de2362d3Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
76017821949aSmrg      old_dlfiles="$dlfiles"
7602de2362d3Smrg      dlfiles=
7603de2362d3Smrg      for lib in $old_dlfiles; do
7604de2362d3Smrg	case " $dlprefiles $dlfiles " in
7605de2362d3Smrg	*" $lib "*) ;;
7606de2362d3Smrg	*) func_append dlfiles " $lib" ;;
7607de2362d3Smrg	esac
7608de2362d3Smrg      done
7609de2362d3Smrg
7610de2362d3Smrg      # Make sure dlprefiles contains only unique files
76117821949aSmrg      old_dlprefiles="$dlprefiles"
7612de2362d3Smrg      dlprefiles=
7613de2362d3Smrg      for lib in $old_dlprefiles; do
7614de2362d3Smrg	case "$dlprefiles " in
7615de2362d3Smrg	*" $lib "*) ;;
7616de2362d3Smrg	*) func_append dlprefiles " $lib" ;;
7617de2362d3Smrg	esac
7618de2362d3Smrg      done
7619de2362d3Smrg
76207821949aSmrg      if test "$build_libtool_libs" = yes; then
7621de2362d3Smrg	if test -n "$rpath"; then
7622de2362d3Smrg	  case $host in
7623de2362d3Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624de2362d3Smrg	    # these systems don't actually have a c library (as such)!
7625de2362d3Smrg	    ;;
7626de2362d3Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627de2362d3Smrg	    # Rhapsody C library is in the System framework
7628de2362d3Smrg	    func_append deplibs " System.ltframework"
7629de2362d3Smrg	    ;;
7630de2362d3Smrg	  *-*-netbsd*)
7631de2362d3Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7632de2362d3Smrg	    ;;
7633de2362d3Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634de2362d3Smrg	    # Do not include libc due to us having libc/libc_r.
7635de2362d3Smrg	    ;;
7636de2362d3Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637de2362d3Smrg	    # Causes problems with __ctype
7638de2362d3Smrg	    ;;
7639de2362d3Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640de2362d3Smrg	    # Compiler inserts libc in the correct place for threads to work
7641de2362d3Smrg	    ;;
7642de2362d3Smrg	  *)
7643de2362d3Smrg	    # Add libc to deplibs on all other systems if necessary.
76447821949aSmrg	    if test "$build_libtool_need_lc" = "yes"; then
7645de2362d3Smrg	      func_append deplibs " -lc"
7646de2362d3Smrg	    fi
7647de2362d3Smrg	    ;;
7648de2362d3Smrg	  esac
7649de2362d3Smrg	fi
7650de2362d3Smrg
7651de2362d3Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7652de2362d3Smrg	name_save=$name
7653de2362d3Smrg	libname_save=$libname
7654de2362d3Smrg	release_save=$release
7655de2362d3Smrg	versuffix_save=$versuffix
7656de2362d3Smrg	major_save=$major
7657de2362d3Smrg	# I'm not sure if I'm treating the release correctly.  I think
7658de2362d3Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659de2362d3Smrg	# add it in twice.  Is that correct?
76607821949aSmrg	release=""
76617821949aSmrg	versuffix=""
76627821949aSmrg	major=""
7663de2362d3Smrg	newdeplibs=
7664de2362d3Smrg	droppeddeps=no
7665de2362d3Smrg	case $deplibs_check_method in
7666de2362d3Smrg	pass_all)
7667de2362d3Smrg	  # Don't check for shared/static.  Everything works.
7668de2362d3Smrg	  # This might be a little naive.  We might want to check
7669de2362d3Smrg	  # whether the library exists or not.  But this is on
7670de2362d3Smrg	  # osf3 & osf4 and I'm not really sure... Just
7671de2362d3Smrg	  # implementing what was already the behavior.
7672de2362d3Smrg	  newdeplibs=$deplibs
7673de2362d3Smrg	  ;;
7674de2362d3Smrg	test_compile)
7675de2362d3Smrg	  # This code stresses the "libraries are programs" paradigm to its
7676de2362d3Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677de2362d3Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7678de2362d3Smrg	  # whether they linked in statically or dynamically with ldd.
7679de2362d3Smrg	  $opt_dry_run || $RM conftest.c
7680de2362d3Smrg	  cat > conftest.c <<EOF
7681de2362d3Smrg	  int main() { return 0; }
7682de2362d3SmrgEOF
7683de2362d3Smrg	  $opt_dry_run || $RM conftest
7684de2362d3Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685de2362d3Smrg	    ldd_output=`ldd conftest`
7686de2362d3Smrg	    for i in $deplibs; do
7687de2362d3Smrg	      case $i in
7688de2362d3Smrg	      -l*)
7689de2362d3Smrg		func_stripname -l '' "$i"
7690de2362d3Smrg		name=$func_stripname_result
76917821949aSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692de2362d3Smrg		  case " $predeps $postdeps " in
7693de2362d3Smrg		  *" $i "*)
7694de2362d3Smrg		    func_append newdeplibs " $i"
76957821949aSmrg		    i=""
7696de2362d3Smrg		    ;;
7697de2362d3Smrg		  esac
7698de2362d3Smrg		fi
76997821949aSmrg		if test -n "$i" ; then
7700de2362d3Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701de2362d3Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702de2362d3Smrg		  set dummy $deplib_matches; shift
7703de2362d3Smrg		  deplib_match=$1
77047821949aSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7705de2362d3Smrg		    func_append newdeplibs " $i"
7706de2362d3Smrg		  else
7707de2362d3Smrg		    droppeddeps=yes
7708de2362d3Smrg		    echo
7709de2362d3Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7710de2362d3Smrg		    echo "*** I have the capability to make that library automatically link in when"
7711de2362d3Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
7712de2362d3Smrg		    echo "*** shared version of the library, which I believe you do not have"
7713de2362d3Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
7714de2362d3Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715de2362d3Smrg		  fi
7716de2362d3Smrg		fi
7717de2362d3Smrg		;;
7718de2362d3Smrg	      *)
7719de2362d3Smrg		func_append newdeplibs " $i"
7720de2362d3Smrg		;;
7721de2362d3Smrg	      esac
7722de2362d3Smrg	    done
7723de2362d3Smrg	  else
7724de2362d3Smrg	    # Error occurred in the first compile.  Let's try to salvage
7725de2362d3Smrg	    # the situation: Compile a separate program for each library.
7726de2362d3Smrg	    for i in $deplibs; do
7727de2362d3Smrg	      case $i in
7728de2362d3Smrg	      -l*)
7729de2362d3Smrg		func_stripname -l '' "$i"
7730de2362d3Smrg		name=$func_stripname_result
7731de2362d3Smrg		$opt_dry_run || $RM conftest
7732de2362d3Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733de2362d3Smrg		  ldd_output=`ldd conftest`
77347821949aSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735de2362d3Smrg		    case " $predeps $postdeps " in
7736de2362d3Smrg		    *" $i "*)
7737de2362d3Smrg		      func_append newdeplibs " $i"
77387821949aSmrg		      i=""
7739de2362d3Smrg		      ;;
7740de2362d3Smrg		    esac
7741de2362d3Smrg		  fi
77427821949aSmrg		  if test -n "$i" ; then
7743de2362d3Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744de2362d3Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745de2362d3Smrg		    set dummy $deplib_matches; shift
7746de2362d3Smrg		    deplib_match=$1
77477821949aSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7748de2362d3Smrg		      func_append newdeplibs " $i"
7749de2362d3Smrg		    else
7750de2362d3Smrg		      droppeddeps=yes
7751de2362d3Smrg		      echo
7752de2362d3Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7753de2362d3Smrg		      echo "*** I have the capability to make that library automatically link in when"
7754de2362d3Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
7755de2362d3Smrg		      echo "*** shared version of the library, which you do not appear to have"
7756de2362d3Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
7757de2362d3Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758de2362d3Smrg		    fi
7759de2362d3Smrg		  fi
7760de2362d3Smrg		else
7761de2362d3Smrg		  droppeddeps=yes
7762de2362d3Smrg		  echo
7763de2362d3Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7764de2362d3Smrg		  echo "*** make it link in!  You will probably need to install it or some"
7765de2362d3Smrg		  echo "*** library that it depends on before this library will be fully"
7766de2362d3Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7767de2362d3Smrg		fi
7768de2362d3Smrg		;;
7769de2362d3Smrg	      *)
7770de2362d3Smrg		func_append newdeplibs " $i"
7771de2362d3Smrg		;;
7772de2362d3Smrg	      esac
7773de2362d3Smrg	    done
7774de2362d3Smrg	  fi
7775de2362d3Smrg	  ;;
7776de2362d3Smrg	file_magic*)
7777de2362d3Smrg	  set dummy $deplibs_check_method; shift
7778de2362d3Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779de2362d3Smrg	  for a_deplib in $deplibs; do
7780de2362d3Smrg	    case $a_deplib in
7781de2362d3Smrg	    -l*)
7782de2362d3Smrg	      func_stripname -l '' "$a_deplib"
7783de2362d3Smrg	      name=$func_stripname_result
77847821949aSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785de2362d3Smrg		case " $predeps $postdeps " in
7786de2362d3Smrg		*" $a_deplib "*)
7787de2362d3Smrg		  func_append newdeplibs " $a_deplib"
77887821949aSmrg		  a_deplib=""
7789de2362d3Smrg		  ;;
7790de2362d3Smrg		esac
7791de2362d3Smrg	      fi
77927821949aSmrg	      if test -n "$a_deplib" ; then
7793de2362d3Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7794de2362d3Smrg		if test -n "$file_magic_glob"; then
7795de2362d3Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7796de2362d3Smrg		else
7797de2362d3Smrg		  libnameglob=$libname
7798de2362d3Smrg		fi
77997821949aSmrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800de2362d3Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78017821949aSmrg		  if test "$want_nocaseglob" = yes; then
7802de2362d3Smrg		    shopt -s nocaseglob
7803de2362d3Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7804de2362d3Smrg		    $nocaseglob
7805de2362d3Smrg		  else
7806de2362d3Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7807de2362d3Smrg		  fi
7808de2362d3Smrg		  for potent_lib in $potential_libs; do
7809de2362d3Smrg		      # Follow soft links.
7810de2362d3Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811de2362d3Smrg			 $GREP " -> " >/dev/null; then
7812de2362d3Smrg			continue
7813de2362d3Smrg		      fi
7814de2362d3Smrg		      # The statement above tries to avoid entering an
7815de2362d3Smrg		      # endless loop below, in case of cyclic links.
7816de2362d3Smrg		      # We might still enter an endless loop, since a link
7817de2362d3Smrg		      # loop can be closed while we follow links,
7818de2362d3Smrg		      # but so what?
78197821949aSmrg		      potlib="$potent_lib"
7820de2362d3Smrg		      while test -h "$potlib" 2>/dev/null; do
78217821949aSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822de2362d3Smrg			case $potliblink in
78237821949aSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78247821949aSmrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825de2362d3Smrg			esac
7826de2362d3Smrg		      done
7827de2362d3Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828de2362d3Smrg			 $SED -e 10q |
7829de2362d3Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
7830de2362d3Smrg			func_append newdeplibs " $a_deplib"
78317821949aSmrg			a_deplib=""
7832de2362d3Smrg			break 2
7833de2362d3Smrg		      fi
7834de2362d3Smrg		  done
7835de2362d3Smrg		done
7836de2362d3Smrg	      fi
78377821949aSmrg	      if test -n "$a_deplib" ; then
7838de2362d3Smrg		droppeddeps=yes
7839de2362d3Smrg		echo
7840de2362d3Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7841de2362d3Smrg		echo "*** I have the capability to make that library automatically link in when"
7842de2362d3Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7843de2362d3Smrg		echo "*** shared version of the library, which you do not appear to have"
7844de2362d3Smrg		echo "*** because I did check the linker path looking for a file starting"
78457821949aSmrg		if test -z "$potlib" ; then
7846de2362d3Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847de2362d3Smrg		else
7848de2362d3Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849de2362d3Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850de2362d3Smrg		fi
7851de2362d3Smrg	      fi
7852de2362d3Smrg	      ;;
7853de2362d3Smrg	    *)
7854de2362d3Smrg	      # Add a -L argument.
7855de2362d3Smrg	      func_append newdeplibs " $a_deplib"
7856de2362d3Smrg	      ;;
7857de2362d3Smrg	    esac
7858de2362d3Smrg	  done # Gone through all deplibs.
7859de2362d3Smrg	  ;;
7860de2362d3Smrg	match_pattern*)
7861de2362d3Smrg	  set dummy $deplibs_check_method; shift
7862de2362d3Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863de2362d3Smrg	  for a_deplib in $deplibs; do
7864de2362d3Smrg	    case $a_deplib in
7865de2362d3Smrg	    -l*)
7866de2362d3Smrg	      func_stripname -l '' "$a_deplib"
7867de2362d3Smrg	      name=$func_stripname_result
78687821949aSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869de2362d3Smrg		case " $predeps $postdeps " in
7870de2362d3Smrg		*" $a_deplib "*)
7871de2362d3Smrg		  func_append newdeplibs " $a_deplib"
78727821949aSmrg		  a_deplib=""
7873de2362d3Smrg		  ;;
7874de2362d3Smrg		esac
7875de2362d3Smrg	      fi
78767821949aSmrg	      if test -n "$a_deplib" ; then
7877de2362d3Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878de2362d3Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879de2362d3Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880de2362d3Smrg		  for potent_lib in $potential_libs; do
78817821949aSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
7882de2362d3Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883de2362d3Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
7884de2362d3Smrg		      func_append newdeplibs " $a_deplib"
78857821949aSmrg		      a_deplib=""
7886de2362d3Smrg		      break 2
7887de2362d3Smrg		    fi
7888de2362d3Smrg		  done
7889de2362d3Smrg		done
7890de2362d3Smrg	      fi
78917821949aSmrg	      if test -n "$a_deplib" ; then
7892de2362d3Smrg		droppeddeps=yes
7893de2362d3Smrg		echo
7894de2362d3Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7895de2362d3Smrg		echo "*** I have the capability to make that library automatically link in when"
7896de2362d3Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7897de2362d3Smrg		echo "*** shared version of the library, which you do not appear to have"
7898de2362d3Smrg		echo "*** because I did check the linker path looking for a file starting"
78997821949aSmrg		if test -z "$potlib" ; then
7900de2362d3Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901de2362d3Smrg		else
7902de2362d3Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903de2362d3Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904de2362d3Smrg		fi
7905de2362d3Smrg	      fi
7906de2362d3Smrg	      ;;
7907de2362d3Smrg	    *)
7908de2362d3Smrg	      # Add a -L argument.
7909de2362d3Smrg	      func_append newdeplibs " $a_deplib"
7910de2362d3Smrg	      ;;
7911de2362d3Smrg	    esac
7912de2362d3Smrg	  done # Gone through all deplibs.
7913de2362d3Smrg	  ;;
7914de2362d3Smrg	none | unknown | *)
79157821949aSmrg	  newdeplibs=""
7916de2362d3Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
79177821949aSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
79187821949aSmrg	    for i in $predeps $postdeps ; do
7919de2362d3Smrg	      # can't use Xsed below, because $i might contain '/'
79207821949aSmrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921de2362d3Smrg	    done
7922de2362d3Smrg	  fi
7923de2362d3Smrg	  case $tmp_deplibs in
7924de2362d3Smrg	  *[!\	\ ]*)
7925de2362d3Smrg	    echo
79267821949aSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
7927de2362d3Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928de2362d3Smrg	    else
7929de2362d3Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930de2362d3Smrg	    fi
7931de2362d3Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7932de2362d3Smrg	    droppeddeps=yes
7933de2362d3Smrg	    ;;
7934de2362d3Smrg	  esac
7935de2362d3Smrg	  ;;
7936de2362d3Smrg	esac
7937de2362d3Smrg	versuffix=$versuffix_save
7938de2362d3Smrg	major=$major_save
7939de2362d3Smrg	release=$release_save
7940de2362d3Smrg	libname=$libname_save
7941de2362d3Smrg	name=$name_save
7942de2362d3Smrg
7943de2362d3Smrg	case $host in
7944de2362d3Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7945de2362d3Smrg	  # On Rhapsody replace the C library with the System framework
7946de2362d3Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947de2362d3Smrg	  ;;
7948de2362d3Smrg	esac
7949de2362d3Smrg
79507821949aSmrg	if test "$droppeddeps" = yes; then
79517821949aSmrg	  if test "$module" = yes; then
7952de2362d3Smrg	    echo
7953de2362d3Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954de2362d3Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7955de2362d3Smrg	    echo "*** a static module, that should work as long as the dlopening"
7956de2362d3Smrg	    echo "*** application is linked with the -dlopen flag."
7957de2362d3Smrg	    if test -z "$global_symbol_pipe"; then
7958de2362d3Smrg	      echo
7959de2362d3Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79607821949aSmrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7961de2362d3Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79627821949aSmrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963de2362d3Smrg	    fi
79647821949aSmrg	    if test "$build_old_libs" = no; then
79657821949aSmrg	      oldlibs="$output_objdir/$libname.$libext"
7966de2362d3Smrg	      build_libtool_libs=module
7967de2362d3Smrg	      build_old_libs=yes
7968de2362d3Smrg	    else
7969de2362d3Smrg	      build_libtool_libs=no
7970de2362d3Smrg	    fi
7971de2362d3Smrg	  else
7972de2362d3Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
7973de2362d3Smrg	    echo "*** automatically added whenever a program is linked with this library"
7974de2362d3Smrg	    echo "*** or is declared to -dlopen it."
7975de2362d3Smrg
79767821949aSmrg	    if test "$allow_undefined" = no; then
7977de2362d3Smrg	      echo
7978de2362d3Smrg	      echo "*** Since this library must not contain undefined symbols,"
7979de2362d3Smrg	      echo "*** because either the platform does not support them or"
7980de2362d3Smrg	      echo "*** it was explicitly requested with -no-undefined,"
7981de2362d3Smrg	      echo "*** libtool will only create a static version of it."
79827821949aSmrg	      if test "$build_old_libs" = no; then
79837821949aSmrg		oldlibs="$output_objdir/$libname.$libext"
7984de2362d3Smrg		build_libtool_libs=module
7985de2362d3Smrg		build_old_libs=yes
7986de2362d3Smrg	      else
7987de2362d3Smrg		build_libtool_libs=no
7988de2362d3Smrg	      fi
7989de2362d3Smrg	    fi
7990de2362d3Smrg	  fi
7991de2362d3Smrg	fi
7992de2362d3Smrg	# Done checking deplibs!
7993de2362d3Smrg	deplibs=$newdeplibs
7994de2362d3Smrg      fi
7995de2362d3Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996de2362d3Smrg      case $host in
7997de2362d3Smrg	*-*-darwin*)
7998de2362d3Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7999de2362d3Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8000de2362d3Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001de2362d3Smrg	  ;;
8002de2362d3Smrg      esac
8003de2362d3Smrg
8004de2362d3Smrg      # move library search paths that coincide with paths to not yet
8005de2362d3Smrg      # installed libraries to the beginning of the library search list
8006de2362d3Smrg      new_libs=
8007de2362d3Smrg      for path in $notinst_path; do
8008de2362d3Smrg	case " $new_libs " in
8009de2362d3Smrg	*" -L$path/$objdir "*) ;;
8010de2362d3Smrg	*)
8011de2362d3Smrg	  case " $deplibs " in
8012de2362d3Smrg	  *" -L$path/$objdir "*)
8013de2362d3Smrg	    func_append new_libs " -L$path/$objdir" ;;
8014de2362d3Smrg	  esac
8015de2362d3Smrg	  ;;
8016de2362d3Smrg	esac
8017de2362d3Smrg      done
8018de2362d3Smrg      for deplib in $deplibs; do
8019de2362d3Smrg	case $deplib in
8020de2362d3Smrg	-L*)
8021de2362d3Smrg	  case " $new_libs " in
8022de2362d3Smrg	  *" $deplib "*) ;;
8023de2362d3Smrg	  *) func_append new_libs " $deplib" ;;
8024de2362d3Smrg	  esac
8025de2362d3Smrg	  ;;
8026de2362d3Smrg	*) func_append new_libs " $deplib" ;;
8027de2362d3Smrg	esac
8028de2362d3Smrg      done
80297821949aSmrg      deplibs="$new_libs"
8030de2362d3Smrg
8031de2362d3Smrg      # All the library-specific variables (install_libdir is set above).
8032de2362d3Smrg      library_names=
8033de2362d3Smrg      old_library=
8034de2362d3Smrg      dlname=
8035de2362d3Smrg
8036de2362d3Smrg      # Test again, we may have decided not to build it any more
80377821949aSmrg      if test "$build_libtool_libs" = yes; then
80387821949aSmrg	# Remove ${wl} instances when linking with ld.
8039de2362d3Smrg	# FIXME: should test the right _cmds variable.
8040de2362d3Smrg	case $archive_cmds in
8041de2362d3Smrg	  *\$LD\ *) wl= ;;
8042de2362d3Smrg        esac
80437821949aSmrg	if test "$hardcode_into_libs" = yes; then
8044de2362d3Smrg	  # Hardcode the library paths
8045de2362d3Smrg	  hardcode_libdirs=
8046de2362d3Smrg	  dep_rpath=
80477821949aSmrg	  rpath="$finalize_rpath"
80487821949aSmrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049de2362d3Smrg	  for libdir in $rpath; do
8050de2362d3Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051de2362d3Smrg	      if test -n "$hardcode_libdir_separator"; then
8052de2362d3Smrg		func_replace_sysroot "$libdir"
8053de2362d3Smrg		libdir=$func_replace_sysroot_result
8054de2362d3Smrg		if test -z "$hardcode_libdirs"; then
80557821949aSmrg		  hardcode_libdirs="$libdir"
8056de2362d3Smrg		else
8057de2362d3Smrg		  # Just accumulate the unique libdirs.
8058de2362d3Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059de2362d3Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060de2362d3Smrg		    ;;
8061de2362d3Smrg		  *)
8062de2362d3Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063de2362d3Smrg		    ;;
8064de2362d3Smrg		  esac
8065de2362d3Smrg		fi
8066de2362d3Smrg	      else
8067de2362d3Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
8068de2362d3Smrg		func_append dep_rpath " $flag"
8069de2362d3Smrg	      fi
8070de2362d3Smrg	    elif test -n "$runpath_var"; then
8071de2362d3Smrg	      case "$perm_rpath " in
8072de2362d3Smrg	      *" $libdir "*) ;;
8073de2362d3Smrg	      *) func_append perm_rpath " $libdir" ;;
8074de2362d3Smrg	      esac
8075de2362d3Smrg	    fi
8076de2362d3Smrg	  done
8077de2362d3Smrg	  # Substitute the hardcoded libdirs into the rpath.
8078de2362d3Smrg	  if test -n "$hardcode_libdir_separator" &&
8079de2362d3Smrg	     test -n "$hardcode_libdirs"; then
80807821949aSmrg	    libdir="$hardcode_libdirs"
8081de2362d3Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082de2362d3Smrg	  fi
8083de2362d3Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084de2362d3Smrg	    # We should set the runpath_var.
8085de2362d3Smrg	    rpath=
8086de2362d3Smrg	    for dir in $perm_rpath; do
8087de2362d3Smrg	      func_append rpath "$dir:"
8088de2362d3Smrg	    done
8089de2362d3Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090de2362d3Smrg	  fi
8091de2362d3Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092de2362d3Smrg	fi
8093de2362d3Smrg
80947821949aSmrg	shlibpath="$finalize_shlibpath"
80957821949aSmrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096de2362d3Smrg	if test -n "$shlibpath"; then
8097de2362d3Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098de2362d3Smrg	fi
8099de2362d3Smrg
8100de2362d3Smrg	# Get the real and link names of the library.
8101de2362d3Smrg	eval shared_ext=\"$shrext_cmds\"
8102de2362d3Smrg	eval library_names=\"$library_names_spec\"
8103de2362d3Smrg	set dummy $library_names
8104de2362d3Smrg	shift
81057821949aSmrg	realname="$1"
8106de2362d3Smrg	shift
8107de2362d3Smrg
8108de2362d3Smrg	if test -n "$soname_spec"; then
8109de2362d3Smrg	  eval soname=\"$soname_spec\"
8110de2362d3Smrg	else
81117821949aSmrg	  soname="$realname"
8112de2362d3Smrg	fi
8113de2362d3Smrg	if test -z "$dlname"; then
8114de2362d3Smrg	  dlname=$soname
8115de2362d3Smrg	fi
8116de2362d3Smrg
81177821949aSmrg	lib="$output_objdir/$realname"
8118de2362d3Smrg	linknames=
8119de2362d3Smrg	for link
8120de2362d3Smrg	do
8121de2362d3Smrg	  func_append linknames " $link"
8122de2362d3Smrg	done
8123de2362d3Smrg
8124de2362d3Smrg	# Use standard objects if they are pic
8125de2362d3Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126de2362d3Smrg	test "X$libobjs" = "X " && libobjs=
8127de2362d3Smrg
8128de2362d3Smrg	delfiles=
8129de2362d3Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130de2362d3Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
81317821949aSmrg	  export_symbols="$output_objdir/$libname.uexp"
8132de2362d3Smrg	  func_append delfiles " $export_symbols"
8133de2362d3Smrg	fi
8134de2362d3Smrg
8135de2362d3Smrg	orig_export_symbols=
8136de2362d3Smrg	case $host_os in
8137de2362d3Smrg	cygwin* | mingw* | cegcc*)
8138de2362d3Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139de2362d3Smrg	    # exporting using user supplied symfile
81407821949aSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141de2362d3Smrg	      # and it's NOT already a .def file. Must figure out
8142de2362d3Smrg	      # which of the given symbols are data symbols and tag
8143de2362d3Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8144de2362d3Smrg	      # export_symbols gets reassigned inside the "prepare
8145de2362d3Smrg	      # the list of exported symbols" if statement, so the
8146de2362d3Smrg	      # include_expsyms logic still works.
81477821949aSmrg	      orig_export_symbols="$export_symbols"
8148de2362d3Smrg	      export_symbols=
8149de2362d3Smrg	      always_export_symbols=yes
81507821949aSmrg	    fi
8151de2362d3Smrg	  fi
8152de2362d3Smrg	  ;;
8153de2362d3Smrg	esac
8154de2362d3Smrg
8155de2362d3Smrg	# Prepare the list of exported symbols
8156de2362d3Smrg	if test -z "$export_symbols"; then
81577821949aSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
81587821949aSmrg	    func_verbose "generating symbol list for \`$libname.la'"
81597821949aSmrg	    export_symbols="$output_objdir/$libname.exp"
8160de2362d3Smrg	    $opt_dry_run || $RM $export_symbols
8161de2362d3Smrg	    cmds=$export_symbols_cmds
81627821949aSmrg	    save_ifs="$IFS"; IFS='~'
8163de2362d3Smrg	    for cmd1 in $cmds; do
81647821949aSmrg	      IFS="$save_ifs"
8165de2362d3Smrg	      # Take the normal branch if the nm_file_list_spec branch
8166de2362d3Smrg	      # doesn't work or if tool conversion is not needed.
8167de2362d3Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
8168de2362d3Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8169de2362d3Smrg		  try_normal_branch=yes
8170de2362d3Smrg		  eval cmd=\"$cmd1\"
8171de2362d3Smrg		  func_len " $cmd"
8172de2362d3Smrg		  len=$func_len_result
8173de2362d3Smrg		  ;;
8174de2362d3Smrg		*)
8175de2362d3Smrg		  try_normal_branch=no
8176de2362d3Smrg		  ;;
8177de2362d3Smrg	      esac
81787821949aSmrg	      if test "$try_normal_branch" = yes \
8179de2362d3Smrg		 && { test "$len" -lt "$max_cmd_len" \
8180de2362d3Smrg		      || test "$max_cmd_len" -le -1; }
8181de2362d3Smrg	      then
8182de2362d3Smrg		func_show_eval "$cmd" 'exit $?'
8183de2362d3Smrg		skipped_export=false
8184de2362d3Smrg	      elif test -n "$nm_file_list_spec"; then
8185de2362d3Smrg		func_basename "$output"
8186de2362d3Smrg		output_la=$func_basename_result
8187de2362d3Smrg		save_libobjs=$libobjs
8188de2362d3Smrg		save_output=$output
81897821949aSmrg		output=${output_objdir}/${output_la}.nm
8190de2362d3Smrg		func_to_tool_file "$output"
8191de2362d3Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
8192de2362d3Smrg		func_append delfiles " $output"
8193de2362d3Smrg		func_verbose "creating $NM input file list: $output"
8194de2362d3Smrg		for obj in $save_libobjs; do
8195de2362d3Smrg		  func_to_tool_file "$obj"
8196de2362d3Smrg		  $ECHO "$func_to_tool_file_result"
8197de2362d3Smrg		done > "$output"
8198de2362d3Smrg		eval cmd=\"$cmd1\"
8199de2362d3Smrg		func_show_eval "$cmd" 'exit $?'
8200de2362d3Smrg		output=$save_output
8201de2362d3Smrg		libobjs=$save_libobjs
8202de2362d3Smrg		skipped_export=false
8203de2362d3Smrg	      else
8204de2362d3Smrg		# The command line is too long to execute in one step.
8205de2362d3Smrg		func_verbose "using reloadable object file for export list..."
8206de2362d3Smrg		skipped_export=:
8207de2362d3Smrg		# Break out early, otherwise skipped_export may be
8208de2362d3Smrg		# set to false by a later but shorter cmd.
8209de2362d3Smrg		break
8210de2362d3Smrg	      fi
8211de2362d3Smrg	    done
82127821949aSmrg	    IFS="$save_ifs"
82137821949aSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214de2362d3Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215de2362d3Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216de2362d3Smrg	    fi
8217de2362d3Smrg	  fi
8218de2362d3Smrg	fi
8219de2362d3Smrg
8220de2362d3Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
82217821949aSmrg	  tmp_export_symbols="$export_symbols"
82227821949aSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8223de2362d3Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224de2362d3Smrg	fi
8225de2362d3Smrg
82267821949aSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227de2362d3Smrg	  # The given exports_symbols file has to be filtered, so filter it.
82287821949aSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229de2362d3Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
82307821949aSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231de2362d3Smrg	  # though. Also, the filter scales superlinearly with the number of
8232de2362d3Smrg	  # global variables. join(1) would be nice here, but unfortunately
8233de2362d3Smrg	  # isn't a blessed tool.
8234de2362d3Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8235de2362d3Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236de2362d3Smrg	  export_symbols=$output_objdir/$libname.def
8237de2362d3Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238de2362d3Smrg	fi
8239de2362d3Smrg
8240de2362d3Smrg	tmp_deplibs=
8241de2362d3Smrg	for test_deplib in $deplibs; do
8242de2362d3Smrg	  case " $convenience " in
8243de2362d3Smrg	  *" $test_deplib "*) ;;
8244de2362d3Smrg	  *)
8245de2362d3Smrg	    func_append tmp_deplibs " $test_deplib"
8246de2362d3Smrg	    ;;
8247de2362d3Smrg	  esac
8248de2362d3Smrg	done
82497821949aSmrg	deplibs="$tmp_deplibs"
8250de2362d3Smrg
8251de2362d3Smrg	if test -n "$convenience"; then
8252de2362d3Smrg	  if test -n "$whole_archive_flag_spec" &&
82537821949aSmrg	    test "$compiler_needs_object" = yes &&
8254de2362d3Smrg	    test -z "$libobjs"; then
8255de2362d3Smrg	    # extract the archives, so we have objects to list.
8256de2362d3Smrg	    # TODO: could optimize this to just extract one archive.
8257de2362d3Smrg	    whole_archive_flag_spec=
8258de2362d3Smrg	  fi
8259de2362d3Smrg	  if test -n "$whole_archive_flag_spec"; then
8260de2362d3Smrg	    save_libobjs=$libobjs
8261de2362d3Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262de2362d3Smrg	    test "X$libobjs" = "X " && libobjs=
8263de2362d3Smrg	  else
82647821949aSmrg	    gentop="$output_objdir/${outputname}x"
8265de2362d3Smrg	    func_append generated " $gentop"
8266de2362d3Smrg
8267de2362d3Smrg	    func_extract_archives $gentop $convenience
8268de2362d3Smrg	    func_append libobjs " $func_extract_archives_result"
8269de2362d3Smrg	    test "X$libobjs" = "X " && libobjs=
8270de2362d3Smrg	  fi
8271de2362d3Smrg	fi
8272de2362d3Smrg
82737821949aSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274de2362d3Smrg	  eval flag=\"$thread_safe_flag_spec\"
8275de2362d3Smrg	  func_append linker_flags " $flag"
8276de2362d3Smrg	fi
8277de2362d3Smrg
8278de2362d3Smrg	# Make a backup of the uninstalled library when relinking
82797821949aSmrg	if test "$opt_mode" = relink; then
8280de2362d3Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281de2362d3Smrg	fi
8282de2362d3Smrg
8283de2362d3Smrg	# Do each of the archive commands.
82847821949aSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285de2362d3Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286de2362d3Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8287de2362d3Smrg	    cmds=$module_expsym_cmds
8288de2362d3Smrg	  else
8289de2362d3Smrg	    eval test_cmds=\"$module_cmds\"
8290de2362d3Smrg	    cmds=$module_cmds
8291de2362d3Smrg	  fi
8292de2362d3Smrg	else
8293de2362d3Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294de2362d3Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295de2362d3Smrg	    cmds=$archive_expsym_cmds
8296de2362d3Smrg	  else
8297de2362d3Smrg	    eval test_cmds=\"$archive_cmds\"
8298de2362d3Smrg	    cmds=$archive_cmds
8299de2362d3Smrg	  fi
8300de2362d3Smrg	fi
8301de2362d3Smrg
83027821949aSmrg	if test "X$skipped_export" != "X:" &&
8303de2362d3Smrg	   func_len " $test_cmds" &&
8304de2362d3Smrg	   len=$func_len_result &&
8305de2362d3Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306de2362d3Smrg	  :
8307de2362d3Smrg	else
8308de2362d3Smrg	  # The command line is too long to link in one step, link piecewise
8309de2362d3Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310de2362d3Smrg	  # script.
8311de2362d3Smrg
8312de2362d3Smrg	  # Save the value of $output and $libobjs because we want to
8313de2362d3Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8314de2362d3Smrg	  # want to use save_libobjs as it was before
8315de2362d3Smrg	  # whole_archive_flag_spec was expanded, because we can't
8316de2362d3Smrg	  # assume the linker understands whole_archive_flag_spec.
8317de2362d3Smrg	  # This may have to be revisited, in case too many
8318de2362d3Smrg	  # convenience libraries get linked in and end up exceeding
8319de2362d3Smrg	  # the spec.
8320de2362d3Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321de2362d3Smrg	    save_libobjs=$libobjs
8322de2362d3Smrg	  fi
8323de2362d3Smrg	  save_output=$output
8324de2362d3Smrg	  func_basename "$output"
8325de2362d3Smrg	  output_la=$func_basename_result
8326de2362d3Smrg
8327de2362d3Smrg	  # Clear the reloadable object creation command queue and
8328de2362d3Smrg	  # initialize k to one.
8329de2362d3Smrg	  test_cmds=
8330de2362d3Smrg	  concat_cmds=
8331de2362d3Smrg	  objlist=
8332de2362d3Smrg	  last_robj=
8333de2362d3Smrg	  k=1
8334de2362d3Smrg
83357821949aSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
83367821949aSmrg	    output=${output_objdir}/${output_la}.lnkscript
8337de2362d3Smrg	    func_verbose "creating GNU ld script: $output"
8338de2362d3Smrg	    echo 'INPUT (' > $output
8339de2362d3Smrg	    for obj in $save_libobjs
8340de2362d3Smrg	    do
8341de2362d3Smrg	      func_to_tool_file "$obj"
8342de2362d3Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8343de2362d3Smrg	    done
8344de2362d3Smrg	    echo ')' >> $output
8345de2362d3Smrg	    func_append delfiles " $output"
8346de2362d3Smrg	    func_to_tool_file "$output"
8347de2362d3Smrg	    output=$func_to_tool_file_result
83487821949aSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
83497821949aSmrg	    output=${output_objdir}/${output_la}.lnk
8350de2362d3Smrg	    func_verbose "creating linker input file list: $output"
8351de2362d3Smrg	    : > $output
8352de2362d3Smrg	    set x $save_libobjs
8353de2362d3Smrg	    shift
8354de2362d3Smrg	    firstobj=
83557821949aSmrg	    if test "$compiler_needs_object" = yes; then
8356de2362d3Smrg	      firstobj="$1 "
8357de2362d3Smrg	      shift
8358de2362d3Smrg	    fi
8359de2362d3Smrg	    for obj
8360de2362d3Smrg	    do
8361de2362d3Smrg	      func_to_tool_file "$obj"
8362de2362d3Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8363de2362d3Smrg	    done
8364de2362d3Smrg	    func_append delfiles " $output"
8365de2362d3Smrg	    func_to_tool_file "$output"
8366de2362d3Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367de2362d3Smrg	  else
8368de2362d3Smrg	    if test -n "$save_libobjs"; then
8369de2362d3Smrg	      func_verbose "creating reloadable object files..."
83707821949aSmrg	      output=$output_objdir/$output_la-${k}.$objext
8371de2362d3Smrg	      eval test_cmds=\"$reload_cmds\"
8372de2362d3Smrg	      func_len " $test_cmds"
8373de2362d3Smrg	      len0=$func_len_result
8374de2362d3Smrg	      len=$len0
8375de2362d3Smrg
8376de2362d3Smrg	      # Loop over the list of objects to be linked.
8377de2362d3Smrg	      for obj in $save_libobjs
8378de2362d3Smrg	      do
8379de2362d3Smrg		func_len " $obj"
8380de2362d3Smrg		func_arith $len + $func_len_result
8381de2362d3Smrg		len=$func_arith_result
83827821949aSmrg		if test "X$objlist" = X ||
8383de2362d3Smrg		   test "$len" -lt "$max_cmd_len"; then
8384de2362d3Smrg		  func_append objlist " $obj"
8385de2362d3Smrg		else
8386de2362d3Smrg		  # The command $test_cmds is almost too long, add a
8387de2362d3Smrg		  # command to the queue.
83887821949aSmrg		  if test "$k" -eq 1 ; then
8389de2362d3Smrg		    # The first file doesn't have a previous command to add.
8390de2362d3Smrg		    reload_objs=$objlist
8391de2362d3Smrg		    eval concat_cmds=\"$reload_cmds\"
8392de2362d3Smrg		  else
8393de2362d3Smrg		    # All subsequent reloadable object files will link in
8394de2362d3Smrg		    # the last one created.
8395de2362d3Smrg		    reload_objs="$objlist $last_robj"
8396de2362d3Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397de2362d3Smrg		  fi
83987821949aSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399de2362d3Smrg		  func_arith $k + 1
8400de2362d3Smrg		  k=$func_arith_result
84017821949aSmrg		  output=$output_objdir/$output_la-${k}.$objext
8402de2362d3Smrg		  objlist=" $obj"
8403de2362d3Smrg		  func_len " $last_robj"
8404de2362d3Smrg		  func_arith $len0 + $func_len_result
8405de2362d3Smrg		  len=$func_arith_result
8406de2362d3Smrg		fi
8407de2362d3Smrg	      done
8408de2362d3Smrg	      # Handle the remaining objects by creating one last
8409de2362d3Smrg	      # reloadable object file.  All subsequent reloadable object
8410de2362d3Smrg	      # files will link in the last one created.
8411de2362d3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8412de2362d3Smrg	      reload_objs="$objlist $last_robj"
84137821949aSmrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414de2362d3Smrg	      if test -n "$last_robj"; then
84157821949aSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416de2362d3Smrg	      fi
8417de2362d3Smrg	      func_append delfiles " $output"
8418de2362d3Smrg
8419de2362d3Smrg	    else
8420de2362d3Smrg	      output=
8421de2362d3Smrg	    fi
8422de2362d3Smrg
84237821949aSmrg	    if ${skipped_export-false}; then
84247821949aSmrg	      func_verbose "generating symbol list for \`$libname.la'"
84257821949aSmrg	      export_symbols="$output_objdir/$libname.exp"
8426de2362d3Smrg	      $opt_dry_run || $RM $export_symbols
8427de2362d3Smrg	      libobjs=$output
8428de2362d3Smrg	      # Append the command to create the export file.
8429de2362d3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430de2362d3Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431de2362d3Smrg	      if test -n "$last_robj"; then
8432de2362d3Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433de2362d3Smrg	      fi
84347821949aSmrg	    fi
8435de2362d3Smrg
8436de2362d3Smrg	    test -n "$save_libobjs" &&
8437de2362d3Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8438de2362d3Smrg
8439de2362d3Smrg	    # Loop through the commands generated above and execute them.
84407821949aSmrg	    save_ifs="$IFS"; IFS='~'
8441de2362d3Smrg	    for cmd in $concat_cmds; do
84427821949aSmrg	      IFS="$save_ifs"
84437821949aSmrg	      $opt_silent || {
8444de2362d3Smrg		  func_quote_for_expand "$cmd"
8445de2362d3Smrg		  eval "func_echo $func_quote_for_expand_result"
8446de2362d3Smrg	      }
8447de2362d3Smrg	      $opt_dry_run || eval "$cmd" || {
8448de2362d3Smrg		lt_exit=$?
8449de2362d3Smrg
8450de2362d3Smrg		# Restore the uninstalled library and exit
84517821949aSmrg		if test "$opt_mode" = relink; then
8452de2362d3Smrg		  ( cd "$output_objdir" && \
8453de2362d3Smrg		    $RM "${realname}T" && \
8454de2362d3Smrg		    $MV "${realname}U" "$realname" )
8455de2362d3Smrg		fi
8456de2362d3Smrg
8457de2362d3Smrg		exit $lt_exit
8458de2362d3Smrg	      }
8459de2362d3Smrg	    done
84607821949aSmrg	    IFS="$save_ifs"
8461de2362d3Smrg
8462de2362d3Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463de2362d3Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464de2362d3Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8465de2362d3Smrg	    fi
8466de2362d3Smrg	  fi
8467de2362d3Smrg
84687821949aSmrg          if ${skipped_export-false}; then
8469de2362d3Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
84707821949aSmrg	      tmp_export_symbols="$export_symbols"
84717821949aSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8472de2362d3Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473de2362d3Smrg	    fi
8474de2362d3Smrg
8475de2362d3Smrg	    if test -n "$orig_export_symbols"; then
8476de2362d3Smrg	      # The given exports_symbols file has to be filtered, so filter it.
84777821949aSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478de2362d3Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
84797821949aSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480de2362d3Smrg	      # though. Also, the filter scales superlinearly with the number of
8481de2362d3Smrg	      # global variables. join(1) would be nice here, but unfortunately
8482de2362d3Smrg	      # isn't a blessed tool.
8483de2362d3Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8484de2362d3Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485de2362d3Smrg	      export_symbols=$output_objdir/$libname.def
8486de2362d3Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487de2362d3Smrg	    fi
84887821949aSmrg	  fi
8489de2362d3Smrg
8490de2362d3Smrg	  libobjs=$output
8491de2362d3Smrg	  # Restore the value of output.
8492de2362d3Smrg	  output=$save_output
8493de2362d3Smrg
8494de2362d3Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495de2362d3Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496de2362d3Smrg	    test "X$libobjs" = "X " && libobjs=
8497de2362d3Smrg	  fi
8498de2362d3Smrg	  # Expand the library linking commands again to reset the
8499de2362d3Smrg	  # value of $libobjs for piecewise linking.
8500de2362d3Smrg
8501de2362d3Smrg	  # Do each of the archive commands.
85027821949aSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503de2362d3Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504de2362d3Smrg	      cmds=$module_expsym_cmds
8505de2362d3Smrg	    else
8506de2362d3Smrg	      cmds=$module_cmds
8507de2362d3Smrg	    fi
8508de2362d3Smrg	  else
8509de2362d3Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510de2362d3Smrg	      cmds=$archive_expsym_cmds
8511de2362d3Smrg	    else
8512de2362d3Smrg	      cmds=$archive_cmds
8513de2362d3Smrg	    fi
8514de2362d3Smrg	  fi
8515de2362d3Smrg	fi
8516de2362d3Smrg
8517de2362d3Smrg	if test -n "$delfiles"; then
8518de2362d3Smrg	  # Append the command to remove temporary files to $cmds.
8519de2362d3Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520de2362d3Smrg	fi
8521de2362d3Smrg
8522de2362d3Smrg	# Add any objects from preloaded convenience libraries
8523de2362d3Smrg	if test -n "$dlprefiles"; then
85247821949aSmrg	  gentop="$output_objdir/${outputname}x"
8525de2362d3Smrg	  func_append generated " $gentop"
8526de2362d3Smrg
8527de2362d3Smrg	  func_extract_archives $gentop $dlprefiles
8528de2362d3Smrg	  func_append libobjs " $func_extract_archives_result"
8529de2362d3Smrg	  test "X$libobjs" = "X " && libobjs=
8530de2362d3Smrg	fi
8531de2362d3Smrg
85327821949aSmrg	save_ifs="$IFS"; IFS='~'
8533de2362d3Smrg	for cmd in $cmds; do
85347821949aSmrg	  IFS="$save_ifs"
8535de2362d3Smrg	  eval cmd=\"$cmd\"
85367821949aSmrg	  $opt_silent || {
8537de2362d3Smrg	    func_quote_for_expand "$cmd"
8538de2362d3Smrg	    eval "func_echo $func_quote_for_expand_result"
8539de2362d3Smrg	  }
8540de2362d3Smrg	  $opt_dry_run || eval "$cmd" || {
8541de2362d3Smrg	    lt_exit=$?
8542de2362d3Smrg
8543de2362d3Smrg	    # Restore the uninstalled library and exit
85447821949aSmrg	    if test "$opt_mode" = relink; then
8545de2362d3Smrg	      ( cd "$output_objdir" && \
8546de2362d3Smrg	        $RM "${realname}T" && \
8547de2362d3Smrg		$MV "${realname}U" "$realname" )
8548de2362d3Smrg	    fi
8549de2362d3Smrg
8550de2362d3Smrg	    exit $lt_exit
8551de2362d3Smrg	  }
8552de2362d3Smrg	done
85537821949aSmrg	IFS="$save_ifs"
8554de2362d3Smrg
8555de2362d3Smrg	# Restore the uninstalled library and exit
85567821949aSmrg	if test "$opt_mode" = relink; then
8557de2362d3Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558de2362d3Smrg
8559de2362d3Smrg	  if test -n "$convenience"; then
8560de2362d3Smrg	    if test -z "$whole_archive_flag_spec"; then
8561de2362d3Smrg	      func_show_eval '${RM}r "$gentop"'
8562de2362d3Smrg	    fi
8563de2362d3Smrg	  fi
8564de2362d3Smrg
8565de2362d3Smrg	  exit $EXIT_SUCCESS
8566de2362d3Smrg	fi
8567de2362d3Smrg
8568de2362d3Smrg	# Create links to the real library.
8569de2362d3Smrg	for linkname in $linknames; do
8570de2362d3Smrg	  if test "$realname" != "$linkname"; then
8571de2362d3Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572de2362d3Smrg	  fi
8573de2362d3Smrg	done
8574de2362d3Smrg
8575de2362d3Smrg	# If -module or -export-dynamic was specified, set the dlname.
85767821949aSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577de2362d3Smrg	  # On all known operating systems, these are identical.
85787821949aSmrg	  dlname="$soname"
8579de2362d3Smrg	fi
8580de2362d3Smrg      fi
8581de2362d3Smrg      ;;
8582de2362d3Smrg
8583de2362d3Smrg    obj)
85847821949aSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
85857821949aSmrg	func_warning "\`-dlopen' is ignored for objects"
8586de2362d3Smrg      fi
8587de2362d3Smrg
8588de2362d3Smrg      case " $deplibs" in
8589de2362d3Smrg      *\ -l* | *\ -L*)
85907821949aSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591de2362d3Smrg      esac
8592de2362d3Smrg
8593de2362d3Smrg      test -n "$rpath" && \
85947821949aSmrg	func_warning "\`-rpath' is ignored for objects"
8595de2362d3Smrg
8596de2362d3Smrg      test -n "$xrpath" && \
85977821949aSmrg	func_warning "\`-R' is ignored for objects"
8598de2362d3Smrg
8599de2362d3Smrg      test -n "$vinfo" && \
86007821949aSmrg	func_warning "\`-version-info' is ignored for objects"
8601de2362d3Smrg
8602de2362d3Smrg      test -n "$release" && \
86037821949aSmrg	func_warning "\`-release' is ignored for objects"
8604de2362d3Smrg
8605de2362d3Smrg      case $output in
8606de2362d3Smrg      *.lo)
8607de2362d3Smrg	test -n "$objs$old_deplibs" && \
86087821949aSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609de2362d3Smrg
8610de2362d3Smrg	libobj=$output
8611de2362d3Smrg	func_lo2o "$libobj"
8612de2362d3Smrg	obj=$func_lo2o_result
8613de2362d3Smrg	;;
8614de2362d3Smrg      *)
8615de2362d3Smrg	libobj=
86167821949aSmrg	obj="$output"
8617de2362d3Smrg	;;
8618de2362d3Smrg      esac
8619de2362d3Smrg
8620de2362d3Smrg      # Delete the old objects.
8621de2362d3Smrg      $opt_dry_run || $RM $obj $libobj
8622de2362d3Smrg
8623de2362d3Smrg      # Objects from convenience libraries.  This assumes
8624de2362d3Smrg      # single-version convenience libraries.  Whenever we create
8625de2362d3Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626de2362d3Smrg      # the extraction.
8627de2362d3Smrg      reload_conv_objs=
8628de2362d3Smrg      gentop=
86297821949aSmrg      # reload_cmds runs $LD directly, so let us get rid of
86307821949aSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
86317821949aSmrg      # turning comma into space..
86327821949aSmrg      wl=
86337821949aSmrg
8634de2362d3Smrg      if test -n "$convenience"; then
8635de2362d3Smrg	if test -n "$whole_archive_flag_spec"; then
8636de2362d3Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86377821949aSmrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638de2362d3Smrg	else
86397821949aSmrg	  gentop="$output_objdir/${obj}x"
8640de2362d3Smrg	  func_append generated " $gentop"
8641de2362d3Smrg
8642de2362d3Smrg	  func_extract_archives $gentop $convenience
8643de2362d3Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644de2362d3Smrg	fi
8645de2362d3Smrg      fi
8646de2362d3Smrg
8647de2362d3Smrg      # If we're not building shared, we need to use non_pic_objs
86487821949aSmrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8649de2362d3Smrg
8650de2362d3Smrg      # Create the old-style object.
86517821949aSmrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652de2362d3Smrg
86537821949aSmrg      output="$obj"
8654de2362d3Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8655de2362d3Smrg
8656de2362d3Smrg      # Exit if we aren't doing a library object file.
8657de2362d3Smrg      if test -z "$libobj"; then
8658de2362d3Smrg	if test -n "$gentop"; then
8659de2362d3Smrg	  func_show_eval '${RM}r "$gentop"'
8660de2362d3Smrg	fi
8661de2362d3Smrg
8662de2362d3Smrg	exit $EXIT_SUCCESS
8663de2362d3Smrg      fi
8664de2362d3Smrg
86657821949aSmrg      if test "$build_libtool_libs" != yes; then
8666de2362d3Smrg	if test -n "$gentop"; then
8667de2362d3Smrg	  func_show_eval '${RM}r "$gentop"'
8668de2362d3Smrg	fi
8669de2362d3Smrg
8670de2362d3Smrg	# Create an invalid libtool object if no PIC, so that we don't
8671de2362d3Smrg	# accidentally link it into a program.
8672de2362d3Smrg	# $show "echo timestamp > $libobj"
8673de2362d3Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674de2362d3Smrg	exit $EXIT_SUCCESS
86757821949aSmrg      fi
8676de2362d3Smrg
86777821949aSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678de2362d3Smrg	# Only do commands if we really have different PIC objects.
8679de2362d3Smrg	reload_objs="$libobjs $reload_conv_objs"
86807821949aSmrg	output="$libobj"
8681de2362d3Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682de2362d3Smrg      fi
8683de2362d3Smrg
8684de2362d3Smrg      if test -n "$gentop"; then
8685de2362d3Smrg	func_show_eval '${RM}r "$gentop"'
8686de2362d3Smrg      fi
8687de2362d3Smrg
8688de2362d3Smrg      exit $EXIT_SUCCESS
8689de2362d3Smrg      ;;
8690de2362d3Smrg
8691de2362d3Smrg    prog)
8692de2362d3Smrg      case $host in
8693de2362d3Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8694de2362d3Smrg	          output=$func_stripname_result.exe;;
8695de2362d3Smrg      esac
8696de2362d3Smrg      test -n "$vinfo" && \
86977821949aSmrg	func_warning "\`-version-info' is ignored for programs"
8698de2362d3Smrg
8699de2362d3Smrg      test -n "$release" && \
87007821949aSmrg	func_warning "\`-release' is ignored for programs"
8701de2362d3Smrg
87027821949aSmrg      test "$preload" = yes \
87037821949aSmrg        && test "$dlopen_support" = unknown \
87047821949aSmrg	&& test "$dlopen_self" = unknown \
87057821949aSmrg	&& test "$dlopen_self_static" = unknown && \
87067821949aSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707de2362d3Smrg
8708de2362d3Smrg      case $host in
8709de2362d3Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8710de2362d3Smrg	# On Rhapsody replace the C library is the System framework
8711de2362d3Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8712de2362d3Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713de2362d3Smrg	;;
8714de2362d3Smrg      esac
8715de2362d3Smrg
8716de2362d3Smrg      case $host in
8717de2362d3Smrg      *-*-darwin*)
8718de2362d3Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8719de2362d3Smrg	# But is supposedly fixed on 10.4 or later (yay!).
87207821949aSmrg	if test "$tagname" = CXX ; then
8721de2362d3Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722de2362d3Smrg	    10.[0123])
87237821949aSmrg	      func_append compile_command " ${wl}-bind_at_load"
87247821949aSmrg	      func_append finalize_command " ${wl}-bind_at_load"
8725de2362d3Smrg	    ;;
8726de2362d3Smrg	  esac
8727de2362d3Smrg	fi
8728de2362d3Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8729de2362d3Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8730de2362d3Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731de2362d3Smrg	;;
8732de2362d3Smrg      esac
8733de2362d3Smrg
8734de2362d3Smrg
8735de2362d3Smrg      # move library search paths that coincide with paths to not yet
8736de2362d3Smrg      # installed libraries to the beginning of the library search list
8737de2362d3Smrg      new_libs=
8738de2362d3Smrg      for path in $notinst_path; do
8739de2362d3Smrg	case " $new_libs " in
8740de2362d3Smrg	*" -L$path/$objdir "*) ;;
8741de2362d3Smrg	*)
8742de2362d3Smrg	  case " $compile_deplibs " in
8743de2362d3Smrg	  *" -L$path/$objdir "*)
8744de2362d3Smrg	    func_append new_libs " -L$path/$objdir" ;;
8745de2362d3Smrg	  esac
8746de2362d3Smrg	  ;;
8747de2362d3Smrg	esac
8748de2362d3Smrg      done
8749de2362d3Smrg      for deplib in $compile_deplibs; do
8750de2362d3Smrg	case $deplib in
8751de2362d3Smrg	-L*)
8752de2362d3Smrg	  case " $new_libs " in
8753de2362d3Smrg	  *" $deplib "*) ;;
8754de2362d3Smrg	  *) func_append new_libs " $deplib" ;;
8755de2362d3Smrg	  esac
8756de2362d3Smrg	  ;;
8757de2362d3Smrg	*) func_append new_libs " $deplib" ;;
8758de2362d3Smrg	esac
8759de2362d3Smrg      done
87607821949aSmrg      compile_deplibs="$new_libs"
8761de2362d3Smrg
8762de2362d3Smrg
8763de2362d3Smrg      func_append compile_command " $compile_deplibs"
8764de2362d3Smrg      func_append finalize_command " $finalize_deplibs"
8765de2362d3Smrg
8766de2362d3Smrg      if test -n "$rpath$xrpath"; then
8767de2362d3Smrg	# If the user specified any rpath flags, then add them.
8768de2362d3Smrg	for libdir in $rpath $xrpath; do
8769de2362d3Smrg	  # This is the magic to use -rpath.
8770de2362d3Smrg	  case "$finalize_rpath " in
8771de2362d3Smrg	  *" $libdir "*) ;;
8772de2362d3Smrg	  *) func_append finalize_rpath " $libdir" ;;
8773de2362d3Smrg	  esac
8774de2362d3Smrg	done
8775de2362d3Smrg      fi
8776de2362d3Smrg
8777de2362d3Smrg      # Now hardcode the library paths
8778de2362d3Smrg      rpath=
8779de2362d3Smrg      hardcode_libdirs=
8780de2362d3Smrg      for libdir in $compile_rpath $finalize_rpath; do
8781de2362d3Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8782de2362d3Smrg	  if test -n "$hardcode_libdir_separator"; then
8783de2362d3Smrg	    if test -z "$hardcode_libdirs"; then
87847821949aSmrg	      hardcode_libdirs="$libdir"
8785de2362d3Smrg	    else
8786de2362d3Smrg	      # Just accumulate the unique libdirs.
8787de2362d3Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788de2362d3Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789de2362d3Smrg		;;
8790de2362d3Smrg	      *)
8791de2362d3Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792de2362d3Smrg		;;
8793de2362d3Smrg	      esac
8794de2362d3Smrg	    fi
8795de2362d3Smrg	  else
8796de2362d3Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8797de2362d3Smrg	    func_append rpath " $flag"
8798de2362d3Smrg	  fi
8799de2362d3Smrg	elif test -n "$runpath_var"; then
8800de2362d3Smrg	  case "$perm_rpath " in
8801de2362d3Smrg	  *" $libdir "*) ;;
8802de2362d3Smrg	  *) func_append perm_rpath " $libdir" ;;
8803de2362d3Smrg	  esac
8804de2362d3Smrg	fi
8805de2362d3Smrg	case $host in
8806de2362d3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
88077821949aSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808de2362d3Smrg	  case :$dllsearchpath: in
8809de2362d3Smrg	  *":$libdir:"*) ;;
8810de2362d3Smrg	  ::) dllsearchpath=$libdir;;
8811de2362d3Smrg	  *) func_append dllsearchpath ":$libdir";;
8812de2362d3Smrg	  esac
8813de2362d3Smrg	  case :$dllsearchpath: in
8814de2362d3Smrg	  *":$testbindir:"*) ;;
8815de2362d3Smrg	  ::) dllsearchpath=$testbindir;;
8816de2362d3Smrg	  *) func_append dllsearchpath ":$testbindir";;
8817de2362d3Smrg	  esac
8818de2362d3Smrg	  ;;
8819de2362d3Smrg	esac
8820de2362d3Smrg      done
8821de2362d3Smrg      # Substitute the hardcoded libdirs into the rpath.
8822de2362d3Smrg      if test -n "$hardcode_libdir_separator" &&
8823de2362d3Smrg	 test -n "$hardcode_libdirs"; then
88247821949aSmrg	libdir="$hardcode_libdirs"
8825de2362d3Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826de2362d3Smrg      fi
88277821949aSmrg      compile_rpath="$rpath"
8828de2362d3Smrg
8829de2362d3Smrg      rpath=
8830de2362d3Smrg      hardcode_libdirs=
8831de2362d3Smrg      for libdir in $finalize_rpath; do
8832de2362d3Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8833de2362d3Smrg	  if test -n "$hardcode_libdir_separator"; then
8834de2362d3Smrg	    if test -z "$hardcode_libdirs"; then
88357821949aSmrg	      hardcode_libdirs="$libdir"
8836de2362d3Smrg	    else
8837de2362d3Smrg	      # Just accumulate the unique libdirs.
8838de2362d3Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839de2362d3Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840de2362d3Smrg		;;
8841de2362d3Smrg	      *)
8842de2362d3Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843de2362d3Smrg		;;
8844de2362d3Smrg	      esac
8845de2362d3Smrg	    fi
8846de2362d3Smrg	  else
8847de2362d3Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8848de2362d3Smrg	    func_append rpath " $flag"
8849de2362d3Smrg	  fi
8850de2362d3Smrg	elif test -n "$runpath_var"; then
8851de2362d3Smrg	  case "$finalize_perm_rpath " in
8852de2362d3Smrg	  *" $libdir "*) ;;
8853de2362d3Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8854de2362d3Smrg	  esac
8855de2362d3Smrg	fi
8856de2362d3Smrg      done
8857de2362d3Smrg      # Substitute the hardcoded libdirs into the rpath.
8858de2362d3Smrg      if test -n "$hardcode_libdir_separator" &&
8859de2362d3Smrg	 test -n "$hardcode_libdirs"; then
88607821949aSmrg	libdir="$hardcode_libdirs"
8861de2362d3Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862de2362d3Smrg      fi
88637821949aSmrg      finalize_rpath="$rpath"
8864de2362d3Smrg
88657821949aSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866de2362d3Smrg	# Transform all the library objects into standard objects.
8867de2362d3Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8868de2362d3Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869de2362d3Smrg      fi
8870de2362d3Smrg
88717821949aSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8872de2362d3Smrg
8873de2362d3Smrg      # template prelinking step
8874de2362d3Smrg      if test -n "$prelink_cmds"; then
8875de2362d3Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876de2362d3Smrg      fi
8877de2362d3Smrg
88787821949aSmrg      wrappers_required=yes
8879de2362d3Smrg      case $host in
8880de2362d3Smrg      *cegcc* | *mingw32ce*)
8881de2362d3Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88827821949aSmrg        wrappers_required=no
8883de2362d3Smrg        ;;
8884de2362d3Smrg      *cygwin* | *mingw* )
88857821949aSmrg        if test "$build_libtool_libs" != yes; then
88867821949aSmrg          wrappers_required=no
88877821949aSmrg        fi
8888de2362d3Smrg        ;;
8889de2362d3Smrg      *)
88907821949aSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
88917821949aSmrg          wrappers_required=no
8892de2362d3Smrg        fi
8893de2362d3Smrg        ;;
8894de2362d3Smrg      esac
88957821949aSmrg      if test "$wrappers_required" = no; then
8896de2362d3Smrg	# Replace the output file specification.
8897de2362d3Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
88987821949aSmrg	link_command="$compile_command$compile_rpath"
8899de2362d3Smrg
8900de2362d3Smrg	# We have no uninstalled library dependencies, so finalize right now.
8901de2362d3Smrg	exit_status=0
8902de2362d3Smrg	func_show_eval "$link_command" 'exit_status=$?'
8903de2362d3Smrg
8904de2362d3Smrg	if test -n "$postlink_cmds"; then
8905de2362d3Smrg	  func_to_tool_file "$output"
8906de2362d3Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8907de2362d3Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8908de2362d3Smrg	fi
8909de2362d3Smrg
8910de2362d3Smrg	# Delete the generated files.
89117821949aSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
89127821949aSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913de2362d3Smrg	fi
8914de2362d3Smrg
8915de2362d3Smrg	exit $exit_status
89167821949aSmrg      fi
8917de2362d3Smrg
8918de2362d3Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919de2362d3Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920de2362d3Smrg      fi
8921de2362d3Smrg      if test -n "$finalize_shlibpath"; then
8922de2362d3Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923de2362d3Smrg      fi
8924de2362d3Smrg
8925de2362d3Smrg      compile_var=
8926de2362d3Smrg      finalize_var=
8927de2362d3Smrg      if test -n "$runpath_var"; then
8928de2362d3Smrg	if test -n "$perm_rpath"; then
8929de2362d3Smrg	  # We should set the runpath_var.
8930de2362d3Smrg	  rpath=
8931de2362d3Smrg	  for dir in $perm_rpath; do
8932de2362d3Smrg	    func_append rpath "$dir:"
8933de2362d3Smrg	  done
8934de2362d3Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8935de2362d3Smrg	fi
8936de2362d3Smrg	if test -n "$finalize_perm_rpath"; then
8937de2362d3Smrg	  # We should set the runpath_var.
8938de2362d3Smrg	  rpath=
8939de2362d3Smrg	  for dir in $finalize_perm_rpath; do
8940de2362d3Smrg	    func_append rpath "$dir:"
8941de2362d3Smrg	  done
8942de2362d3Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943de2362d3Smrg	fi
8944de2362d3Smrg      fi
8945de2362d3Smrg
89467821949aSmrg      if test "$no_install" = yes; then
8947de2362d3Smrg	# We don't need to create a wrapper script.
89487821949aSmrg	link_command="$compile_var$compile_command$compile_rpath"
8949de2362d3Smrg	# Replace the output file specification.
8950de2362d3Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951de2362d3Smrg	# Delete the old output file.
8952de2362d3Smrg	$opt_dry_run || $RM $output
8953de2362d3Smrg	# Link the executable and exit
8954de2362d3Smrg	func_show_eval "$link_command" 'exit $?'
8955de2362d3Smrg
8956de2362d3Smrg	if test -n "$postlink_cmds"; then
8957de2362d3Smrg	  func_to_tool_file "$output"
8958de2362d3Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8959de2362d3Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8960de2362d3Smrg	fi
8961de2362d3Smrg
8962de2362d3Smrg	exit $EXIT_SUCCESS
8963de2362d3Smrg      fi
8964de2362d3Smrg
89657821949aSmrg      if test "$hardcode_action" = relink; then
89667821949aSmrg	# Fast installation is not supported
89677821949aSmrg	link_command="$compile_var$compile_command$compile_rpath"
89687821949aSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969de2362d3Smrg
89707821949aSmrg	func_warning "this platform does not like uninstalled shared libraries"
89717821949aSmrg	func_warning "\`$output' will be relinked during installation"
89727821949aSmrg      else
89737821949aSmrg	if test "$fast_install" != no; then
89747821949aSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
89757821949aSmrg	  if test "$fast_install" = yes; then
89767821949aSmrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
89777821949aSmrg	  else
89787821949aSmrg	    # fast_install is set to needless
89797821949aSmrg	    relink_command=
89807821949aSmrg	  fi
89817821949aSmrg	else
89827821949aSmrg	  link_command="$compile_var$compile_command$compile_rpath"
89837821949aSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
89847821949aSmrg	fi
89857821949aSmrg      fi
8986de2362d3Smrg
8987de2362d3Smrg      # Replace the output file specification.
8988de2362d3Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8989de2362d3Smrg
8990de2362d3Smrg      # Delete the old output files.
8991de2362d3Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8992de2362d3Smrg
8993de2362d3Smrg      func_show_eval "$link_command" 'exit $?'
8994de2362d3Smrg
8995de2362d3Smrg      if test -n "$postlink_cmds"; then
8996de2362d3Smrg	func_to_tool_file "$output_objdir/$outputname"
8997de2362d3Smrg	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8998de2362d3Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
8999de2362d3Smrg      fi
9000de2362d3Smrg
9001de2362d3Smrg      # Now create the wrapper script.
9002de2362d3Smrg      func_verbose "creating $output"
9003de2362d3Smrg
9004de2362d3Smrg      # Quote the relink command for shipping.
9005de2362d3Smrg      if test -n "$relink_command"; then
9006de2362d3Smrg	# Preserve any variables that may affect compiler behavior
9007de2362d3Smrg	for var in $variables_saved_for_relink; do
9008de2362d3Smrg	  if eval test -z \"\${$var+set}\"; then
9009de2362d3Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010de2362d3Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011de2362d3Smrg	    relink_command="$var=; export $var; $relink_command"
9012de2362d3Smrg	  else
9013de2362d3Smrg	    func_quote_for_eval "$var_value"
9014de2362d3Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015de2362d3Smrg	  fi
9016de2362d3Smrg	done
9017de2362d3Smrg	relink_command="(cd `pwd`; $relink_command)"
9018de2362d3Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019de2362d3Smrg      fi
9020de2362d3Smrg
9021de2362d3Smrg      # Only actually do things if not in dry run mode.
9022de2362d3Smrg      $opt_dry_run || {
9023de2362d3Smrg	# win32 will think the script is a binary if it has
9024de2362d3Smrg	# a .exe suffix, so we strip it off here.
9025de2362d3Smrg	case $output in
9026de2362d3Smrg	  *.exe) func_stripname '' '.exe' "$output"
9027de2362d3Smrg	         output=$func_stripname_result ;;
9028de2362d3Smrg	esac
9029de2362d3Smrg	# test for cygwin because mv fails w/o .exe extensions
9030de2362d3Smrg	case $host in
9031de2362d3Smrg	  *cygwin*)
9032de2362d3Smrg	    exeext=.exe
9033de2362d3Smrg	    func_stripname '' '.exe' "$outputname"
9034de2362d3Smrg	    outputname=$func_stripname_result ;;
9035de2362d3Smrg	  *) exeext= ;;
9036de2362d3Smrg	esac
9037de2362d3Smrg	case $host in
9038de2362d3Smrg	  *cygwin* | *mingw* )
9039de2362d3Smrg	    func_dirname_and_basename "$output" "" "."
9040de2362d3Smrg	    output_name=$func_basename_result
9041de2362d3Smrg	    output_path=$func_dirname_result
90427821949aSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
90437821949aSmrg	    cwrapper="$output_path/$output_name.exe"
9044de2362d3Smrg	    $RM $cwrappersource $cwrapper
9045de2362d3Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046de2362d3Smrg
9047de2362d3Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9048de2362d3Smrg
9049de2362d3Smrg	    # The wrapper executable is built using the $host compiler,
9050de2362d3Smrg	    # because it contains $host paths and files. If cross-
9051de2362d3Smrg	    # compiling, it, like the target executable, must be
9052de2362d3Smrg	    # executed on the $host or under an emulation environment.
9053de2362d3Smrg	    $opt_dry_run || {
9054de2362d3Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055de2362d3Smrg	      $STRIP $cwrapper
9056de2362d3Smrg	    }
9057de2362d3Smrg
9058de2362d3Smrg	    # Now, create the wrapper script for func_source use:
9059de2362d3Smrg	    func_ltwrapper_scriptname $cwrapper
9060de2362d3Smrg	    $RM $func_ltwrapper_scriptname_result
9061de2362d3Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062de2362d3Smrg	    $opt_dry_run || {
9063de2362d3Smrg	      # note: this script will not be executed, so do not chmod.
90647821949aSmrg	      if test "x$build" = "x$host" ; then
9065de2362d3Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066de2362d3Smrg	      else
9067de2362d3Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068de2362d3Smrg	      fi
9069de2362d3Smrg	    }
9070de2362d3Smrg	  ;;
9071de2362d3Smrg	  * )
9072de2362d3Smrg	    $RM $output
9073de2362d3Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9074de2362d3Smrg
9075de2362d3Smrg	    func_emit_wrapper no > $output
9076de2362d3Smrg	    chmod +x $output
9077de2362d3Smrg	  ;;
9078de2362d3Smrg	esac
9079de2362d3Smrg      }
9080de2362d3Smrg      exit $EXIT_SUCCESS
9081de2362d3Smrg      ;;
9082de2362d3Smrg    esac
9083de2362d3Smrg
9084de2362d3Smrg    # See if we need to build an old-fashioned archive.
9085de2362d3Smrg    for oldlib in $oldlibs; do
9086de2362d3Smrg
90877821949aSmrg      if test "$build_libtool_libs" = convenience; then
90887821949aSmrg	oldobjs="$libobjs_save $symfileobj"
90897821949aSmrg	addlibs="$convenience"
90907821949aSmrg	build_libtool_libs=no
90917821949aSmrg      else
90927821949aSmrg	if test "$build_libtool_libs" = module; then
90937821949aSmrg	  oldobjs="$libobjs_save"
90940d16fef4Smrg	  build_libtool_libs=no
90957821949aSmrg	else
9096de2362d3Smrg	  oldobjs="$old_deplibs $non_pic_objects"
90977821949aSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
90987821949aSmrg	    func_append oldobjs " $symfileobj"
90997821949aSmrg	  fi
91007821949aSmrg	fi
91017821949aSmrg	addlibs="$old_convenience"
91027821949aSmrg      fi
9103de2362d3Smrg
9104de2362d3Smrg      if test -n "$addlibs"; then
91057821949aSmrg	gentop="$output_objdir/${outputname}x"
9106de2362d3Smrg	func_append generated " $gentop"
9107de2362d3Smrg
9108de2362d3Smrg	func_extract_archives $gentop $addlibs
9109de2362d3Smrg	func_append oldobjs " $func_extract_archives_result"
9110de2362d3Smrg      fi
9111de2362d3Smrg
9112de2362d3Smrg      # Do each command in the archive commands.
91137821949aSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114de2362d3Smrg	cmds=$old_archive_from_new_cmds
9115de2362d3Smrg      else
9116de2362d3Smrg
9117de2362d3Smrg	# Add any objects from preloaded convenience libraries
9118de2362d3Smrg	if test -n "$dlprefiles"; then
91197821949aSmrg	  gentop="$output_objdir/${outputname}x"
9120de2362d3Smrg	  func_append generated " $gentop"
9121de2362d3Smrg
9122de2362d3Smrg	  func_extract_archives $gentop $dlprefiles
9123de2362d3Smrg	  func_append oldobjs " $func_extract_archives_result"
9124de2362d3Smrg	fi
9125de2362d3Smrg
9126de2362d3Smrg	# POSIX demands no paths to be encoded in archives.  We have
9127de2362d3Smrg	# to avoid creating archives with duplicate basenames if we
9128de2362d3Smrg	# might have to extract them afterwards, e.g., when creating a
9129de2362d3Smrg	# static archive out of a convenience library, or when linking
9130de2362d3Smrg	# the entirety of a libtool archive into another (currently
9131de2362d3Smrg	# not supported by libtool).
9132de2362d3Smrg	if (for obj in $oldobjs
9133de2362d3Smrg	    do
9134de2362d3Smrg	      func_basename "$obj"
9135de2362d3Smrg	      $ECHO "$func_basename_result"
9136de2362d3Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137de2362d3Smrg	  :
9138de2362d3Smrg	else
9139de2362d3Smrg	  echo "copying selected object files to avoid basename conflicts..."
91407821949aSmrg	  gentop="$output_objdir/${outputname}x"
9141de2362d3Smrg	  func_append generated " $gentop"
9142de2362d3Smrg	  func_mkdir_p "$gentop"
9143de2362d3Smrg	  save_oldobjs=$oldobjs
9144de2362d3Smrg	  oldobjs=
9145de2362d3Smrg	  counter=1
9146de2362d3Smrg	  for obj in $save_oldobjs
9147de2362d3Smrg	  do
9148de2362d3Smrg	    func_basename "$obj"
91497821949aSmrg	    objbase="$func_basename_result"
9150de2362d3Smrg	    case " $oldobjs " in
9151de2362d3Smrg	    " ") oldobjs=$obj ;;
9152de2362d3Smrg	    *[\ /]"$objbase "*)
9153de2362d3Smrg	      while :; do
9154de2362d3Smrg		# Make sure we don't pick an alternate name that also
9155de2362d3Smrg		# overlaps.
9156de2362d3Smrg		newobj=lt$counter-$objbase
9157de2362d3Smrg		func_arith $counter + 1
9158de2362d3Smrg		counter=$func_arith_result
9159de2362d3Smrg		case " $oldobjs " in
9160de2362d3Smrg		*[\ /]"$newobj "*) ;;
9161de2362d3Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162de2362d3Smrg		esac
9163de2362d3Smrg	      done
9164de2362d3Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9165de2362d3Smrg	      func_append oldobjs " $gentop/$newobj"
9166de2362d3Smrg	      ;;
9167de2362d3Smrg	    *) func_append oldobjs " $obj" ;;
9168de2362d3Smrg	    esac
9169de2362d3Smrg	  done
9170de2362d3Smrg	fi
9171de2362d3Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9172de2362d3Smrg	tool_oldlib=$func_to_tool_file_result
9173de2362d3Smrg	eval cmds=\"$old_archive_cmds\"
9174de2362d3Smrg
9175de2362d3Smrg	func_len " $cmds"
9176de2362d3Smrg	len=$func_len_result
9177de2362d3Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178de2362d3Smrg	  cmds=$old_archive_cmds
9179de2362d3Smrg	elif test -n "$archiver_list_spec"; then
9180de2362d3Smrg	  func_verbose "using command file archive linking..."
9181de2362d3Smrg	  for obj in $oldobjs
9182de2362d3Smrg	  do
9183de2362d3Smrg	    func_to_tool_file "$obj"
9184de2362d3Smrg	    $ECHO "$func_to_tool_file_result"
9185de2362d3Smrg	  done > $output_objdir/$libname.libcmd
9186de2362d3Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
9187de2362d3Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9188de2362d3Smrg	  cmds=$old_archive_cmds
9189de2362d3Smrg	else
9190de2362d3Smrg	  # the command line is too long to link in one step, link in parts
9191de2362d3Smrg	  func_verbose "using piecewise archive linking..."
9192de2362d3Smrg	  save_RANLIB=$RANLIB
9193de2362d3Smrg	  RANLIB=:
9194de2362d3Smrg	  objlist=
9195de2362d3Smrg	  concat_cmds=
9196de2362d3Smrg	  save_oldobjs=$oldobjs
9197de2362d3Smrg	  oldobjs=
9198de2362d3Smrg	  # Is there a better way of finding the last object in the list?
9199de2362d3Smrg	  for obj in $save_oldobjs
9200de2362d3Smrg	  do
9201de2362d3Smrg	    last_oldobj=$obj
9202de2362d3Smrg	  done
9203de2362d3Smrg	  eval test_cmds=\"$old_archive_cmds\"
9204de2362d3Smrg	  func_len " $test_cmds"
9205de2362d3Smrg	  len0=$func_len_result
9206de2362d3Smrg	  len=$len0
9207de2362d3Smrg	  for obj in $save_oldobjs
9208de2362d3Smrg	  do
9209de2362d3Smrg	    func_len " $obj"
9210de2362d3Smrg	    func_arith $len + $func_len_result
9211de2362d3Smrg	    len=$func_arith_result
9212de2362d3Smrg	    func_append objlist " $obj"
9213de2362d3Smrg	    if test "$len" -lt "$max_cmd_len"; then
9214de2362d3Smrg	      :
9215de2362d3Smrg	    else
9216de2362d3Smrg	      # the above command should be used before it gets too long
9217de2362d3Smrg	      oldobjs=$objlist
92187821949aSmrg	      if test "$obj" = "$last_oldobj" ; then
9219de2362d3Smrg		RANLIB=$save_RANLIB
9220de2362d3Smrg	      fi
9221de2362d3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
92227821949aSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223de2362d3Smrg	      objlist=
9224de2362d3Smrg	      len=$len0
9225de2362d3Smrg	    fi
9226de2362d3Smrg	  done
9227de2362d3Smrg	  RANLIB=$save_RANLIB
9228de2362d3Smrg	  oldobjs=$objlist
92297821949aSmrg	  if test "X$oldobjs" = "X" ; then
9230de2362d3Smrg	    eval cmds=\"\$concat_cmds\"
9231de2362d3Smrg	  else
9232de2362d3Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233de2362d3Smrg	  fi
9234de2362d3Smrg	fi
9235de2362d3Smrg      fi
9236de2362d3Smrg      func_execute_cmds "$cmds" 'exit $?'
9237de2362d3Smrg    done
9238de2362d3Smrg
9239de2362d3Smrg    test -n "$generated" && \
9240de2362d3Smrg      func_show_eval "${RM}r$generated"
9241de2362d3Smrg
9242de2362d3Smrg    # Now create the libtool archive.
9243de2362d3Smrg    case $output in
9244de2362d3Smrg    *.la)
9245de2362d3Smrg      old_library=
92467821949aSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247de2362d3Smrg      func_verbose "creating $output"
9248de2362d3Smrg
9249de2362d3Smrg      # Preserve any variables that may affect compiler behavior
9250de2362d3Smrg      for var in $variables_saved_for_relink; do
9251de2362d3Smrg	if eval test -z \"\${$var+set}\"; then
9252de2362d3Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253de2362d3Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254de2362d3Smrg	  relink_command="$var=; export $var; $relink_command"
9255de2362d3Smrg	else
9256de2362d3Smrg	  func_quote_for_eval "$var_value"
9257de2362d3Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258de2362d3Smrg	fi
9259de2362d3Smrg      done
9260de2362d3Smrg      # Quote the link command for shipping.
92617821949aSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9262de2362d3Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
92637821949aSmrg      if test "$hardcode_automatic" = yes ; then
9264de2362d3Smrg	relink_command=
9265de2362d3Smrg      fi
9266de2362d3Smrg
9267de2362d3Smrg      # Only create the output if not a dry run.
9268de2362d3Smrg      $opt_dry_run || {
9269de2362d3Smrg	for installed in no yes; do
92707821949aSmrg	  if test "$installed" = yes; then
9271de2362d3Smrg	    if test -z "$install_libdir"; then
9272de2362d3Smrg	      break
9273de2362d3Smrg	    fi
92747821949aSmrg	    output="$output_objdir/$outputname"i
9275de2362d3Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9276de2362d3Smrg	    newdependency_libs=
9277de2362d3Smrg	    for deplib in $dependency_libs; do
9278de2362d3Smrg	      case $deplib in
9279de2362d3Smrg	      *.la)
9280de2362d3Smrg		func_basename "$deplib"
92817821949aSmrg		name="$func_basename_result"
9282de2362d3Smrg		func_resolve_sysroot "$deplib"
92837821949aSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284de2362d3Smrg		test -z "$libdir" && \
92857821949aSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9286de2362d3Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9287de2362d3Smrg		;;
9288de2362d3Smrg	      -L*)
9289de2362d3Smrg		func_stripname -L '' "$deplib"
9290de2362d3Smrg		func_replace_sysroot "$func_stripname_result"
9291de2362d3Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292de2362d3Smrg		;;
9293de2362d3Smrg	      -R*)
9294de2362d3Smrg		func_stripname -R '' "$deplib"
9295de2362d3Smrg		func_replace_sysroot "$func_stripname_result"
9296de2362d3Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
9297de2362d3Smrg		;;
9298de2362d3Smrg	      *) func_append newdependency_libs " $deplib" ;;
9299de2362d3Smrg	      esac
9300de2362d3Smrg	    done
93017821949aSmrg	    dependency_libs="$newdependency_libs"
9302de2362d3Smrg	    newdlfiles=
9303de2362d3Smrg
9304de2362d3Smrg	    for lib in $dlfiles; do
9305de2362d3Smrg	      case $lib in
9306de2362d3Smrg	      *.la)
9307de2362d3Smrg	        func_basename "$lib"
93087821949aSmrg		name="$func_basename_result"
93097821949aSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310de2362d3Smrg		test -z "$libdir" && \
93117821949aSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312de2362d3Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313de2362d3Smrg		;;
9314de2362d3Smrg	      *) func_append newdlfiles " $lib" ;;
9315de2362d3Smrg	      esac
9316de2362d3Smrg	    done
93177821949aSmrg	    dlfiles="$newdlfiles"
9318de2362d3Smrg	    newdlprefiles=
9319de2362d3Smrg	    for lib in $dlprefiles; do
9320de2362d3Smrg	      case $lib in
9321de2362d3Smrg	      *.la)
9322de2362d3Smrg		# Only pass preopened files to the pseudo-archive (for
9323de2362d3Smrg		# eventual linking with the app. that links it) if we
9324de2362d3Smrg		# didn't already link the preopened objects directly into
9325de2362d3Smrg		# the library:
9326de2362d3Smrg		func_basename "$lib"
93277821949aSmrg		name="$func_basename_result"
93287821949aSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329de2362d3Smrg		test -z "$libdir" && \
93307821949aSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9331de2362d3Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332de2362d3Smrg		;;
9333de2362d3Smrg	      esac
9334de2362d3Smrg	    done
93357821949aSmrg	    dlprefiles="$newdlprefiles"
9336de2362d3Smrg	  else
9337de2362d3Smrg	    newdlfiles=
9338de2362d3Smrg	    for lib in $dlfiles; do
9339de2362d3Smrg	      case $lib in
93407821949aSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341de2362d3Smrg		*) abs=`pwd`"/$lib" ;;
9342de2362d3Smrg	      esac
9343de2362d3Smrg	      func_append newdlfiles " $abs"
9344de2362d3Smrg	    done
93457821949aSmrg	    dlfiles="$newdlfiles"
9346de2362d3Smrg	    newdlprefiles=
9347de2362d3Smrg	    for lib in $dlprefiles; do
9348de2362d3Smrg	      case $lib in
93497821949aSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350de2362d3Smrg		*) abs=`pwd`"/$lib" ;;
9351de2362d3Smrg	      esac
9352de2362d3Smrg	      func_append newdlprefiles " $abs"
9353de2362d3Smrg	    done
93547821949aSmrg	    dlprefiles="$newdlprefiles"
9355de2362d3Smrg	  fi
9356de2362d3Smrg	  $RM $output
9357de2362d3Smrg	  # place dlname in correct position for cygwin
9358de2362d3Smrg	  # In fact, it would be nice if we could use this code for all target
9359de2362d3Smrg	  # systems that can't hard-code library paths into their executables
9360de2362d3Smrg	  # and that have no shared library path variable independent of PATH,
9361de2362d3Smrg	  # but it turns out we can't easily determine that from inspecting
9362de2362d3Smrg	  # libtool variables, so we have to hard-code the OSs to which it
9363de2362d3Smrg	  # applies here; at the moment, that means platforms that use the PE
9364de2362d3Smrg	  # object format with DLL files.  See the long comment at the top of
9365de2362d3Smrg	  # tests/bindir.at for full details.
9366de2362d3Smrg	  tdlname=$dlname
9367de2362d3Smrg	  case $host,$output,$installed,$module,$dlname in
9368de2362d3Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9369de2362d3Smrg	      # If a -bindir argument was supplied, place the dll there.
93707821949aSmrg	      if test "x$bindir" != x ;
93717821949aSmrg	      then
9372de2362d3Smrg		func_relative_path "$install_libdir" "$bindir"
93737821949aSmrg		tdlname=$func_relative_path_result$dlname
9374de2362d3Smrg	      else
9375de2362d3Smrg		# Otherwise fall back on heuristic.
9376de2362d3Smrg		tdlname=../bin/$dlname
9377de2362d3Smrg	      fi
9378de2362d3Smrg	      ;;
9379de2362d3Smrg	  esac
9380de2362d3Smrg	  $ECHO > $output "\
9381de2362d3Smrg# $outputname - a libtool library file
93827821949aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383de2362d3Smrg#
9384de2362d3Smrg# Please DO NOT delete this file!
9385de2362d3Smrg# It is necessary for linking the library.
9386de2362d3Smrg
9387de2362d3Smrg# The name that we can dlopen(3).
9388de2362d3Smrgdlname='$tdlname'
9389de2362d3Smrg
9390de2362d3Smrg# Names of this library.
9391de2362d3Smrglibrary_names='$library_names'
9392de2362d3Smrg
9393de2362d3Smrg# The name of the static archive.
9394de2362d3Smrgold_library='$old_library'
9395de2362d3Smrg
93967821949aSmrg# Linker flags that can not go in dependency_libs.
9397de2362d3Smrginherited_linker_flags='$new_inherited_linker_flags'
9398de2362d3Smrg
9399de2362d3Smrg# Libraries that this one depends upon.
9400de2362d3Smrgdependency_libs='$dependency_libs'
9401de2362d3Smrg
9402de2362d3Smrg# Names of additional weak libraries provided by this library
9403de2362d3Smrgweak_library_names='$weak_libs'
9404de2362d3Smrg
9405de2362d3Smrg# Version information for $libname.
9406de2362d3Smrgcurrent=$current
9407de2362d3Smrgage=$age
9408de2362d3Smrgrevision=$revision
9409de2362d3Smrg
9410de2362d3Smrg# Is this an already installed library?
9411de2362d3Smrginstalled=$installed
9412de2362d3Smrg
9413de2362d3Smrg# Should we warn about portability when linking against -modules?
9414de2362d3Smrgshouldnotlink=$module
9415de2362d3Smrg
9416de2362d3Smrg# Files to dlopen/dlpreopen
9417de2362d3Smrgdlopen='$dlfiles'
9418de2362d3Smrgdlpreopen='$dlprefiles'
9419de2362d3Smrg
9420de2362d3Smrg# Directory that this library needs to be installed in:
9421de2362d3Smrglibdir='$install_libdir'"
94227821949aSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423de2362d3Smrg	    $ECHO >> $output "\
9424de2362d3Smrgrelink_command=\"$relink_command\""
9425de2362d3Smrg	  fi
9426de2362d3Smrg	done
9427de2362d3Smrg      }
9428de2362d3Smrg
9429de2362d3Smrg      # Do a symbolic link so that the libtool archive can be found in
9430de2362d3Smrg      # LD_LIBRARY_PATH before the program is installed.
9431de2362d3Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432de2362d3Smrg      ;;
9433de2362d3Smrg    esac
9434de2362d3Smrg    exit $EXIT_SUCCESS
9435de2362d3Smrg}
9436de2362d3Smrg
94377821949aSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
94387821949aSmrg    func_mode_link ${1+"$@"}
9439de2362d3Smrg
9440de2362d3Smrg
9441de2362d3Smrg# func_mode_uninstall arg...
9442de2362d3Smrgfunc_mode_uninstall ()
9443de2362d3Smrg{
94447821949aSmrg    $opt_debug
94457821949aSmrg    RM="$nonopt"
9446de2362d3Smrg    files=
94477821949aSmrg    rmforce=
9448de2362d3Smrg    exit_status=0
9449de2362d3Smrg
9450de2362d3Smrg    # This variable tells wrapper scripts just to set variables rather
9451de2362d3Smrg    # than running their programs.
94527821949aSmrg    libtool_install_magic="$magic"
9453de2362d3Smrg
9454de2362d3Smrg    for arg
9455de2362d3Smrg    do
9456de2362d3Smrg      case $arg in
94577821949aSmrg      -f) func_append RM " $arg"; rmforce=yes ;;
9458de2362d3Smrg      -*) func_append RM " $arg" ;;
9459de2362d3Smrg      *) func_append files " $arg" ;;
9460de2362d3Smrg      esac
9461de2362d3Smrg    done
9462de2362d3Smrg
9463de2362d3Smrg    test -z "$RM" && \
9464de2362d3Smrg      func_fatal_help "you must specify an RM program"
9465de2362d3Smrg
9466de2362d3Smrg    rmdirs=
9467de2362d3Smrg
9468de2362d3Smrg    for file in $files; do
9469de2362d3Smrg      func_dirname "$file" "" "."
94707821949aSmrg      dir="$func_dirname_result"
94717821949aSmrg      if test "X$dir" = X.; then
94727821949aSmrg	odir="$objdir"
9473de2362d3Smrg      else
94747821949aSmrg	odir="$dir/$objdir"
9475de2362d3Smrg      fi
9476de2362d3Smrg      func_basename "$file"
94777821949aSmrg      name="$func_basename_result"
94787821949aSmrg      test "$opt_mode" = uninstall && odir="$dir"
9479de2362d3Smrg
9480de2362d3Smrg      # Remember odir for removal later, being careful to avoid duplicates
94817821949aSmrg      if test "$opt_mode" = clean; then
9482de2362d3Smrg	case " $rmdirs " in
9483de2362d3Smrg	  *" $odir "*) ;;
9484de2362d3Smrg	  *) func_append rmdirs " $odir" ;;
9485de2362d3Smrg	esac
9486de2362d3Smrg      fi
9487de2362d3Smrg
9488de2362d3Smrg      # Don't error if the file doesn't exist and rm -f was used.
9489de2362d3Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490de2362d3Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491de2362d3Smrg	 test -f "$file"; then
9492de2362d3Smrg	:
9493de2362d3Smrg      elif test -d "$file"; then
9494de2362d3Smrg	exit_status=1
9495de2362d3Smrg	continue
94967821949aSmrg      elif test "$rmforce" = yes; then
9497de2362d3Smrg	continue
9498de2362d3Smrg      fi
9499de2362d3Smrg
95007821949aSmrg      rmfiles="$file"
9501de2362d3Smrg
9502de2362d3Smrg      case $name in
9503de2362d3Smrg      *.la)
9504de2362d3Smrg	# Possibly a libtool archive, so verify it.
9505de2362d3Smrg	if func_lalib_p "$file"; then
9506de2362d3Smrg	  func_source $dir/$name
9507de2362d3Smrg
9508de2362d3Smrg	  # Delete the libtool libraries and symlinks.
9509de2362d3Smrg	  for n in $library_names; do
9510de2362d3Smrg	    func_append rmfiles " $odir/$n"
9511de2362d3Smrg	  done
9512de2362d3Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9513de2362d3Smrg
95147821949aSmrg	  case "$opt_mode" in
9515de2362d3Smrg	  clean)
9516de2362d3Smrg	    case " $library_names " in
9517de2362d3Smrg	    *" $dlname "*) ;;
9518de2362d3Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9519de2362d3Smrg	    esac
9520de2362d3Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9521de2362d3Smrg	    ;;
9522de2362d3Smrg	  uninstall)
9523de2362d3Smrg	    if test -n "$library_names"; then
9524de2362d3Smrg	      # Do each command in the postuninstall commands.
95257821949aSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9526de2362d3Smrg	    fi
9527de2362d3Smrg
9528de2362d3Smrg	    if test -n "$old_library"; then
9529de2362d3Smrg	      # Do each command in the old_postuninstall commands.
95307821949aSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9531de2362d3Smrg	    fi
9532de2362d3Smrg	    # FIXME: should reinstall the best remaining shared library.
9533de2362d3Smrg	    ;;
9534de2362d3Smrg	  esac
9535de2362d3Smrg	fi
9536de2362d3Smrg	;;
9537de2362d3Smrg
9538de2362d3Smrg      *.lo)
9539de2362d3Smrg	# Possibly a libtool object, so verify it.
9540de2362d3Smrg	if func_lalib_p "$file"; then
9541de2362d3Smrg
9542de2362d3Smrg	  # Read the .lo file
9543de2362d3Smrg	  func_source $dir/$name
9544de2362d3Smrg
9545de2362d3Smrg	  # Add PIC object to the list of files to remove.
95467821949aSmrg	  if test -n "$pic_object" &&
95477821949aSmrg	     test "$pic_object" != none; then
9548de2362d3Smrg	    func_append rmfiles " $dir/$pic_object"
9549de2362d3Smrg	  fi
9550de2362d3Smrg
9551de2362d3Smrg	  # Add non-PIC object to the list of files to remove.
95527821949aSmrg	  if test -n "$non_pic_object" &&
95537821949aSmrg	     test "$non_pic_object" != none; then
9554de2362d3Smrg	    func_append rmfiles " $dir/$non_pic_object"
9555de2362d3Smrg	  fi
9556de2362d3Smrg	fi
9557de2362d3Smrg	;;
9558de2362d3Smrg
9559de2362d3Smrg      *)
95607821949aSmrg	if test "$opt_mode" = clean ; then
9561de2362d3Smrg	  noexename=$name
9562de2362d3Smrg	  case $file in
9563de2362d3Smrg	  *.exe)
9564de2362d3Smrg	    func_stripname '' '.exe' "$file"
9565de2362d3Smrg	    file=$func_stripname_result
9566de2362d3Smrg	    func_stripname '' '.exe' "$name"
9567de2362d3Smrg	    noexename=$func_stripname_result
9568de2362d3Smrg	    # $file with .exe has already been added to rmfiles,
9569de2362d3Smrg	    # add $file without .exe
9570de2362d3Smrg	    func_append rmfiles " $file"
9571de2362d3Smrg	    ;;
9572de2362d3Smrg	  esac
9573de2362d3Smrg	  # Do a test to see if this is a libtool program.
9574de2362d3Smrg	  if func_ltwrapper_p "$file"; then
9575de2362d3Smrg	    if func_ltwrapper_executable_p "$file"; then
9576de2362d3Smrg	      func_ltwrapper_scriptname "$file"
9577de2362d3Smrg	      relink_command=
9578de2362d3Smrg	      func_source $func_ltwrapper_scriptname_result
9579de2362d3Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580de2362d3Smrg	    else
9581de2362d3Smrg	      relink_command=
9582de2362d3Smrg	      func_source $dir/$noexename
9583de2362d3Smrg	    fi
9584de2362d3Smrg
9585de2362d3Smrg	    # note $name still contains .exe if it was in $file originally
9586de2362d3Smrg	    # as does the version of $file that was added into $rmfiles
95877821949aSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
95887821949aSmrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
9589de2362d3Smrg	      func_append rmfiles " $odir/lt-$name"
9590de2362d3Smrg	    fi
95917821949aSmrg	    if test "X$noexename" != "X$name" ; then
95927821949aSmrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9593de2362d3Smrg	    fi
9594de2362d3Smrg	  fi
9595de2362d3Smrg	fi
9596de2362d3Smrg	;;
9597de2362d3Smrg      esac
9598de2362d3Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9599de2362d3Smrg    done
9600de2362d3Smrg
96017821949aSmrg    # Try to remove the ${objdir}s in the directories where we deleted files
9602de2362d3Smrg    for dir in $rmdirs; do
9603de2362d3Smrg      if test -d "$dir"; then
9604de2362d3Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9605de2362d3Smrg      fi
9606de2362d3Smrg    done
9607de2362d3Smrg
9608de2362d3Smrg    exit $exit_status
9609de2362d3Smrg}
9610de2362d3Smrg
96117821949aSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
96127821949aSmrg    func_mode_uninstall ${1+"$@"}
9613de2362d3Smrg
9614de2362d3Smrgtest -z "$opt_mode" && {
96157821949aSmrg  help="$generic_help"
9616de2362d3Smrg  func_fatal_help "you must specify a MODE"
9617de2362d3Smrg}
9618de2362d3Smrg
9619de2362d3Smrgtest -z "$exec_cmd" && \
96207821949aSmrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9621de2362d3Smrg
9622de2362d3Smrgif test -n "$exec_cmd"; then
9623de2362d3Smrg  eval exec "$exec_cmd"
9624de2362d3Smrg  exit $EXIT_FAILURE
9625de2362d3Smrgfi
9626de2362d3Smrg
9627de2362d3Smrgexit $exit_status
9628de2362d3Smrg
9629de2362d3Smrg
9630de2362d3Smrg# The TAGs below are defined such that we never get into a situation
96317821949aSmrg# in which we disable both kinds of libraries.  Given conflicting
9632de2362d3Smrg# choices, we go for a static library, that is the most portable,
9633de2362d3Smrg# since we can't tell whether shared libraries were disabled because
9634de2362d3Smrg# the user asked for that or because the platform doesn't support
9635de2362d3Smrg# them.  This is particularly important on AIX, because we don't
9636de2362d3Smrg# support having both static and shared libraries enabled at the same
9637de2362d3Smrg# time on that platform, so we default to a shared-only configuration.
9638de2362d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only
9639de2362d3Smrg# configuration.  But we'll never go from static-only to shared-only.
9640de2362d3Smrg
9641de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642de2362d3Smrgbuild_libtool_libs=no
9643de2362d3Smrgbuild_old_libs=yes
9644de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
9645de2362d3Smrg
9646de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647de2362d3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9648de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static
9649de2362d3Smrg
9650de2362d3Smrg# Local Variables:
9651de2362d3Smrg# mode:shell-script
9652de2362d3Smrg# sh-indentation:2
9653de2362d3Smrg# End:
96547821949aSmrg# vi:sw=2
96557821949aSmrg
9656